<?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>137416</bug_id>
          
          <creation_ts>2014-10-03 19:56:46 -0700</creation_ts>
          <short_desc>Move ServicesOverlayController to WebCore</short_desc>
          <delta_ts>2014-10-09 13:53:31 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1039436</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-03 19:56:46 -0700</bug_when>
    <thetext>The platform dependent bits are fairly small; this is a step on the way to having ServicesOverlayController work for Legacy WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039437</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-03 19:56:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/18546283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039438</commentid>
    <comment_count>2</comment_count>
      <attachid>239259</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-03 19:57:00 -0700</bug_when>
    <thetext>Created attachment 239259
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039439</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 19:58:24 -0700</bug_when>
    <thetext>Attachment 239259 did not pass style-queue:


ERROR: Source/WebCore/editing/SelectionRectGatherer.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:186:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:392:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:405:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039847</commentid>
    <comment_count>4</comment_count>
      <attachid>239360</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-06 14:56:22 -0700</bug_when>
    <thetext>Created attachment 239360
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039849</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-06 14:59:20 -0700</bug_when>
    <thetext>Attachment 239360 did not pass style-queue:


ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:185:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040620</commentid>
    <comment_count>6</comment_count>
      <attachid>239360</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-09 11:36:52 -0700</bug_when>
    <thetext>Comment on attachment 239360
patch

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

I think this should go on MainFrame instead of Page.

&gt; Source/WebCore/page/mac/ServicesOverlayController.h:48
&gt; +    ServicesOverlayController(Page&amp;);

I think this should be explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040636</commentid>
    <comment_count>7</comment_count>
      <attachid>239555</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-09 12:28:24 -0700</bug_when>
    <thetext>Created attachment 239555
move to mainframe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040638</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-09 12:31:06 -0700</bug_when>
    <thetext>Attachment 239555 did not pass style-queue:


ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:194:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040653</commentid>
    <comment_count>9</comment_count>
      <attachid>239562</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-09 13:02:06 -0700</bug_when>
    <thetext>Created attachment 239562
fix mac build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040654</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-09 13:04:56 -0700</bug_when>
    <thetext>Attachment 239562 did not pass style-queue:


ERROR: Source/WebCore/page/mac/ServicesOverlayController.mm:194:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040657</commentid>
    <comment_count>11</comment_count>
      <attachid>239562</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-09 13:22:20 -0700</bug_when>
    <thetext>Comment on attachment 239562
fix mac build

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

&gt; Source/WebCore/editing/Editor.cpp:3347
&gt; +    if (!shouldDetectTelephoneNumbers() || !client() || !m_frame.page())

I don&apos;t think you need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040680</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-09 13:53:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/174524</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239259</attachid>
            <date>2014-10-03 19:57:00 -0700</date>
            <delta_ts>2014-10-06 14:56:22 -0700</delta_ts>
            <desc>wip</desc>
            <filename>services-core.diff</filename>
            <type>text/plain</type>
            <size>104380</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMzJiMDQ1Li5jY2MyNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTA2LDYgKzExMDYsOCBAQAogCQkyRDhGRUJE
RDE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOEZFQkRCMTQzRTNFRjcwMDcyNTAyQiAv
KiBDU1NDcm9zc2ZhZGVWYWx1ZS5oICovOyB9OwogCQkyRDkwNjYwNjBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCAqLzsg
fTsKIAkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNTBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkyRDkzQUVFMzE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaCAqLzsgfTsKKwkJMkQ5M0FFRTQxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDkzQUVFMjE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5tbSAqLzsgfTsKIAkJMkQ5QTI0NkUxNUI5QkQwMDAwRDM0NTI3IC8qIERPTVNlY3VyaXR5UG9s
aWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlB
MjQ2QjE1QjlCQkREMDBEMzQ1MjcgLyogRE9NU2VjdXJpdHlQb2xpY3kuaCAqLzsgfTsKIAkJMkQ5
QTI0NkYxNUI5QkQyRjAwRDM0NTI3IC8qIERPTVNlY3VyaXR5UG9saWN5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUEyNDZBMTVCOUJCREQwMEQz
NDUyNyAvKiBET01TZWN1cml0eVBvbGljeS5jcHAgKi87IH07CiAJCTJEOUEyNDczMTVCOUMyRDEw
MEQzNDUyNyAvKiBET01ET01TZWN1cml0eVBvbGljeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUEyNDcyMTVCOUMyQzcwMEQzNDUyNyAvKiBET01E
T01TZWN1cml0eVBvbGljeS5tbSAqLzsgfTsKQEAgLTgxMDQsNiArODEwNiw4IEBACiAJCTJEOTA2
NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBEYXRhVHJhbnNm
ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBEYXRhVHJhbnNmZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQkyRDkzQUVFMTE5REY1NjQxMDAyQTg2QzMg
LyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJEOTNBRUUyMTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5
QTI0NkExNUI5QkJERDAwRDM0NTI3IC8qIERPTVNlY3VyaXR5UG9saWN5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVNlY3VyaXR5UG9saWN5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QTI0NkIxNUI5QkJERDAwRDM0NTI3IC8qIERPTVNl
Y3VyaXR5UG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNlY3Vy
aXR5UG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUEyNDcwMTVCOUMy
OTUwMEQzNDUyNyAvKiBET01ET01TZWN1cml0eVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01ET01TZWN1cml0eVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTc1NDcsNiArMTc1NTEsOCBAQAogCQkJCUE3MTg3ODhGMEIyRDA0QUMwMEEx
NkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5M0MwOUE3RTBCMDY0RUVGMDA1
QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICovLAogCQkJCTFDMjY0OTdCMEQ3RTI0RUMwMEJE
MTBGMiAvKiBQYWdlTWFjLmNwcCAqLywKKwkJCQkyRDkzQUVFMTE5REY1NjQxMDAyQTg2QzMgLyog
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oICovLAorCQkJCTJEOTNBRUUyMTlERjU2NDEwMDJB
ODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tICovLAogCQkJCUUxQzJGMjQ4MTUz
M0EyMTIwMDgzRjk3NCAvKiBTZXR0aW5nc01hYy5tbSAqLywKIAkJCQkyNjI1NUYwMjE4ODc4RTEx
MDAwNkUxRkQgLyogVXNlckFnZW50TWFjLm1tICovLAogCQkJCUY1ODc4NTRDMDJERTM3NTkwMUVB
NDEyMiAvKiBXZWJDb3JlRnJhbWVWaWV3LmggKi8sCkBAIC0yMzQ4Nyw2ICsyMzQ5Myw3IEBACiAJ
CQkJRkQzMTVGRkYxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxNZXJnZXJOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjAwMjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbFNwbGl0dGVy
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTAwOTlERjAyNzAwOTBENzgxIC8qIENo
YXJhY3RlckRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTJEOTNBRUUzMTlERjU2NDEwMDJBODZD
MyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0I4
RkZEMTE2QUU3Rjk2MDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMkEwRDAwNkMxRDAwRUY2RjI2IC8qIENoYXJzZXRE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hl
Y2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzOTIsNiArMjgzOTksNyBAQAog
CQkJCUUxQTVGOTlCMEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTc1NzkzRUM4MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3Nh
Z2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTBCN0U3MjEwNDVGQUIwMDBEODIyNEYg
LyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ5M0FFRTQx
OURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQlFMUFERUREQjBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdlUG9ydC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMUFERUQ0NzBFNzZCOEREMDA0QTFBNUUgLyogSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlEMjA5REEyQjQ4MDA5NjMz
QTUgLyogSlNNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCmluZGV4IDVhZjRmZmUuLjQzZjk3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2lu
Y2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oIgorI2luY2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTaW1wbGlm
eU1hcmt1cENvbW1hbmQuaCIKQEAgLTMzNjIsNyArMzM2Myw3IEBAIHZvaWQgRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJh
bWVTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWVTZWxlY3Rp
b24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIGNsaWVudCgpLT5zZWxlY3RlZFRlbGVwaG9uZU51bWJl
clJhbmdlc0NoYW5nZWQoKTsKKyAgICAgICAgbV9mcmFtZS5wYWdlKCktPnNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBm
cmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwpAQCAtMzM5MCw3ICszMzkxLDcgQEAg
dm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQ
dHI8UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGNsaWVudCgpLT5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKKyAgICAgICAgbV9mcmFtZS5w
YWdlKCktPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJl
clJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQwMiw3ICsz
NDAzLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkK
ICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdl
KTsKICAgICB9CiAKLSAgICBjbGllbnQoKS0+c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7CisgICAgbV9mcmFtZS5wYWdlKCktPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIo
KS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBFZGl0
b3I6OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmdWaWV3LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcApp
bmRleCBhNjVmN2JlLi43MzQ5OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiRWRp
dG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCIKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogCkBAIC03MCw4ICs3Miw4IEBAIFNl
bGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6Ok5vdGlmaWVyKFNlbGVjdGlvblJlY3RHYXRo
ZXJlciYgZ2F0aGVyZXIpCiAKIFNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6On5Ob3Rp
ZmllcigpCiB7Ci0gICAgaWYgKEVkaXRvckNsaWVudCogY2xpZW50ID0gbV9nYXRoZXJlci5tX3Jl
bmRlclZpZXcudmlldygpLmZyYW1lKCkuZWRpdG9yKCkuY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dC0+c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UobV9nYXRoZXJlci5tX3JlY3RzLCBtX2dhdGhlcmVy
Lm1fZ2FwUmVjdHMsIG1fZ2F0aGVyZXIuaXNUZXh0T25seSgpKTsKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZ2F0aGVyZXIubV9yZW5kZXJWaWV3LnZpZXcoKS5mcmFtZSgpLnBhZ2UoKSkKKyAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hh
bmdlKG1fZ2F0aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVy
LmlzVGV4dE9ubHkoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVy
ZXI6Ok5vdGlmaWVyPiBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5kQ3JlYXRlTm90aWZp
ZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggYmY1NjM0Zi4uNmM5NTRiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00MzYsNiArNDM2LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYsIFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGlj
ayhXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsZXZhbnRTZWxl
Y3Rpb25TZXJ2aWNlcyhib29sIC8qIGlzVGV4dE9ubHkgKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDJiZTMwMTEuLmFjNGE4Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMTgxLDExICsxODEsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgPSAwOwogCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNv
bnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mLCBib29sKSB7
IH0KLSNlbmRpZgotCiAgICAgLy8gU3VwcG9ydCBmb3IgZ2xvYmFsIHNlbGVjdGlvbnMsIHVzZWQg
b24gcGxhdGZvcm1zIGxpa2UgdGhlIFggV2luZG93IFN5c3RlbSB0aGF0IHRyZWF0CiAgICAgLy8g
c2VsZWN0aW9uIGFzIGEgdHlwZSBvZiBjbGlwYm9hcmQuCiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzR2xvYmFsU2VsZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmlu
ZGV4IGE2YTQ5OWEuLmI0MjZiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzUsNiArNzUsNyBA
QAogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKQEAgLTE0NCw2ICsxNDUs
OSBAQCBQYWdlOjpQYWdlKFBhZ2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQogICAgICwgbV9wb2ludGVyTG9ja0NvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1
ZTxQb2ludGVyTG9ja0NvbnRyb2xsZXI+KCp0aGlzKSkKICNlbmRpZgorI2lmIChFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkgJiYg
UExBVEZPUk0oTUFDKQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFr
ZV91bmlxdWU8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQorI2VuZGlmCiAgICAg
LCBtX3NldHRpbmdzKFNldHRpbmdzOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Byb2dyZXNzKHN0
ZDo6bWFrZV91bmlxdWU8UHJvZ3Jlc3NUcmFja2VyPigqcGFnZUNsaWVudHMucHJvZ3Jlc3NUcmFj
a2VyQ2xpZW50KSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlx
dWU8QmFja0ZvcndhcmRDb250cm9sbGVyPigqdGhpcywgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRD
bGllbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCAyY2U1MmI5Li4xNjNjYWM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aApAQCAtOTgsNiArOTgsNyBAQCBjbGFzcyBSZXBsYXlDb250cm9sbGVyOwogY2xhc3MgVmlzaWJs
ZVNlbGVjdGlvbjsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I7CitjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgU2V0dGluZ3M7
CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOwpA
QCAtMjA5LDYgKzIxMCw5IEBAIHB1YmxpYzoKICAgICBQb2ludGVyTG9ja0NvbnRyb2xsZXImIHBv
aW50ZXJMb2NrQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3BvaW50ZXJMb2NrQ29udHJv
bGxlcjsgfQogI2VuZGlmCiAgICAgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQqIHZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZUNsaWVudDsg
fQorI2lmIChFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1C
RVJfREVURUNUSU9OKSkgJiYgUExBVEZPUk0oTUFDKQorICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXImIHNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9zZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOyB9CisjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcigpOwogCkBAIC00ODcsNiAr
NDkxLDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UG9pbnRlckxvY2tD
b250cm9sbGVyPiBtX3BvaW50ZXJMb2NrQ29udHJvbGxlcjsKICNlbmRpZgogICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdDb29yZGluYXRv
cjsKKyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKyAgICBjb25zdCBzdGQ6OnVuaXF1ZV9w
dHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OworI2VuZGlmCiAKICAgICBjb25zdCBSZWZQdHI8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAg
Y29uc3Qgc3RkOjp1bmlxdWVfcHRyPFByb2dyZXNzVHJhY2tlcj4gbV9wcm9ncmVzczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKaW5kZXggN2I2Mjc1Yy4uOWU4YWMxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIFBhZ2VPdmVy
bGF5Ojptb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAg
ICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMobW91c2VFdmVudC5w
b3NpdGlvbigpKTsKIAogICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6RG9jdW1lbnQpCi0gICAgICAgIG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGlu
YXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMobW91
c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbW91c2VQb3NpdGlvbklu
T3ZlcmxheUNvb3JkaW5hdGVzID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKIAogICAgIC8vIEln
bm9yZSBldmVudHMgb3V0c2lkZSB0aGUgYm91bmRzLgogICAgIGlmICghYm91bmRzKCkuY29udGFp
bnMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmluCmluZGV4IDIyZjE1NGEuLjJmNWE1NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgpAQCAt
MjMxLDMgKzIzMSw1IEBAIHVzZUltYWdlRG9jdW1lbnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWZh
bHNlCiBtYXhpbXVtU291cmNlQnVmZmVyU2l6ZSB0eXBlPWludCwgaW5pdGlhbD0zMTg3NjcxMDQs
IGNvbmRpdGlvbmFsPU1FRElBX1NPVVJDRQogCiBsb25nTW91c2VQcmVzc0VuYWJsZWQgaW5pdGlh
bD1mYWxzZQorCitzZXJ2aWNlQ29udHJvbHNFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGNvbmRpdGlv
bmFsPVNFUlZJQ0VfQ09OVFJPTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMjkwZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcl9oCisKKyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgor
I2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCisvLyBGSVhNRTogTW92ZSB0aGVzZSB0byBiZSBpbiBhbiBTUEkgaGVhZGVy
LgordHlwZWRlZiBzdHJ1Y3QgX19EREhpZ2hsaWdodCBEREhpZ2hsaWdodCwgKkRESGlnaGxpZ2h0
UmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBMYXlvdXRSZWN0Oworc3RydWN0IEdh
cFJlY3RzOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworcHVibGljOgorICAg
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYpOworICAgIH5TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCk7CisKKyAgICB2b2lkIHNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hh
bmdlZCgpOworICAgIHZvaWQgc2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYsIGJvb2wgaXNUZXh0T25seSk7CisK
K3ByaXZhdGU6CisgICAgY2xhc3MgSGlnaGxpZ2h0IDogcHVibGljIFJlZkNvdW50ZWQ8SGlnaGxp
Z2h0PiwgcHJpdmF0ZSBHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSGlnaGxpZ2h0KTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yU2VsZWN0aW9uKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXImLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFJhbmdlPik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yVGVsZXBob25lTnVtYmVy
KFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+LCBQ
YXNzUmVmUHRyPFJhbmdlPik7CisgICAgICAgIH5IaWdobGlnaHQoKTsKKworICAgICAgICB2b2lk
IGludmFsaWRhdGUoKTsKKworICAgICAgICBEREhpZ2hsaWdodFJlZiBkZEhpZ2hsaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGRIaWdobGlnaHQuZ2V0KCk7IH0KKyAgICAgICAgUmFuZ2UqIHJhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5nZXQoKTsgfQorICAgICAgICBHcmFwaGljc0xheWVy
KiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NMYXllci5nZXQoKTsgfQorCisgICAg
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgICAgICBUZWxlcGhvbmVOdW1iZXIsCisgICAg
ICAgICAgICBTZWxlY3Rpb24KKyAgICAgICAgfTsKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAgICAgdm9pZCBmYWRlSW4oKTsKKyAgICAgICAgdm9p
ZCBmYWRlT3V0KCk7CisKKyAgICAgICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJl
Zik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBIaWdobGlnaHQoU2VydmljZXNP
dmVybGF5Q29udHJvbGxlciYsIFR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NS
ZWZQdHI8UmFuZ2U+KTsKKworICAgICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBv
dmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBGbG9hdFJlY3QmIGluQ2xpcCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgICAgICB2b2lkIGRpZEZp
bmlzaEZhZGVPdXRBbmltYXRpb24oKTsKKworICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRS
ZWY+IG1fZGRIaWdobGlnaHQ7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IG1fZ3JhcGhpY3NMYXllcjsKKyAgICAg
ICAgVHlwZSBtX3R5cGU7CisgICAgICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIqIG1fY29u
dHJvbGxlcjsKKyAgICB9OworCisgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5
JiwgRnJhbWUmKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7
CisgICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBJbnRQb2ludCYsIEhpZ2hsaWdodCYpOworCisg
ICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIEdyYXBoaWNzQ29udGV4dCYpOworCisg
ICAgdm9pZCByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxp
Z2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiYsIEhpZ2hsaWdodDo6VHlwZSk7CisgICAg
dm9pZCByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhpZ2hsaWdodDo6VHlwZSk7
CisgICAgdm9pZCBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOworICAgIHZvaWQgYnVpbGRT
ZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICB2b2lkIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGln
aHRzKCk7CisKKyAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChib29sJiBtb3VzZUlz
T3ZlckJ1dHRvbik7CisgICAgdm9pZCBjbGVhckFjdGl2ZUhpZ2hsaWdodCgpOworICAgIEhpZ2hs
aWdodCogYWN0aXZlSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVIaWdobGlnaHQu
Z2V0KCk7IH0KKworICAgIEhpZ2hsaWdodCogZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENv
bnRhaW5pbmdTZWxlY3Rpb25IaWdobGlnaHQoSGlnaGxpZ2h0Jik7CisKKyAgICBib29sIGhhc1Jl
bGV2YW50U2VsZWN0aW9uU2VydmljZXMoKTsKKworICAgIGJvb2wgbW91c2VJc092ZXJIaWdobGln
aHQoSGlnaGxpZ2h0JiwgYm9vbCYgbW91c2VJc092ZXJCdXR0b24pIGNvbnN0OworICAgIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMgcmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVT
aG93bihIaWdobGlnaHQqKSBjb25zdDsKKyAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dFRpbWVyRmlyZWQoVGltZXI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4mKTsKKworICAgIHN0
YXRpYyBib29sIGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29u
c3QgSGlnaGxpZ2h0KiBiKTsKKworICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiB0ZWxlcGhvbmVO
dW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKKworICAgIHZvaWQgZGlkQ3JlYXRlSGlnaGxp
Z2h0KEhpZ2hsaWdodCopOworICAgIHZvaWQgd2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0
Kik7CisgICAgdm9pZCBkaWRGaW5pc2hGYWRpbmdPdXRIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CisK
KyAgICBQYWdlJiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICBQYWdlJiBt
X3BhZ2U7CisgICAgUGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OworCisgICAgUmVmUHRy
PEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7CisgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9u
ZXh0QWN0aXZlSGlnaGxpZ2h0OworICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fcG90
ZW50aWFsSGlnaGxpZ2h0czsKKyAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX2FuaW1h
dGluZ0hpZ2hsaWdodHM7CisKKyAgICBIYXNoU2V0PEhpZ2hsaWdodCo+IG1faGlnaGxpZ2h0czsK
KworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgbW92ZSBvbnRvIEhpZ2hsaWdodC4KKyAgICBW
ZWN0b3I8TGF5b3V0UmVjdD4gbV9jdXJyZW50U2VsZWN0aW9uUmVjdHM7CisgICAgYm9vbCBtX2lz
VGV4dE9ubHk7CisKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1f
bGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6
dGltZV9wb2ludCBtX25leHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lOworICAgIHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0TW91c2VVcFRpbWU7CisKKyAgICBS
ZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAg
ICBJbnRQb2ludCBtX21vdXNlUG9zaXRpb247CisKKyAgICBUaW1lcjxTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyPiBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKyNl
bmRpZiAvLyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWI0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEs
ODI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKwor
I2ltcG9ydCAiQ2hyb21lLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIkRv
Y3VtZW50LmgiCisjaW1wb3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgor
I2ltcG9ydCAiRmxvYXRRdWFkLmgiCisjaW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbXBv
cnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkdh
cFJlY3RzLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNz
TGF5ZXIuaCIKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiTWFpbkZyYW1lLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCIK
KyNpbXBvcnQgIlNldHRpbmdzLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisKKy8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIGJlIGlu
IFNQSSBoZWFkZXJzLgorI2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERIaWdobGln
aHREcmF3aW5nLmg+KQorI2ltcG9ydCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmcu
aD4KKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfX0RESGlnaGxpZ2h0IERESGlnaGxpZ2h0LCAqRERI
aWdobGlnaHRSZWY7CisjZW5kaWYKKworI2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMv
RERIaWdobGlnaHREcmF3aW5nX1ByaXZhdGUuaD4pCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzL0RE
SGlnaGxpZ2h0RHJhd2luZ19Qcml2YXRlLmg+CisjZW5kaWYKKworY29uc3QgZmxvYXQgaGlnaGxp
Z2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4zOworCit0eXBlZGVmIE5TVUludGVnZXIgRERI
aWdobGlnaHRTdHlsZTsKK3N0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0
Tm9PdXRsaW5lV2l0aEFycm93ID0gKDEgPDwgMTYpOworc3RhdGljIGNvbnN0IERESGlnaGxpZ2h0
U3R5bGUgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93ID0gKDEgPDwgMTYpIHwgMTsKKworU09G
VF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnMpCitTT0ZUX0xJ
TksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0
V2l0aFN0eWxlQW5kRGlyZWN0aW9uLCBEREhpZ2hsaWdodFJlZiwgKENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciwgQ0dSZWN0KiByZWN0cywgQ0ZJbmRleCBjb3VudCwgQ0dSZWN0IGdsb2JhbFZpc2li
bGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlIHN0eWxlLCBCb29sZWFuIHdpdGhBcnJvdywgTlNXcml0
aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24sIEJvb2xlYW4gZW5kc1dpdGhFT0wsIEJvb2xl
YW4gZmxpcHBlZCksIChhbGxvY2F0b3IsIHJlY3RzLCBjb3VudCwgZ2xvYmFsVmlzaWJsZVJlY3Qs
IHN0eWxlLCB3aXRoQXJyb3csIHdyaXRpbmdEaXJlY3Rpb24sIGVuZHNXaXRoRU9MLCBmbGlwcGVk
KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hsaWdodEdldExheWVyV2l0aENvbnRl
eHQsIENHTGF5ZXJSZWYsIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQsIENHQ29udGV4dFJlZiBj
b250ZXh0KSwgKGhpZ2hsaWdodCwgY29udGV4dCkpCitTT0ZUX0xJTksoRGF0YURldGVjdG9ycywg
RERIaWdobGlnaHRHZXRCb3VuZGluZ1JlY3QsIENHUmVjdCwgKERESGlnaGxpZ2h0UmVmIGhpZ2hs
aWdodCksIChoaWdobGlnaHQpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0
UG9pbnRJc09uSGlnaGxpZ2h0LCBCb29sZWFuLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBD
R1BvaW50IHBvaW50LCBCb29sZWFuKiBvbkJ1dHRvbiksIChoaWdobGlnaHQsIHBvaW50LCBvbkJ1
dHRvbikpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRy
b2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGlnaGxpZ2h0KGNvbnRy
b2xsZXIsIFR5cGU6OlNlbGVjdGlvbiwgZGRIaWdobGlnaHQsIHJhbmdlKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+
IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBUeXBlOjpUZWxlcGhvbmVOdW1iZXIsIGRk
SGlnaGxpZ2h0LCByYW5nZSkpOworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdo
bGlnaHQ6OkhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBU
eXBlIHR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlKQorICAgIDogbV9yYW5nZShyYW5nZSkKKyAgICAsIG1f
dHlwZSh0eXBlKQorICAgICwgbV9jb250cm9sbGVyKCZjb250cm9sbGVyKQoreworICAgIEFTU0VS
VChkZEhpZ2hsaWdodCk7CisgICAgQVNTRVJUKG1fcmFuZ2UpOworCisgICAgbV9ncmFwaGljc0xh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGNvbnRyb2xsZXIucGFnZSgpLmNocm9tZSgpLmNs
aWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBtX2dyYXBoaWNzTGF5
ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIHNldERESGlnaGxpZ2h0KGRkSGlnaGxp
Z2h0LmdldCgpKTsKKworICAgIC8vIFNldCBkaXJlY3RseSBvbiB0aGUgUGxhdGZvcm1DQUxheWVy
IHNvIHRoYXQgd2hlbiB3ZSBsZWF2ZSB0aGUgJ2Zyb20nIHZhbHVlIGltcGxpY2l0CisgICAgLy8g
aW4gb3VyIGFuaW1hdGlvbnMsIHdlIGdldCB0aGUgcmlnaHQgaW5pdGlhbCB2YWx1ZSByZWdhcmRs
ZXNzIG9mIGZsdXNoIHRpbWluZy4KKyAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+cGxh
dGZvcm1DQUxheWVyKCktPnNldE9wYWNpdHkoMCk7CisKKyAgICBjb250cm9sbGVyLmRpZENyZWF0
ZUhpZ2hsaWdodCh0aGlzKTsKK30KKworU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxp
Z2h0Ojp+SGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9jb250cm9sbGVyKQorICAgICAgICBtX2Nv
bnRyb2xsZXItPndpbGxEZXN0cm95SGlnaGxpZ2h0KHRoaXMpOworfQorCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6c2V0RERIaWdobGlnaHQoRERIaWdobGlnaHRS
ZWYgaGlnaGxpZ2h0KQoreworICAgIGlmICghbV9jb250cm9sbGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RkSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0OworCisgICAgaWYgKCFtX2RkSGlnaGxp
Z2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1JlY3QgaGlnaGxpZ2h0Qm91bmRpbmdSZWN0
ID0gRERIaWdobGlnaHRHZXRCb3VuZGluZ1JlY3QobV9kZEhpZ2hsaWdodC5nZXQoKSk7CisgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGhpZ2hsaWdodEJvdW5kaW5n
UmVjdC5vcmlnaW4pKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUoRmxvYXRTaXplKGhp
Z2hsaWdodEJvdW5kaW5nUmVjdC5zaXplKSk7CisKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6aW52YWxpZGF0ZSgpCit7CisgICAgbGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOwor
ICAgIG1fY29udHJvbGxlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6SGlnaGxpZ2h0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKQoreworICAgIGlmICghbV9jb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbnRyb2xsZXItPnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9h
dFJlY3QmKQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBDR0xheWVyUmVmIGhpZ2hsaWdodExheWVyID0gRERI
aWdobGlnaHRHZXRMYXllcldpdGhDb250ZXh0KGRkSGlnaGxpZ2h0KCksIGNnQ29udGV4dCk7Cisg
ICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdS
ZWN0KGRkSGlnaGxpZ2h0KCkpOworICAgIGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5vcmlnaW4gPSBD
R1BvaW50WmVybzsKKworICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjZ0NvbnRleHQsIGhp
Z2hsaWdodEJvdW5kaW5nUmVjdCwgaGlnaGxpZ2h0TGF5ZXIpOworfQorCitmbG9hdCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1
cm4gbV9jb250cm9sbGVyLT5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmZhZGVJbigpCit7CisgICAgUmV0
YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFu
aW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFthbmltYXRpb24gc2V0RHVyYXRp
b246aGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBbYW5pbWF0aW9uIHNldEZp
bGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFthbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpmYWxzZV07CisgICAgW2FuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKKworICAg
IFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRmb3Jt
Q0FBbmltYXRpb25NYWM6OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkpOworICAgIHRvR3JhcGhpY3NM
YXllckNBKGxheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRkQW5pbWF0aW9uRm9yS2V5KCJG
YWRlSGlnaGxpZ2h0SW4iLCBwbGF0Zm9ybUFuaW1hdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRlT3V0KCkKK3sKKyAgICBSZXRh
aW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gYW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5p
bWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07CisgICAgW2FuaW1hdGlvbiBzZXREdXJhdGlv
bjpoaWdobGlnaHRGYWRlQW5pbWF0aW9uRHVyYXRpb25dOworICAgIFthbmltYXRpb24gc2V0Rmls
bE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2FuaW1hdGlvbiBzZXRSZW1vdmVkT25D
b21wbGV0aW9uOmZhbHNlXTsKKyAgICBbYW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworCisgICAg
UmVmUHRyPEhpZ2hsaWdodD4gcmV0YWluZWRTZWxmID0gdGhpczsKKyAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOltyZXRhaW5l
ZFNlbGZdICgpIHsKKyAgICAgICAgcmV0YWluZWRTZWxmLT5kaWRGaW5pc2hGYWRlT3V0QW5pbWF0
aW9uKCk7CisgICAgfV07CisKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gcGxhdGZv
cm1BbmltYXRpb24gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpjcmVhdGUoYW5pbWF0aW9uLmdl
dCgpKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCkt
PmFkZEFuaW1hdGlvbkZvcktleSgiRmFkZUhpZ2hsaWdodE91dCIsIHBsYXRmb3JtQW5pbWF0aW9u
LmdldCgpKTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigp
Cit7CisgICAgaWYgKCFtX2NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2NvbnRyb2xsZXItPmFjdGl2ZUhpZ2hsaWdodCgpID09IHRoaXMpCisgICAgICAgIHJldHVybjsK
KworICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKK30KKworc3RhdGljIEludFJlY3Qg
dGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShSYW5nZSYgcmFuZ2UpCit7CisgICAgVmVj
dG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgIHJhbmdlLnRleHRRdWFkcyh0ZXh0UXVhZHMp
OworICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgZm9yIChhdXRvJiBxdWFkIDogdGV4
dFF1YWRzKQorICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocXVhZC5ib3VuZGluZ0JveCgpKTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ1JlY3QpOworfQorCitTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKFBhZ2UmIHBhZ2Up
CisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fc2VydmljZXNPdmVybGF5KG51bGxwdHIpCisg
ICAgLCBtX2lzVGV4dE9ubHkoZmFsc2UpCisgICAgLCBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dFRpbWVyKHRoaXMsICZTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVI
aWdobGlnaHRUaW1lckZpcmVkKQoreworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp+
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCit7CisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX2hpZ2hsaWdodHMpCisgICAgICAgIGhpZ2hsaWdodC0+aW52YWxpZGF0ZSgpOworfQorCit2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VP
dmVybGF5JikKK3sKKyAgICAvLyBCZWZvcmUgdGhlIG92ZXJsYXkgaXMgZGVzdHJveWVkLCBpdCBz
aG91bGQgaGF2ZSBtb3ZlZCBvdXQgb2YgdGhlIFBhZ2UsCisgICAgLy8gYXQgd2hpY2ggcG9pbnQg
d2UgYWxyZWFkeSBjbGVhcmVkIG91ciBiYWNrIHBvaW50ZXIuCisgICAgQVNTRVJUKCFtX3NlcnZp
Y2VzT3ZlcmxheSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1v
dmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQoreworICAgIGlmIChwYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOworICAgIG1fc2Vy
dmljZXNPdmVybGF5ID0gbnVsbHB0cjsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9CisKK3N0YXRpYyBj
b25zdCB1aW50OF90IEFsaWdubWVudE5vbmUgPSAwOworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxp
Z25tZW50TGVmdCA9IDEgPDwgMDsKK3N0YXRpYyBjb25zdCB1aW50OF90IEFsaWdubWVudFJpZ2h0
ID0gMSA8PCAxOworCitzdGF0aWMgdm9pZCBleHBhbmRGb3JHYXAoVmVjdG9yPExheW91dFJlY3Q+
JiByZWN0cywgdWludDhfdCogYWxpZ25tZW50cywgY29uc3QgR2FwUmVjdHMmIGdhcCkKK3sKKyAg
ICBpZiAoIWdhcC5sZWZ0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIExheW91dFVuaXQgbGVmdEVk
Z2UgPSBnYXAubGVmdCgpLngoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Y3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdu
bWVudExlZnQpCisgICAgICAgICAgICAgICAgcmVjdHNbaV0uc2hpZnRYRWRnZVRvKGxlZnRFZGdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZ2FwLnJpZ2h0KCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIExheW91dFVuaXQgcmlnaHRFZGdlID0gZ2FwLnJpZ2h0KCkubWF4WCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50UmlnaHQpCisgICAgICAgICAgICAg
ICAgcmVjdHNbaV0uc2hpZnRNYXhYRWRnZVRvKHJpZ2h0RWRnZSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGl0Y2hSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
IHJlY3RzKQoreworICAgIGlmIChyZWN0cy5zaXplKCkgPD0gMSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBuZXdSZWN0czsKKyAgICAKKyAgICAvLyBGSVhN
RTogTmVlZCB0byBzdXBwb3J0IHZlcnRpY2FsIGxheW91dC4KKyAgICAvLyBGaXJzdCBzdGl0Y2gg
dG9nZXRoZXIgYWxsIHRoZSByZWN0cyBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2VsZWN0aW9u
LgorICAgIHNpemVfdCBpbmRleEZyb21TdGFydCA9IDA7CisgICAgTGF5b3V0VW5pdCBmaXJzdFRv
cCA9IHJlY3RzW2luZGV4RnJvbVN0YXJ0XS55KCk7CisgICAgTGF5b3V0UmVjdCYgY3VycmVudFJl
Y3QgPSByZWN0c1tpbmRleEZyb21TdGFydF07CisgICAgd2hpbGUgKGluZGV4RnJvbVN0YXJ0IDwg
cmVjdHMuc2l6ZSgpICYmIHJlY3RzW2luZGV4RnJvbVN0YXJ0XS55KCkgPT0gZmlyc3RUb3ApCisg
ICAgICAgIGN1cnJlbnRSZWN0LnVuaXRlKHJlY3RzW2luZGV4RnJvbVN0YXJ0KytdKTsKKyAgICAK
KyAgICBuZXdSZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOworICAgIGlmIChpbmRleEZyb21TdGFy
dCA9PSByZWN0cy5zaXplKCkpIHsKKyAgICAgICAgLy8gQWxsIHRoZSByZWN0cyBhcmUgb24gb25l
IGxpbmUuIFRoZXJlIGlzIG5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmVjdHMuc3dhcChu
ZXdSZWN0cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gTmV4dCBzdGl0
Y2ggdG9nZXRoZXIgYWxsIHRoZSByZWN0cyBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzZWxlY3Rp
b24uCisgICAgc2l6ZV90IGluZGV4RnJvbUVuZCA9IHJlY3RzLnNpemUoKSAtIDE7CisgICAgTGF5
b3V0VW5pdCBsYXN0VG9wID0gcmVjdHNbaW5kZXhGcm9tRW5kXS55KCk7CisgICAgTGF5b3V0UmVj
dCBsYXN0UmVjdCA9IHJlY3RzW2luZGV4RnJvbUVuZF07CisgICAgd2hpbGUgKGluZGV4RnJvbUVu
ZCA+PSBpbmRleEZyb21TdGFydCAmJiByZWN0c1tpbmRleEZyb21FbmRdLnkoKSA9PSBsYXN0VG9w
KQorICAgICAgICBsYXN0UmVjdC51bml0ZShyZWN0c1tpbmRleEZyb21FbmQtLV0pOworICAgIAor
ICAgIC8vIGluZGV4RnJvbVN0YXJ0IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVjdGFuZ2xl
IG9uIHRoZSBzZWNvbmQgbGluZS4KKyAgICAvLyBpbmRleEZyb21FbmQgaXMgdGhlIGluZGV4IG9m
IHRoZSBsYXN0IHJlY3RhbmdsZSBvbiB0aGUgc2Vjb25kIHRvIHRoZSBsYXN0IGxpbmUuCisgICAg
Ly8gaWYgdGhleSBhcmUgZXF1YWwsIHRoZXJlIGlzIG9uZSBhZGRpdGlvbmFsIHJlY3RhbmdsZSBm
b3IgdGhlIGxpbmUgaW4gdGhlIG1pZGRsZS4KKyAgICBpZiAoaW5kZXhGcm9tRW5kID09IGluZGV4
RnJvbVN0YXJ0KQorICAgICAgICBuZXdSZWN0cy5hcHBlbmQocmVjdHNbaW5kZXhGcm9tU3RhcnRd
KTsKKyAgICAKKyAgICBpZiAoaW5kZXhGcm9tRW5kIDw9IGluZGV4RnJvbVN0YXJ0KSB7CisgICAg
ICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIHJlY3RzIHRvIHN0aXRjaC4gSnVzdCBhcHBlbmQgdGhl
IGxhc3QgbGluZS4KKyAgICAgICAgbmV3UmVjdHMuYXBwZW5kKGxhc3RSZWN0KTsKKyAgICAgICAg
cmVjdHMuc3dhcChuZXdSZWN0cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Ly8gU3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgdW50
aWwgdGhlIHNlY29uZCB0byB0aGUgbGFzdCBpbmNsdWRlZC4KKyAgICBjdXJyZW50UmVjdCA9IHJl
Y3RzW2luZGV4RnJvbVN0YXJ0XTsKKyAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgIT0gaW5kZXhG
cm9tRW5kKQorICAgICAgICBjdXJyZW50UmVjdC51bml0ZShyZWN0c1srK2luZGV4RnJvbVN0YXJ0
XSk7CisgICAgCisgICAgbmV3UmVjdHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKKyAgICBuZXdSZWN0
cy5hcHBlbmQobGFzdFJlY3QpOworCisgICAgcmVjdHMuc3dhcChuZXdSZWN0cyk7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiBnYXBSZWN0cykKK3sKKyAgICBzdGl0Y2hSZWN0
cyhyZWN0cyk7CisgICAgCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYWxpZ25tZW50cyBh
cmUgY29ycmVjdCBmb3IgTFRSIHRleHQuCisgICAgLy8gV2Ugc2hvdWxkIGFsc28gYWNjb3VudCBm
b3IgUlRMLgorICAgIHVpbnQ4X3QgYWxpZ25tZW50c1szXTsKKyAgICBpZiAocmVjdHMuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudExlZnQgfCBBbGlnbm1l
bnRSaWdodDsKKyAgICAgICAgYWxpZ25tZW50c1sxXSA9IEFsaWdubWVudE5vbmU7CisgICAgICAg
IGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnROb25lOworICAgIH0gZWxzZSBpZiAocmVjdHMuc2l6
ZSgpID09IDIpIHsKKyAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OworICAg
ICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdDsKKyAgICAgICAgYWxpZ25tZW50c1sy
XSA9IEFsaWdubWVudE5vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYWxpZ25tZW50c1swXSA9
IEFsaWdubWVudFJpZ2h0OworICAgICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdCB8
IEFsaWdubWVudFJpZ2h0OworICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50TGVmdDsK
KyAgICB9CisKKyAgICAvLyBBY2NvdW50IGZvciBlYWNoIEdhcFJlY3RzIGJ5IGV4dGVuZGluZyB0
aGUgZWRnZSBvZiBjZXJ0YWluIExheW91dFJlY3RzIHRvIG1lZXQgdGhlIGdhcC4KKyAgICBmb3Ig
KGF1dG8mIGdhcCA6IGdhcFJlY3RzKQorICAgICAgICBleHBhbmRGb3JHYXAocmVjdHMsIGFsaWdu
bWVudHMsIGdhcCk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIDMgcmVjdHMgd2UgbWlnaHQgbmVlZCBv
bmUgZmluYWwgR2FwUmVjdHMgdG8gYWxpZ24gdGhlIGVkZ2VzLgorICAgIGlmIChyZWN0cy5zaXpl
KCkgPT0gMykgeworICAgICAgICBMYXlvdXRSZWN0IGxlZnQ7CisgICAgICAgIExheW91dFJlY3Qg
cmlnaHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50TGVmdCkgeworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3Rz
W2ldOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlY3RzW2ldLngoKSA8IGxlZnQueCgpKQor
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmVjdHNbaV07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudFJpZ2h0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBy
ZWN0c1tpXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVjdHNbaV0ueCgpICsgcmVjdHNb
aV0ud2lkdGgoKSkgPiAocmlnaHQueCgpICsgcmlnaHQud2lkdGgoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcmVjdHNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWxlZnQuaXNFbXB0eSgpIHx8ICFyaWdodC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIEdhcFJlY3RzIGdhcDsKKyAgICAgICAgICAgIGdhcC51bml0ZUxlZnQobGVmdCk7CisgICAg
ICAgICAgICBnYXAudW5pdGVSaWdodChyaWdodCk7CisgICAgICAgICAgICBleHBhbmRGb3JHYXAo
cmVjdHMsIGFsaWdubWVudHMsIGdhcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMs
IGJvb2wgaXNUZXh0T25seSkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCisgICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMgPSBy
ZWN0czsKKyAgICBtX2lzVGV4dE9ubHkgPSBpc1RleHRPbmx5OworCisgICAgbV9sYXN0U2VsZWN0
aW9uQ2hhbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOworCisgICAg
Y29tcGFjdFJlY3RzV2l0aEdhcFJlY3RzKG1fY3VycmVudFNlbGVjdGlvblJlY3RzLCBnYXBSZWN0
cyk7CisKKyAgICAvLyBEYXRhRGV0ZWN0b3JzIG5lZWRzIHRoZXNlIHJldmVyc2VkIGluIG9yZGVy
IHRvIHBsYWNlIHRoZSBhcnJvdyBpbiB0aGUgcmlnaHQgbG9jYXRpb24uCisgICAgbV9jdXJyZW50
U2VsZWN0aW9uUmVjdHMucmV2ZXJzZSgpOworCisgICAgLy9MT0coU2VydmljZXMsICJTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyIC0gU2VsZWN0aW9uIHJlY3RzIGNoYW5nZWQgLSBOb3cgaGF2ZSAl
bHVcbiIsIHJlY3RzLnNpemUoKSk7CisKKyAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVjdHMpOworICAgIFVOVVNFRF9QQVJBTShnYXBSZWN0
cyk7CisgICAgVU5VU0VEX1BBUkFNKGlzVGV4dE9ubHkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFu
Z2VkKCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPiAxMDkwCisgICAgLy9MT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyIC0gVGVsZXBob25lIG51bWJlciByYW5nZXMgY2hhbmdlZFxuIik7CisgICAgYnVpbGRQaG9u
ZU51bWJlckhpZ2hsaWdodHMoKTsKKyNlbmRpZgorfQorCitib29sIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6Om1vdXNlSXNPdmVySGlnaGxpZ2h0KEhpZ2hsaWdodCYgaGlnaGxpZ2h0LCBib29s
JiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3QKK3sKKyAgICBCb29sZWFuIG9uQnV0dG9uOworICAg
IGJvb2wgaG92ZXJlZCA9IERESGlnaGxpZ2h0UG9pbnRJc09uSGlnaGxpZ2h0KGhpZ2hsaWdodC5k
ZEhpZ2hsaWdodCgpLCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRvbik7CisgICAg
bW91c2VJc092ZXJCdXR0b24gPSBvbkJ1dHRvbjsKKyAgICByZXR1cm4gaG92ZXJlZDsKK30KKwor
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZW1h
aW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKEhpZ2hsaWdodCogaGlnaGxpZ2h0
KSBjb25zdAoreworICAgIGlmICghaGlnaGxpZ2h0KQorICAgICAgICByZXR1cm4gc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kczo6emVybygpOworCisgICAgYXV0byBtaW5pbXVtVGltZVVudGlsSGln
aGxpZ2h0U2hvdWxkQmVTaG93biA9IDIwMF9tczsKKyAgICBpZiAobV9wYWdlLmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgIG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRC
ZVNob3duID0gMTAwMF9tczsKKworICAgIGJvb2wgbW91c2VQcmVzc2VkID0gbV9wYWdlLm1haW5G
cmFtZSgpLmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpOworCisgICAgLy8gSGlnaGxpZ2h0
IGh5c3RlcmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9uIHNlcnZpY2VzLCBiZWNhdXNlIHRlbGVw
aG9uZSBudW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFkeSBtdWNoIG1vcmUgc3RhYmxlCisgICAg
Ly8gYnkgdmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRvIGluY2x1ZGUgdGhlIGVudGlyZSB0ZWxl
cGhvbmUgbnVtYmVyLiBIb3dldmVyLCB3ZSB3aWxsIHN0aWxsIGF2b2lkIGhpZ2hsaWdodGluZwor
ICAgIC8vIHRlbGVwaG9uZSBudW1iZXJzIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgorICAgIGlm
IChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikK
KyAgICAgICAgcmV0dXJuIG1vdXNlUHJlc3NlZCA/IG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRT
aG91bGRCZVNob3duIDogMF9tczsKKworICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6bm93KCk7CisgICAgYXV0byB0aW1lU2luY2VMYXN0U2VsZWN0aW9uQ2hhbmdlID0g
bm93IC0gbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAgICBhdXRvIHRpbWVTaW5jZUhpZ2hs
aWdodEJlY2FtZUFjdGl2ZSA9IG5vdyAtIG1fbmV4dEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWU7
CisgICAgYXV0byB0aW1lU2luY2VMYXN0TW91c2VVcCA9IG1vdXNlUHJlc3NlZCA/IDBfbXMgOiBu
b3cgLSBtX2xhc3RNb3VzZVVwVGltZTsKKworICAgIGF1dG8gcmVtYWluaW5nRGVsYXkgPSBtaW5p
bXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHN0ZDo6bWluKHN0ZDo6bWluKHRp
bWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UsIHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2
ZSksIHRpbWVTaW5jZUxhc3RNb3VzZVVwKTsKKyAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0
aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4ocmVtYWluaW5nRGVsYXkpOworfQor
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dFRpbWVyRmlyZWQoVGltZXI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4mKQoreworICAgIGJv
b2wgbW91c2VJc092ZXJCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNl
SXNPdmVyQnV0dG9uKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3
UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQorewor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyQWN0aXZlSGlnaGxpZ2h0
KCkKK3sKKyAgICBpZiAoIW1fYWN0aXZlSGlnaGxpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0gbV9hY3RpdmVIaWdo
bGlnaHQpCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVs
bHB0cjsKKyAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShI
aWdobGlnaHQ6OlR5cGUgdHlwZSkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEhpZ2hsaWdodD4+IGhp
Z2hsaWdodHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFs
SGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gdHlwZSkKKyAg
ICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQoaGlnaGxpZ2h0KTsKKyAgICB9CisK
KyAgICB3aGlsZSAoIWhpZ2hsaWdodHNUb1JlbW92ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fcG90
ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0c1RvUmVtb3ZlLnRha2VMYXN0KCkpOwor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKCkKK3sKKyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9wYWdlLnNldHRpbmdzKCkuc2VydmljZUNvbnRyb2xzRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBu
ZXdQb3RlbnRpYWxIaWdobGlnaHRzOworCisgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSBtX3Bh
Z2UubWFpbkZyYW1lKCk7CisgICAgRnJhbWVWaWV3JiBtYWluRnJhbWVWaWV3ID0gKm1haW5GcmFt
ZS52aWV3KCk7CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWU7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byYgcmFu
Z2VzID0gZnJhbWUtPmVkaXRvcigpLmRldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7Cisg
ICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHdpbGwgY2hva2UgaWYgdGhlIHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0
aGUgdmlldy4KKyAgICAgICAgICAgIC8vIFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoYXQgY2FzZT8K
KyAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFu
Z2UoKnJhbmdlKTsKKworICAgICAgICAgICAgLy8gQ29udmVydCB0byB0aGUgbWFpbiBkb2N1bWVu
dCdzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRs
ZSBjcmF6eSB0byBjYWxsIGNvbnRlbnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50
cyBpbiBvcmRlciB0byBnZXQgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNj
cm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9S
b290VmlldygpIGlzCisgICAgICAgICAgICAvLyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdlIG5l
ZWQgd2hlbiB5b3UgaGF2ZSBhIHRvcENvbnRlbnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIuCisg
ICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9IHJhbmdlLT5vd25lckRvY3VtZW50
KCkudmlldygpOworICAgICAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXcu
d2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2Nh
dGlvbigpKSkpOworCisgICAgICAgICAgICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKKyAgICAgICAg
ICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGln
aGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihu
dWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBE
REhpZ2hsaWdodE91dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bCwgTk8sIFlFUykpOworCisgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChI
aWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcigqdGhpcywgZGRIaWdobGlnaHQsIHJh
bmdlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVBy
ZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdo
bGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcik7CisKKyAgICBkaWRSZWJ1aWxkUG90ZW50aWFs
SGlnaGxpZ2h0cygpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxk
U2VsZWN0aW9uSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdlLnNldHRpbmdzKCkuc2VydmljZUNv
bnRyb2xzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxI
aWdobGlnaHQ+PiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzOworCisgICAgVmVjdG9yPENHUmVjdD4g
Y2dSZWN0czsKKyAgICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25S
ZWN0cy5zaXplKCkpOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fcGFn
ZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7Cisg
ICAgICAgIEZyYW1lVmlldyogbWFpbkZyYW1lVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgICAgIGlmICghbWFpbkZyYW1lVmlldykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9IHNlbGVjdGlvblJhbmdlLT5vd25lckRv
Y3VtZW50KCkudmlldygpOworCisgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IG1fY3VycmVudFNl
bGVjdGlvblJlY3RzKSB7CisgICAgICAgICAgICBJbnRSZWN0IGN1cnJlbnRSZWN0ID0gc25hcHBl
ZEludFJlY3QocmVjdCk7CisgICAgICAgICAgICBjdXJyZW50UmVjdC5zZXRMb2NhdGlvbihtYWlu
RnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRv
dyhjdXJyZW50UmVjdC5sb2NhdGlvbigpKSkpOworICAgICAgICAgICAgY2dSZWN0cy5hcHBlbmQo
KENHUmVjdCljdXJyZW50UmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNnUmVjdHMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtYWluRnJhbWVW
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hs
aWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3Rz
SW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2lu
KCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRo
QXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6
OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZp
bmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdobGlnaHQ6
OlR5cGU6OlNlbGVjdGlvbik7CisKKyAgICBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygp
OworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlcGxhY2VIaWdobGlnaHRz
T2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRzKEhhc2hTZXQ8UmVmUHRyPEhpZ2hs
aWdodD4+JiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGUgdHlwZSkKK3sK
KyAgICAvLyBJZiBhbnkgb2xkIEhpZ2hsaWdodHMgYXJlIGVxdWl2YWxlbnQgKGJ5IFJhbmdlKSB0
byBhIG5ldyBIaWdobGlnaHQsIHJldXNlIHRoZSBvbGQKKyAgICAvLyBvbmUgc28gdGhhdCBhbnkg
bWV0YWRhdGEgaXMgcmV0YWluZWQuCisgICAgSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4gcmV1
c2VkUG90ZW50aWFsSGlnaGxpZ2h0czsKKworICAgIGZvciAoYXV0byYgb2xkSGlnaGxpZ2h0IDog
bV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7CisgICAgICAgIGlmIChvbGRIaWdobGlnaHQtPnR5cGUo
KSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yIChhdXRvJiBu
ZXdIaWdobGlnaHQgOiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzKSB7CisgICAgICAgICAgICBpZiAo
aGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQob2xkSGlnaGxpZ2h0LmdldCgpLCBuZXdIaWdobGlnaHQu
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgb2xkSGlnaGxpZ2h0LT5zZXREREhpZ2hsaWdodChu
ZXdIaWdobGlnaHQtPmRkSGlnaGxpZ2h0KCkpOworCisgICAgICAgICAgICAgICAgcmV1c2VkUG90
ZW50aWFsSGlnaGxpZ2h0cy5hZGQob2xkSGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBuZXdQ
b3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZShuZXdIaWdobGlnaHQpOworCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW1vdmVB
bGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKHR5cGUpOworCisgICAgbV9wb3RlbnRpYWxIaWdo
bGlnaHRzLmFkZChuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmJlZ2luKCksIG5ld1BvdGVudGlhbEhp
Z2hsaWdodHMuZW5kKCkpOworICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQocmV1c2VkUG90
ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCByZXVzZWRQb3RlbnRpYWxIaWdobGlnaHRzLmVuZCgp
KTsKK30KKworYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoYXNSZWxldmFudFNlbGVj
dGlvblNlcnZpY2VzKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmhh
c1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMobV9pc1RleHRPbmx5KTsKK30KKwordm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpCit7
CisgICAgaWYgKG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KG1fc2VydmljZXNPdmVybGF5KQorICAgICAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAodGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkuaXNF
bXB0eSgpICYmICFoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOworCisgICAgYm9vbCBtb3VzZUlzT3Zl
ckJ1dHRvbjsKKyAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJCdXR0b24p
OworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5l
ZWRlZCgpCit7CisgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fcGFnZS5zZXR0aW5ncygpLnNlcnZpY2VDb250cm9sc0VuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92
ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7
CisgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOworICAgIG1fcGFnZS5tYWlu
RnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkob3Zlcmxh
eS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKK30KKworVmVj
dG9yPFJlZlB0cjxSYW5nZT4+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnRlbGVwaG9uZU51
bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpCit7CisgICAgcmV0dXJuIG1fcGFnZS5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5lZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9u
ZU51bWJlclJhbmdlcygpOworfQorCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Omhp
Z2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0
KiBiKQoreworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KCFhIHx8ICFiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+dHlwZSgpID09
IGItPnR5cGUoKSAmJiBhcmVSYW5nZXNFcXVhbChhLT5yYW5nZSgpLCBiLT5yYW5nZSgpKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Zmlu
ZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdobGlnaHQoSGln
aGxpZ2h0JiBzZWxlY3Rpb25IaWdobGlnaHQpCit7CisgICAgaWYgKHNlbGVjdGlvbkhpZ2hsaWdo
dC50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9wYWdl
LnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8UmFuZ2U+IGFjdGl2ZVNlbGVjdGlvblJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFhY3RpdmVTZWxlY3Rpb25S
YW5nZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdo
dCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBl
KCkgIT0gSGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhvbmVOdW1iZXIpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAoaGlnaGxpZ2h0LT5yYW5nZSgpLT5jb250YWlucygqYWN0aXZl
U2VsZWN0aW9uUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJBY3RpdmVI
aWdobGlnaHRCdXR0b24pCit7CisgICAgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24g
PSBmYWxzZTsKKworICAgIFJlZlB0cjxIaWdobGlnaHQ+IG5ld0FjdGl2ZUhpZ2hsaWdodDsKKwor
ICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7CisgICAg
ICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikg
eworICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhIG5ldyBhY3RpdmUgaGln
aGxpZ2h0LCBhbmQgaXQncworICAgICAgICAgICAgLy8gYSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hs
aWdodCwgcHJlZmVyIHRoYXQgb3ZlciB0aGlzIHNlbGVjdGlvbiBoaWdobGlnaHQuCisgICAgICAg
ICAgICBpZiAobmV3QWN0aXZlSGlnaGxpZ2h0ICYmIG5ld0FjdGl2ZUhpZ2hsaWdodC0+dHlwZSgp
ID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAvLyBJZiB0aGlzIGhpZ2hsaWdodCBoYXMgbm8gY29tcGF0
aWJsZSBzZXJ2aWNlcywgaXQgY2FuJ3QgYmUgYWN0aXZlLgorICAgICAgICAgICAgaWYgKCFoYXNS
ZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGlzIGhpZ2hsaWdodCBpc24ndCBob3ZlcmVkLCBp
dCBjYW4ndCBiZSBhY3RpdmUuCisgICAgICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247CisgICAg
ICAgIGlmICghbW91c2VJc092ZXJIaWdobGlnaHQoKmhpZ2hsaWdodCwgbW91c2VJc092ZXJCdXR0
b24pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbmV3QWN0aXZlSGlnaGxpZ2h0
ID0gaGlnaGxpZ2h0OworICAgICAgICBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9
IG1vdXNlSXNPdmVyQnV0dG9uOworICAgIH0KKworICAgIC8vIElmIG91ciBuZXcgYWN0aXZlIGhp
Z2hsaWdodCBpcyBhIHNlbGVjdGlvbiBoaWdobGlnaHQgdGhhdCBpcyBjb21wbGV0ZWx5IGNvbnRh
aW5lZAorICAgIC8vIGJ5IG9uZSBvZiB0aGUgcGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMsIHdlJ2xs
IG1ha2UgdGhlIHBob25lIG51bWJlciBoaWdobGlnaHQgYWN0aXZlIGV2ZW4gaWYgaXQncyBub3Qg
aG92ZXJlZC4KKyAgICBpZiAobmV3QWN0aXZlSGlnaGxpZ2h0ICYmIG5ld0FjdGl2ZUhpZ2hsaWdo
dC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChI
aWdobGlnaHQqIGNvbnRhaW5lZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodCA9IGZpbmRUZWxlcGhv
bmVOdW1iZXJIaWdobGlnaHRDb250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KCpuZXdBY3RpdmVI
aWdobGlnaHQpKSB7CisgICAgICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBjb250YWluZWRU
ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQ7CisKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgYWx3YXlz
IGluaXRpYWxseSBjaG9vc2UgdGhlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IG92ZXIgdGhl
IHNlbGVjdGlvbiBoaWdobGlnaHQgaWYgdGhlCisgICAgICAgICAgICAvLyBtb3VzZSBpcyBvdmVy
IHRoZSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCdzIGJ1dHRvbiwgc28gd2Uga25vdyB0aGF0
IGl0J3Mgbm90IGhvdmVyZWQgaWYgd2UgZ290IGhlcmUuCisgICAgICAgICAgICBtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCF0aGlzLT5oaWdobGlnaHRzQXJlRXF1aXZhbGVudChtX2FjdGl2ZUhpZ2hsaWdodC5nZXQo
KSwgbmV3QWN0aXZlSGlnaGxpZ2h0LmdldCgpKSkgeworICAgICAgICAvLyBXaGVuIHRyYW5zaXRp
b25pbmcgdG8gYSBuZXcgaGlnaGxpZ2h0LCB3ZSBtaWdodCBlbmQgdXAgaW4gZGV0ZXJtaW5lQWN0
aXZlSGlnaGxpZ2h0IG11bHRpcGxlIHRpbWVzCisgICAgICAgIC8vIGJlZm9yZSB0aGUgbmV3IGhp
Z2hsaWdodCBhY3R1YWxseSBiZWNvbWVzIGFjdGl2ZS4gS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBu
ZXh0LWJ1dC1ub3QteWV0LWFjdGl2ZQorICAgICAgICAvLyBoaWdobGlnaHQsIGFuZCBvbmx5IHJl
c2V0IHRoZSBhY3RpdmUgaGlnaGxpZ2h0IGh5c3RlcmVzaXMgd2hlbiB0aGF0IGNoYW5nZXMuCisg
ICAgICAgIGlmIChtX25leHRBY3RpdmVIaWdobGlnaHQgIT0gbmV3QWN0aXZlSGlnaGxpZ2h0KSB7
CisgICAgICAgICAgICBtX25leHRBY3RpdmVIaWdobGlnaHQgPSBuZXdBY3RpdmVIaWdobGlnaHQ7
CisgICAgICAgICAgICBtX25leHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lID0gc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgICAgIH0KKworICAgICAgICBtX2N1cnJlbnRN
b3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKG1fYWN0
aXZlSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZU91dCgp
OworICAgICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQgPSBudWxscHRyOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byByZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID0g
dGhpcy0+cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bihuZXdBY3RpdmVI
aWdobGlnaHQuZ2V0KCkpOworICAgICAgICBpZiAocmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0
U2hvdWxkQmVTaG93biA+IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OmR1cmF0aW9uOjp6ZXJv
KCkpIHsKKyAgICAgICAgICAgIG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIuc3RhcnRP
bmVTaG90KHJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQgPSBt
X25leHRBY3RpdmVIaWdobGlnaHQucmVsZWFzZSgpOworCisgICAgICAgIGlmIChtX2FjdGl2ZUhp
Z2hsaWdodCkgeworICAgICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPmxheWVyKCkuYWRkQ2hp
bGQobV9hY3RpdmVIaWdobGlnaHQtPmxheWVyKCkpOworICAgICAgICAgICAgbV9hY3RpdmVIaWdo
bGlnaHQtPmZhZGVJbigpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2ZW50KQoreworICAgIG1fbW91c2VQb3NpdGlvbiA9IG1fcGFnZS5tYWluRnJh
bWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBi
b29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFsc2U7CisgICAgZGV0ZXJt
aW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKKwor
ICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBidXR0b24gb3RoZXIgdGhh
biB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9yZSB0aGUgZXZlbnQuCisg
ICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0QnV0dG9uKSB7CisgICAg
ICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoZSBtb3VzZSBsaWZ0ZWQgd2hp
bGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0IHdlbnQgZG93biBvbiwg
dGhlbiB0aGF0IGlzIGEgY2xpY2suCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVJlbGVhc2VkKSB7CisgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93
bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OworICAgICAg
ICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CisKKyAgICAg
ICAgbV9sYXN0TW91c2VVcFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsK
KworICAgICAgICBpZiAobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gJiYgbW91c2VE
b3duSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBoYW5kbGVDbGljayhtX21vdXNlUG9zaXRpb24s
ICptb3VzZURvd25IaWdobGlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB0
aGUgbW91c2UgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNraW5nIGEgcG90ZW50aWFs
IGNsaWNrLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay4KKyAgICBpZiAoZXZlbnQudHlwZSgpID09
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudE1vdXNl
RG93bk9uQnV0dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9u
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3du
T25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRoZSBhY3RpdmUgaGlnaGxp
Z2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNsaWNrLgorICAgIGlmIChl
dmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7CisgICAgICAgIGlm
IChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikg
eworICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBtX2Fj
dGl2ZUhpZ2hsaWdodDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSYs
IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKTsKKyAgICBidWlsZFNl
bGVjdGlvbkhpZ2hsaWdodCgpOworCisgICAgYm9vbCBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdo
dEJ1dHRvbjsKKyAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJBY3RpdmVI
aWdobGlnaHRCdXR0b24pOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Omhh
bmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50LCBIaWdobGlnaHQmIGhpZ2hsaWdo
dCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50
IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGNsaWNrUG9pbnQpOwor
CisgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24p
IHsKKyAgICAgICAgYXV0byB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMgPSB0ZWxlcGhvbmVOdW1iZXJS
YW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJzOworICAgICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMucmVzZXJ2
ZUNhcGFjaXR5KHRlbGVwaG9uZU51bWJlclJhbmdlcy5zaXplKCkpOworICAgICAgICBmb3IgKGF1
dG8mIHJhbmdlIDogdGVsZXBob25lTnVtYmVyUmFuZ2VzKQorICAgICAgICAgICAgc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChyYW5nZS0+dGV4dCgpKTsKKworICAgICAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKG1fcGFnZS5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKSwgc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7CisgICAgfSBlbHNlIGlmIChoaWdobGlnaHQu
dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQorICAgICAgICBtX3Bh
Z2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGlnaGxpZ2h0
LnJhbmdlKCktPnRleHQoKSwgd2luZG93UG9pbnQpOworfQorCit2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENyZWF0ZUhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3sK
KyAgICBBU1NFUlQoIW1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKKyAgICBtX2hp
Z2hsaWdodHMuYWRkKGhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6d2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit7CisgICAg
QVNTRVJUKG1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKKyAgICBtX2hpZ2hsaWdo
dHMucmVtb3ZlKGhpZ2hsaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gKEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJF
Ul9ERVRFQ1RJT04pKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmQ3ZWMzZi4uYzU2OGY1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtOTMxLDcgKzkzMSw2IEBACiAJCTUxOEU4RjBCMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9h
ZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4RThGMDIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgKi87IH07
CiAJCTUxOEU4RjBDMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjAzMTZCMjA5Mzcw
MEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLzsgfTsKIAkJNTE4RThGMEQxNkIyMDkzNzAw
RTkxNDI5IC8qIERvd25sb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1t
ICovOyB9OwotCQk1MTkyRDU3NjE5NjFGRDAzMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxOTJENTc1MTk2MUZEMDMwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
ICovOyB9OwogCQk1MTkzM0RFRjE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5MzNERUIxOTY1
RUIyNDAwOEFDM0VBIC8qIE1lbnVVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTE5MzNERjAxOTY1RUIz
MTAwOEFDM0VBIC8qIE1lbnVVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTkzM0RFQzE5NjVFQjI0MDA4QUMzRUEgLyogTWVudVV0aWxp
dGllcy5tbSAqLzsgfTsKIAkJNTFBNEQ1QTkxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NS
ZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5jcHAgKi87IH07
CkBAIC0yOTQ5LDggKzI5NDgsNiBAQAogCQk1MThFOEYwMjE2QjIwOTM3MDBFOTE0MjkgLyogRG93
bmxvYWRNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERv
d25sb2FkTWFuYWdlci5jcHA7IHBhdGggPSBEb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5IC8q
IERvd25sb2FkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEb3du
bG9hZE1hbmFnZXIuaDsgcGF0aCA9IERvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25s
b2FkTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRG93bmxv
YWRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOTJENTcxMTk2MUZBMkYw
MENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE5MkQ1NzUxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTkzM0RFQjE5NjVF
QjI0MDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZW51VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
OTMzREVDMTk2NUVCMjQwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NS
ZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YXRpc3Rp
Y3NSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2OTksNyArNTY5
Niw2IEBACiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywK
IAkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovLAog
CQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovLAotCQkJ
CTUxOTJENTcxMTk2MUZBMkYwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgg
Ki8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2Vz
dHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCiAJCQkJMkQ4MTlCOUIxODYyNzVCMzAwMUYwM0Qx
IC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMuaW4gKi8sCkBAIC02NDY4
LDcgKzY0NjQsNiBAQAogCQkJCTFBQjE2QUU3MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXll
clRyZWVDb250ZXh0Lm1tICovLAogCQkJCTFBQjE2QURDMTY0ODU5ODQwMDI5MEQ2MiAvKiBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5oICovLAogCQkJCTFBQjE2QURCMTY0ODU5ODQwMDI5MEQ2
MiAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSAqLywKLQkJCQk1MTkyRDU3NTE5NjFG
RDAzMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSAqLywKIAkJCQkxQUFG
MjYzNzE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCAq
LywKIAkJCQkxQUFGMjYzNjE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEubW0gKi8sCiAJCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3RvclVJTWFjLm1tICovLApAQCAtODcyOSw3ICs4NzI0LDYgQEAKIAkJCQk1MTJGNTg5NjEyQTg4
Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUUwMEQ0QzE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRI
YW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNTg5ODEyQTg4Mzg4MDA2Mjk1MzAgLyog
QXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
OTJENTc2MTk2MUZEMDMwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE4RThFRjgxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0
aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MThFOEVGQjE2QjIwOTFDMDBFOTE0
MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
MkY1OEEyMTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggODgx
NzNhNi4uMDJmMGMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTA2OSw1ICsxMDY5
LDI0IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0b3I8CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShU
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVy
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgbV9wYWdlLT5oYW5kbGVU
ZWxlcGhvbmVOdW1iZXJDbGljayhudW1iZXIsIHBvaW50KTsKK30KKyNlbmRpZgorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlU2VsZWN0
aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiB0ZWxlcGhvbmVOdW1iZXJzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQpCit7CisgICAgbV9wYWdlLT5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soc2Vs
ZWN0aW9uLCB0ZWxlcGhvbmVOdW1iZXJzLCBwb2ludCk7Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xp
ZW50OjpoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKGJvb2wgaXNUZXh0T25seSkgY29uc3QK
K3sKKyAgICByZXR1cm4gKGlzVGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzU2Vs
ZWN0aW9uU2VydmljZXMoKSkgfHwgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzUmljaENvbnRlbnRT
ZXJ2aWNlcygpOworfQorCisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAppbmRleCBmNWM1YjI3Li4yZmJlY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
QEAgLTMwMyw2ICszMDMsMTQgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IG92
ZXJyaWRlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
ICYmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVGVsZXBob25lTnVtYmVy
Q2xpY2soY29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3Zl
cnJpZGU7CisjZW5kaWYKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRlbGVwaG9uZU51bWJlcnMsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhc1JlbGV2YW50U2VsZWN0
aW9uU2VydmljZXMoYm9vbCBpc1RleHRPbmx5KSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorCiAg
ICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4g
bV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZWRN
YWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xsYmFyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmlu
ZGV4IDE3ZmMzYTUuLjE2ZGUxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTI3LDcg
KzI3LDYgQEAKICNpbmNsdWRlICJXZWJFZGl0b3JDbGllbnQuaCIKIAogI2luY2x1ZGUgIkVkaXRv
clN0YXRlLmgiCi0jaW5jbHVkZSAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZS5oIgpAQCAtNTMxLDIwICs1MzAsNCBAQCBib29sIFdlYkVkaXRvckNsaWVu
dDo6c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKQogI2VuZGlmCiB9CiAKLSNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQotdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgp
Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIG1fcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJv
bGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwotI2VuZGlmCi19
Ci12b2lkIFdlYkVkaXRvckNsaWVudDo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMs
IGJvb2wgaXNUZXh0T25seSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1fcGFnZS0+
c2VydmljZUNvbnRyb2xzRW5hYmxlZCgpKQotICAgICAgICBtX3BhZ2UtPnNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIoKS5zZWxlY3Rpb25SZWN0c0RpZENoYW5nZShyZWN0cywgZ2FwUmVjdHMsIGlz
VGV4dE9ubHkpOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
ICYmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCBmMzRhOWViLi5mNDQxODc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKQEAgLTE2OCwxMSArMTY4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIG92ZXJyaWRlOwogCi0jaWYgRU5BQkxF
KFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSB8fCBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
LSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpHYXBS
ZWN0cz4mLCBib29sIGlzVGV4dE9ubHkpIG92ZXJyaWRlOwotI2VuZGlmCi0KICAgICBXZWJQYWdl
KiBtX3BhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDExZDMzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXJfaAotI2RlZmluZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyX2gKLQotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04pCi0KLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1JhbmdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0KLXR5cGVkZWYgdm9pZCogRERIaWdobGlnaHRSZWY7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIExheW91dFJlY3Q7Ci1zdHJ1Y3QgR2FwUmVjdHM7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50
IHsKLXB1YmxpYzoKLSAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKFdlYlBhZ2UmKTsKLSAg
ICB+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBzZWxlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKLSAgICB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hh
bmdlKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpHYXBSZWN0cz4mLCBib29sIGlzVGV4dE9ubHkpOwotCi1wcml2YXRlOgotICAgIGNsYXNz
IEhpZ2hsaWdodCA6IHB1YmxpYyBSZWZDb3VudGVkPEhpZ2hsaWdodD4sIHByaXZhdGUgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhp
Z2hsaWdodCk7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaWdobGln
aHQ+IGNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWlu
UHRyPERESGlnaGxpZ2h0UmVmPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4pOwotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIaWdobGlnaHQ+IGNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4pOwotICAgICAgICB+SGlnaGxpZ2h0KCk7Ci0KLSAgICAg
ICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgRERIaWdobGlnaHRSZWYgZGRIaWdobGln
aHQoKSBjb25zdCB7IHJldHVybiBtX2RkSGlnaGxpZ2h0LmdldCgpOyB9Ci0gICAgICAgIFdlYkNv
cmU6OlJhbmdlKiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZ2V0KCk7IH0KLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2dyYXBo
aWNzTGF5ZXIuZ2V0KCk7IH0KLQotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAg
ICAgVGVsZXBob25lTnVtYmVyLAotICAgICAgICAgICAgU2VsZWN0aW9uCi0gICAgICAgIH07Ci0g
ICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgICAgIHZv
aWQgZmFkZUluKCk7Ci0gICAgICAgIHZvaWQgZmFkZU91dCgpOwotCi0gICAgICAgIHZvaWQgc2V0
RERIaWdobGlnaHQoRERIaWdobGlnaHRSZWYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZXhw
bGljaXQgSGlnaGxpZ2h0KFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImLCBUeXBlLCBSZXRhaW5Q
dHI8RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPik7Ci0KLSAgICAg
ICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBpbkNsaXApIG92ZXJyaWRlOwot
ICAgICAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICAgICAgdm9pZCBkaWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCk7Ci0KLSAgICAgICAg
UmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBtX2RkSGlnaGxpZ2h0OwotICAgICAgICBSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2U7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX2dyYXBoaWNzTGF5ZXI7Ci0gICAgICAgIFR5cGUgbV90eXBlOwot
ICAgICAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7Ci0gICAgfTsK
LQotICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJs
YXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdl
Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxG
cmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwotICAgIHZvaWQgaGFuZGxlQ2xpY2so
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsKLQotICAgIHZvaWQgZHJhd0hp
Z2hsaWdodChIaWdobGlnaHQmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIHZv
aWQgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMo
SGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4mLCBIaWdobGlnaHQ6OlR5cGUpOwotICAgIHZvaWQg
cmVtb3ZlQWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUpOwotICAg
IHZvaWQgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKTsKLSAgICB2b2lkIGJ1aWxkU2VsZWN0
aW9uSGlnaGxpZ2h0KCk7Ci0gICAgdm9pZCBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygp
OwotCi0gICAgdm9pZCBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJC
dXR0b24pOwotICAgIHZvaWQgY2xlYXJBY3RpdmVIaWdobGlnaHQoKTsKLSAgICBIaWdobGlnaHQq
IGFjdGl2ZUhpZ2hsaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlSGlnaGxpZ2h0LmdldCgp
OyB9Ci0KLSAgICBIaWdobGlnaHQqIGZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRDb250YWlu
aW5nU2VsZWN0aW9uSGlnaGxpZ2h0KEhpZ2hsaWdodCYpOwotCi0gICAgYm9vbCBoYXNSZWxldmFu
dFNlbGVjdGlvblNlcnZpY2VzKCk7Ci0KLSAgICBib29sIG1vdXNlSXNPdmVySGlnaGxpZ2h0KEhp
Z2hsaWdodCYsIGJvb2wmIG1vdXNlSXNPdmVyQnV0dG9uKSBjb25zdDsKLSAgICBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24o
SGlnaGxpZ2h0KikgY29uc3Q7Ci0gICAgdm9pZCBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1l
ckZpcmVkKFdlYkNvcmU6OlRpbWVyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+Jik7Ci0KLSAg
ICBzdGF0aWMgYm9vbCBoaWdobGlnaHRzQXJlRXF1aXZhbGVudChjb25zdCBIaWdobGlnaHQqIGEs
IGNvbnN0IEhpZ2hsaWdodCogYik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlJhbmdl
Pj4gdGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCk7Ci0KLSAgICB2b2lkIGRp
ZENyZWF0ZUhpZ2hsaWdodChIaWdobGlnaHQqKTsKLSAgICB2b2lkIHdpbGxEZXN0cm95SGlnaGxp
Z2h0KEhpZ2hsaWdodCopOwotICAgIHZvaWQgZGlkRmluaXNoRmFkaW5nT3V0SGlnaGxpZ2h0KEhp
Z2hsaWdodCopOwotCi0gICAgV2ViUGFnZSYgd2ViUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
UGFnZTsgfQotCi0gICAgV2ViUGFnZSYgbV93ZWJQYWdlOwotICAgIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5KiBtX3NlcnZpY2VzT3ZlcmxheTsKLQotICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1fYWN0aXZl
SGlnaGxpZ2h0OwotICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodDsK
LSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX3BvdGVudGlhbEhpZ2hsaWdodHM7Ci0g
ICAgSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4gbV9hbmltYXRpbmdIaWdobGlnaHRzOwotCi0g
ICAgSGFzaFNldDxIaWdobGlnaHQqPiBtX2hpZ2hsaWdodHM7Ci0KLSAgICAvLyBGSVhNRTogVGhl
c2Ugc2hvdWxkIG1vdmUgb250byBIaWdobGlnaHQuCi0gICAgVmVjdG9yPFdlYkNvcmU6OkxheW91
dFJlY3Q+IG1fY3VycmVudFNlbGVjdGlvblJlY3RzOwotICAgIGJvb2wgbV9pc1RleHRPbmx5Owot
Ci0gICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2xhc3RTZWxlY3Rp
b25DaGFuZ2VUaW1lOwotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQg
bV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZTsKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5
X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdE1vdXNlVXBUaW1lOwotCi0gICAgUmVmUHRyPEhpZ2hs
aWdodD4gbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQ7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgbV9tb3VzZVBvc2l0aW9uOwotCi0gICAgV2ViQ29yZTo6VGltZXI8U2VydmljZXNP
dmVybGF5Q29udHJvbGxlcj4gbV9kZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpICYmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLSNlbmRpZiAvLyBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCBiYjQzYjYzLi5jMjY5M2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAj
aW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVk
ZSAiUHJpbnRJbmZvLmgiCi0jaW5jbHVkZSAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIlNlc3Npb25TdGF0ZUNvbnZlcnNp
b24uaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgpAQCAtMjYzLDkgKzI2Miw2IEBAIFdl
YlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgICwgbV9udW1iZXJPZlByaW1hcnlTbmFwc2hvdERldGVj
dGlvbkF0dGVtcHRzKDApCiAgICAgLCBtX2RldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJ
blRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlBhZ2U6OmRldGVybWluZVByaW1hcnlT
bmFwc2hvdHRlZFBsdWdJblRpbWVyRmlyZWQpCiAjZW5kaWYKLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICAsIG1fc2VydmljZUNvbnRyb2xzRW5hYmxlZChmYWxzZSkKLSNlbmRpZgog
ICAgICwgbV9sYXllckhvc3RpbmdNb2RlKHBhcmFtZXRlcnMubGF5ZXJIb3N0aW5nTW9kZSkKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICAsIG1fcGRmUGx1Z2luRW5hYmxlZChmYWxzZSkKQEAgLTI2
MjYsMTAgKzI2MjIsNiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdl
YlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIG1fcGRmUGx1Z2luRW5hYmxlZCA9IHN0b3Jl
LmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cGRmUGx1Z2luRW5hYmxlZEtl
eSgpKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgbV9zZXJ2
aWNlQ29udHJvbHNFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpzZXJ2aWNlQ29udHJvbHNFbmFibGVkS2V5KCkpOwotI2VuZGlmCi0KICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGZyb20gbWFjcm8gZXhwYW5zaW9uIGZvciBh
bGwgcHJlZmVyZW5jZXMsCiAgICAgLy8gYnV0IHdlIGN1cnJlbnRseSBkb24ndCBtYXRjaCB0aGUg
bmFtaW5nIG9mIFdlYkNvcmUgZXhhY3RseSBzbyB3ZSBhcmUKICAgICAvLyBoYW5kcm9sbGluZyB0
aGUgYm9vbGVhbiBhbmQgaW50ZWdlciBwcmVmZXJlbmNlcyB1bnRpbCB0aGF0IGlzIGZpeGVkLgpA
QCAtMjg0NSw2ICsyODM3LDEwIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29u
c3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRHYW1lcGFkc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpnYW1lcGFkc0VuYWJsZWRLZXkoKSkpOwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBzZXR0aW5ncy5zZXRTZXJ2aWNl
Q29udHJvbHNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tl
eTo6c2VydmljZUNvbnRyb2xzRW5hYmxlZEtleSgpKSk7CisjZW5kaWYKKwogICAgIGlmIChzdG9y
ZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnBhZ2VWaXNpYmlsaXR5QmFz
ZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkS2V5KCkpKQogICAgICAgICBtX3Byb2Nlc3NTdXBw
cmVzc2lvbkRpc2FibGVkQnlXZWJQcmVmZXJlbmNlLnN0b3AoKTsKICAgICBlbHNlCkBAIC00Nzc4
LDE2ICs0Nzc0LDYgQEAgYm9vbCBXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3Bp
blJ1bkxvb3AoKQogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAotI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
Ci1TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBXZWJQYWdlOjpzZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkKLXsKLSAgICBpZiAoIW1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcikKLSAgICAg
ICAgbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyPigqdGhpcyk7Ci0KLSAgICByZXR1cm4gKm1fc2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjsKLX0KLSNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNjcm9s
bE9mZnNldEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDg2YjE1YTcuLjdhMWY0NGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTQxLDcgKzE0MSw2IEBA
IGNsYXNzIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKIGNsYXNzIFBsdWdp
blZpZXc7Ci1jbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlSW5mbzsKIGNsYXNzIFdlYkNvbG9yQ2hvb3NlcjsKIGNsYXNzIFdlYkNv
bnRleHRNZW51OwpAQCAtODI1LDExICs4MjQsOSBAQCBwdWJsaWM6CiAgICAgLy8gV2hpbGUgdGhp
cyBpcyBub3QgaWRlYWwsIGl0IGRvZXMgbm90IGhhdmUgdG8gYmUgYXBwbGllZCB0byBldmVyeSBw
bGF0Zm9ybSBhdCB0aGUgbW9tZW50LgogICAgIHN0YXRpYyBib29sIHN5bmNocm9ub3VzTWVzc2Fn
ZXNTaG91bGRTcGluUnVuTG9vcCgpOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgCi0gICAgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlciYgc2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpOworI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAg
dm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VD
bGljayhXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0ZWxl
cGhvbmVOdW1iZXJzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIGJvb2wgc2Vydmlj
ZUNvbnRyb2xzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZUNvbnRyb2xzRW5hYmxl
ZDsgfQogI2VuZGlmCiAKICAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldEZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lKik7CkBAIC0xMDg4LDEwICsxMDg1LDYgQEAgcHJpdmF0ZToKICAgICBSdW5M
b29wOjpUaW1lcjxXZWJQYWdlPiBtX2RldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJblRp
bWVyOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQotICAgIGJvb2wgbV9zZXJ2aWNlQ29udHJvbHNFbmFi
bGVkOwotI2VuZGlmCi0KICAgICAvLyBUaGUgbGF5ZXIgaG9zdGluZyBtb2RlLgogICAgIExheWVy
SG9zdGluZ01vZGUgbV9sYXllckhvc3RpbmdNb2RlOwogCkBAIC0xMjY2LDEwICsxMjU5LDYgQEAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5
IG1fc3lzdGVtV2ViR0xQb2xpY3k7CiAjZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNWJk
OTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIuaCIKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9y
dCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5o
IgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFF1YWQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HYXBSZWN0cy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+Ci0KLSNpZiBfX2hhc19pbmNsdWRlKDxE
YXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZy5oPikKLSNpbXBvcnQgPERhdGFEZXRlY3Rv
cnMvRERIaWdobGlnaHREcmF3aW5nLmg+Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiBEREhpZ2hsaWdo
dFJlZjsKLSNlbmRpZgotCi0jaWYgX19oYXNfaW5jbHVkZSg8RGF0YURldGVjdG9ycy9EREhpZ2hs
aWdodERyYXdpbmdfUHJpdmF0ZS5oPikKLSNpbXBvcnQgPERhdGFEZXRlY3RvcnMvRERIaWdobGln
aHREcmF3aW5nX1ByaXZhdGUuaD4KLSNlbmRpZgotCi1jb25zdCBmbG9hdCBoaWdobGlnaHRGYWRl
QW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Ci0KLXR5cGVkZWYgTlNVSW50ZWdlciBEREhpZ2hsaWdo
dFN0eWxlOwotc3RhdGljIGNvbnN0IERESGlnaGxpZ2h0U3R5bGUgRERIaWdobGlnaHROb091dGxp
bmVXaXRoQXJyb3cgPSAoMSA8PCAxNik7Ci1zdGF0aWMgY29uc3QgRERIaWdobGlnaHRTdHlsZSBE
REhpZ2hsaWdodE91dGxpbmVXaXRoQXJyb3cgPSAoMSA8PCAxNikgfCAxOwotCi1TT0ZUX0xJTktf
UFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoRGF0YURldGVjdG9ycykKLVNPRlRfTElOSyhEYXRh
RGV0ZWN0b3JzLCBEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5
bGVBbmREaXJlY3Rpb24sIERESGlnaGxpZ2h0UmVmLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCBDR1JlY3QqIHJlY3RzLCBDRkluZGV4IGNvdW50LCBDR1JlY3QgZ2xvYmFsVmlzaWJsZVJlY3Qs
IERESGlnaGxpZ2h0U3R5bGUgc3R5bGUsIEJvb2xlYW4gd2l0aEFycm93LCBOU1dyaXRpbmdEaXJl
Y3Rpb24gd3JpdGluZ0RpcmVjdGlvbiwgQm9vbGVhbiBlbmRzV2l0aEVPTCwgQm9vbGVhbiBmbGlw
cGVkKSwgKGFsbG9jYXRvciwgcmVjdHMsIGNvdW50LCBnbG9iYWxWaXNpYmxlUmVjdCwgc3R5bGUs
IHdpdGhBcnJvdywgd3JpdGluZ0RpcmVjdGlvbiwgZW5kc1dpdGhFT0wsIGZsaXBwZWQpKQotU09G
VF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dCwgQ0dM
YXllclJlZiwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQp
LCAoaGlnaGxpZ2h0LCBjb250ZXh0KSkKLVNPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hs
aWdodEdldEJvdW5kaW5nUmVjdCwgQ0dSZWN0LCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0KSwg
KGhpZ2hsaWdodCkpCi1TT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRQb2ludElz
T25IaWdobGlnaHQsIEJvb2xlYW4sIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQsIENHUG9pbnQg
cG9pbnQsIEJvb2xlYW4qIG9uQnV0dG9uKSwgKGhpZ2hsaWdodCwgcG9pbnQsIG9uQnV0dG9uKSkK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNz
UmVmUHRyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhp
Z2hsaWdodCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIaWdobGlnaHQoY29udHJvbGxlciwgVHlwZTo6U2VsZWN0aW9uLCBkZEhpZ2hsaWdodCwg
cmFuZ2UpKTsKLX0KLQotUGFzc1JlZlB0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdo
bGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVs
ZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFp
blB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIFR5cGU6
OlRlbGVwaG9uZU51bWJlciwgZGRIaWdobGlnaHQsIHJhbmdlKSk7Ci19Ci0KLVNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6SGlnaGxpZ2h0KFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXImIGNvbnRyb2xsZXIsIFR5cGUgdHlwZSwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBk
ZEhpZ2hsaWdodCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UpCi0gICAgOiBtX3Jh
bmdlKHJhbmdlKQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX2NvbnRyb2xsZXIoJmNvbnRy
b2xsZXIpCi17Ci0gICAgQVNTRVJUKGRkSGlnaGxpZ2h0KTsKLSAgICBBU1NFUlQobV9yYW5nZSk7
Ci0KLSAgICBEcmF3aW5nQXJlYSogZHJhd2luZ0FyZWEgPSBjb250cm9sbGVyLndlYlBhZ2UoKS5k
cmF3aW5nQXJlYSgpOwotICAgIG1fZ3JhcGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZShkcmF3aW5nQXJlYSA/IGRyYXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpIDogbnVs
bHB0ciwgKnRoaXMpOwotICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUp
OwotCi0gICAgc2V0RERIaWdobGlnaHQoZGRIaWdobGlnaHQuZ2V0KCkpOwotCi0gICAgLy8gU2V0
IGRpcmVjdGx5IG9uIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgc28gdGhhdCB3aGVuIHdlIGxlYXZlIHRo
ZSAnZnJvbScgdmFsdWUgaW1wbGljaXQKLSAgICAvLyBpbiBvdXIgYW5pbWF0aW9ucywgd2UgZ2V0
IHRoZSByaWdodCBpbml0aWFsIHZhbHVlIHJlZ2FyZGxlc3Mgb2YgZmx1c2ggdGltaW5nLgotICAg
IHRvR3JhcGhpY3NMYXllckNBKGxheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKS0+c2V0T3BhY2l0
eSgwKTsKLQotICAgIGNvbnRyb2xsZXIuZGlkQ3JlYXRlSGlnaGxpZ2h0KHRoaXMpOwotfQotCi1T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6On5IaWdobGlnaHQoKQotewotICAg
IGlmIChtX2NvbnRyb2xsZXIpCi0gICAgICAgIG1fY29udHJvbGxlci0+d2lsbERlc3Ryb3lIaWdo
bGlnaHQodGhpcyk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxp
Z2h0OjpzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQpCi17Ci0gICAgaWYg
KCFtX2NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGRIaWdobGlnaHQgPSBo
aWdobGlnaHQ7Ci0KLSAgICBpZiAoIW1fZGRIaWdobGlnaHQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5n
UmVjdChtX2RkSGlnaGxpZ2h0LmdldCgpKTsKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoaGlnaGxpZ2h0Qm91bmRpbmdSZWN0Lm9yaWdpbikpOwotICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoaGlnaGxpZ2h0Qm91bmRpbmdSZWN0LnNpemUp
KTsKLQotICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci19Ci0KLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjppbnZhbGlkYXRlKCkKLXsKLSAg
ICBsYXllcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9jb250cm9sbGVyID0gbnVsbHB0
cjsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6Om5vdGlm
eUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCi17Ci0gICAgaWYgKCFtX2NvbnRy
b2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChEcmF3aW5nQXJlYSogZHJhd2luZ0Fy
ZWEgPSBtX2NvbnRyb2xsZXItPndlYlBhZ2UoKS5kcmF3aW5nQXJlYSgpKQotICAgICAgICBkcmF3
aW5nQXJlYS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBpbkNsaXApCi17Ci0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLQot
ICAgIENHTGF5ZXJSZWYgaGlnaGxpZ2h0TGF5ZXIgPSBEREhpZ2hsaWdodEdldExheWVyV2l0aENv
bnRleHQoZGRIaWdobGlnaHQoKSwgY2dDb250ZXh0KTsKLSAgICBDR1JlY3QgaGlnaGxpZ2h0Qm91
bmRpbmdSZWN0ID0gRERIaWdobGlnaHRHZXRCb3VuZGluZ1JlY3QoZGRIaWdobGlnaHQoKSk7Ci0g
ICAgaGlnaGxpZ2h0Qm91bmRpbmdSZWN0Lm9yaWdpbiA9IENHUG9pbnRaZXJvOwotCi0gICAgQ0dD
b250ZXh0RHJhd0xheWVySW5SZWN0KGNnQ29udGV4dCwgaGlnaGxpZ2h0Qm91bmRpbmdSZWN0LCBo
aWdobGlnaHRMYXllcik7Ci19Ci0KLWZsb2F0IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIGlmICghbV9jb250cm9s
bGVyKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJldHVybiBtX2NvbnRyb2xsZXItPndlYlBh
Z2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OkhpZ2hsaWdodDo6ZmFkZUluKCkKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1h
dGlvbj4gYW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6
QCJvcGFjaXR5Il07Ci0gICAgW2FuaW1hdGlvbiBzZXREdXJhdGlvbjpoaWdobGlnaHRGYWRlQW5p
bWF0aW9uRHVyYXRpb25dOwotICAgIFthbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVG
b3J3YXJkc107Ci0gICAgW2FuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOmZhbHNlXTsK
LSAgICBbYW5pbWF0aW9uIHNldFRvVmFsdWU6QDFdOwotCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FB
bmltYXRpb24+IHBsYXRmb3JtQW5pbWF0aW9uID0gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6Y3Jl
YXRlKGFuaW1hdGlvbi5nZXQoKSk7Ci0gICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBs
YXRmb3JtQ0FMYXllcigpLT5hZGRBbmltYXRpb25Gb3JLZXkoIkZhZGVIaWdobGlnaHRJbiIsIHBs
YXRmb3JtQW5pbWF0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpIaWdobGlnaHQ6OmZhZGVPdXQoKQotewotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0
aW9uPiBhbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpA
Im9wYWNpdHkiXTsKLSAgICBbYW5pbWF0aW9uIHNldER1cmF0aW9uOmhpZ2hsaWdodEZhZGVBbmlt
YXRpb25EdXJhdGlvbl07Ci0gICAgW2FuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZv
cndhcmRzXTsKLSAgICBbYW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246ZmFsc2VdOwot
ICAgIFthbmltYXRpb24gc2V0VG9WYWx1ZTpAMF07Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBy
ZXRhaW5lZFNlbGYgPSB0aGlzOwotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FU
cmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6W3JldGFpbmVkU2VsZl0gKCkgewotICAgICAg
ICByZXRhaW5lZFNlbGYtPmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICB9XTsKLQot
ICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRm
b3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkpOwotICAgIHRvR3JhcGhp
Y3NMYXllckNBKGxheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRkQW5pbWF0aW9uRm9yS2V5
KCJGYWRlSGlnaGxpZ2h0T3V0IiwgcGxhdGZvcm1BbmltYXRpb24uZ2V0KCkpOwotICAgIFtDQVRy
YW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
SGlnaGxpZ2h0OjpkaWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCkKLXsKLSAgICBpZiAoIW1fY29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udHJvbGxlci0+YWN0aXZl
SGlnaGxpZ2h0KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXIoKS0+cmVt
b3ZlRnJvbVBhcmVudCgpOwotfQotCi1zdGF0aWMgSW50UmVjdCB0ZXh0UXVhZHNUb0JvdW5kaW5n
UmVjdEZvclJhbmdlKFJhbmdlJiByYW5nZSkKLXsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0
UXVhZHM7Ci0gICAgcmFuZ2UudGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJv
dW5kaW5nUmVjdDsKLSAgICBmb3IgKGF1dG8mIHF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAgIGJv
dW5kaW5nUmVjdC51bml0ZShxdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KGJvdW5kaW5nUmVjdCk7Ci19Ci0KLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2Vi
UGFnZSh3ZWJQYWdlKQotICAgICwgbV9zZXJ2aWNlc092ZXJsYXkobnVsbHB0cikKLSAgICAsIG1f
aXNUZXh0T25seShmYWxzZSkKLSAgICAsIG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIo
dGhpcywgJlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dFRpbWVyRmlyZWQpCi17Ci19Ci0KLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6On5TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyKCkKLXsKLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1faGln
aGxpZ2h0cykKLSAgICAgICAgaGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkm
KQotewotICAgIC8vIEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBo
YXZlIG1vdmVkIG91dCBvZiB0aGUgV2ViUGFnZSwKLSAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBh
bHJlYWR5IGNsZWFyZWQgb3VyIGJhY2sgcG9pbnRlci4KLSAgICBBU1NFUlQoIW1fc2VydmljZXNP
dmVybGF5KTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRv
UGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7Ci0gICAgbV9zZXJ2aWNl
c092ZXJsYXkgPSBudWxscHRyOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKLXsKLX0KLQotc3RhdGljIGNvbnN0
IHVpbnQ4X3QgQWxpZ25tZW50Tm9uZSA9IDA7Ci1zdGF0aWMgY29uc3QgdWludDhfdCBBbGlnbm1l
bnRMZWZ0ID0gMSA8PCAwOwotc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50UmlnaHQgPSAx
IDw8IDE7Ci0KLXN0YXRpYyB2b2lkIGV4cGFuZEZvckdhcChWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCB1aW50OF90KiBhbGlnbm1lbnRzLCBjb25zdCBHYXBSZWN0cyYgZ2FwKQotewotICAgIGlm
ICghZ2FwLmxlZnQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBsZWZ0RWRnZSA9
IGdhcC5sZWZ0KCkueCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50
TGVmdCkKLSAgICAgICAgICAgICAgICByZWN0c1tpXS5zaGlmdFhFZGdlVG8obGVmdEVkZ2UpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFnYXAucmlnaHQoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgTGF5b3V0VW5pdCByaWdodEVkZ2UgPSBnYXAucmlnaHQoKS5tYXhYKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRSaWdodCkKLSAgICAgICAgICAgICAgICBy
ZWN0c1tpXS5zaGlmdE1heFhFZGdlVG8ocmlnaHRFZGdlKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIHN0aXRjaFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVj
dHMpCi17Ci0gICAgaWYgKHJlY3RzLnNpemUoKSA8PSAxKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgVmVjdG9yPExheW91dFJlY3Q+IG5ld1JlY3RzOwotICAgIAotICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHN1cHBvcnQgdmVydGljYWwgbGF5b3V0LgotICAgIC8vIEZpcnN0IHN0aXRjaCB0b2dl
dGhlciBhbGwgdGhlIHJlY3RzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzZWxlY3Rpb24uCi0g
ICAgc2l6ZV90IGluZGV4RnJvbVN0YXJ0ID0gMDsKLSAgICBMYXlvdXRVbml0IGZpcnN0VG9wID0g
cmVjdHNbaW5kZXhGcm9tU3RhcnRdLnkoKTsKLSAgICBMYXlvdXRSZWN0JiBjdXJyZW50UmVjdCA9
IHJlY3RzW2luZGV4RnJvbVN0YXJ0XTsKLSAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgPCByZWN0
cy5zaXplKCkgJiYgcmVjdHNbaW5kZXhGcm9tU3RhcnRdLnkoKSA9PSBmaXJzdFRvcCkKLSAgICAg
ICAgY3VycmVudFJlY3QudW5pdGUocmVjdHNbaW5kZXhGcm9tU3RhcnQrK10pOwotICAgIAotICAg
IG5ld1JlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7Ci0gICAgaWYgKGluZGV4RnJvbVN0YXJ0ID09
IHJlY3RzLnNpemUoKSkgewotICAgICAgICAvLyBBbGwgdGhlIHJlY3RzIGFyZSBvbiBvbmUgbGlu
ZS4gVGhlcmUgaXMgbm90aGluZyBlbHNlIHRvIGRvLgotICAgICAgICByZWN0cy5zd2FwKG5ld1Jl
Y3RzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBOZXh0IHN0aXRjaCB0
b2dldGhlciBhbGwgdGhlIHJlY3RzIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHNlbGVjdGlvbi4K
LSAgICBzaXplX3QgaW5kZXhGcm9tRW5kID0gcmVjdHMuc2l6ZSgpIC0gMTsKLSAgICBMYXlvdXRV
bml0IGxhc3RUb3AgPSByZWN0c1tpbmRleEZyb21FbmRdLnkoKTsKLSAgICBMYXlvdXRSZWN0IGxh
c3RSZWN0ID0gcmVjdHNbaW5kZXhGcm9tRW5kXTsKLSAgICB3aGlsZSAoaW5kZXhGcm9tRW5kID49
IGluZGV4RnJvbVN0YXJ0ICYmIHJlY3RzW2luZGV4RnJvbUVuZF0ueSgpID09IGxhc3RUb3ApCi0g
ICAgICAgIGxhc3RSZWN0LnVuaXRlKHJlY3RzW2luZGV4RnJvbUVuZC0tXSk7Ci0gICAgCi0gICAg
Ly8gaW5kZXhGcm9tU3RhcnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWN0YW5nbGUgb24g
dGhlIHNlY29uZCBsaW5lLgotICAgIC8vIGluZGV4RnJvbUVuZCBpcyB0aGUgaW5kZXggb2YgdGhl
IGxhc3QgcmVjdGFuZ2xlIG9uIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgbGluZS4KLSAgICAvLyBp
ZiB0aGV5IGFyZSBlcXVhbCwgdGhlcmUgaXMgb25lIGFkZGl0aW9uYWwgcmVjdGFuZ2xlIGZvciB0
aGUgbGluZSBpbiB0aGUgbWlkZGxlLgotICAgIGlmIChpbmRleEZyb21FbmQgPT0gaW5kZXhGcm9t
U3RhcnQpCi0gICAgICAgIG5ld1JlY3RzLmFwcGVuZChyZWN0c1tpbmRleEZyb21TdGFydF0pOwot
ICAgIAotICAgIGlmIChpbmRleEZyb21FbmQgPD0gaW5kZXhGcm9tU3RhcnQpIHsKLSAgICAgICAg
Ly8gVGhlcmUgYXJlIG5vIG1vcmUgcmVjdHMgdG8gc3RpdGNoLiBKdXN0IGFwcGVuZCB0aGUgbGFz
dCBsaW5lLgotICAgICAgICBuZXdSZWN0cy5hcHBlbmQobGFzdFJlY3QpOwotICAgICAgICByZWN0
cy5zd2FwKG5ld1JlY3RzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBT
dGl0Y2ggdG9nZXRoZXIgYWxsIHRoZSByZWN0cyBhZnRlciB0aGUgZmlyc3QgbGluZSB1bnRpbCB0
aGUgc2Vjb25kIHRvIHRoZSBsYXN0IGluY2x1ZGVkLgotICAgIGN1cnJlbnRSZWN0ID0gcmVjdHNb
aW5kZXhGcm9tU3RhcnRdOwotICAgIHdoaWxlIChpbmRleEZyb21TdGFydCAhPSBpbmRleEZyb21F
bmQpCi0gICAgICAgIGN1cnJlbnRSZWN0LnVuaXRlKHJlY3RzWysraW5kZXhGcm9tU3RhcnRdKTsK
LSAgICAKLSAgICBuZXdSZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOwotICAgIG5ld1JlY3RzLmFw
cGVuZChsYXN0UmVjdCk7Ci0KLSAgICByZWN0cy5zd2FwKG5ld1JlY3RzKTsKLX0KLQotc3RhdGlj
IHZvaWQgY29tcGFjdFJlY3RzV2l0aEdhcFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMs
IGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mIGdhcFJlY3RzKQotewotICAgIHN0aXRjaFJlY3RzKHJl
Y3RzKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhbGlnbm1lbnRzIGFyZSBj
b3JyZWN0IGZvciBMVFIgdGV4dC4KLSAgICAvLyBXZSBzaG91bGQgYWxzbyBhY2NvdW50IGZvciBS
VEwuCi0gICAgdWludDhfdCBhbGlnbm1lbnRzWzNdOwotICAgIGlmIChyZWN0cy5zaXplKCkgPT0g
MSkgewotICAgICAgICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50TGVmdCB8IEFsaWdubWVudFJp
Z2h0OwotICAgICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50Tm9uZTsKLSAgICAgICAgYWxp
Z25tZW50c1syXSA9IEFsaWdubWVudE5vbmU7Ci0gICAgfSBlbHNlIGlmIChyZWN0cy5zaXplKCkg
PT0gMikgewotICAgICAgICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50UmlnaHQ7Ci0gICAgICAg
IGFsaWdubWVudHNbMV0gPSBBbGlnbm1lbnRMZWZ0OwotICAgICAgICBhbGlnbm1lbnRzWzJdID0g
QWxpZ25tZW50Tm9uZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhbGlnbm1lbnRzWzBdID0gQWxp
Z25tZW50UmlnaHQ7Ci0gICAgICAgIGFsaWdubWVudHNbMV0gPSBBbGlnbm1lbnRMZWZ0IHwgQWxp
Z25tZW50UmlnaHQ7Ci0gICAgICAgIGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnRMZWZ0OwotICAg
IH0KLQotICAgIC8vIEFjY291bnQgZm9yIGVhY2ggR2FwUmVjdHMgYnkgZXh0ZW5kaW5nIHRoZSBl
ZGdlIG9mIGNlcnRhaW4gTGF5b3V0UmVjdHMgdG8gbWVldCB0aGUgZ2FwLgotICAgIGZvciAoYXV0
byYgZ2FwIDogZ2FwUmVjdHMpCi0gICAgICAgIGV4cGFuZEZvckdhcChyZWN0cywgYWxpZ25tZW50
cywgZ2FwKTsKLQotICAgIC8vIElmIHdlIGhhdmUgMyByZWN0cyB3ZSBtaWdodCBuZWVkIG9uZSBm
aW5hbCBHYXBSZWN0cyB0byBhbGlnbiB0aGUgZWRnZXMuCi0gICAgaWYgKHJlY3RzLnNpemUoKSA9
PSAzKSB7Ci0gICAgICAgIExheW91dFJlY3QgbGVmdDsKLSAgICAgICAgTGF5b3V0UmVjdCByaWdo
dDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRMZWZ0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGxlZnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmVjdHNbaV07
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjdHNbaV0ueCgpIDwgbGVmdC54KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSByZWN0c1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50UmlnaHQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmlnaHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3Rz
W2ldOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyZWN0c1tpXS54KCkgKyByZWN0c1tpXS53
aWR0aCgpKSA+IChyaWdodC54KCkgKyByaWdodC53aWR0aCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmlnaHQgPSByZWN0c1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbGVmdC5pc0VtcHR5KCkgfHwgIXJpZ2h0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
R2FwUmVjdHMgZ2FwOwotICAgICAgICAgICAgZ2FwLnVuaXRlTGVmdChsZWZ0KTsKLSAgICAgICAg
ICAgIGdhcC51bml0ZVJpZ2h0KHJpZ2h0KTsKLSAgICAgICAgICAgIGV4cGFuZEZvckdhcChyZWN0
cywgYWxpZ25tZW50cywgZ2FwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8
TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiBnYXBSZWN0cywgYm9v
bCBpc1RleHRPbmx5KQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cyA9IHJlY3Rz
OwotICAgIG1faXNUZXh0T25seSA9IGlzVGV4dE9ubHk7Ci0KLSAgICBtX2xhc3RTZWxlY3Rpb25D
aGFuZ2VUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0KLSAgICBjb21w
YWN0UmVjdHNXaXRoR2FwUmVjdHMobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMsIGdhcFJlY3RzKTsK
LQotICAgIC8vIERhdGFEZXRlY3RvcnMgbmVlZHMgdGhlc2UgcmV2ZXJzZWQgaW4gb3JkZXIgdG8g
cGxhY2UgdGhlIGFycm93IGluIHRoZSByaWdodCBsb2NhdGlvbi4KLSAgICBtX2N1cnJlbnRTZWxl
Y3Rpb25SZWN0cy5yZXZlcnNlKCk7Ci0KLSAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyIC0gU2VsZWN0aW9uIHJlY3RzIGNoYW5nZWQgLSBOb3cgaGF2ZSAlbHVcbiIs
IHJlY3RzLnNpemUoKSk7Ci0KLSAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0ocmVjdHMpOwotICAgIFVOVVNFRF9QQVJBTShnYXBSZWN0cyk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlzVGV4dE9ubHkpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCkK
LXsKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
PiAxMDkwCi0gICAgTE9HKFNlcnZpY2VzLCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlciAtIFRl
bGVwaG9uZSBudW1iZXIgcmFuZ2VzIGNoYW5nZWRcbiIpOwotICAgIGJ1aWxkUGhvbmVOdW1iZXJI
aWdobGlnaHRzKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Ojptb3VzZUlzT3ZlckhpZ2hsaWdodChIaWdobGlnaHQmIGhpZ2hsaWdodCwgYm9vbCYgbW91c2VJ
c092ZXJCdXR0b24pIGNvbnN0Ci17Ci0gICAgQm9vbGVhbiBvbkJ1dHRvbjsKLSAgICBib29sIGhv
dmVyZWQgPSBEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodChoaWdobGlnaHQuZGRIaWdobGln
aHQoKSwgKENHUG9pbnQpbV9tb3VzZVBvc2l0aW9uLCAmb25CdXR0b24pOwotICAgIG1vdXNlSXNP
dmVyQnV0dG9uID0gb25CdXR0b247Ci0gICAgcmV0dXJuIGhvdmVyZWQ7Ci19Ci0KLXN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtYWluaW5nVGlt
ZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bihIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QK
LXsKLSAgICBpZiAoIWhpZ2hsaWdodCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Onplcm8oKTsKLQotICAgIGF1dG8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNo
b3VsZEJlU2hvd24gPSAyMDBfbXM7Ci0gICAgaWYgKG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICAgICBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0
U2hvdWxkQmVTaG93biA9IDEwMDBfbXM7Ci0KLSAgICBib29sIG1vdXNlUHJlc3NlZCA9IGZhbHNl
OwotICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJQYWdlLm1haW5GcmFtZSgpKQotICAg
ICAgICBtb3VzZVByZXNzZWQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3Nl
ZCgpOwotCi0gICAgLy8gSGlnaGxpZ2h0IGh5c3RlcmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9u
IHNlcnZpY2VzLCBiZWNhdXNlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFk
eSBtdWNoIG1vcmUgc3RhYmxlCi0gICAgLy8gYnkgdmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRv
IGluY2x1ZGUgdGhlIGVudGlyZSB0ZWxlcGhvbmUgbnVtYmVyLiBIb3dldmVyLCB3ZSB3aWxsIHN0
aWxsIGF2b2lkIGhpZ2hsaWdodGluZwotICAgIC8vIHRlbGVwaG9uZSBudW1iZXJzIHdoaWxlIHRo
ZSBtb3VzZSBpcyBkb3duLgotICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6
OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKLSAgICAgICAgcmV0dXJuIG1vdXNlUHJlc3NlZCA/IG1p
bmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duIDogMF9tczsKLQotICAgIGF1dG8g
bm93ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0gICAgYXV0byB0aW1lU2lu
Y2VMYXN0U2VsZWN0aW9uQ2hhbmdlID0gbm93IC0gbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsK
LSAgICBhdXRvIHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2ZSA9IG5vdyAtIG1fbmV4dEFj
dGl2ZUhpZ2hsaWdodENoYW5nZVRpbWU7Ci0gICAgYXV0byB0aW1lU2luY2VMYXN0TW91c2VVcCA9
IG1vdXNlUHJlc3NlZCA/IDBfbXMgOiBub3cgLSBtX2xhc3RNb3VzZVVwVGltZTsKLQotICAgIGF1
dG8gcmVtYWluaW5nRGVsYXkgPSBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93
biAtIHN0ZDo6bWluKHN0ZDo6bWluKHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UsIHRpbWVT
aW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2ZSksIHRpbWVTaW5jZUxhc3RNb3VzZVVwKTsKLSAgICBy
ZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cz4ocmVtYWluaW5nRGVsYXkpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGltZXI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcj4mKQotewotICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247Ci0gICAgZGV0ZXJt
aW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKLX0KLQotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsK
LX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpjbGVhckFjdGl2ZUhpZ2hsaWdo
dCgpCi17Ci0gICAgaWYgKCFtX2FjdGl2ZUhpZ2hsaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID09IG1fYWN0aXZlSGln
aGxpZ2h0KQotICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51
bGxwdHI7Ci0gICAgbV9hY3RpdmVIaWdobGlnaHQgPSBudWxscHRyOwotfQotCi12b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUo
SGlnaGxpZ2h0OjpUeXBlIHR5cGUpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxIaWdobGlnaHQ+PiBo
aWdobGlnaHRzVG9SZW1vdmU7Ci0gICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBtX3BvdGVudGlh
bEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IHR5cGUpCi0g
ICAgICAgICAgICBoaWdobGlnaHRzVG9SZW1vdmUuYXBwZW5kKGhpZ2hsaWdodCk7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKCFoaWdobGlnaHRzVG9SZW1vdmUuaXNFbXB0eSgpKQotICAgICAgICBtX3Bv
dGVudGlhbEhpZ2hsaWdodHMucmVtb3ZlKGhpZ2hsaWdodHNUb1JlbW92ZS50YWtlTGFzdCgpKTsK
LX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25lTnVtYmVySGln
aGxpZ2h0cygpCi17Ci0gICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBuZXdQb3RlbnRpYWxIaWdo
bGlnaHRzOwotCi0gICAgRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViUGFnZS5tYWluRnJhbWUoKTsK
LSAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbWFpbkZyYW1lLT52aWV3KCk7Ci0KLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBhdXRvJiByYW5nZXMgPSBmcmFtZS0+ZWRp
dG9yKCkuZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsKLSAgICAgICAgZm9yIChhdXRv
JiByYW5nZSA6IHJhbmdlcykgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaG9r
ZSBpZiB0aGUgcmFuZ2Ugd3JhcHMgYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSB2aWV3LgotICAgICAg
ICAgICAgLy8gV2hhdCBzaG91bGQgd2UgZG8gaW4gdGhhdCBjYXNlPwotICAgICAgICAgICAgSW50
UmVjdCByZWN0ID0gdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZSgqcmFuZ2UpOwotCi0g
ICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwg
Y29udGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3aW5kb3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdl
dCB0aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBj
b25zaWRlciBhZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29u
dGVudHNUb0RvY3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKLSAg
ICAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZl
IGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KLSAgICAgICAgICAgIEZyYW1l
Vmlldyogdmlld0ZvclJhbmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Ci0gICAg
ICAgICAgICBpZiAoIXZpZXdGb3JSYW5nZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRz
KHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7Ci0KLSAg
ICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0OwotICAgICAgICAgICAgUmV0YWluUHRyPERE
SGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRo
UmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsICZjZ1JlY3Qs
IDEsIG1haW5GcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCksIERESGlnaGxpZ2h0T3V0bGlu
ZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7Ci0K
LSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRl
Rm9yVGVsZXBob25lTnVtYmVyKCp0aGlzLCBkZEhpZ2hsaWdodCwgcmFuZ2UpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxl
bnRIaWdobGlnaHRzKG5ld1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hsaWdodDo6VHlwZTo6VGVs
ZXBob25lTnVtYmVyKTsKLQotICAgIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7Ci19
Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQoKQotewotICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4gbmV3UG90ZW50aWFsSGlnaGxpZ2h0
czsKLQotICAgIFZlY3RvcjxDR1JlY3Q+IGNnUmVjdHM7Ci0gICAgY2dSZWN0cy5yZXNlcnZlQ2Fw
YWNpdHkobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMuc2l6ZSgpKTsKLQotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0aW9uUmFuZ2UgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSkgewotICAgICAgICBGcmFtZSogbWFp
bkZyYW1lID0gbV93ZWJQYWdlLm1haW5GcmFtZSgpOwotICAgICAgICBGcmFtZVZpZXcmIG1haW5G
cmFtZVZpZXcgPSAqbWFpbkZyYW1lLT52aWV3KCk7Ci0gICAgICAgIEZyYW1lVmlldyogdmlld0Zv
clJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Ci0KLSAgICAg
ICAgZm9yIChhdXRvJiByZWN0IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKLSAgICAgICAg
ICAgIEludFJlY3QgY3VycmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKLSAgICAgICAg
ICAgIGN1cnJlbnRSZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50
cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3coY3VycmVudFJlY3QubG9jYXRpb24oKSkp
KTsKLSAgICAgICAgICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpY3VycmVudFJlY3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Q0dSZWN0IHZpc2libGVSZWN0ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdo
bGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0
c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdp
bigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0
aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0
OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZSkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2
aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0
OjpUeXBlOjpTZWxlY3Rpb24pOwotCi0gICAgZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMo
KTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZXBsYWNlSGlnaGxpZ2h0
c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdo
bGlnaHQ+PiYgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUeXBlIHR5cGUpCi17
Ci0gICAgLy8gSWYgYW55IG9sZCBIaWdobGlnaHRzIGFyZSBlcXVpdmFsZW50IChieSBSYW5nZSkg
dG8gYSBuZXcgSGlnaGxpZ2h0LCByZXVzZSB0aGUgb2xkCi0gICAgLy8gb25lIHNvIHRoYXQgYW55
IG1ldGFkYXRhIGlzIHJldGFpbmVkLgotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IHJl
dXNlZFBvdGVudGlhbEhpZ2hsaWdodHM7Ci0KLSAgICBmb3IgKGF1dG8mIG9sZEhpZ2hsaWdodCA6
IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAob2xkSGlnaGxpZ2h0LT50eXBl
KCkgIT0gdHlwZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoYXV0byYg
bmV3SGlnaGxpZ2h0IDogbmV3UG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICAgICAgaWYg
KGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KG9sZEhpZ2hsaWdodC5nZXQoKSwgbmV3SGlnaGxpZ2h0
LmdldCgpKSkgewotICAgICAgICAgICAgICAgIG9sZEhpZ2hsaWdodC0+c2V0RERIaWdobGlnaHQo
bmV3SGlnaGxpZ2h0LT5kZEhpZ2hsaWdodCgpKTsKLQotICAgICAgICAgICAgICAgIHJldXNlZFBv
dGVudGlhbEhpZ2hsaWdodHMuYWRkKG9sZEhpZ2hsaWdodCk7Ci0gICAgICAgICAgICAgICAgbmV3
UG90ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUobmV3SGlnaGxpZ2h0KTsKLQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVtb3Zl
QWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZSh0eXBlKTsKLQotICAgIG1fcG90ZW50aWFsSGln
aGxpZ2h0cy5hZGQobmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCBuZXdQb3RlbnRpYWxI
aWdobGlnaHRzLmVuZCgpKTsKLSAgICBtX3BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKHJldXNlZFBv
dGVudGlhbEhpZ2hsaWdodHMuYmVnaW4oKSwgcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5lbmQo
KSk7Ci19Ci0KLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFzUmVsZXZhbnRTZWxl
Y3Rpb25TZXJ2aWNlcygpCi17Ci0gICAgcmV0dXJuIChtX2lzVGV4dE9ubHkgJiYgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuaGFzU2VsZWN0aW9uU2VydmljZXMoKSkgfHwgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKLXsKLSAgICBpZiAobV9w
b3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9zZXJ2aWNlc092
ZXJsYXkpCi0gICAgICAgICAgICBtX3dlYlBhZ2UubWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5LCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAodGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkuaXNFbXB0eSgpICYm
ICFoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsK
LSAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJCdXR0b24pOwotfQotCi12
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKLSAgICBtX3NlcnZpY2VzT3ZlcmxheSA9
IG92ZXJsYXkuZ2V0KCk7Ci0gICAgbV93ZWJQYWdlLm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxSYW5nZT4+IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRG
cmFtZSgpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpOwotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PigpOwotCi0gICAg
cmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmVkaXRv
cigpLmRldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7Ci19Ci0KLWJvb2wgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6aGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29uc3QgSGlnaGxpZ2h0
KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpCi17Ci0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChhLT50eXBlKCkgPT0gYi0+dHlwZSgpICYmIGFyZVJhbmdlc0VxdWFsKGEtPnJhbmdl
KCksIGItPnJhbmdlKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1Nl
bGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQmIHNlbGVjdGlvbkhpZ2hsaWdodCkKLXsKLSAgICBp
ZiAoc2VsZWN0aW9uSGlnaGxpZ2h0LnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlv
bikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJl
ZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGln
aHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5cGU6
OlRlbGVwaG9uZU51bWJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICho
aWdobGlnaHQtPnJhbmdlKCktPmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCi0gICAg
ICAgICAgICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOwotICAgIH0KLQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2
ZUhpZ2hsaWdodChib29sJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKLXsKLSAg
ICBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOwotCi0gICAgUmVmUHRy
PEhpZ2hsaWdodD4gbmV3QWN0aXZlSGlnaGxpZ2h0OwotCi0gICAgZm9yIChhdXRvJiBoaWdobGln
aHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlw
ZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJZiB3
ZSd2ZSBhbHJlYWR5IGZvdW5kIGEgbmV3IGFjdGl2ZSBoaWdobGlnaHQsIGFuZCBpdCdzCi0gICAg
ICAgICAgICAvLyBhIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0LCBwcmVmZXIgdGhhdCBvdmVy
IHRoaXMgc2VsZWN0aW9uIGhpZ2hsaWdodC4KLSAgICAgICAgICAgIGlmIChuZXdBY3RpdmVIaWdo
bGlnaHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpU
ZWxlcGhvbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IC8vIElmIHRoaXMgaGlnaGxpZ2h0IGhhcyBubyBjb21wYXRpYmxlIHNlcnZpY2VzLCBpdCBjYW4n
dCBiZSBhY3RpdmUuCi0gICAgICAgICAgICBpZiAoIWhhc1JlbGV2YW50U2VsZWN0aW9uU2Vydmlj
ZXMoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IElmIHRoaXMgaGlnaGxpZ2h0IGlzbid0IGhvdmVyZWQsIGl0IGNhbid0IGJlIGFjdGl2ZS4KLSAg
ICAgICAgYm9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsKLSAgICAgICAgaWYgKCFtb3VzZUlzT3Zlckhp
Z2hsaWdodCgqaGlnaGxpZ2h0LCBtb3VzZUlzT3ZlckJ1dHRvbikpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBoaWdobGlnaHQ7Ci0gICAgICAg
IG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gbW91c2VJc092ZXJCdXR0b247Ci0g
ICAgfQotCi0gICAgLy8gSWYgb3VyIG5ldyBhY3RpdmUgaGlnaGxpZ2h0IGlzIGEgc2VsZWN0aW9u
IGhpZ2hsaWdodCB0aGF0IGlzIGNvbXBsZXRlbHkgY29udGFpbmVkCi0gICAgLy8gYnkgb25lIG9m
IHRoZSBwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cywgd2UnbGwgbWFrZSB0aGUgcGhvbmUgbnVtYmVy
IGhpZ2hsaWdodCBhY3RpdmUgZXZlbiBpZiBpdCdzIG5vdCBob3ZlcmVkLgotICAgIGlmIChuZXdB
Y3RpdmVIaWdobGlnaHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0
OjpUeXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgaWYgKEhpZ2hsaWdodCogY29udGFpbmVkVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0ID0gZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRh
aW5pbmdTZWxlY3Rpb25IaWdobGlnaHQoKm5ld0FjdGl2ZUhpZ2hsaWdodCkpIHsKLSAgICAgICAg
ICAgIG5ld0FjdGl2ZUhpZ2hsaWdodCA9IGNvbnRhaW5lZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdo
dDsKLQotICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaW5pdGlhbGx5IGNob29zZSB0aGUg
dGVsZXBob25lIG51bWJlciBoaWdobGlnaHQgb3ZlciB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCBp
ZiB0aGUKLSAgICAgICAgICAgIC8vIG1vdXNlIGlzIG92ZXIgdGhlIHRlbGVwaG9uZSBudW1iZXIg
aGlnaGxpZ2h0J3MgYnV0dG9uLCBzbyB3ZSBrbm93IHRoYXQgaXQncyBub3QgaG92ZXJlZCBpZiB3
ZSBnb3QgaGVyZS4KLSAgICAgICAgICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9u
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXRoaXMtPmhpZ2hsaWdodHNB
cmVFcXVpdmFsZW50KG1fYWN0aXZlSGlnaGxpZ2h0LmdldCgpLCBuZXdBY3RpdmVIaWdobGlnaHQu
Z2V0KCkpKSB7Ci0gICAgICAgIC8vIFdoZW4gdHJhbnNpdGlvbmluZyB0byBhIG5ldyBoaWdobGln
aHQsIHdlIG1pZ2h0IGVuZCB1cCBpbiBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQgbXVsdGlwbGUg
dGltZXMKLSAgICAgICAgLy8gYmVmb3JlIHRoZSBuZXcgaGlnaGxpZ2h0IGFjdHVhbGx5IGJlY29t
ZXMgYWN0aXZlLiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IG5leHQtYnV0LW5vdC15ZXQtYWN0aXZl
Ci0gICAgICAgIC8vIGhpZ2hsaWdodCwgYW5kIG9ubHkgcmVzZXQgdGhlIGFjdGl2ZSBoaWdobGln
aHQgaHlzdGVyZXNpcyB3aGVuIHRoYXQgY2hhbmdlcy4KLSAgICAgICAgaWYgKG1fbmV4dEFjdGl2
ZUhpZ2hsaWdodCAhPSBuZXdBY3RpdmVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIG1fbmV4dEFj
dGl2ZUhpZ2hsaWdodCA9IG5ld0FjdGl2ZUhpZ2hsaWdodDsKLSAgICAgICAgICAgIG1fbmV4dEFj
dGl2ZUhpZ2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3co
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxp
Z2h0ID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKLSAgICAg
ICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0LT5mYWRlT3V0KCk7Ci0gICAgICAgICAgICBtX2FjdGl2
ZUhpZ2hsaWdodCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHJlbWFpbmlu
Z1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSB0aGlzLT5yZW1haW5pbmdUaW1lVW50
aWxIaWdobGlnaHRTaG91bGRCZVNob3duKG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSk7Ci0gICAg
ICAgIGlmIChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID4gc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb246Onplcm8oKSkgewotICAgICAgICAgICAgbV9k
ZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lci5zdGFydE9uZVNob3QocmVtYWluaW5nVGltZVVu
dGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodC5y
ZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAg
ICBtX3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+
bGF5ZXIoKSk7Ci0gICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VF
dmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCi17Ci0g
ICAgbV9tb3VzZVBvc2l0aW9uID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgYm9vbCBt
b3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOwotICAgIGRldGVybWluZUFj
dGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbik7Ci0KLSAgICAv
LyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBpZiBhbnkgYnV0dG9uIG90aGVyIHRoYW4gdGhl
IGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFuZCBpZ25vcmUgdGhlIGV2ZW50LgotICAgIGlm
IChldmVudC5idXR0b24oKSAhPSBNb3VzZUJ1dHRvbjo6TGVmdEJ1dHRvbikgewotICAgICAgICBt
X2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgbW91c2UgbGlmdGVkIHdoaWxlIHN0
aWxsIG92ZXIgdGhlIGhpZ2hsaWdodCBidXR0b24gdGhhdCBpdCB3ZW50IGRvd24gb24sIHRoZW4g
dGhhdCBpcyBhIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6
TW91c2VSZWxlYXNlZCkgewotICAgICAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtb3VzZURvd25IaWdo
bGlnaHQgPSBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKLSAgICAgICAgbV9j
dXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotCi0gICAgICAgIG1f
bGFzdE1vdXNlVXBUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0KLSAg
ICAgICAgaWYgKG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uICYmIG1vdXNlRG93bkhp
Z2hsaWdodCkgewotICAgICAgICAgICAgaGFuZGxlQ2xpY2sobV9tb3VzZVBvc2l0aW9uLCAqbW91
c2VEb3duSGlnaGxpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG1v
dXNlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGJ1dHRvbiB0cmFja2luZyBhIHBvdGVudGlhbCBjbGlj
aywgc3RvcCB0cmFja2luZyB0aGUgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpNb3VzZU1vdmVkKSB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24gb3ZlciB0aGUgYWN0aXZlIGhpZ2hsaWdodCdz
IGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVudGlhbCBjbGljay4KLSAgICBpZiAoZXZlbnQu
dHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCkgewotICAgICAgICBpZiAobV9h
Y3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pIHsKLSAg
ICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbV9hY3RpdmVI
aWdobGlnaHQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFt
ZSYgZnJhbWUpCi17Ci0gICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7Ci0gICAgYnVpbGRTZWxlY3Rp
b25IaWdobGlnaHQoKTsKLQotICAgIGJvb2wgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0
b247Ci0gICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxp
Z2h0QnV0dG9uKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVD
bGljayhjb25zdCBJbnRQb2ludCYgY2xpY2tQb2ludCwgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCi17
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpOwot
ICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCB3aW5k
b3dQb2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhjbGlja1BvaW50KTsKLQotICAg
IGlmIChoaWdobGlnaHQudHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7Ci0g
ICAgICAgIGF1dG8gdGVsZXBob25lTnVtYmVyUmFuZ2VzID0gdGVsZXBob25lTnVtYmVyUmFuZ2Vz
Rm9yRm9jdXNlZEZyYW1lKCk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkVGVsZXBo
b25lTnVtYmVyczsKLSAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJlc2VydmVDYXBh
Y2l0eSh0ZWxlcGhvbmVOdW1iZXJSYW5nZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBy
YW5nZSA6IHRlbGVwaG9uZU51bWJlclJhbmdlcykKLSAgICAgICAgICAgIHNlbGVjdGVkVGVsZXBo
b25lTnVtYmVycy5hcHBlbmQocmFuZ2UtPnRleHQoKSk7Ci0KLSAgICAgICAgbV93ZWJQYWdlLmhh
bmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBo
b25lTnVtYmVycywgd2luZG93UG9pbnQpOwotICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUo
KSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKLSAgICAgICAgbV93ZWJQYWdl
LmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGhpZ2hsaWdodC5yYW5nZSgpLT50ZXh0KCksIHdp
bmRvd1BvaW50KTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRDcmVh
dGVIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAgQVNTRVJUKCFtX2hpZ2hs
aWdodHMuY29udGFpbnMoaGlnaGxpZ2h0KSk7Ci0gICAgbV9oaWdobGlnaHRzLmFkZChoaWdobGln
aHQpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxEZXN0cm95SGln
aGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KQotewotICAgIEFTU0VSVChtX2hpZ2hsaWdodHMu
Y29udGFpbnMoaGlnaGxpZ2h0KSk7Ci0gICAgbV9oaWdobGlnaHRzLnJlbW92ZShoaWdobGlnaHQp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vICNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQ
TEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239360</attachid>
            <date>2014-10-06 14:56:22 -0700</date>
            <delta_ts>2014-10-09 12:28:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>services-core.diff</filename>
            <type>text/plain</type>
            <size>110198</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5NTNhMzBmLi5mNDc1MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTQtMTAtMDYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIHRvIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQxNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTg1NDYyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIGZyb20g
V2ViS2l0MiB0byBXZWJDb3JlLCBhcyBpdCBjYW4gYmUgdXNlZCBieSBib3RoIExlZ2FjeSBXZWJL
aXQgYW5kIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6fk5vdGlmaWVyKToKKyAgICAgICAgTm90aWZ5IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcyB2aWEgUGFnZSBpbnN0ZWFkIG9mIEVk
aXRvckNsaWVudC4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2
aWNlcyk6CisgICAgICAgIEFkZCBDaHJvbWVDbGllbnQgZnVuY3Rpb25zIGZvciBzZXJ2aWNlcyBh
Y3Rpb25zLgorCisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6c2VsZWN0aW9uUmVjdHNE
aWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgRWRpdG9yQ2xpZW50IGZ1bmN0aW9u
cyBmb3Igbm90aWZ5aW5nIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcywKKyAg
ICAgICAgYmVjYXVzZSBpdCBsaXZlcyBpbiBXZWJDb3JlIHByb3BlciBub3cuCisKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgS2VlcCBhIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb24g
UGFnZS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICBVc2Ugd2luZG93VG9Db250ZW50
cyBpbnN0ZWFkIG9mIHJvb3RWaWV3VG9Db250ZW50czsgZXZlbnRzIGNvbWUgaW4gaW4gd2luZG93
IGNvb3JkaW5hdGVzLgorCisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjoKKyAgICAgICAgQWRk
IHNlcnZpY2VzQ29udHJvbHNFbmFibGVkIHNldHRpbmcuCisKKyAgICAgICAgKiBwYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oLgorICAgICAgICAq
IHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0uCisgICAgICAgIE1vdmVkIGZyb20gV2ViS2l0Mi4gTW9zdGx5IG1lY2hhbmljYWwgY2hh
bmdlcywgcGx1czoKKyAgICAgICAgICAgIC0gVXNlIHdpbmRvd1RvQ29udGVudHMgaW5zdGVhZCBv
ZiByb290Vmlld1RvQ29udGVudHM7IGV2ZW50cyBjb21lIGluIGluIHdpbmRvdyBjb29yZGluYXRl
cy4KKyAgICAgICAgICAgIC0gQ3V0IG9mZiByZWJ1aWxkKiBpZiBzZXJ2aWNlQ29udHJvbHNFbmFi
bGVkIHNldHRpbmcgaXMgZmFsc2UKKyAgICAgICAgICAgIC0gRG9uJ3QgY3JlYXRlIHRoZSBvdmVy
bGF5IGlmIHNlcnZpY2VDb250cm9sc0VuYWJsZWQgc2V0dGluZyBpcyBmYWxzZQorICAgICAgICAg
ICAgLSBTZW5kIGNsaWNrIGV2ZW50cyB2aWEgQ2hyb21lQ2xpZW50LgorCisgICAgICAgICogcGxh
dGZvcm0vTG9nZ2luZy5oOgorICAgICAgICBBZGQgU2VydmljZXMgbG9nZ2luZyBjaGFubmVsICht
b3ZlZCBmcm9tIFdlYktpdDIpLgorCiAyMDE0LTEwLTA2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNvbWUgY29tcG9zaXRpbmcgbG9naWMgY2xlYW51
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGNmMDdjZWMuLmJmNTE1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMDYsNiArMTEwNiw4IEBACiAJCTJEOEZF
QkREMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4RkVCREIxNDNFM0VGNzAwNzI1MDJC
IC8qIENTU0Nyb3NzZmFkZVZhbHVlLmggKi87IH07CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5
OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICov
OyB9OwogCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQw
MDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTJEOTNBRUUzMTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDkzQUVFMTE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5oICovOyB9OworCQkyRDkzQUVFNDE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEOTNBRUUyMTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tICovOyB9OwogCQkyRDk3RjA0NzE5REQ0MTNDMDAxRUU5QzMgLyogTW9ja1BhZ2VPdmVy
bGF5Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEQUFFMzJDMTlEQ0FGNjAwMEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3Bw
ICovOyB9OwogCQkyRDk3RjA0ODE5REQ0MTQwMDAxRUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFB
RTMyRDE5RENBRjYwMDBFMDAyRDIgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmggKi87IH07CiAJ
CTJEOUEyNDZFMTVCOUJEMDAwMEQzNDUyNyAvKiBET01TZWN1cml0eVBvbGljeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QTI0NkIxNUI5QkJERDAw
RDM0NTI3IC8qIERPTVNlY3VyaXR5UG9saWN5LmggKi87IH07CkBAIC04MTA2LDYgKzgxMDgsOCBA
QAogCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDkwNjYwQzA2NjVEOTM3MDA2QjZGMUEgLyog
RGF0YVRyYW5zZmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YVRyYW5zZmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJMkQ5M0FFRTExOURGNTY0
MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyRDkzQUVFMjE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEOUEyNDZBMTVCOUJCREQwMEQzNDUyNyAvKiBET01TZWN1cml0eVBvbGljeS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01TZWN1cml0eVBvbGljeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUEyNDZCMTVCOUJCREQwMEQzNDUy
NyAvKiBET01TZWN1cml0eVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBET01TZWN1cml0eVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlB
MjQ3MDE1QjlDMjk1MDBEMzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQb2xpY3kuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9NU2VjdXJpdHlQb2xpY3kuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTUzLDYgKzE3NTU3LDggQEAKIAkJCQlBNzE4Nzg4RjBC
MkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJOTNDMDlBN0Uw
QjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSAqLywKIAkJCQkxQzI2NDk3QjBE
N0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAgKi8sCisJCQkJMkQ5M0FFRTExOURGNTY0MTAw
MkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkyRDkzQUVFMjE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSAqLywKIAkJCQlF
MUMyRjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi8sCiAJCQkJMjYyNTVG
MDIxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudE1hYy5tbSAqLywKIAkJCQlGNTg3ODU0QzAy
REUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovLApAQCAtMjM0OTQsNiArMjM1
MDAsNyBAQAogCQkJCUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsTWVyZ2VyTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5u
ZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkw
RDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDkzQUVFMzE5REY1
NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAv
KiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VG
MjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NDAwLDYgKzI4
NDA3LDcgQEAKIAkJCQlFMUE1Rjk5QjBFN0VBQTI1MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5l
bEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTc5M0VDODBEMENFNzJEMDA3RkMwQUMg
LyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEwQjdFNzIxMDQ1RkFC
MDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJEOTNBRUU0MTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBREVEREIwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2Fn
ZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8q
IEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDIwOURB
MkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAppbmRleCA0YTdhZmQ4Li40MmFmNzUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDbGVhclRleHRDb21tYW5kIDogcHVibGljIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQgewpA
QCAtMzMzOSw3ICszMzQzLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhv
bmVOdW1iZXJzKFRpbWVyPEVkaXRvcj4mKQogCiB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZv
clRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVt
YmVycygpIHx8ICFjbGllbnQoKSkKKyAgICBpZiAoIXNob3VsZERldGVjdFRlbGVwaG9uZU51bWJl
cnMoKSB8fCAhY2xpZW50KCkgfHwgIW1fZnJhbWUucGFnZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CkBAIC0zMzQ4LDcg
KzMzNTIsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMo
KQogCiAgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBjbGll
bnQoKS0+c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CisgICAgICAgIG1f
ZnJhbWUucGFnZSgpLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhv
bmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKQEAgLTMzNzYsNyArMzM4MCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJhbmdlPiBleHRlbmRlZFJhbmdlID0gZXh0
ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRS
YW5nZSkgewotICAgICAgICBjbGllbnQoKS0+c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7CisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5zZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTMzODgsNyArMzM5Miw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgfQogCi0gICAgY2xpZW50KCktPnNl
bGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOworICAgIG1fZnJhbWUucGFnZSgp
LT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1i
ZXJzKFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVmVjdG9yPFJl
ZlB0cjxSYW5nZT4+JiBtYXJrZWRSYW5nZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKaW5kZXggYTY1ZjdiZS4uOWJmZjMyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcApAQCAt
MjYsMTIgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmgiCiAKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKwogI2luY2x1
ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQorI2luY2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCw4ICs3Miw4IEBAIFNlbGVjdGlv
blJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6Ok5vdGlmaWVyKFNlbGVjdGlvblJlY3RHYXRoZXJlciYg
Z2F0aGVyZXIpCiAKIFNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6On5Ob3RpZmllcigp
CiB7Ci0gICAgaWYgKEVkaXRvckNsaWVudCogY2xpZW50ID0gbV9nYXRoZXJlci5tX3JlbmRlclZp
ZXcudmlldygpLmZyYW1lKCkuZWRpdG9yKCkuY2xpZW50KCkpCi0gICAgICAgIGNsaWVudC0+c2Vs
ZWN0aW9uUmVjdHNEaWRDaGFuZ2UobV9nYXRoZXJlci5tX3JlY3RzLCBtX2dhdGhlcmVyLm1fZ2Fw
UmVjdHMsIG1fZ2F0aGVyZXIuaXNUZXh0T25seSgpKTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1f
Z2F0aGVyZXIubV9yZW5kZXJWaWV3LnZpZXcoKS5mcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFn
ZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKG1f
Z2F0aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVyLmlzVGV4
dE9ubHkoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5v
dGlmaWVyPiBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggYmY1NjM0Zi4uNmM5NTRiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00MzYsNiArNDM2LDE0IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFZl
Y3Rvcjx1aW50OF90PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25T
ZXJ2aWNlcyhib29sIC8qIGlzVGV4dE9ubHkgKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDJiZTMwMTEuLmFjNGE4MjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMTgxLDExICsxODEsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgPSAwOwogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2Vk
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZl
Y3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mLCBib29sKSB7IH0KLSNl
bmRpZgotCiAgICAgLy8gU3VwcG9ydCBmb3IgZ2xvYmFsIHNlbGVjdGlvbnMsIHVzZWQgb24gcGxh
dGZvcm1zIGxpa2UgdGhlIFggV2luZG93IFN5c3RlbSB0aGF0IHRyZWF0CiAgICAgLy8gc2VsZWN0
aW9uIGFzIGEgdHlwZSBvZiBjbGlwYm9hcmQuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xv
YmFsU2VsZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDEx
MmU2OWUuLjkyYWQ1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTAwLDYgKzEwMCwxMCBAQAog
I2luY2x1ZGUgPHJlcGxheS9JbnB1dEN1cnNvci5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShN
QUMpCisjaW5jbHVkZSAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEhhc2hTZXQ8UGFnZSo+KiBhbGxQYWdlczsKQEAg
LTE0NCw2ICsxNDgsOSBAQCBQYWdlOjpQYWdlKFBhZ2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICNp
ZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgICwgbV9wb2ludGVyTG9ja0NvbnRyb2xsZXIoc3Rk
OjptYWtlX3VuaXF1ZTxQb2ludGVyTG9ja0NvbnRyb2xsZXI+KCp0aGlzKSkKICNlbmRpZgorI2lm
IChFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVU
RUNUSU9OKSkgJiYgUExBVEZPUk0oTUFDKQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyKHN0ZDo6bWFrZV91bmlxdWU8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQor
I2VuZGlmCiAgICAgLCBtX3NldHRpbmdzKFNldHRpbmdzOjpjcmVhdGUodGhpcykpCiAgICAgLCBt
X3Byb2dyZXNzKHN0ZDo6bWFrZV91bmlxdWU8UHJvZ3Jlc3NUcmFja2VyPigqcGFnZUNsaWVudHMu
cHJvZ3Jlc3NUcmFja2VyQ2xpZW50KSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKHN0
ZDo6bWFrZV91bmlxdWU8QmFja0ZvcndhcmRDb250cm9sbGVyPigqdGhpcywgcGFnZUNsaWVudHMu
YmFja0ZvcndhcmRDbGllbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBjOTI3ZTIxLi41YjMyMTMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaApAQCAtOTgsNiArOTgsNyBAQCBjbGFzcyBSZXBsYXlDb250cm9sbGVyOwog
Y2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I7CitjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogY2xh
c3MgU2V0dGluZ3M7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgVXNlckNvbnRlbnRD
b250cm9sbGVyOwpAQCAtMjA5LDYgKzIxMCw5IEBAIHB1YmxpYzoKICAgICBQb2ludGVyTG9ja0Nv
bnRyb2xsZXImIHBvaW50ZXJMb2NrQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3BvaW50
ZXJMb2NrQ29udHJvbGxlcjsgfQogI2VuZGlmCiAgICAgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQq
IHZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0aW9uTWVz
c2FnZUNsaWVudDsgfQorI2lmIChFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkgJiYgUExBVEZPUk0oTUFDKQorICAgIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXImIHNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKSBjb25zdCB7IHJl
dHVybiAqbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOyB9CisjZW5kaWYKIAogICAgIFdFQkNP
UkVfRVhQT1JUIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcigpOwog
CkBAIC00OTAsNiArNDk0LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8
UG9pbnRlckxvY2tDb250cm9sbGVyPiBtX3BvaW50ZXJMb2NrQ29udHJvbGxlcjsKICNlbmRpZgog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxp
bmdDb29yZGluYXRvcjsKKyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShU
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKyAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOworI2VuZGlmCiAKICAgICBjb25zdCBSZWZQdHI8U2V0dGluZ3M+IG1fc2V0
dGluZ3M7CiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFByb2dyZXNzVHJhY2tlcj4gbV9wcm9n
cmVzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKaW5kZXggN2I2Mjc1Yy4uOWU4YWMx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBi
b29sIFBhZ2VPdmVybGF5Ojptb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKICAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMo
bW91c2VFdmVudC5wb3NpdGlvbigpKTsKIAogICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VP
dmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCi0gICAgICAgIG1vdXNlUG9zaXRpb25Jbk92
ZXJsYXlDb29yZGluYXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1Rv
Q29udGVudHMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbW91
c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3
KCktPndpbmRvd1RvQ29udGVudHMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsK
IAogICAgIC8vIElnbm9yZSBldmVudHMgb3V0c2lkZSB0aGUgYm91bmRzLgogICAgIGlmICghYm91
bmRzKCkuY29udGFpbnMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmluCmluZGV4IDIyZjE1NGEuLjJmNWE1NDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5pbgpAQCAtMjMxLDMgKzIzMSw1IEBAIHVzZUltYWdlRG9jdW1lbnRGb3JTdWJmcmFtZVBE
RiBpbml0aWFsPWZhbHNlCiBtYXhpbXVtU291cmNlQnVmZmVyU2l6ZSB0eXBlPWludCwgaW5pdGlh
bD0zMTg3NjcxMDQsIGNvbmRpdGlvbmFsPU1FRElBX1NPVVJDRQogCiBsb25nTW91c2VQcmVzc0Vu
YWJsZWQgaW5pdGlhbD1mYWxzZQorCitzZXJ2aWNlQ29udHJvbHNFbmFibGVkIGluaXRpYWw9ZmFs
c2UsIGNvbmRpdGlvbmFsPVNFUlZJQ0VfQ09OVFJPTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lYzMxY2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyX2gKKyNkZWZp
bmUgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JN
KE1BQykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdl
T3ZlcmxheS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCit0eXBlZGVmIHN0cnVjdCBfX0RESGlnaGxpZ2h0IERE
SGlnaGxpZ2h0LCAqRERIaWdobGlnaHRSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IExheW91dFJlY3Q7CitzdHJ1Y3QgR2FwUmVjdHM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgUGFnZU92ZXJsYXk6
OkNsaWVudCB7CitwdWJsaWM6CisgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihQYWdlJik7
CisgICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CisgICAgdm9pZCBzZWxlY3Rpb25SZWN0c0Rp
ZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+
JiwgYm9vbCBpc1RleHRPbmx5KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBIaWdobGlnaHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5ZXJDbGllbnQg
eworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24o
U2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBh
c3NSZWZQdHI8UmFuZ2U+KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBj
cmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFp
blB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8UmFuZ2U+KTsKKyAgICAgICAgfkhpZ2hs
aWdodCgpOworCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgICAgIERESGlnaGxp
Z2h0UmVmIGRkSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5nZXQoKTsg
fQorICAgICAgICBSYW5nZSogcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdldCgpOyB9
CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGlj
c0xheWVyLmdldCgpOyB9CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAg
IFRlbGVwaG9uZU51bWJlciwKKyAgICAgICAgICAgIFNlbGVjdGlvbgorICAgICAgICB9OworICAg
ICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgICAgICB2b2lk
IGZhZGVJbigpOworICAgICAgICB2b2lkIGZhZGVPdXQoKTsKKworICAgICAgICB2b2lkIHNldERE
SGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxp
Y2l0IEhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0YWluUHRy
PERESGlnaGxpZ2h0UmVmPiwgUGFzc1JlZlB0cjxSYW5nZT4pOworCisgICAgICAgIC8vIEdyYXBo
aWNzTGF5ZXJDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQo
Y29uc3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwKSBvdmVycmlkZTsK
KyAgICAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgICAgIHZvaWQgZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpOworCisgICAgICAg
IFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gbV9kZEhpZ2hsaWdodDsKKyAgICAgICAgUmVmUHRy
PFJhbmdlPiBtX3JhbmdlOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4g
bV9ncmFwaGljc0xheWVyOworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIH07CisKKyAgICAvLyBQYWdlT3Zl
cmxheTo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VP
dmVybGF5Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VP
dmVybGF5JiwgUGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdl
KFBhZ2VPdmVybGF5JiwgUGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVj
dChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBj
cmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKKyAgICB2b2lkIGhhbmRsZUNsaWNrKGNvbnN0IEludFBv
aW50JiwgSGlnaGxpZ2h0Jik7CisKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQoSGlnaGxpZ2h0Jiwg
R3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICB2b2lkIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJl
c2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRzKEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+Jiwg
SGlnaGxpZ2h0OjpUeXBlKTsKKyAgICB2b2lkIHJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNP
ZlR5cGUoSGlnaGxpZ2h0OjpUeXBlKTsKKyAgICB2b2lkIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGln
aHRzKCk7CisgICAgdm9pZCBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOworICAgIHZvaWQgZGlk
UmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKTsKKworICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQnV0dG9uKTsKKyAgICB2b2lkIGNsZWFyQWN0aXZl
SGlnaGxpZ2h0KCk7CisgICAgSGlnaGxpZ2h0KiBhY3RpdmVIaWdobGlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2FjdGl2ZUhpZ2hsaWdodC5nZXQoKTsgfQorCisgICAgSGlnaGxpZ2h0KiBmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGln
aHQmKTsKKworICAgIGJvb2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpOworCisgICAg
Ym9vbCBtb3VzZUlzT3ZlckhpZ2hsaWdodChIaWdobGlnaHQmLCBib29sJiBtb3VzZUlzT3ZlckJ1
dHRvbikgY29uc3Q7CisgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyByZW1haW5pbmdUaW1l
VW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKEhpZ2hsaWdodCopIGNvbnN0OworICAgIHZvaWQg
ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyPiYpOworCisgICAgc3RhdGljIGJvb2wgaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQo
Y29uc3QgSGlnaGxpZ2h0KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxSYW5nZT4+IHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOworCisg
ICAgdm9pZCBkaWRDcmVhdGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CisgICAgdm9pZCB3aWxsRGVz
dHJveUhpZ2hsaWdodChIaWdobGlnaHQqKTsKKyAgICB2b2lkIGRpZEZpbmlzaEZhZGluZ091dEhp
Z2hsaWdodChIaWdobGlnaHQqKTsKKworICAgIFBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2U7IH0KKworICAgIFBhZ2UmIG1fcGFnZTsKKyAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNl
c092ZXJsYXk7CisKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2FjdGl2ZUhpZ2hsaWdodDsKKyAg
ICBSZWZQdHI8SGlnaGxpZ2h0PiBtX25leHRBY3RpdmVIaWdobGlnaHQ7CisgICAgSGFzaFNldDxS
ZWZQdHI8SGlnaGxpZ2h0Pj4gbV9wb3RlbnRpYWxIaWdobGlnaHRzOworICAgIEhhc2hTZXQ8UmVm
UHRyPEhpZ2hsaWdodD4+IG1fYW5pbWF0aW5nSGlnaGxpZ2h0czsKKworICAgIEhhc2hTZXQ8SGln
aGxpZ2h0Kj4gbV9oaWdobGlnaHRzOworCisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBtb3Zl
IG9udG8gSGlnaGxpZ2h0LgorICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBtX2N1cnJlbnRTZWxlY3Rp
b25SZWN0czsKKyAgICBib29sIG1faXNUZXh0T25seTsKKworICAgIHN0ZDo6Y2hyb25vOjpzdGVh
ZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAgICBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodENo
YW5nZVRpbWU7CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2xh
c3RNb3VzZVVwVGltZTsKKworICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1fY3VycmVudE1vdXNlRG93
bk9uQnV0dG9uSGlnaGxpZ2h0OworICAgIEludFBvaW50IG1fbW91c2VQb3NpdGlvbjsKKworICAg
IFRpbWVyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxp
Z2h0VGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIChFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KSkgJiYgUExBVEZPUk0oTUFDKQorI2VuZGlmIC8vIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkNDM2ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KQEAgLTAsMCArMSw4MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCIKKworI2lmIChFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJDaHJvbWUuaCIKKyNpbXBvcnQgIkNocm9t
ZUNsaWVudC5oIgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkVkaXRvci5oIgorI2lt
cG9ydCAiRXZlbnRIYW5kbGVyLmgiCisjaW1wb3J0ICJGbG9hdFF1YWQuaCIKKyNpbXBvcnQgIkZv
Y3VzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkZy
YW1lVmlldy5oIgorI2ltcG9ydCAiR2FwUmVjdHMuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgorI2ltcG9ydCAiR3JhcGhpY3NMYXllckNB
LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNYWluRnJhbWUuaCIKKyNpbXBvcnQg
IlBhZ2UuaCIKKyNpbXBvcnQgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorI2ltcG9ydCAiUGxh
dGZvcm1DQUFuaW1hdGlvbk1hYy5oIgorI2ltcG9ydCAiU2V0dGluZ3MuaCIKKyNpbXBvcnQgIlNv
ZnRMaW5raW5nLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKworI2lmIF9f
aGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nLmg+KQorI2ltcG9y
dCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmcuaD4KKyNlbHNlCit0eXBlZGVmIHN0
cnVjdCBfX0RESGlnaGxpZ2h0IERESGlnaGxpZ2h0LCAqRERIaWdobGlnaHRSZWY7CisjZW5kaWYK
KworI2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nX1By
aXZhdGUuaD4pCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZ19Qcml2
YXRlLmg+CisjZW5kaWYKKworY29uc3QgZmxvYXQgaGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0
aW9uID0gMC4zOworCit0eXBlZGVmIE5TVUludGVnZXIgRERIaWdobGlnaHRTdHlsZTsKK3N0YXRp
YyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93ID0g
KDEgPDwgMTYpOworc3RhdGljIGNvbnN0IERESGlnaGxpZ2h0U3R5bGUgRERIaWdobGlnaHRPdXRs
aW5lV2l0aEFycm93ID0gKDEgPDwgMTYpIHwgMTsKKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVX
T1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnMpCitTT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERI
aWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9u
LCBEREhpZ2hsaWdodFJlZiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0dSZWN0KiByZWN0
cywgQ0ZJbmRleCBjb3VudCwgQ0dSZWN0IGdsb2JhbFZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0
eWxlIHN0eWxlLCBCb29sZWFuIHdpdGhBcnJvdywgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdE
aXJlY3Rpb24sIEJvb2xlYW4gZW5kc1dpdGhFT0wsIEJvb2xlYW4gZmxpcHBlZCksIChhbGxvY2F0
b3IsIHJlY3RzLCBjb3VudCwgZ2xvYmFsVmlzaWJsZVJlY3QsIHN0eWxlLCB3aXRoQXJyb3csIHdy
aXRpbmdEaXJlY3Rpb24sIGVuZHNXaXRoRU9MLCBmbGlwcGVkKSkKK1NPRlRfTElOSyhEYXRhRGV0
ZWN0b3JzLCBEREhpZ2hsaWdodEdldExheWVyV2l0aENvbnRleHQsIENHTGF5ZXJSZWYsIChEREhp
Z2hsaWdodFJlZiBoaWdobGlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KSwgKGhpZ2hsaWdodCwg
Y29udGV4dCkpCitTT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRCb3VuZGlu
Z1JlY3QsIENHUmVjdCwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCksIChoaWdobGlnaHQpKQor
U09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0UG9pbnRJc09uSGlnaGxpZ2h0LCBC
b29sZWFuLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR1BvaW50IHBvaW50LCBCb29sZWFu
KiBvbkJ1dHRvbiksIChoaWdobGlnaHQsIHBvaW50LCBvbkJ1dHRvbikpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGln
aHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0
aW9uKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFpblB0cjxEREhp
Z2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIFR5cGU6OlNlbGVjdGlv
biwgZGRIaWdobGlnaHQsIHJhbmdlKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGln
aHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBj
b250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVm
UHRyPFJhbmdlPiByYW5nZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChj
b250cm9sbGVyLCBUeXBlOjpUZWxlcGhvbmVOdW1iZXIsIGRkSGlnaGxpZ2h0LCByYW5nZSkpOwor
fQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OkhpZ2hsaWdodChTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBUeXBlIHR5cGUsIFJldGFpblB0cjxE
REhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJh
bmdlKQorICAgIDogbV9yYW5nZShyYW5nZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9j
b250cm9sbGVyKCZjb250cm9sbGVyKQoreworICAgIEFTU0VSVChkZEhpZ2hsaWdodCk7CisgICAg
QVNTRVJUKG1fcmFuZ2UpOworCisgICAgbV9ncmFwaGljc0xheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKGNvbnRyb2xsZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKworICAgIHNldERESGlnaGxpZ2h0KGRkSGlnaGxpZ2h0LmdldCgpKTsKKworICAgIC8v
IFNldCBkaXJlY3RseSBvbiB0aGUgUGxhdGZvcm1DQUxheWVyIHNvIHRoYXQgd2hlbiB3ZSBsZWF2
ZSB0aGUgJ2Zyb20nIHZhbHVlIGltcGxpY2l0CisgICAgLy8gaW4gb3VyIGFuaW1hdGlvbnMsIHdl
IGdldCB0aGUgcmlnaHQgaW5pdGlhbCB2YWx1ZSByZWdhcmRsZXNzIG9mIGZsdXNoIHRpbWluZy4K
KyAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPnNldE9w
YWNpdHkoMCk7CisKKyAgICBjb250cm9sbGVyLmRpZENyZWF0ZUhpZ2hsaWdodCh0aGlzKTsKK30K
KworU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0Ojp+SGlnaGxpZ2h0KCkKK3sK
KyAgICBpZiAobV9jb250cm9sbGVyKQorICAgICAgICBtX2NvbnRyb2xsZXItPndpbGxEZXN0cm95
SGlnaGxpZ2h0KHRoaXMpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodDo6c2V0RERIaWdobGlnaHQoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0KQoreworICAg
IGlmICghbV9jb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RkSGlnaGxpZ2h0
ID0gaGlnaGxpZ2h0OworCisgICAgaWYgKCFtX2RkSGlnaGxpZ2h0KQorICAgICAgICByZXR1cm47
CisKKyAgICBDR1JlY3QgaGlnaGxpZ2h0Qm91bmRpbmdSZWN0ID0gRERIaWdobGlnaHRHZXRCb3Vu
ZGluZ1JlY3QobV9kZEhpZ2hsaWdodC5nZXQoKSk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5vcmlnaW4pKTsKKyAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldFNpemUoRmxvYXRTaXplKGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5z
aXplKSk7CisKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6aW52YWxpZGF0ZSgpCit7
CisgICAgbGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fY29udHJvbGxlciA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0Ojpu
b3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQoreworICAgIGlmICghbV9j
b250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRyb2xsZXItPnBhZ2UoKS5j
aHJvbWUoKS5jbGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6cGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisK
KyAgICBDR0xheWVyUmVmIGhpZ2hsaWdodExheWVyID0gRERIaWdobGlnaHRHZXRMYXllcldpdGhD
b250ZXh0KGRkSGlnaGxpZ2h0KCksIGNnQ29udGV4dCk7CisgICAgQ0dSZWN0IGhpZ2hsaWdodEJv
dW5kaW5nUmVjdCA9IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KGRkSGlnaGxpZ2h0KCkpOwor
ICAgIGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKKworICAgIENH
Q29udGV4dERyYXdMYXllckluUmVjdChjZ0NvbnRleHQsIGhpZ2hsaWdodEJvdW5kaW5nUmVjdCwg
aGlnaGxpZ2h0TGF5ZXIpOworfQorCitmbG9hdCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpI
aWdobGlnaHQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gbV9jb250cm9sbGVyLT5wYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpIaWdobGlnaHQ6OmZhZGVJbigpCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRp
b24+IGFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAi
b3BhY2l0eSJdOworICAgIFthbmltYXRpb24gc2V0RHVyYXRpb246aGlnaGxpZ2h0RmFkZUFuaW1h
dGlvbkR1cmF0aW9uXTsKKyAgICBbYW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9y
d2FyZHNdOworICAgIFthbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpmYWxzZV07Cisg
ICAgW2FuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKKworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0
ZShhbmltYXRpb24uZ2V0KCkpOworICAgIHRvR3JhcGhpY3NMYXllckNBKGxheWVyKCkpLT5wbGF0
Zm9ybUNBTGF5ZXIoKS0+YWRkQW5pbWF0aW9uRm9yS2V5KCJGYWRlSGlnaGxpZ2h0SW4iLCBwbGF0
Zm9ybUFuaW1hdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0OjpmYWRlT3V0KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlv
bj4gYW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJv
cGFjaXR5Il07CisgICAgW2FuaW1hdGlvbiBzZXREdXJhdGlvbjpoaWdobGlnaHRGYWRlQW5pbWF0
aW9uRHVyYXRpb25dOworICAgIFthbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3
YXJkc107CisgICAgW2FuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOmZhbHNlXTsKKyAg
ICBbYW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworCisgICAgUmVmUHRyPEhpZ2hsaWdodD4gcmV0
YWluZWRTZWxmID0gdGhpczsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOltyZXRhaW5lZFNlbGZdICgpIHsKKyAgICAgICAg
cmV0YWluZWRTZWxmLT5kaWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgfV07CisKKyAg
ICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQbGF0Zm9y
bUNBQW5pbWF0aW9uTWFjOjpjcmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKKyAgICB0b0dyYXBoaWNz
TGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgi
RmFkZUhpZ2hsaWdodE91dCIsIHBsYXRmb3JtQW5pbWF0aW9uLmdldCgpKTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodDo6ZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2NvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRyb2xsZXItPmFjdGl2ZUhp
Z2hsaWdodCgpID09IHRoaXMpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyKCktPnJlbW92
ZUZyb21QYXJlbnQoKTsKK30KKworc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1Jl
Y3RGb3JSYW5nZShSYW5nZSYgcmFuZ2UpCit7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1
YWRzOworICAgIHJhbmdlLnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3Q7CisgICAgZm9yIChhdXRvJiBxdWFkIDogdGV4dFF1YWRzKQorICAgICAgICBib3Vu
ZGluZ1JlY3QudW5pdGUocXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChib3VuZGluZ1JlY3QpOworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKFBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkK
KyAgICAsIG1fc2VydmljZXNPdmVybGF5KG51bGxwdHIpCisgICAgLCBtX2lzVGV4dE9ubHkoZmFs
c2UpCisgICAgLCBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyKHRoaXMsICZTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lckZpcmVkKQor
eworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp+U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcigpCit7CisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBtX2hpZ2hsaWdodHMpCisgICAg
ICAgIGhpZ2hsaWdodC0+aW52YWxpZGF0ZSgpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKK3sKKyAgICAvLyBC
ZWZvcmUgdGhlIG92ZXJsYXkgaXMgZGVzdHJveWVkLCBpdCBzaG91bGQgaGF2ZSBtb3ZlZCBvdXQg
b2YgdGhlIFBhZ2UsCisgICAgLy8gYXQgd2hpY2ggcG9pbnQgd2UgYWxyZWFkeSBjbGVhcmVkIG91
ciBiYWNrIHBvaW50ZXIuCisgICAgQVNTRVJUKCFtX3NlcnZpY2VzT3ZlcmxheSk7Cit9CisKK3Zv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKiBwYWdlKQoreworICAgIGlmIChwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOworICAgIG1fc2VydmljZXNPdmVybGF5ID0gbnVsbHB0
cjsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBh
Z2VPdmVybGF5JiwgUGFnZSopCit7Cit9CisKK3N0YXRpYyBjb25zdCB1aW50OF90IEFsaWdubWVu
dE5vbmUgPSAwOworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50TGVmdCA9IDEgPDwgMDsK
K3N0YXRpYyBjb25zdCB1aW50OF90IEFsaWdubWVudFJpZ2h0ID0gMSA8PCAxOworCitzdGF0aWMg
dm9pZCBleHBhbmRGb3JHYXAoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgdWludDhfdCogYWxp
Z25tZW50cywgY29uc3QgR2FwUmVjdHMmIGdhcCkKK3sKKyAgICBpZiAoIWdhcC5sZWZ0KCkuaXNF
bXB0eSgpKSB7CisgICAgICAgIExheW91dFVuaXQgbGVmdEVkZ2UgPSBnYXAubGVmdCgpLngoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudExlZnQpCisgICAgICAgICAg
ICAgICAgcmVjdHNbaV0uc2hpZnRYRWRnZVRvKGxlZnRFZGdlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghZ2FwLnJpZ2h0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIExheW91dFVuaXQg
cmlnaHRFZGdlID0gZ2FwLnJpZ2h0KCkubWF4WCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhbGlnbm1lbnRz
W2ldICYgQWxpZ25tZW50UmlnaHQpCisgICAgICAgICAgICAgICAgcmVjdHNbaV0uc2hpZnRNYXhY
RWRnZVRvKHJpZ2h0RWRnZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBzdGl0Y2hSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAgIGlmIChy
ZWN0cy5zaXplKCkgPD0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFZlY3RvcjxMYXlv
dXRSZWN0PiBuZXdSZWN0czsKKyAgICAKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IHZl
cnRpY2FsIGxheW91dC4KKyAgICAvLyBGaXJzdCBzdGl0Y2ggdG9nZXRoZXIgYWxsIHRoZSByZWN0
cyBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2VsZWN0aW9uLgorICAgIHNpemVfdCBpbmRleEZy
b21TdGFydCA9IDA7CisgICAgTGF5b3V0VW5pdCBmaXJzdFRvcCA9IHJlY3RzW2luZGV4RnJvbVN0
YXJ0XS55KCk7CisgICAgTGF5b3V0UmVjdCYgY3VycmVudFJlY3QgPSByZWN0c1tpbmRleEZyb21T
dGFydF07CisgICAgd2hpbGUgKGluZGV4RnJvbVN0YXJ0IDwgcmVjdHMuc2l6ZSgpICYmIHJlY3Rz
W2luZGV4RnJvbVN0YXJ0XS55KCkgPT0gZmlyc3RUb3ApCisgICAgICAgIGN1cnJlbnRSZWN0LnVu
aXRlKHJlY3RzW2luZGV4RnJvbVN0YXJ0KytdKTsKKyAgICAKKyAgICBuZXdSZWN0cy5hcHBlbmQo
Y3VycmVudFJlY3QpOworICAgIGlmIChpbmRleEZyb21TdGFydCA9PSByZWN0cy5zaXplKCkpIHsK
KyAgICAgICAgLy8gQWxsIHRoZSByZWN0cyBhcmUgb24gb25lIGxpbmUuIFRoZXJlIGlzIG5vdGhp
bmcgZWxzZSB0byBkby4KKyAgICAgICAgcmVjdHMuc3dhcChuZXdSZWN0cyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgLy8gTmV4dCBzdGl0Y2ggdG9nZXRoZXIgYWxsIHRoZSBy
ZWN0cyBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgc2l6ZV90IGluZGV4
RnJvbUVuZCA9IHJlY3RzLnNpemUoKSAtIDE7CisgICAgTGF5b3V0VW5pdCBsYXN0VG9wID0gcmVj
dHNbaW5kZXhGcm9tRW5kXS55KCk7CisgICAgTGF5b3V0UmVjdCBsYXN0UmVjdCA9IHJlY3RzW2lu
ZGV4RnJvbUVuZF07CisgICAgd2hpbGUgKGluZGV4RnJvbUVuZCA+PSBpbmRleEZyb21TdGFydCAm
JiByZWN0c1tpbmRleEZyb21FbmRdLnkoKSA9PSBsYXN0VG9wKQorICAgICAgICBsYXN0UmVjdC51
bml0ZShyZWN0c1tpbmRleEZyb21FbmQtLV0pOworICAgIAorICAgIC8vIGluZGV4RnJvbVN0YXJ0
IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVjdGFuZ2xlIG9uIHRoZSBzZWNvbmQgbGluZS4K
KyAgICAvLyBpbmRleEZyb21FbmQgaXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJlY3RhbmdsZSBv
biB0aGUgc2Vjb25kIHRvIHRoZSBsYXN0IGxpbmUuCisgICAgLy8gaWYgdGhleSBhcmUgZXF1YWws
IHRoZXJlIGlzIG9uZSBhZGRpdGlvbmFsIHJlY3RhbmdsZSBmb3IgdGhlIGxpbmUgaW4gdGhlIG1p
ZGRsZS4KKyAgICBpZiAoaW5kZXhGcm9tRW5kID09IGluZGV4RnJvbVN0YXJ0KQorICAgICAgICBu
ZXdSZWN0cy5hcHBlbmQocmVjdHNbaW5kZXhGcm9tU3RhcnRdKTsKKyAgICAKKyAgICBpZiAoaW5k
ZXhGcm9tRW5kIDw9IGluZGV4RnJvbVN0YXJ0KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBubyBt
b3JlIHJlY3RzIHRvIHN0aXRjaC4gSnVzdCBhcHBlbmQgdGhlIGxhc3QgbGluZS4KKyAgICAgICAg
bmV3UmVjdHMuYXBwZW5kKGxhc3RSZWN0KTsKKyAgICAgICAgcmVjdHMuc3dhcChuZXdSZWN0cyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3RpdGNoIHRvZ2V0aGVyIGFs
bCB0aGUgcmVjdHMgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgdW50aWwgdGhlIHNlY29uZCB0byB0aGUg
bGFzdCBpbmNsdWRlZC4KKyAgICBjdXJyZW50UmVjdCA9IHJlY3RzW2luZGV4RnJvbVN0YXJ0XTsK
KyAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgIT0gaW5kZXhGcm9tRW5kKQorICAgICAgICBjdXJy
ZW50UmVjdC51bml0ZShyZWN0c1srK2luZGV4RnJvbVN0YXJ0XSk7CisgICAgCisgICAgbmV3UmVj
dHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKKyAgICBuZXdSZWN0cy5hcHBlbmQobGFzdFJlY3QpOwor
CisgICAgcmVjdHMuc3dhcChuZXdSZWN0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBhY3RSZWN0
c1dpdGhHYXBSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8R2Fw
UmVjdHM+JiBnYXBSZWN0cykKK3sKKyAgICBzdGl0Y2hSZWN0cyhyZWN0cyk7CisgICAgCisgICAg
Ly8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYWxpZ25tZW50cyBhcmUgY29ycmVjdCBmb3IgTFRSIHRl
eHQuCisgICAgLy8gV2Ugc2hvdWxkIGFsc28gYWNjb3VudCBmb3IgUlRMLgorICAgIHVpbnQ4X3Qg
YWxpZ25tZW50c1szXTsKKyAgICBpZiAocmVjdHMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYWxp
Z25tZW50c1swXSA9IEFsaWdubWVudExlZnQgfCBBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgYWxp
Z25tZW50c1sxXSA9IEFsaWdubWVudE5vbmU7CisgICAgICAgIGFsaWdubWVudHNbMl0gPSBBbGln
bm1lbnROb25lOworICAgIH0gZWxzZSBpZiAocmVjdHMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAg
YWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OworICAgICAgICBhbGlnbm1lbnRzWzFdID0g
QWxpZ25tZW50TGVmdDsKKyAgICAgICAgYWxpZ25tZW50c1syXSA9IEFsaWdubWVudE5vbmU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OworICAg
ICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdCB8IEFsaWdubWVudFJpZ2h0OworICAg
ICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50TGVmdDsKKyAgICB9CisKKyAgICAvLyBBY2Nv
dW50IGZvciBlYWNoIEdhcFJlY3RzIGJ5IGV4dGVuZGluZyB0aGUgZWRnZSBvZiBjZXJ0YWluIExh
eW91dFJlY3RzIHRvIG1lZXQgdGhlIGdhcC4KKyAgICBmb3IgKGF1dG8mIGdhcCA6IGdhcFJlY3Rz
KQorICAgICAgICBleHBhbmRGb3JHYXAocmVjdHMsIGFsaWdubWVudHMsIGdhcCk7CisKKyAgICAv
LyBJZiB3ZSBoYXZlIDMgcmVjdHMgd2UgbWlnaHQgbmVlZCBvbmUgZmluYWwgR2FwUmVjdHMgdG8g
YWxpZ24gdGhlIGVkZ2VzLgorICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMykgeworICAgICAgICBM
YXlvdXRSZWN0IGxlZnQ7CisgICAgICAgIExheW91dFJlY3QgcmlnaHQ7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhbGlnbm1lbnRz
W2ldICYgQWxpZ25tZW50TGVmdCkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3RzW2ldOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHJlY3RzW2ldLngoKSA8IGxlZnQueCgpKQorICAgICAgICAgICAgICAgICAgICBs
ZWZ0ID0gcmVjdHNbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWxpZ25tZW50
c1tpXSAmIEFsaWdubWVudFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByZWN0c1tpXTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICgocmVjdHNbaV0ueCgpICsgcmVjdHNbaV0ud2lkdGgoKSkgPiAocmlnaHQu
eCgpICsgcmlnaHQud2lkdGgoKSkpCisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmVjdHNb
aV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxlZnQuaXNFbXB0
eSgpIHx8ICFyaWdodC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdhcFJlY3RzIGdhcDsKKyAg
ICAgICAgICAgIGdhcC51bml0ZUxlZnQobGVmdCk7CisgICAgICAgICAgICBnYXAudW5pdGVSaWdo
dChyaWdodCk7CisgICAgICAgICAgICBleHBhbmRGb3JHYXAocmVjdHMsIGFsaWdubWVudHMsIGdh
cCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0
cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMsIGJvb2wgaXNUZXh0T25seSkKK3sK
KyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAx
MDkwCisgICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMgPSByZWN0czsKKyAgICBtX2lzVGV4dE9u
bHkgPSBpc1RleHRPbmx5OworCisgICAgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZSA9IHN0ZDo6
Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOworCisgICAgY29tcGFjdFJlY3RzV2l0aEdhcFJl
Y3RzKG1fY3VycmVudFNlbGVjdGlvblJlY3RzLCBnYXBSZWN0cyk7CisKKyAgICAvLyBEYXRhRGV0
ZWN0b3JzIG5lZWRzIHRoZXNlIHJldmVyc2VkIGluIG9yZGVyIHRvIHBsYWNlIHRoZSBhcnJvdyBp
biB0aGUgcmlnaHQgbG9jYXRpb24uCisgICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMucmV2ZXJz
ZSgpOworCisgICAgTE9HKFNlcnZpY2VzLCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlciAtIFNl
bGVjdGlvbiByZWN0cyBjaGFuZ2VkIC0gTm93IGhhdmUgJWx1XG4iLCByZWN0cy5zaXplKCkpOwor
CisgICAgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHJlY3RzKTsKKyAgICBVTlVTRURfUEFSQU0oZ2FwUmVjdHMpOworICAgIFVOVVNFRF9QQVJBTShp
c1RleHRPbmx5KTsKKyNlbmRpZgorfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpCit7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAorICAgIExPRyhT
ZXJ2aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBUZWxlcGhvbmUgbnVtYmVyIHJh
bmdlcyBjaGFuZ2VkXG4iKTsKKyAgICBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOworI2Vu
ZGlmCit9CisKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdo
bGlnaHQoSGlnaGxpZ2h0JiBoaWdobGlnaHQsIGJvb2wmIG1vdXNlSXNPdmVyQnV0dG9uKSBjb25z
dAoreworICAgIEJvb2xlYW4gb25CdXR0b247CisgICAgYm9vbCBob3ZlcmVkID0gRERIaWdobGln
aHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxpZ2h0LmRkSGlnaGxpZ2h0KCksIChDR1BvaW50KW1f
bW91c2VQb3NpdGlvbiwgJm9uQnV0dG9uKTsKKyAgICBtb3VzZUlzT3ZlckJ1dHRvbiA9IG9uQnV0
dG9uOworICAgIHJldHVybiBob3ZlcmVkOworfQorCitzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNo
b3VsZEJlU2hvd24oSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0Cit7CisgICAgaWYgKCFoaWdo
bGlnaHQpCisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjp6ZXJvKCk7
CisKKyAgICBhdXRvIG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID0gMjAw
X21zOworICAgIGlmIChtX3BhZ2UuZm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
bWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSAxMDAwX21zOworCisgICAg
Ym9vbCBtb3VzZVByZXNzZWQgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91
c2VQcmVzc2VkKCk7CisKKyAgICAvLyBIaWdobGlnaHQgaHlzdGVyZXNpcyBpcyBvbmx5IGZvciBz
ZWxlY3Rpb24gc2VydmljZXMsIGJlY2F1c2UgdGVsZXBob25lIG51bWJlciBoaWdobGlnaHRzIGFy
ZSBhbHJlYWR5IG11Y2ggbW9yZSBzdGFibGUKKyAgICAvLyBieSB2aXJ0dWUgb2YgYmVpbmcgZXhw
YW5kZWQgdG8gaW5jbHVkZSB0aGUgZW50aXJlIHRlbGVwaG9uZSBudW1iZXIuIEhvd2V2ZXIsIHdl
IHdpbGwgc3RpbGwgYXZvaWQgaGlnaGxpZ2h0aW5nCisgICAgLy8gdGVsZXBob25lIG51bWJlcnMg
d2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhp
Z2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQorICAgICAgICByZXR1cm4gbW91c2VQcmVz
c2VkID8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gOiAwX21zOworCisg
ICAgYXV0byBub3cgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgICBhdXRv
IHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UgPSBub3cgLSBtX2xhc3RTZWxlY3Rpb25DaGFu
Z2VUaW1lOworICAgIGF1dG8gdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0aXZlID0gbm93IC0g
bV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZTsKKyAgICBhdXRvIHRpbWVTaW5jZUxhc3RN
b3VzZVVwID0gbW91c2VQcmVzc2VkID8gMF9tcyA6IG5vdyAtIG1fbGFzdE1vdXNlVXBUaW1lOwor
CisgICAgYXV0byByZW1haW5pbmdEZWxheSA9IG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91
bGRCZVNob3duIC0gc3RkOjptaW4oc3RkOjptaW4odGltZVNpbmNlTGFzdFNlbGVjdGlvbkNoYW5n
ZSwgdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0aXZlKSwgdGltZVNpbmNlTGFzdE1vdXNlVXAp
OworICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihyZW1haW5pbmdEZWxheSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyPiYpCit7CisgICAgYm9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsKKyAg
ICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJCdXR0b24pOworfQorCit2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCit7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6Y2xlYXJBY3RpdmVIaWdobGlnaHQoKQoreworICAgIGlmICghbV9hY3RpdmVI
aWdobGlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCA9PSBtX2FjdGl2ZUhpZ2hsaWdodCkKKyAgICAgICAgbV9jdXJyZW50
TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOworICAgIG1fYWN0aXZlSGlnaGxp
Z2h0ID0gbnVsbHB0cjsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZW1v
dmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhpZ2hsaWdodDo6VHlwZSB0eXBlKQorewor
ICAgIFZlY3RvcjxSZWZQdHI8SGlnaGxpZ2h0Pj4gaGlnaGxpZ2h0c1RvUmVtb3ZlOworICAgIGZv
ciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7CisgICAgICAgIGlm
IChoaWdobGlnaHQtPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgaGlnaGxpZ2h0c1RvUmVt
b3ZlLmFwcGVuZChoaWdobGlnaHQpOworICAgIH0KKworICAgIHdoaWxlICghaGlnaGxpZ2h0c1Rv
UmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZSho
aWdobGlnaHRzVG9SZW1vdmUudGFrZUxhc3QoKSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKQoreworICAgIGlmICghRGF0
YURldGVjdG9yc0xpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3BhZ2Uu
c2V0dGluZ3MoKS5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7CisK
KyAgICBNYWluRnJhbWUmIG1haW5GcmFtZSA9IG1fcGFnZS5tYWluRnJhbWUoKTsKKyAgICBGcmFt
ZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbWFpbkZyYW1lLnZpZXcoKTsKKworICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1haW5GcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgeworICAgICAgICBhdXRvJiByYW5nZXMgPSBmcmFtZS0+ZWRpdG9yKCkuZGV0
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6
IHJhbmdlcykgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaG9rZSBpZiB0aGUg
cmFuZ2Ugd3JhcHMgYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSB2aWV3LgorICAgICAgICAgICAgLy8g
V2hhdCBzaG91bGQgd2UgZG8gaW4gdGhhdCBjYXNlPworICAgICAgICAgICAgSW50UmVjdCByZWN0
ID0gdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZSgqcmFuZ2UpOworCisgICAgICAgICAg
ICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwgY29udGVudHNU
b1dpbmRvdyBhbmQgdGhlbiB3aW5kb3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdldCB0aGUgcmln
aHQgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBh
ZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0Rv
Y3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKKyAgICAgICAgICAg
IC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29u
dGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KKyAgICAgICAgICAgIEZyYW1lVmlldyogdmll
d0ZvclJhbmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgICAgICBp
ZiAoIXZpZXdGb3JSYW5nZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JS
YW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7CisKKyAgICAgICAgICAg
IENHUmVjdCBjZ1JlY3QgPSByZWN0OworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0
UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZp
c2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsICZjZ1JlY3QsIDEsIG1haW5G
cmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCksIERESGlnaGxpZ2h0T3V0bGluZVdpdGhBcnJv
dywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CisKKyAgICAgICAg
ICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBo
b25lTnVtYmVyKCp0aGlzLCBkZEhpZ2hsaWdodCwgcmFuZ2UpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGln
aHRzKG5ld1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVt
YmVyKTsKKworICAgIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7Cit9CisKK3ZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQorewor
ICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3BhZ2Uuc2V0dGluZ3MoKS5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhp
Z2hsaWdodHM7CisKKyAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOworICAgIGNnUmVjdHMucmVz
ZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CisKKyAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJh
bWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICAgICAgaWYgKCFtYWluRnJh
bWVWaWV3KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZyYW1lVmlldyogdmlld0Zv
clJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisKKyAgICAg
ICAgZm9yIChhdXRvJiByZWN0IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKKyAgICAgICAg
ICAgIEludFJlY3QgY3VycmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIGN1cnJlbnRSZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkp
KSk7CisgICAgICAgICAgICBjZ1JlY3RzLmFwcGVuZCgoQ0dSZWN0KWN1cnJlbnRSZWN0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IENHUmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFk
b3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5k
RGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2li
bGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJl
Y3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5ld1Bv
dGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlz
LCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRzKG5l
d1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKTsKKworICAg
IGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6cmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVu
dEhpZ2hsaWdodHMoSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4mIG5ld1BvdGVudGlhbEhpZ2hs
aWdodHMsIEhpZ2hsaWdodDo6VHlwZSB0eXBlKQoreworICAgIC8vIElmIGFueSBvbGQgSGlnaGxp
Z2h0cyBhcmUgZXF1aXZhbGVudCAoYnkgUmFuZ2UpIHRvIGEgbmV3IEhpZ2hsaWdodCwgcmV1c2Ug
dGhlIG9sZAorICAgIC8vIG9uZSBzbyB0aGF0IGFueSBtZXRhZGF0YSBpcyByZXRhaW5lZC4KKyAg
ICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiByZXVzZWRQb3RlbnRpYWxIaWdobGlnaHRzOwor
CisgICAgZm9yIChhdXRvJiBvbGRIaWdobGlnaHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsK
KyAgICAgICAgaWYgKG9sZEhpZ2hsaWdodC0+dHlwZSgpICE9IHR5cGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBmb3IgKGF1dG8mIG5ld0hpZ2hsaWdodCA6IG5ld1BvdGVudGlh
bEhpZ2hsaWdodHMpIHsKKyAgICAgICAgICAgIGlmIChoaWdobGlnaHRzQXJlRXF1aXZhbGVudChv
bGRIaWdobGlnaHQuZ2V0KCksIG5ld0hpZ2hsaWdodC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBvbGRIaWdobGlnaHQtPnNldERESGlnaGxpZ2h0KG5ld0hpZ2hsaWdodC0+ZGRIaWdobGlnaHQo
KSk7CisKKyAgICAgICAgICAgICAgICByZXVzZWRQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChvbGRI
aWdobGlnaHQpOworICAgICAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMucmVtb3Zl
KG5ld0hpZ2hsaWdodCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5
cGUodHlwZSk7CisKKyAgICBtX3BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKG5ld1BvdGVudGlhbEhp
Z2hsaWdodHMuYmVnaW4oKSwgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5lbmQoKSk7CisgICAgbV9w
b3RlbnRpYWxIaWdobGlnaHRzLmFkZChyZXVzZWRQb3RlbnRpYWxIaWdobGlnaHRzLmJlZ2luKCks
IHJldXNlZFBvdGVudGlhbEhpZ2hsaWdodHMuZW5kKCkpOworfQorCitib29sIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6Omhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKQoreworICAgIHJl
dHVybiBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNl
cyhtX2lzVGV4dE9ubHkpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKK3sKKyAgICBpZiAobV9wb3RlbnRpYWxIaWdo
bGlnaHRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCisgICAg
ICAgICAgICBtX3BhZ2UubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0ZWxlcGhvbmVO
dW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKS5pc0VtcHR5KCkgJiYgIWhhc1JlbGV2YW50U2Vs
ZWN0aW9uU2VydmljZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlT3ZlcmxheUlm
TmVlZGVkKCk7CisKKyAgICBib29sIG1vdXNlSXNPdmVyQnV0dG9uOworICAgIGRldGVybWluZUFj
dGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckJ1dHRvbik7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9zZXJ2
aWNlc092ZXJsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdlLnNldHRpbmdz
KCkuc2VydmljZUNvbnRyb2xzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBtX3NlcnZpY2VzT3ZlcmxheSA9
IG92ZXJsYXkuZ2V0KCk7CisgICAgbV9wYWdlLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOworfQorCitWZWN0b3I8UmVmUHRyPFJhbmdlPj4gU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpLmVkaXRvcigpLmRldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7Cit9CisKK2Jv
b2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29u
c3QgSGlnaGxpZ2h0KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpCit7CisgICAgaWYgKGEgPT0gYikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChhLT50eXBlKCkgPT0gYi0+dHlwZSgpICYmIGFyZVJhbmdlc0Vx
dWFsKGEtPnJhbmdlKCksIGItPnJhbmdlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0
KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0
Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQmIHNlbGVjdGlvbkhpZ2hsaWdo
dCkKK3sKKyAgICBpZiAoc2VsZWN0aW9uSGlnaGxpZ2h0LnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5
cGU6OlNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX3BhZ2Uuc2VsZWN0aW9uKCk7CisgICAgaWYgKCFz
ZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0
cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRz
KSB7CisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5cGU6OlRl
bGVwaG9uZU51bWJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChoaWdo
bGlnaHQtPnJhbmdlKCktPmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhp
Z2hsaWdodChib29sJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKK3sKKyAgICBt
b3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOworCisgICAgUmVmUHRyPEhp
Z2hsaWdodD4gbmV3QWN0aXZlSGlnaGxpZ2h0OworCisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgp
ID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSd2
ZSBhbHJlYWR5IGZvdW5kIGEgbmV3IGFjdGl2ZSBoaWdobGlnaHQsIGFuZCBpdCdzCisgICAgICAg
ICAgICAvLyBhIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0LCBwcmVmZXIgdGhhdCBvdmVyIHRo
aXMgc2VsZWN0aW9uIGhpZ2hsaWdodC4KKyAgICAgICAgICAgIGlmIChuZXdBY3RpdmVIaWdobGln
aHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpUZWxl
cGhvbmVOdW1iZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8v
IElmIHRoaXMgaGlnaGxpZ2h0IGhhcyBubyBjb21wYXRpYmxlIHNlcnZpY2VzLCBpdCBjYW4ndCBi
ZSBhY3RpdmUuCisgICAgICAgICAgICBpZiAoIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHRoaXMgaGlnaGxpZ2h0IGlzbid0IGhvdmVyZWQsIGl0IGNhbid0IGJlIGFjdGl2ZS4KKyAgICAg
ICAgYm9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsKKyAgICAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hs
aWdodCgqaGlnaGxpZ2h0LCBtb3VzZUlzT3ZlckJ1dHRvbikpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBoaWdobGlnaHQ7CisgICAgICAgIG1v
dXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gbW91c2VJc092ZXJCdXR0b247CisgICAg
fQorCisgICAgLy8gSWYgb3VyIG5ldyBhY3RpdmUgaGlnaGxpZ2h0IGlzIGEgc2VsZWN0aW9uIGhp
Z2hsaWdodCB0aGF0IGlzIGNvbXBsZXRlbHkgY29udGFpbmVkCisgICAgLy8gYnkgb25lIG9mIHRo
ZSBwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cywgd2UnbGwgbWFrZSB0aGUgcGhvbmUgbnVtYmVyIGhp
Z2hsaWdodCBhY3RpdmUgZXZlbiBpZiBpdCdzIG5vdCBob3ZlcmVkLgorICAgIGlmIChuZXdBY3Rp
dmVIaWdobGlnaHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpU
eXBlOjpTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKEhpZ2hsaWdodCogY29udGFpbmVkVGVsZXBo
b25lTnVtYmVySGlnaGxpZ2h0ID0gZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5p
bmdTZWxlY3Rpb25IaWdobGlnaHQoKm5ld0FjdGl2ZUhpZ2hsaWdodCkpIHsKKyAgICAgICAgICAg
IG5ld0FjdGl2ZUhpZ2hsaWdodCA9IGNvbnRhaW5lZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodDsK
KworICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaW5pdGlhbGx5IGNob29zZSB0aGUgdGVs
ZXBob25lIG51bWJlciBoaWdobGlnaHQgb3ZlciB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCBpZiB0
aGUKKyAgICAgICAgICAgIC8vIG1vdXNlIGlzIG92ZXIgdGhlIHRlbGVwaG9uZSBudW1iZXIgaGln
aGxpZ2h0J3MgYnV0dG9uLCBzbyB3ZSBrbm93IHRoYXQgaXQncyBub3QgaG92ZXJlZCBpZiB3ZSBn
b3QgaGVyZS4KKyAgICAgICAgICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRoaXMtPmhpZ2hsaWdodHNBcmVF
cXVpdmFsZW50KG1fYWN0aXZlSGlnaGxpZ2h0LmdldCgpLCBuZXdBY3RpdmVIaWdobGlnaHQuZ2V0
KCkpKSB7CisgICAgICAgIC8vIFdoZW4gdHJhbnNpdGlvbmluZyB0byBhIG5ldyBoaWdobGlnaHQs
IHdlIG1pZ2h0IGVuZCB1cCBpbiBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQgbXVsdGlwbGUgdGlt
ZXMKKyAgICAgICAgLy8gYmVmb3JlIHRoZSBuZXcgaGlnaGxpZ2h0IGFjdHVhbGx5IGJlY29tZXMg
YWN0aXZlLiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IG5leHQtYnV0LW5vdC15ZXQtYWN0aXZlCisg
ICAgICAgIC8vIGhpZ2hsaWdodCwgYW5kIG9ubHkgcmVzZXQgdGhlIGFjdGl2ZSBoaWdobGlnaHQg
aHlzdGVyZXNpcyB3aGVuIHRoYXQgY2hhbmdlcy4KKyAgICAgICAgaWYgKG1fbmV4dEFjdGl2ZUhp
Z2hsaWdodCAhPSBuZXdBY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2
ZUhpZ2hsaWdodCA9IG5ld0FjdGl2ZUhpZ2hsaWdodDsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2
ZUhpZ2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0
ID0gbnVsbHB0cjsKKworICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAg
ICAgIG1fYWN0aXZlSGlnaGxpZ2h0LT5mYWRlT3V0KCk7CisgICAgICAgICAgICBtX2FjdGl2ZUhp
Z2hsaWdodCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlbWFpbmluZ1Rp
bWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSB0aGlzLT5yZW1haW5pbmdUaW1lVW50aWxI
aWdobGlnaHRTaG91bGRCZVNob3duKG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSk7CisgICAgICAg
IGlmIChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID4gc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb246Onplcm8oKSkgeworICAgICAgICAgICAgbV9kZXRl
cm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lci5zdGFydE9uZVNob3QocmVtYWluaW5nVGltZVVudGls
SGlnaGxpZ2h0U2hvdWxkQmVTaG93bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodC5yZWxl
YXNlKCk7CisKKyAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBt
X3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5
ZXIoKSk7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAg
bV9tb3VzZVBvc2l0aW9uID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhldmVudC5wb3NpdGlvbigpKTsKKworICAgIGJvb2wgbW91c2VJc092ZXJBY3RpdmVIaWdo
bGlnaHRCdXR0b24gPSBmYWxzZTsKKyAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJ
c092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOworCisgICAgLy8gQ2FuY2VsIHRoZSBwb3RlbnRp
YWwgY2xpY2sgaWYgYW55IGJ1dHRvbiBvdGhlciB0aGFuIHRoZSBsZWZ0IGJ1dHRvbiBjaGFuZ2Vz
IHN0YXRlLCBhbmQgaWdub3JlIHRoZSBldmVudC4KKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0g
TW91c2VCdXR0b246OkxlZnRCdXR0b24pIHsKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgPSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGln
aHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQpIHsKKyAg
ICAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbW91c2VEb3duSGlnaGxpZ2h0ID0gbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQ7CisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKKworICAgICAgICBtX2xhc3RNb3VzZVVwVGltZSA9IHN0
ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOworCisgICAgICAgIGlmIChtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiAmJiBtb3VzZURvd25IaWdobGlnaHQpIHsKKyAgICAgICAg
ICAgIGhhbmRsZUNsaWNrKG1fbW91c2VQb3NpdGlvbiwgKm1vdXNlRG93bkhpZ2hsaWdodCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9m
IHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRpYWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhl
IGNsaWNrLgorICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3Zl
ZCkgeworICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgJiYg
bW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxw
dHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbW91c2Ug
d2VudCBkb3duIG92ZXIgdGhlIGFjdGl2ZSBoaWdobGlnaHQncyBidXR0b24sIHRyYWNrIHRoaXMg
YXMgYSBwb3RlbnRpYWwgY2xpY2suCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVByZXNzZWQpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0ICYmIG1v
dXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRN
b3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG1fYWN0aXZlSGlnaGxpZ2h0OworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQoreworICAgIGlm
IChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBidWlsZFBob25l
TnVtYmVySGlnaGxpZ2h0cygpOworICAgIGJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCk7CisKKyAg
ICBib29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uOworICAgIGRldGVybWluZUFj
dGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbik7Cit9CisKK3Zv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2soY29uc3QgSW50UG9pbnQm
IGNsaWNrUG9pbnQsIEhpZ2hsaWdodCYgaGlnaGxpZ2h0KQoreworICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBmcmFtZVZpZXct
PmNvbnRlbnRzVG9XaW5kb3coY2xpY2tQb2ludCk7CisKKyAgICBpZiAoaGlnaGxpZ2h0LnR5cGUo
KSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikgeworICAgICAgICBhdXRvIHRlbGVwaG9u
ZU51bWJlclJhbmdlcyA9IHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOwor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnM7CisgICAgICAg
IHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5yZXNlcnZlQ2FwYWNpdHkodGVsZXBob25lTnVtYmVy
UmFuZ2VzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiB0ZWxlcGhvbmVOdW1i
ZXJSYW5nZXMpCisgICAgICAgICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMuYXBwZW5kKHJh
bmdlLT50ZXh0KCkpOworCisgICAgICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5oYW5kbGVT
ZWxlY3Rpb25TZXJ2aWNlQ2xpY2sobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMsIHdpbmRvd1Bv
aW50KTsKKyAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBl
OjpUZWxlcGhvbmVOdW1iZXIpCisgICAgICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5oYW5k
bGVUZWxlcGhvbmVOdW1iZXJDbGljayhoaWdobGlnaHQucmFuZ2UoKS0+dGV4dCgpLCB3aW5kb3dQ
b2ludCk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ3JlYXRlSGln
aGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KQoreworICAgIEFTU0VSVCghbV9oaWdobGlnaHRz
LmNvbnRhaW5zKGhpZ2hsaWdodCkpOworICAgIG1faGlnaGxpZ2h0cy5hZGQoaGlnaGxpZ2h0KTsK
K30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsRGVzdHJveUhpZ2hsaWdo
dChIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3sKKyAgICBBU1NFUlQobV9oaWdobGlnaHRzLmNvbnRh
aW5zKGhpZ2hsaWdodCkpOworICAgIG1faGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAoRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikpICYmIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCA0ODZkZTJiLi5iMGMyODU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCkBAIC03Miw2ICs3Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBNKFdlYkF1ZGlvKSBcCiAgICAgTShXZWJHTCkgXAogICAgIE0oV2ViUmVw
bGF5KSBcCisgICAgTShTZXJ2aWNlcykgXAogCiAjZGVmaW5lIERFQ0xBUkVfTE9HX0NIQU5ORUwo
bmFtZSkgXAogICAgIGV4dGVybiBXVEZMb2dDaGFubmVsIEpPSU5fTE9HX0NIQU5ORUxfV0lUSF9Q
UkVGSVgoTE9HX0NIQU5ORUxfUFJFRklYLCBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMjI2NDIzLi40
Mzc0MjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTQtMTAtMDYgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzQxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg1NDYy
ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgIE1vdmUgU2VydmljZXMgbG9nZ2luZyBjaGFubmVs
IHRvIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmhhbmRsZVRlbGVwaG9uZU51
bWJlckNsaWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVTZWxl
Y3Rpb25TZXJ2aWNlQ2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6Omhh
c1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMpOgorICAgICAgICBJbXBsZW1lbnQgc2VydmljZXMt
cmVsYXRlZCBDaHJvbWVDbGllbnQgY2FsbGJhY2tzLgorICAgICAgICBDbGlja3MgYXJlIGZvcndh
cmRlZCB0byBXZWJQYWdlTWFjIHdoZXJlIHRoZXkgZG8gd2hhdCB0aGV5IHVzZWQgdG87CisgICAg
ICAgIGhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMgaXMgaW1wbGVtZW50ZWQgYXMgaXQgd2Fz
IHdoZW4gaXQgbGl2ZWQKKyAgICAgICAgaW5zaWRlIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICBSZW1vdmUg
V2ViRWRpdG9yQ2xpZW50IG92ZXJyaWRlcyBmb3Igbm93LXJlbW92ZWQgZnVuY3Rpb25zLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJl
ZmVyZW5jZXMpOgorICAgICAgICBGb3J3YXJkIHNlcnZpY2VDb250cm9sc0VuYWJsZWQgc2V0dGlu
ZyB0byBXZWJDb3JlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlcnZpY2VDb250cm9sc0VuYWJsZWQp
OiBEZWxldGVkLgorCiAyMDE0LTEwLTA2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBTY3JvbGxpbmdU
cmVlIHN1YmNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dp
bmcuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCAwZTNlMWRlLi5m
NWQ5ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCkBAIC01MSw3ICs1MSw2IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogICAgIE0oVGV4dElucHV0KSBcCiAgICAgTShWaWV3KSBcCiAgICAg
TShJREIpIFwKLSAgICBNKFNlcnZpY2VzKSBcCiAKICNkZWZpbmUgREVDTEFSRV9MT0dfQ0hBTk5F
TChuYW1lKSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwgSk9JTl9MT0dfQ0hBTk5FTF9XSVRI
X1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJkN2VjM2YuLmM1NjhmNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTkzMSw3ICs5MzEsNiBAQAogCQk1MThFOEYwQjE2QjIwOTM3MDBFOTE0MjkgLyogRG93
bmxvYWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICov
OyB9OwogCQk1MThFOEYwQzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwMzE2QjIw
OTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi87IH07CiAJCTUxOEU4RjBEMTZCMjA5
MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjA1MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1h
Yy5tbSAqLzsgfTsKLQkJNTE5MkQ1NzYxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTkyRDU3NTE5NjFGRDAzMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5tbSAqLzsgfTsKIAkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8qIE1lbnVVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTMzREVC
MTk2NUVCMjQwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggKi87IH07CiAJCTUxOTMzREYwMTk2
NUVCMzEwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5MzNERUMxOTY1RUIyNDAwOEFDM0VBIC8qIE1lbnVV
dGlsaXRpZXMubW0gKi87IH07CiAJCTUxQTRENUE5MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0
aWNzUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUE0RDVBODE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICov
OyB9OwpAQCAtMjk0OSw4ICsyOTQ4LDYgQEAKIAkJNTE4RThGMDIxNkIyMDkzNzAwRTkxNDI5IC8q
IERvd25sb2FkTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBEb3dubG9hZE1hbmFnZXIuY3BwOyBwYXRoID0gRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEU4RjAzMTZCMjA5MzcwMEU5MTQy
OSAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RG93bmxvYWRNYW5hZ2VyLmg7IHBhdGggPSBEb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEU4RjA1MTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERv
d25sb2FkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTkyRDU3MTE5NjFG
QTJGMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxOTJENTc1MTk2MUZEMDMwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5MzNERUIx
OTY1RUIyNDAwOEFDM0VBIC8qIE1lbnVVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVudVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTkzM0RFQzE5NjVFQjI0MDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lbnVVdGlsaXRpZXMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0
aWNzUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0
aXN0aWNzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Njk5LDcg
KzU2OTYsNiBAQAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmgg
Ki8sCiAJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAq
LywKIAkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywK
LQkJCQk1MTkyRDU3MTE5NjFGQTJGMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLAogCQkJCTJEODE5QjlCMTg2Mjc1QjMwMDFG
MDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmluICovLApAQCAt
NjQ2OCw3ICs2NDY0LDYgQEAKIAkJCQkxQUIxNkFFNzE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5tbSAqLywKIAkJCQkxQUIxNkFEQzE2NDg1OTg0MDAyOTBENjIgLyog
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCAqLywKIAkJCQkxQUIxNkFEQjE2NDg1OTg0MDAy
OTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gKi8sCi0JCQkJNTE5MkQ1NzUx
OTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJ
MUFBRjI2MzcxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
LmggKi8sCiAJCQkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tICovLAogCQkJCTFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJ
bnNwZWN0b3JVSU1hYy5tbSAqLywKQEAgLTg3MjksNyArODcyNCw2IEBACiAJCQkJNTEyRjU4OTYx
MkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFMDBENEMxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250
ZXh0SGFuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyRjU4OTgxMkE4ODM4ODAwNjI5NTMw
IC8qIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTkyRDU3NjE5NjFGRDAzMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUxOEU4RUY4MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50
aWNhdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4RThFRkIxNkIyMDkxQzAw
RTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1MTJGNThBMjEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4
IDg4MTczYTYuLjAyZjBjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEwNjksNSAr
MTA2OSwyNCBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPAogfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51
bWJlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIG1fcGFnZS0+aGFu
ZGxlVGVsZXBob25lTnVtYmVyQ2xpY2sobnVtYmVyLCBwb2ludCk7Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmhhbmRsZVNl
bGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdGVsZXBob25lTnVtYmVycywgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNr
KHNlbGVjdGlvbiwgdGVsZXBob25lTnVtYmVycywgcG9pbnQpOworfQorCitib29sIFdlYkNocm9t
ZUNsaWVudDo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyhib29sIGlzVGV4dE9ubHkpIGNv
bnN0Cit7CisgICAgcmV0dXJuIChpc1RleHRPbmx5ICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmhh
c1NlbGVjdGlvblNlcnZpY2VzKCkpIHx8IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmhhc1JpY2hDb250
ZW50U2VydmljZXMoKTsKK30KKworI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKaW5kZXggZjVjNWIyNy4uMmZiZWNhOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCkBAIC0zMDMsNiArMzAzLDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHVud3Jh
cENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mKSBjb25z
dCBvdmVycmlkZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKSAmJiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVRlbGVwaG9uZU51
bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IG92ZXJyaWRlOworI2VuZGlmCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0ZWxlcGhvbmVOdW1iZXJzLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxldmFudFNl
bGVjdGlvblNlcnZpY2VzKGJvb2wgaXNUZXh0T25seSkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYK
KwogICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CiAgICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJh
bWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29sIG1fY2Fj
aGVkTWFpbkZyYW1lSGFzSG9yaXpvbnRhbFNjcm9sbGJhcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAppbmRleCAxN2ZjM2E1Li4xNmRlMWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiV2ViRWRpdG9yQ2xpZW50LmgiCiAKICNpbmNsdWRlICJF
ZGl0b3JTdGF0ZS5oIgotI2luY2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKQEAgLTUzMSwyMCArNTMwLDQgQEAgYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkKICNlbmRpZgogfQogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikK
LXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5n
ZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBtX3BhZ2UtPnNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKLSNlbmRp
ZgotfQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0
IFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mIGdhcFJl
Y3RzLCBib29sIGlzVGV4dE9ubHkpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtX3Bh
Z2UtPnNlcnZpY2VDb250cm9sc0VuYWJsZWQoKSkKLSAgICAgICAgbV9wYWdlLT5zZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UocmVjdHMsIGdhcFJlY3Rz
LCBpc1RleHRPbmx5KTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKSAmJiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggZjM0YTllYi4uZjQ0MTg3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xNjgsMTEgKzE2OCw2IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSBvdmVycmlkZTsKIAotI2lmIEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgfHwgRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpCi0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdl
ZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShj
b25zdCBWZWN0b3I8V2ViQ29yZTo6TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
R2FwUmVjdHM+JiwgYm9vbCBpc1RleHRPbmx5KSBvdmVycmlkZTsKLSNlbmRpZgotCiAgICAgV2Vi
UGFnZSogbV9wYWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQxMWQzM2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyX2gKLSNkZWZpbmUgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcl9oCi0KLSNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVU
RUNUSU9OKQotCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SYW5nZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi10eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBMYXlvdXRSZWN0Owotc3RydWN0IEdhcFJlY3Rz
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7
Ci0gICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7Ci0gICAgdm9pZCBzZWxlY3Rpb25SZWN0c0Rp
ZENoYW5nZShjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6R2FwUmVjdHM+JiwgYm9vbCBpc1RleHRPbmx5KTsKLQotcHJpdmF0ZToKLSAgICBj
bGFzcyBIaWdobGlnaHQgOiBwdWJsaWMgUmVmQ291bnRlZDxIaWdobGlnaHQ+LCBwcml2YXRlIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShIaWdobGlnaHQpOwotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGln
aGxpZ2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24oU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJl
dGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KTsKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JUZWxlcGhvbmVOdW1i
ZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4s
IFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KTsKLSAgICAgICAgfkhpZ2hsaWdodCgpOwotCi0g
ICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgICAgIERESGlnaGxpZ2h0UmVmIGRkSGln
aGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5nZXQoKTsgfQotICAgICAgICBX
ZWJDb3JlOjpSYW5nZSogcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdldCgpOyB9Ci0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9n
cmFwaGljc0xheWVyLmdldCgpOyB9Ci0KLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAg
ICAgICAgIFRlbGVwaG9uZU51bWJlciwKLSAgICAgICAgICAgIFNlbGVjdGlvbgotICAgICAgICB9
OwotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgICAg
ICB2b2lkIGZhZGVJbigpOwotICAgICAgICB2b2lkIGZhZGVPdXQoKTsKLQotICAgICAgICB2b2lk
IHNldERESGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGV4cGxpY2l0IEhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0
YWluUHRyPERESGlnaGxpZ2h0UmVmPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4pOwotCi0g
ICAgICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgaW5DbGlwKSBvdmVycmlk
ZTsKLSAgICAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgICAgIHZvaWQgZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpOwotCi0gICAg
ICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gbV9kZEhpZ2hsaWdodDsKLSAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9ncmFwaGljc0xheWVyOwotICAgICAgICBUeXBlIG1fdHlw
ZTsKLSAgICAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciogbV9jb250cm9sbGVyOwotICAg
IH07Ci0KLSAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6
UGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6
OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3Jl
OjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2Ny
b2xsRnJhbWUoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBjcmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKLSAgICB2b2lkIGhhbmRsZUNs
aWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgSGlnaGxpZ2h0Jik7Ci0KLSAgICB2b2lkIGRy
YXdIaWdobGlnaHQoSGlnaGxpZ2h0JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAg
ICB2b2lkIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGln
aHRzKEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+JiwgSGlnaGxpZ2h0OjpUeXBlKTsKLSAgICB2
b2lkIHJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0OjpUeXBlKTsK
LSAgICB2b2lkIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7Ci0gICAgdm9pZCBidWlsZFNl
bGVjdGlvbkhpZ2hsaWdodCgpOwotICAgIHZvaWQgZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdo
dHMoKTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNP
dmVyQnV0dG9uKTsKLSAgICB2b2lkIGNsZWFyQWN0aXZlSGlnaGxpZ2h0KCk7Ci0gICAgSGlnaGxp
Z2h0KiBhY3RpdmVIaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhpZ2hsaWdodC5n
ZXQoKTsgfQotCi0gICAgSGlnaGxpZ2h0KiBmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29u
dGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQmKTsKLQotICAgIGJvb2wgaGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpOwotCi0gICAgYm9vbCBtb3VzZUlzT3ZlckhpZ2hsaWdo
dChIaWdobGlnaHQmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3Q7Ci0gICAgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyByZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNo
b3duKEhpZ2hsaWdodCopIGNvbnN0OwotICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpOwot
Ci0gICAgc3RhdGljIGJvb2wgaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29uc3QgSGlnaGxpZ2h0
KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4+IHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOwotCi0gICAgdm9p
ZCBkaWRDcmVhdGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUhp
Z2hsaWdodChIaWdobGlnaHQqKTsKLSAgICB2b2lkIGRpZEZpbmlzaEZhZGluZ091dEhpZ2hsaWdo
dChIaWdobGlnaHQqKTsKLQotICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25zdCB7IHJldHVybiBt
X3dlYlBhZ2U7IH0KLQotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBXZWJDb3JlOjpQYWdl
T3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2Fj
dGl2ZUhpZ2hsaWdodDsKLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX25leHRBY3RpdmVIaWdobGln
aHQ7Ci0gICAgSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4gbV9wb3RlbnRpYWxIaWdobGlnaHRz
OwotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fYW5pbWF0aW5nSGlnaGxpZ2h0czsK
LQotICAgIEhhc2hTZXQ8SGlnaGxpZ2h0Kj4gbV9oaWdobGlnaHRzOwotCi0gICAgLy8gRklYTUU6
IFRoZXNlIHNob3VsZCBtb3ZlIG9udG8gSGlnaGxpZ2h0LgotICAgIFZlY3RvcjxXZWJDb3JlOjpM
YXlvdXRSZWN0PiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0czsKLSAgICBib29sIG1faXNUZXh0T25s
eTsKLQotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0U2Vs
ZWN0aW9uQ2hhbmdlVGltZTsKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3Bv
aW50IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWU7Ci0gICAgc3RkOjpjaHJvbm86OnN0
ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2xhc3RNb3VzZVVwVGltZTsKLQotICAgIFJlZlB0cjxI
aWdobGlnaHQ+IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OwotICAgIFdlYkNv
cmU6OkludFBvaW50IG1fbW91c2VQb3NpdGlvbjsKLQotICAgIFdlYkNvcmU6OlRpbWVyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKSAmJiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0jZW5kaWYgLy8g
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYmI0M2I2My4uYzI2OTNkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDgsNyArNDgsNiBA
QAogI2luY2x1ZGUgIlBsdWdpblByb3h5LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2lu
Y2x1ZGUgIlByaW50SW5mby5oIgotI2luY2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKICNpbmNsdWRlICJTZXNzaW9uU3RhdGVDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKQEAgLTI2Myw5ICsyNjIsNiBA
QCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fbnVtYmVyT2ZQcmltYXJ5U25hcHNob3RE
ZXRlY3Rpb25BdHRlbXB0cygwKQogICAgICwgbV9kZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQ
bHVnSW5UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJQYWdlOjpkZXRlcm1pbmVQcmlt
YXJ5U25hcHNob3R0ZWRQbHVnSW5UaW1lckZpcmVkKQogI2VuZGlmCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlcnZpY2VDb250cm9sc0VuYWJsZWQoZmFsc2UpCi0jZW5k
aWYKICAgICAsIG1fbGF5ZXJIb3N0aW5nTW9kZShwYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGUp
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3BkZlBsdWdpbkVuYWJsZWQoZmFsc2UpCkBA
IC0yNjI2LDEwICsyNjIyLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25z
dCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKICAgICBtX3BkZlBsdWdpbkVuYWJsZWQgPSBz
dG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnBkZlBsdWdpbkVuYWJs
ZWRLZXkoKSk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIG1f
c2VydmljZUNvbnRyb2xzRW5hYmxlZCA9IHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6c2VydmljZUNvbnRyb2xzRW5hYmxlZEtleSgpKTsKLSNlbmRpZgotCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIG1hY3JvIGV4cGFuc2lvbiBm
b3IgYWxsIHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgbWF0Y2gg
dGhlIG5hbWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2UgYXJlCiAgICAgLy8gaGFuZHJvbGxp
bmcgdGhlIGJvb2xlYW4gYW5kIGludGVnZXIgcHJlZmVyZW5jZXMgdW50aWwgdGhhdCBpcyBmaXhl
ZC4KQEAgLTI4NDUsNiArMjgzNywxMCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2Vz
KGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0R2FtZXBhZHNFbmFibGVkKHN0b3JlLmdldEJvb2xW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Z2FtZXBhZHNFbmFibGVkS2V5KCkpKTsKICNl
bmRpZgogCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgc2V0dGluZ3Muc2V0U2Vy
dmljZUNvbnRyb2xzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5j
ZXNLZXk6OnNlcnZpY2VDb250cm9sc0VuYWJsZWRLZXkoKSkpOworI2VuZGlmCisKICAgICBpZiAo
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwYWdlVmlzaWJpbGl0
eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZEtleSgpKSkKICAgICAgICAgbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEJ5V2ViUHJlZmVyZW5jZS5zdG9wKCk7CiAgICAgZWxzZQpAQCAt
NDc3OCwxNiArNDc3NCw2IEBAIGJvb2wgV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdlc1Nob3Vs
ZFNwaW5SdW5Mb29wKCkKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKLSNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQotU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgV2ViUGFnZTo6c2VydmljZXNPdmVybGF5
Q29udHJvbGxlcigpCi17Ci0gICAgaWYgKCFtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIpCi0g
ICAgICAgIG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpOwotCi0gICAgcmV0dXJuICptX3NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI7Ci19Ci0jZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpkaWRDaGFuZ2VT
Y3JvbGxPZmZzZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA4NmIxNWE3Li43YTFmNDRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTE0MSw3ICsxNDEs
NiBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdDsKIGNsYXNzIE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjsKIGNsYXNzIFBhZ2VCYW5uZXI7CiBjbGFzcyBQ
bHVnaW5WaWV3OwotY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUluZm87CiBjbGFzcyBXZWJDb2xvckNob29zZXI7CiBjbGFzcyBX
ZWJDb250ZXh0TWVudTsKQEAgLTgyNSwxMSArODI0LDkgQEAgcHVibGljOgogICAgIC8vIFdoaWxl
IHRoaXMgaXMgbm90IGlkZWFsLCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gZXZl
cnkgcGxhdGZvcm0gYXQgdGhlIG1vbWVudC4KICAgICBzdGF0aWMgYm9vbCBzeW5jaHJvbm91c01l
c3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pIAotICAgIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXImIHNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQog
ICAgIHZvaWQgaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3RyaW5nJiBudW1iZXIs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9pZCBoYW5kbGVTZWxlY3Rpb25TZXJ2
aWNlQ2xpY2soV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dGVsZXBob25lTnVtYmVycywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICBib29sIHNl
cnZpY2VDb250cm9sc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VDb250cm9sc0Vu
YWJsZWQ7IH0KICNlbmRpZgogCiAgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JGcmFt
ZShXZWJDb3JlOjpGcmFtZSopOwpAQCAtMTA4OCwxMCArMTA4NSw2IEBAIHByaXZhdGU6CiAgICAg
UnVuTG9vcDo6VGltZXI8V2ViUGFnZT4gbV9kZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQbHVn
SW5UaW1lcjsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJM
RShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLSAgICBib29sIG1fc2VydmljZUNvbnRyb2xz
RW5hYmxlZDsKLSNlbmRpZgotCiAgICAgLy8gVGhlIGxheWVyIGhvc3RpbmcgbW9kZS4KICAgICBM
YXllckhvc3RpbmdNb2RlIG1fbGF5ZXJIb3N0aW5nTW9kZTsKIApAQCAtMTI2NiwxMCArMTI1OSw2
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFdlYkNvcmU6OldlYkdMTG9hZFBv
bGljeSBtX3N5c3RlbVdlYkdMUG9saWN5OwogI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
YTViZDkyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgyMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCi0KLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYlBhZ2UuaCIKLSNpbXBvcnQgIldlYlByb2Nl
c3MuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRmxvYXRRdWFkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR2FwUmVj
dHMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbk1h
Yy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotCi0jaWYgX19oYXNfaW5jbHVk
ZSg8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmcuaD4pCi0jaW1wb3J0IDxEYXRhRGV0
ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZy5oPgotI2Vsc2UKLXR5cGVkZWYgdm9pZCogRERIaWdo
bGlnaHRSZWY7Ci0jZW5kaWYKLQotI2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERI
aWdobGlnaHREcmF3aW5nX1ByaXZhdGUuaD4pCi0jaW1wb3J0IDxEYXRhRGV0ZWN0b3JzL0RESGln
aGxpZ2h0RHJhd2luZ19Qcml2YXRlLmg+Ci0jZW5kaWYKLQotY29uc3QgZmxvYXQgaGlnaGxpZ2h0
RmFkZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4zOwotCi10eXBlZGVmIE5TVUludGVnZXIgRERIaWdo
bGlnaHRTdHlsZTsKLXN0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0Tm9P
dXRsaW5lV2l0aEFycm93ID0gKDEgPDwgMTYpOwotc3RhdGljIGNvbnN0IERESGlnaGxpZ2h0U3R5
bGUgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93ID0gKDEgPDwgMTYpIHwgMTsKLQotU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnMpCi1TT0ZUX0xJTkso
RGF0YURldGVjdG9ycywgRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0
aFN0eWxlQW5kRGlyZWN0aW9uLCBEREhpZ2hsaWdodFJlZiwgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgQ0dSZWN0KiByZWN0cywgQ0ZJbmRleCBjb3VudCwgQ0dSZWN0IGdsb2JhbFZpc2libGVS
ZWN0LCBEREhpZ2hsaWdodFN0eWxlIHN0eWxlLCBCb29sZWFuIHdpdGhBcnJvdywgTlNXcml0aW5n
RGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24sIEJvb2xlYW4gZW5kc1dpdGhFT0wsIEJvb2xlYW4g
ZmxpcHBlZCksIChhbGxvY2F0b3IsIHJlY3RzLCBjb3VudCwgZ2xvYmFsVmlzaWJsZVJlY3QsIHN0
eWxlLCB3aXRoQXJyb3csIHdyaXRpbmdEaXJlY3Rpb24sIGVuZHNXaXRoRU9MLCBmbGlwcGVkKSkK
LVNPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hsaWdodEdldExheWVyV2l0aENvbnRleHQs
IENHTGF5ZXJSZWYsIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQsIENHQ29udGV4dFJlZiBjb250
ZXh0KSwgKGhpZ2hsaWdodCwgY29udGV4dCkpCi1TT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERI
aWdobGlnaHRHZXRCb3VuZGluZ1JlY3QsIENHUmVjdCwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdo
dCksIChoaWdobGlnaHQpKQotU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0UG9p
bnRJc09uSGlnaGxpZ2h0LCBCb29sZWFuLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR1Bv
aW50IHBvaW50LCBCb29sZWFuKiBvbkJ1dHRvbiksIChoaWdobGlnaHQsIHBvaW50LCBvbkJ1dHRv
bikpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
UGFzc1JlZlB0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4g
ZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIFR5cGU6OlNlbGVjdGlvbiwgZGRIaWdobGln
aHQsIHJhbmdlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZv
clRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBU
eXBlOjpUZWxlcGhvbmVOdW1iZXIsIGRkSGlnaGxpZ2h0LCByYW5nZSkpOwotfQotCi1TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OkhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyJiBjb250cm9sbGVyLCBUeXBlIHR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJl
Zj4gZGRIaWdobGlnaHQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlKQotICAgIDog
bV9yYW5nZShyYW5nZSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9jb250cm9sbGVyKCZj
b250cm9sbGVyKQotewotICAgIEFTU0VSVChkZEhpZ2hsaWdodCk7Ci0gICAgQVNTRVJUKG1fcmFu
Z2UpOwotCi0gICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhID0gY29udHJvbGxlci53ZWJQYWdl
KCkuZHJhd2luZ0FyZWEoKTsKLSAgICBtX2dyYXBoaWNzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUoZHJhd2luZ0FyZWEgPyBkcmF3aW5nQXJlYS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSA6
IG51bGxwdHIsICp0aGlzKTsKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKLQotICAgIHNldERESGlnaGxpZ2h0KGRkSGlnaGxpZ2h0LmdldCgpKTsKLQotICAgIC8v
IFNldCBkaXJlY3RseSBvbiB0aGUgUGxhdGZvcm1DQUxheWVyIHNvIHRoYXQgd2hlbiB3ZSBsZWF2
ZSB0aGUgJ2Zyb20nIHZhbHVlIGltcGxpY2l0Ci0gICAgLy8gaW4gb3VyIGFuaW1hdGlvbnMsIHdl
IGdldCB0aGUgcmlnaHQgaW5pdGlhbCB2YWx1ZSByZWdhcmRsZXNzIG9mIGZsdXNoIHRpbWluZy4K
LSAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPnNldE9w
YWNpdHkoMCk7Ci0KLSAgICBjb250cm9sbGVyLmRpZENyZWF0ZUhpZ2hsaWdodCh0aGlzKTsKLX0K
LQotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0Ojp+SGlnaGxpZ2h0KCkKLXsK
LSAgICBpZiAobV9jb250cm9sbGVyKQotICAgICAgICBtX2NvbnRyb2xsZXItPndpbGxEZXN0cm95
SGlnaGxpZ2h0KHRoaXMpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodDo6c2V0RERIaWdobGlnaHQoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0KQotewotICAg
IGlmICghbV9jb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RkSGlnaGxpZ2h0
ID0gaGlnaGxpZ2h0OwotCi0gICAgaWYgKCFtX2RkSGlnaGxpZ2h0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDR1JlY3QgaGlnaGxpZ2h0Qm91bmRpbmdSZWN0ID0gRERIaWdobGlnaHRHZXRCb3Vu
ZGluZ1JlY3QobV9kZEhpZ2hsaWdodC5nZXQoKSk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5vcmlnaW4pKTsKLSAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldFNpemUoRmxvYXRTaXplKGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5z
aXplKSk7Ci0KLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotfQotCi12
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6aW52YWxpZGF0ZSgpCi17
Ci0gICAgbGF5ZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fY29udHJvbGxlciA9IG51
bGxwdHI7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0Ojpu
b3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlmICghbV9j
b250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRHJhd2luZ0FyZWEqIGRyYXdp
bmdBcmVhID0gbV9jb250cm9sbGVyLT53ZWJQYWdlKCkuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAg
ZHJhd2luZ0FyZWEtPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwKQotewotICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICBDR0xheWVyUmVmIGhpZ2hsaWdodExheWVyID0gRERIaWdobGlnaHRHZXRMYXllcldp
dGhDb250ZXh0KGRkSGlnaGxpZ2h0KCksIGNnQ29udGV4dCk7Ci0gICAgQ0dSZWN0IGhpZ2hsaWdo
dEJvdW5kaW5nUmVjdCA9IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KGRkSGlnaGxpZ2h0KCkp
OwotICAgIGhpZ2hsaWdodEJvdW5kaW5nUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKLQotICAg
IENHQ29udGV4dERyYXdMYXllckluUmVjdChjZ0NvbnRleHQsIGhpZ2hsaWdodEJvdW5kaW5nUmVj
dCwgaGlnaGxpZ2h0TGF5ZXIpOwotfQotCi1mbG9hdCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpIaWdobGlnaHQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICByZXR1cm4gbV9jb250cm9sbGVyLT53
ZWJQYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpIaWdobGlnaHQ6OmZhZGVJbigpCi17Ci0gICAgUmV0YWluUHRyPENBQmFzaWNB
bmltYXRpb24+IGFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQ
YXRoOkAib3BhY2l0eSJdOwotICAgIFthbmltYXRpb24gc2V0RHVyYXRpb246aGlnaGxpZ2h0RmFk
ZUFuaW1hdGlvbkR1cmF0aW9uXTsKLSAgICBbYW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxN
b2RlRm9yd2FyZHNdOwotICAgIFthbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpmYWxz
ZV07Ci0gICAgW2FuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKLQotICAgIFJlZlB0cjxQbGF0Zm9y
bUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6
OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkpOwotICAgIHRvR3JhcGhpY3NMYXllckNBKGxheWVyKCkp
LT5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRkQW5pbWF0aW9uRm9yS2V5KCJGYWRlSGlnaGxpZ2h0SW4i
LCBwbGF0Zm9ybUFuaW1hdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRlT3V0KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0Fu
aW1hdGlvbj4gYW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBh
dGg6QCJvcGFjaXR5Il07Ci0gICAgW2FuaW1hdGlvbiBzZXREdXJhdGlvbjpoaWdobGlnaHRGYWRl
QW5pbWF0aW9uRHVyYXRpb25dOwotICAgIFthbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1v
ZGVGb3J3YXJkc107Ci0gICAgW2FuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOmZhbHNl
XTsKLSAgICBbYW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOwotCi0gICAgUmVmUHRyPEhpZ2hsaWdo
dD4gcmV0YWluZWRTZWxmID0gdGhpczsKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAg
W0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOltyZXRhaW5lZFNlbGZdICgpIHsKLSAg
ICAgICAgcmV0YWluZWRTZWxmLT5kaWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCk7Ci0gICAgfV07
Ci0KLSAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpjcmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKLSAgICB0b0dy
YXBoaWNzTGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZv
cktleSgiRmFkZUhpZ2hsaWdodE91dCIsIHBsYXRmb3JtQW5pbWF0aW9uLmdldCgpKTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OkhpZ2hsaWdodDo6ZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgaWYgKCFt
X2NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NvbnRyb2xsZXItPmFj
dGl2ZUhpZ2hsaWdodCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyKCkt
PnJlbW92ZUZyb21QYXJlbnQoKTsKLX0KLQotc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZShSYW5nZSYgcmFuZ2UpCi17Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4g
dGV4dFF1YWRzOwotICAgIHJhbmdlLnRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVj
dCBib3VuZGluZ1JlY3Q7Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogdGV4dFF1YWRzKQotICAgICAg
ICBib3VuZGluZ1JlY3QudW5pdGUocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChib3VuZGluZ1JlY3QpOwotfQotCi1TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBt
X3dlYlBhZ2Uod2ViUGFnZSkKLSAgICAsIG1fc2VydmljZXNPdmVybGF5KG51bGxwdHIpCi0gICAg
LCBtX2lzVGV4dE9ubHkoZmFsc2UpCi0gICAgLCBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRp
bWVyKHRoaXMsICZTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdo
bGlnaHRUaW1lckZpcmVkKQotewotfQotCi1TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp+U2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcigpCi17Ci0gICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBt
X2hpZ2hsaWdodHMpCi0gICAgICAgIGhpZ2hsaWdodC0+aW52YWxpZGF0ZSgpOwotfQotCi12b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVy
bGF5JikKLXsKLSAgICAvLyBCZWZvcmUgdGhlIG92ZXJsYXkgaXMgZGVzdHJveWVkLCBpdCBzaG91
bGQgaGF2ZSBtb3ZlZCBvdXQgb2YgdGhlIFdlYlBhZ2UsCi0gICAgLy8gYXQgd2hpY2ggcG9pbnQg
d2UgYWxyZWFkeSBjbGVhcmVkIG91ciBiYWNrIHBvaW50ZXIuCi0gICAgQVNTRVJUKCFtX3NlcnZp
Y2VzT3ZlcmxheSk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1v
dmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOwotICAgIG1fc2Vy
dmljZXNPdmVybGF5ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCi17Ci19Ci0KLXN0YXRpYyBj
b25zdCB1aW50OF90IEFsaWdubWVudE5vbmUgPSAwOwotc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxp
Z25tZW50TGVmdCA9IDEgPDwgMDsKLXN0YXRpYyBjb25zdCB1aW50OF90IEFsaWdubWVudFJpZ2h0
ID0gMSA8PCAxOwotCi1zdGF0aWMgdm9pZCBleHBhbmRGb3JHYXAoVmVjdG9yPExheW91dFJlY3Q+
JiByZWN0cywgdWludDhfdCogYWxpZ25tZW50cywgY29uc3QgR2FwUmVjdHMmIGdhcCkKLXsKLSAg
ICBpZiAoIWdhcC5sZWZ0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgbGVmdEVk
Z2UgPSBnYXAubGVmdCgpLngoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Y3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdu
bWVudExlZnQpCi0gICAgICAgICAgICAgICAgcmVjdHNbaV0uc2hpZnRYRWRnZVRvKGxlZnRFZGdl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZ2FwLnJpZ2h0KCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIExheW91dFVuaXQgcmlnaHRFZGdlID0gZ2FwLnJpZ2h0KCkubWF4WCgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50UmlnaHQpCi0gICAgICAgICAgICAg
ICAgcmVjdHNbaV0uc2hpZnRNYXhYRWRnZVRvKHJpZ2h0RWRnZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGl0Y2hSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
IHJlY3RzKQotewotICAgIGlmIChyZWN0cy5zaXplKCkgPD0gMSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBuZXdSZWN0czsKLSAgICAKLSAgICAvLyBGSVhN
RTogTmVlZCB0byBzdXBwb3J0IHZlcnRpY2FsIGxheW91dC4KLSAgICAvLyBGaXJzdCBzdGl0Y2gg
dG9nZXRoZXIgYWxsIHRoZSByZWN0cyBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2VsZWN0aW9u
LgotICAgIHNpemVfdCBpbmRleEZyb21TdGFydCA9IDA7Ci0gICAgTGF5b3V0VW5pdCBmaXJzdFRv
cCA9IHJlY3RzW2luZGV4RnJvbVN0YXJ0XS55KCk7Ci0gICAgTGF5b3V0UmVjdCYgY3VycmVudFJl
Y3QgPSByZWN0c1tpbmRleEZyb21TdGFydF07Ci0gICAgd2hpbGUgKGluZGV4RnJvbVN0YXJ0IDwg
cmVjdHMuc2l6ZSgpICYmIHJlY3RzW2luZGV4RnJvbVN0YXJ0XS55KCkgPT0gZmlyc3RUb3ApCi0g
ICAgICAgIGN1cnJlbnRSZWN0LnVuaXRlKHJlY3RzW2luZGV4RnJvbVN0YXJ0KytdKTsKLSAgICAK
LSAgICBuZXdSZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOwotICAgIGlmIChpbmRleEZyb21TdGFy
dCA9PSByZWN0cy5zaXplKCkpIHsKLSAgICAgICAgLy8gQWxsIHRoZSByZWN0cyBhcmUgb24gb25l
IGxpbmUuIFRoZXJlIGlzIG5vdGhpbmcgZWxzZSB0byBkby4KLSAgICAgICAgcmVjdHMuc3dhcChu
ZXdSZWN0cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gTmV4dCBzdGl0
Y2ggdG9nZXRoZXIgYWxsIHRoZSByZWN0cyBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzZWxlY3Rp
b24uCi0gICAgc2l6ZV90IGluZGV4RnJvbUVuZCA9IHJlY3RzLnNpemUoKSAtIDE7Ci0gICAgTGF5
b3V0VW5pdCBsYXN0VG9wID0gcmVjdHNbaW5kZXhGcm9tRW5kXS55KCk7Ci0gICAgTGF5b3V0UmVj
dCBsYXN0UmVjdCA9IHJlY3RzW2luZGV4RnJvbUVuZF07Ci0gICAgd2hpbGUgKGluZGV4RnJvbUVu
ZCA+PSBpbmRleEZyb21TdGFydCAmJiByZWN0c1tpbmRleEZyb21FbmRdLnkoKSA9PSBsYXN0VG9w
KQotICAgICAgICBsYXN0UmVjdC51bml0ZShyZWN0c1tpbmRleEZyb21FbmQtLV0pOwotICAgIAot
ICAgIC8vIGluZGV4RnJvbVN0YXJ0IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVjdGFuZ2xl
IG9uIHRoZSBzZWNvbmQgbGluZS4KLSAgICAvLyBpbmRleEZyb21FbmQgaXMgdGhlIGluZGV4IG9m
IHRoZSBsYXN0IHJlY3RhbmdsZSBvbiB0aGUgc2Vjb25kIHRvIHRoZSBsYXN0IGxpbmUuCi0gICAg
Ly8gaWYgdGhleSBhcmUgZXF1YWwsIHRoZXJlIGlzIG9uZSBhZGRpdGlvbmFsIHJlY3RhbmdsZSBm
b3IgdGhlIGxpbmUgaW4gdGhlIG1pZGRsZS4KLSAgICBpZiAoaW5kZXhGcm9tRW5kID09IGluZGV4
RnJvbVN0YXJ0KQotICAgICAgICBuZXdSZWN0cy5hcHBlbmQocmVjdHNbaW5kZXhGcm9tU3RhcnRd
KTsKLSAgICAKLSAgICBpZiAoaW5kZXhGcm9tRW5kIDw9IGluZGV4RnJvbVN0YXJ0KSB7Ci0gICAg
ICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIHJlY3RzIHRvIHN0aXRjaC4gSnVzdCBhcHBlbmQgdGhl
IGxhc3QgbGluZS4KLSAgICAgICAgbmV3UmVjdHMuYXBwZW5kKGxhc3RSZWN0KTsKLSAgICAgICAg
cmVjdHMuc3dhcChuZXdSZWN0cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gU3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgdW50
aWwgdGhlIHNlY29uZCB0byB0aGUgbGFzdCBpbmNsdWRlZC4KLSAgICBjdXJyZW50UmVjdCA9IHJl
Y3RzW2luZGV4RnJvbVN0YXJ0XTsKLSAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgIT0gaW5kZXhG
cm9tRW5kKQotICAgICAgICBjdXJyZW50UmVjdC51bml0ZShyZWN0c1srK2luZGV4RnJvbVN0YXJ0
XSk7Ci0gICAgCi0gICAgbmV3UmVjdHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKLSAgICBuZXdSZWN0
cy5hcHBlbmQobGFzdFJlY3QpOwotCi0gICAgcmVjdHMuc3dhcChuZXdSZWN0cyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiBnYXBSZWN0cykKLXsKLSAgICBzdGl0Y2hSZWN0
cyhyZWN0cyk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYWxpZ25tZW50cyBh
cmUgY29ycmVjdCBmb3IgTFRSIHRleHQuCi0gICAgLy8gV2Ugc2hvdWxkIGFsc28gYWNjb3VudCBm
b3IgUlRMLgotICAgIHVpbnQ4X3QgYWxpZ25tZW50c1szXTsKLSAgICBpZiAocmVjdHMuc2l6ZSgp
ID09IDEpIHsKLSAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudExlZnQgfCBBbGlnbm1l
bnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1sxXSA9IEFsaWdubWVudE5vbmU7Ci0gICAgICAg
IGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnROb25lOwotICAgIH0gZWxzZSBpZiAocmVjdHMuc2l6
ZSgpID09IDIpIHsKLSAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OwotICAg
ICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdDsKLSAgICAgICAgYWxpZ25tZW50c1sy
XSA9IEFsaWdubWVudE5vbmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWxpZ25tZW50c1swXSA9
IEFsaWdubWVudFJpZ2h0OwotICAgICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdCB8
IEFsaWdubWVudFJpZ2h0OwotICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50TGVmdDsK
LSAgICB9Ci0KLSAgICAvLyBBY2NvdW50IGZvciBlYWNoIEdhcFJlY3RzIGJ5IGV4dGVuZGluZyB0
aGUgZWRnZSBvZiBjZXJ0YWluIExheW91dFJlY3RzIHRvIG1lZXQgdGhlIGdhcC4KLSAgICBmb3Ig
KGF1dG8mIGdhcCA6IGdhcFJlY3RzKQotICAgICAgICBleHBhbmRGb3JHYXAocmVjdHMsIGFsaWdu
bWVudHMsIGdhcCk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIDMgcmVjdHMgd2UgbWlnaHQgbmVlZCBv
bmUgZmluYWwgR2FwUmVjdHMgdG8gYWxpZ24gdGhlIGVkZ2VzLgotICAgIGlmIChyZWN0cy5zaXpl
KCkgPT0gMykgewotICAgICAgICBMYXlvdXRSZWN0IGxlZnQ7Ci0gICAgICAgIExheW91dFJlY3Qg
cmlnaHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50TGVmdCkgewotICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3Rz
W2ldOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlY3RzW2ldLngoKSA8IGxlZnQueCgpKQot
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmVjdHNbaV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudFJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBy
ZWN0c1tpXTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVjdHNbaV0ueCgpICsgcmVjdHNb
aV0ud2lkdGgoKSkgPiAocmlnaHQueCgpICsgcmlnaHQud2lkdGgoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcmVjdHNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWxlZnQuaXNFbXB0eSgpIHx8ICFyaWdodC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIEdhcFJlY3RzIGdhcDsKLSAgICAgICAgICAgIGdhcC51bml0ZUxlZnQobGVmdCk7Ci0gICAg
ICAgICAgICBnYXAudW5pdGVSaWdodChyaWdodCk7Ci0gICAgICAgICAgICBleHBhbmRGb3JHYXAo
cmVjdHMsIGFsaWdubWVudHMsIGdhcCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMs
IGJvb2wgaXNUZXh0T25seSkKLXsKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMgPSBy
ZWN0czsKLSAgICBtX2lzVGV4dE9ubHkgPSBpc1RleHRPbmx5OwotCi0gICAgbV9sYXN0U2VsZWN0
aW9uQ2hhbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwotCi0gICAg
Y29tcGFjdFJlY3RzV2l0aEdhcFJlY3RzKG1fY3VycmVudFNlbGVjdGlvblJlY3RzLCBnYXBSZWN0
cyk7Ci0KLSAgICAvLyBEYXRhRGV0ZWN0b3JzIG5lZWRzIHRoZXNlIHJldmVyc2VkIGluIG9yZGVy
IHRvIHBsYWNlIHRoZSBhcnJvdyBpbiB0aGUgcmlnaHQgbG9jYXRpb24uCi0gICAgbV9jdXJyZW50
U2VsZWN0aW9uUmVjdHMucmV2ZXJzZSgpOwotCi0gICAgTE9HKFNlcnZpY2VzLCAiU2VydmljZXNP
dmVybGF5Q29udHJvbGxlciAtIFNlbGVjdGlvbiByZWN0cyBjaGFuZ2VkIC0gTm93IGhhdmUgJWx1
XG4iLCByZWN0cy5zaXplKCkpOwotCi0gICAgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlY3RzKTsKLSAgICBVTlVTRURfUEFSQU0oZ2FwUmVjdHMp
OwotICAgIFVOVVNFRF9QQVJBTShpc1RleHRPbmx5KTsKLSNlbmRpZgotfQotCi12b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdl
ZCgpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID4gMTA5MAotICAgIExPRyhTZXJ2aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIg
LSBUZWxlcGhvbmUgbnVtYmVyIHJhbmdlcyBjaGFuZ2VkXG4iKTsKLSAgICBidWlsZFBob25lTnVt
YmVySGlnaGxpZ2h0cygpOwotI2VuZGlmCi19Ci0KLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQoSGlnaGxpZ2h0JiBoaWdobGlnaHQsIGJvb2wmIG1v
dXNlSXNPdmVyQnV0dG9uKSBjb25zdAotewotICAgIEJvb2xlYW4gb25CdXR0b247Ci0gICAgYm9v
bCBob3ZlcmVkID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxpZ2h0LmRkSGln
aGxpZ2h0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlvbiwgJm9uQnV0dG9uKTsKLSAgICBtb3Vz
ZUlzT3ZlckJ1dHRvbiA9IG9uQnV0dG9uOwotICAgIHJldHVybiBob3ZlcmVkOwotfQotCi1zdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbWFpbmlu
Z1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24oSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFoaWdobGlnaHQpCi0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzOjp6ZXJvKCk7Ci0KLSAgICBhdXRvIG1pbmltdW1UaW1lVW50aWxIaWdobGln
aHRTaG91bGRCZVNob3duID0gMjAwX21zOwotICAgIGlmIChtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgbWluaW11bVRpbWVVbnRpbEhpZ2hs
aWdodFNob3VsZEJlU2hvd24gPSAxMDAwX21zOwotCi0gICAgYm9vbCBtb3VzZVByZXNzZWQgPSBm
YWxzZTsKLSAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViUGFnZS5tYWluRnJhbWUoKSkK
LSAgICAgICAgbW91c2VQcmVzc2VkID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZVBy
ZXNzZWQoKTsKLQotICAgIC8vIEhpZ2hsaWdodCBoeXN0ZXJlc2lzIGlzIG9ubHkgZm9yIHNlbGVj
dGlvbiBzZXJ2aWNlcywgYmVjYXVzZSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMgYXJlIGFs
cmVhZHkgbXVjaCBtb3JlIHN0YWJsZQotICAgIC8vIGJ5IHZpcnR1ZSBvZiBiZWluZyBleHBhbmRl
ZCB0byBpbmNsdWRlIHRoZSBlbnRpcmUgdGVsZXBob25lIG51bWJlci4gSG93ZXZlciwgd2Ugd2ls
bCBzdGlsbCBhdm9pZCBoaWdobGlnaHRpbmcKLSAgICAvLyB0ZWxlcGhvbmUgbnVtYmVycyB3aGls
ZSB0aGUgbW91c2UgaXMgZG93bi4KLSAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxp
Z2h0OjpUeXBlOjpUZWxlcGhvbmVOdW1iZXIpCi0gICAgICAgIHJldHVybiBtb3VzZVByZXNzZWQg
PyBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA6IDBfbXM7Ci0KLSAgICBh
dXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwotICAgIGF1dG8gdGlt
ZVNpbmNlTGFzdFNlbGVjdGlvbkNoYW5nZSA9IG5vdyAtIG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRp
bWU7Ci0gICAgYXV0byB0aW1lU2luY2VIaWdobGlnaHRCZWNhbWVBY3RpdmUgPSBub3cgLSBtX25l
eHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lOwotICAgIGF1dG8gdGltZVNpbmNlTGFzdE1vdXNl
VXAgPSBtb3VzZVByZXNzZWQgPyAwX21zIDogbm93IC0gbV9sYXN0TW91c2VVcFRpbWU7Ci0KLSAg
ICBhdXRvIHJlbWFpbmluZ0RlbGF5ID0gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJl
U2hvd24gLSBzdGQ6Om1pbihzdGQ6Om1pbih0aW1lU2luY2VMYXN0U2VsZWN0aW9uQ2hhbmdlLCB0
aW1lU2luY2VIaWdobGlnaHRCZWNhbWVBY3RpdmUpLCB0aW1lU2luY2VMYXN0TW91c2VVcCk7Ci0g
ICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM+KHJlbWFpbmluZ0RlbGF5KTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lckZpcmVkKFRpbWVyPFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI+JikKLXsKLSAgICBib29sIG1vdXNlSXNPdmVyQnV0dG9uOwotICAgIGRl
dGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckJ1dHRvbik7Ci19Ci0KLXZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Ci17Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJBY3RpdmVIaWdo
bGlnaHQoKQotewotICAgIGlmICghbV9hY3RpdmVIaWdobGlnaHQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9PSBtX2FjdGl2
ZUhpZ2hsaWdodCkKLSAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PSBudWxscHRyOwotICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZU
eXBlKEhpZ2hsaWdodDo6VHlwZSB0eXBlKQotewotICAgIFZlY3RvcjxSZWZQdHI8SGlnaGxpZ2h0
Pj4gaGlnaGxpZ2h0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3Rl
bnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSB0eXBl
KQotICAgICAgICAgICAgaGlnaGxpZ2h0c1RvUmVtb3ZlLmFwcGVuZChoaWdobGlnaHQpOwotICAg
IH0KLQotICAgIHdoaWxlICghaGlnaGxpZ2h0c1RvUmVtb3ZlLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9wb3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZShoaWdobGlnaHRzVG9SZW1vdmUudGFrZUxhc3Qo
KSk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRQaG9uZU51bWJl
ckhpZ2hsaWdodHMoKQotewotICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSGFzaFNldDxSZWZQdHI8SGlnaGxpZ2h0Pj4gbmV3UG90ZW50aWFs
SGlnaGxpZ2h0czsKLQotICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1l
KCk7Ci0gICAgRnJhbWVWaWV3JiBtYWluRnJhbWVWaWV3ID0gKm1haW5GcmFtZS0+dmlldygpOwot
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgYXV0byYgcmFuZ2VzID0gZnJhbWUt
PmVkaXRvcigpLmRldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7Ci0gICAgICAgIGZvciAo
YXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwg
Y2hva2UgaWYgdGhlIHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KLSAg
ICAgICAgICAgIC8vIFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoYXQgY2FzZT8KLSAgICAgICAgICAg
IEludFJlY3QgcmVjdCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsK
LQotICAgICAgICAgICAgLy8gQ29udmVydCB0byB0aGUgbWFpbiBkb2N1bWVudCdzIGNvb3JkaW5h
dGUgc3BhY2UuCi0gICAgICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBj
YWxsIGNvbnRlbnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0
byBnZXQgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgICAgICAgICAvLyBXZSBzaG91
bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9y
IGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlz
Ci0gICAgICAgICAgICAvLyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdlIG5lZWQgd2hlbiB5b3Ug
aGF2ZSBhIHRvcENvbnRlbnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIuCi0gICAgICAgICAgICBG
cmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwot
ICAgICAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICByZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250
ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOwot
Ci0gICAgICAgICAgICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIFJldGFpblB0
cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRl
V2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dS
ZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdodE91
dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykp
OwotCi0gICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNy
ZWF0ZUZvclRlbGVwaG9uZU51bWJlcigqdGhpcywgZGRIaWdobGlnaHQsIHJhbmdlKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVp
dmFsZW50SGlnaGxpZ2h0cyhuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGU6
OlRlbGVwaG9uZU51bWJlcik7Ci0KLSAgICBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygp
OwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGln
aGxpZ2h0KCkKLXsKLSAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhpZ2hs
aWdodHM7Ci0KLSAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwotICAgIGNnUmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7Ci0KLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgRnJhbWUq
IG1haW5GcmFtZSA9IG1fd2ViUGFnZS5tYWluRnJhbWUoKTsKLSAgICAgICAgRnJhbWVWaWV3JiBt
YWluRnJhbWVWaWV3ID0gKm1haW5GcmFtZS0+dmlldygpOwotICAgICAgICBGcmFtZVZpZXcqIHZp
ZXdGb3JSYW5nZSA9IHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotCi0g
ICAgICAgIGZvciAoYXV0byYgcmVjdCA6IG1fY3VycmVudFNlbGVjdGlvblJlY3RzKSB7Ci0gICAg
ICAgICAgICBJbnRSZWN0IGN1cnJlbnRSZWN0ID0gc25hcHBlZEludFJlY3QocmVjdCk7Ci0gICAg
ICAgICAgICBjdXJyZW50UmVjdC5zZXRMb2NhdGlvbihtYWluRnJhbWVWaWV3LndpbmRvd1RvQ29u
dGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9u
KCkpKSk7Ci0gICAgICAgICAgICBjZ1JlY3RzLmFwcGVuZCgoQ0dSZWN0KWN1cnJlbnRSZWN0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2dSZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgUmV0YWluUHRyPERE
SGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRo
UmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMu
YmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodE5vT3V0bGlu
ZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFu
Z2UpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJl
c2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRzKG5ld1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hs
aWdodDo6VHlwZTo6U2VsZWN0aW9uKTsKLQotICAgIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGln
aHRzKCk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVwbGFjZUhpZ2hs
aWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMoSGFzaFNldDxSZWZQdHI8
SGlnaGxpZ2h0Pj4mIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hsaWdodDo6VHlwZSB0eXBl
KQotewotICAgIC8vIElmIGFueSBvbGQgSGlnaGxpZ2h0cyBhcmUgZXF1aXZhbGVudCAoYnkgUmFu
Z2UpIHRvIGEgbmV3IEhpZ2hsaWdodCwgcmV1c2UgdGhlIG9sZAotICAgIC8vIG9uZSBzbyB0aGF0
IGFueSBtZXRhZGF0YSBpcyByZXRhaW5lZC4KLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+
PiByZXVzZWRQb3RlbnRpYWxIaWdobGlnaHRzOwotCi0gICAgZm9yIChhdXRvJiBvbGRIaWdobGln
aHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKG9sZEhpZ2hsaWdodC0+
dHlwZSgpICE9IHR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGF1
dG8mIG5ld0hpZ2hsaWdodCA6IG5ld1BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgICAg
IGlmIChoaWdobGlnaHRzQXJlRXF1aXZhbGVudChvbGRIaWdobGlnaHQuZ2V0KCksIG5ld0hpZ2hs
aWdodC5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBvbGRIaWdobGlnaHQtPnNldERESGlnaGxp
Z2h0KG5ld0hpZ2hsaWdodC0+ZGRIaWdobGlnaHQoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXVz
ZWRQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChvbGRIaWdobGlnaHQpOwotICAgICAgICAgICAgICAg
IG5ld1BvdGVudGlhbEhpZ2hsaWdodHMucmVtb3ZlKG5ld0hpZ2hsaWdodCk7Ci0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
bW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUodHlwZSk7Ci0KLSAgICBtX3BvdGVudGlh
bEhpZ2hsaWdodHMuYWRkKG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYmVnaW4oKSwgbmV3UG90ZW50
aWFsSGlnaGxpZ2h0cy5lbmQoKSk7Ci0gICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLmFkZChyZXVz
ZWRQb3RlbnRpYWxIaWdobGlnaHRzLmJlZ2luKCksIHJldXNlZFBvdGVudGlhbEhpZ2hsaWdodHMu
ZW5kKCkpOwotfQotCi1ib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Omhhc1JlbGV2YW50
U2VsZWN0aW9uU2VydmljZXMoKQotewotICAgIHJldHVybiAobV9pc1RleHRPbmx5ICYmIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmhhc1NlbGVjdGlvblNlcnZpY2VzKCkpIHx8IFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmhhc1JpY2hDb250ZW50U2VydmljZXMoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpCi17Ci0gICAgaWYg
KG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fc2Vydmlj
ZXNPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLm1haW5GcmFtZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpLmlzRW1wdHko
KSAmJiAhaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjcmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKLQotICAgIGJvb2wgbW91c2VJc092ZXJCdXR0
b247Ci0gICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKLX0K
LQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQo
KQotewotICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywg
UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgbV9zZXJ2aWNlc092ZXJs
YXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2ViUGFnZS5tYWluRnJhbWUoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci19Ci0KLVZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1
c2VkRnJhbWUoKQotewotICAgIFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKTsKLSAg
ICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4oKTsKLQot
ICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5l
ZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygpOwotfQotCi1ib29sIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hs
aWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKQotewotICAgIGlmIChhID09IGIpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoYS0+dHlwZSgpID09IGItPnR5cGUoKSAmJiBhcmVSYW5nZXNFcXVhbChhLT5y
YW5nZSgpLCBiLT5yYW5nZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5p
bmdTZWxlY3Rpb25IaWdobGlnaHQoSGlnaGxpZ2h0JiBzZWxlY3Rpb25IaWdobGlnaHQpCi17Ci0g
ICAgaWYgKHNlbGVjdGlvbkhpZ2hsaWdodC50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxl
Y3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNlbGVjdGlvbigpOwotICAg
IGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBSZWZQdHI8UmFuZ2U+IGFjdGl2ZVNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgaWYgKCFhY3RpdmVTZWxlY3Rpb25SYW5nZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGln
aGxpZ2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgIT0gSGlnaGxpZ2h0OjpU
eXBlOjpUZWxlcGhvbmVOdW1iZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoaGlnaGxpZ2h0LT5yYW5nZSgpLT5jb250YWlucygqYWN0aXZlU2VsZWN0aW9uUmFuZ2UpKQot
ICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVB
Y3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCi17
Ci0gICAgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gPSBmYWxzZTsKLQotICAgIFJl
ZlB0cjxIaWdobGlnaHQ+IG5ld0FjdGl2ZUhpZ2hsaWdodDsKLQotICAgIGZvciAoYXV0byYgaGln
aGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQt
PnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikgewotICAgICAgICAgICAgLy8g
SWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhIG5ldyBhY3RpdmUgaGlnaGxpZ2h0LCBhbmQgaXQncwot
ICAgICAgICAgICAgLy8gYSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCwgcHJlZmVyIHRoYXQg
b3ZlciB0aGlzIHNlbGVjdGlvbiBoaWdobGlnaHQuCi0gICAgICAgICAgICBpZiAobmV3QWN0aXZl
SGlnaGxpZ2h0ICYmIG5ld0FjdGl2ZUhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlw
ZTo6VGVsZXBob25lTnVtYmVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICAvLyBJZiB0aGlzIGhpZ2hsaWdodCBoYXMgbm8gY29tcGF0aWJsZSBzZXJ2aWNlcywgaXQg
Y2FuJ3QgYmUgYWN0aXZlLgotICAgICAgICAgICAgaWYgKCFoYXNSZWxldmFudFNlbGVjdGlvblNl
cnZpY2VzKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiB0aGlzIGhpZ2hsaWdodCBpc24ndCBob3ZlcmVkLCBpdCBjYW4ndCBiZSBhY3RpdmUu
Ci0gICAgICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247Ci0gICAgICAgIGlmICghbW91c2VJc092
ZXJIaWdobGlnaHQoKmhpZ2hsaWdodCwgbW91c2VJc092ZXJCdXR0b24pKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgbmV3QWN0aXZlSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0OwotICAg
ICAgICBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IG1vdXNlSXNPdmVyQnV0dG9u
OwotICAgIH0KLQotICAgIC8vIElmIG91ciBuZXcgYWN0aXZlIGhpZ2hsaWdodCBpcyBhIHNlbGVj
dGlvbiBoaWdobGlnaHQgdGhhdCBpcyBjb21wbGV0ZWx5IGNvbnRhaW5lZAotICAgIC8vIGJ5IG9u
ZSBvZiB0aGUgcGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMsIHdlJ2xsIG1ha2UgdGhlIHBob25lIG51
bWJlciBoaWdobGlnaHQgYWN0aXZlIGV2ZW4gaWYgaXQncyBub3QgaG92ZXJlZC4KLSAgICBpZiAo
bmV3QWN0aXZlSGlnaGxpZ2h0ICYmIG5ld0FjdGl2ZUhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hs
aWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIGlmIChIaWdobGlnaHQqIGNvbnRhaW5l
ZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodCA9IGZpbmRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRD
b250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KCpuZXdBY3RpdmVIaWdobGlnaHQpKSB7Ci0gICAg
ICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBjb250YWluZWRUZWxlcGhvbmVOdW1iZXJIaWdo
bGlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIFdlIHdpbGwgYWx3YXlzIGluaXRpYWxseSBjaG9vc2Ug
dGhlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IG92ZXIgdGhlIHNlbGVjdGlvbiBoaWdobGln
aHQgaWYgdGhlCi0gICAgICAgICAgICAvLyBtb3VzZSBpcyBvdmVyIHRoZSB0ZWxlcGhvbmUgbnVt
YmVyIGhpZ2hsaWdodCdzIGJ1dHRvbiwgc28gd2Uga25vdyB0aGF0IGl0J3Mgbm90IGhvdmVyZWQg
aWYgd2UgZ290IGhlcmUuCi0gICAgICAgICAgICBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5oaWdobGln
aHRzQXJlRXF1aXZhbGVudChtX2FjdGl2ZUhpZ2hsaWdodC5nZXQoKSwgbmV3QWN0aXZlSGlnaGxp
Z2h0LmdldCgpKSkgewotICAgICAgICAvLyBXaGVuIHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgaGln
aGxpZ2h0LCB3ZSBtaWdodCBlbmQgdXAgaW4gZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0IG11bHRp
cGxlIHRpbWVzCi0gICAgICAgIC8vIGJlZm9yZSB0aGUgbmV3IGhpZ2hsaWdodCBhY3R1YWxseSBi
ZWNvbWVzIGFjdGl2ZS4gS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBuZXh0LWJ1dC1ub3QteWV0LWFj
dGl2ZQotICAgICAgICAvLyBoaWdobGlnaHQsIGFuZCBvbmx5IHJlc2V0IHRoZSBhY3RpdmUgaGln
aGxpZ2h0IGh5c3RlcmVzaXMgd2hlbiB0aGF0IGNoYW5nZXMuCi0gICAgICAgIGlmIChtX25leHRB
Y3RpdmVIaWdobGlnaHQgIT0gbmV3QWN0aXZlSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBtX25l
eHRBY3RpdmVIaWdobGlnaHQgPSBuZXdBY3RpdmVIaWdobGlnaHQ7Ci0gICAgICAgICAgICBtX25l
eHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6
bm93KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhp
Z2hsaWdodCA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0KSB7Ci0g
ICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZU91dCgpOwotICAgICAgICAgICAgbV9h
Y3RpdmVIaWdobGlnaHQgPSBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byByZW1h
aW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID0gdGhpcy0+cmVtYWluaW5nVGlt
ZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bihuZXdBY3RpdmVIaWdobGlnaHQuZ2V0KCkpOwot
ICAgICAgICBpZiAocmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA+IHN0
ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OmR1cmF0aW9uOjp6ZXJvKCkpIHsKLSAgICAgICAgICAg
IG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIuc3RhcnRPbmVTaG90KHJlbWFpbmluZ1Rp
bWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQgPSBtX25leHRBY3RpdmVIaWdobGln
aHQucmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCkgewotICAgICAg
ICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPmxheWVyKCkuYWRkQ2hpbGQobV9hY3RpdmVIaWdobGln
aHQtPmxheWVyKCkpOwotICAgICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQtPmZhZGVJbigpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQot
ewotICAgIG1fbW91c2VQb3NpdGlvbiA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhldmVudC5wb3NpdGlvbigpKTsKLQotICAgIGJv
b2wgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gPSBmYWxzZTsKLSAgICBkZXRlcm1p
bmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOwotCi0g
ICAgLy8gQ2FuY2VsIHRoZSBwb3RlbnRpYWwgY2xpY2sgaWYgYW55IGJ1dHRvbiBvdGhlciB0aGFu
IHRoZSBsZWZ0IGJ1dHRvbiBjaGFuZ2VzIHN0YXRlLCBhbmQgaWdub3JlIHRoZSBldmVudC4KLSAg
ICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246OkxlZnRCdXR0b24pIHsKLSAgICAg
ICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGls
ZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0
aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlUmVsZWFzZWQpIHsKLSAgICAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbW91c2VEb3du
SGlnaGxpZ2h0ID0gbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQ7Ci0gICAgICAg
IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLQotICAgICAg
ICBtX2xhc3RNb3VzZVVwVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwot
Ci0gICAgICAgIGlmIChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiAmJiBtb3VzZURv
d25IaWdobGlnaHQpIHsKLSAgICAgICAgICAgIGhhbmRsZUNsaWNrKG1fbW91c2VQb3NpdGlvbiwg
Km1vdXNlRG93bkhpZ2hsaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRo
ZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRpYWwg
Y2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCkgewotICAgICAgICBpZiAobV9jdXJyZW50TW91c2VE
b3duT25CdXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24p
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB0aGUgbW91c2Ugd2VudCBkb3duIG92ZXIgdGhlIGFjdGl2ZSBoaWdobGln
aHQncyBidXR0b24sIHRyYWNrIHRoaXMgYXMgYSBwb3RlbnRpYWwgY2xpY2suCi0gICAgaWYgKGV2
ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQpIHsKLSAgICAgICAgaWYg
KG1fYWN0aXZlSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKSB7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG1fYWN0
aXZlSGlnaGxpZ2h0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5Jiwg
RnJhbWUmIGZyYW1lKQotewotICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwotICAgIGJ1aWxkU2Vs
ZWN0aW9uSGlnaGxpZ2h0KCk7Ci0KLSAgICBib29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0
QnV0dG9uOwotICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhp
Z2hsaWdodEJ1dHRvbik7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFu
ZGxlQ2xpY2soY29uc3QgSW50UG9pbnQmIGNsaWNrUG9pbnQsIEhpZ2hsaWdodCYgaGlnaGxpZ2h0
KQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXco
KTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQg
d2luZG93UG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coY2xpY2tQb2ludCk7Ci0K
LSAgICBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikg
ewotICAgICAgICBhdXRvIHRlbGVwaG9uZU51bWJlclJhbmdlcyA9IHRlbGVwaG9uZU51bWJlclJh
bmdlc0ZvckZvY3VzZWRGcmFtZSgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFRl
bGVwaG9uZU51bWJlcnM7Ci0gICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5yZXNlcnZl
Q2FwYWNpdHkodGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0
byYgcmFuZ2UgOiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMpCi0gICAgICAgICAgICBzZWxlY3RlZFRl
bGVwaG9uZU51bWJlcnMuYXBwZW5kKHJhbmdlLT50ZXh0KCkpOwotCi0gICAgICAgIG1fd2ViUGFn
ZS5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sobV93ZWJQYWdlLmNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRl
bGVwaG9uZU51bWJlcnMsIHdpbmRvd1BvaW50KTsKLSAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50
eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhvbmVOdW1iZXIpCi0gICAgICAgIG1fd2Vi
UGFnZS5oYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhoaWdobGlnaHQucmFuZ2UoKS0+dGV4dCgp
LCB3aW5kb3dQb2ludCk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlk
Q3JlYXRlSGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KQotewotICAgIEFTU0VSVCghbV9o
aWdobGlnaHRzLmNvbnRhaW5zKGhpZ2hsaWdodCkpOwotICAgIG1faGlnaGxpZ2h0cy5hZGQoaGln
aGxpZ2h0KTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsRGVzdHJv
eUhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsKLSAgICBBU1NFUlQobV9oaWdobGln
aHRzLmNvbnRhaW5zKGhpZ2hsaWdodCkpOwotICAgIG1faGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxp
Z2h0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyAjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikg
JiYgUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239555</attachid>
            <date>2014-10-09 12:28:24 -0700</date>
            <delta_ts>2014-10-09 13:02:06 -0700</delta_ts>
            <desc>move to mainframe</desc>
            <filename>soc.diff</filename>
            <type>text/plain</type>
            <size>112095</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZmU3OWQ4Li5lNDI2MGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTQtMTAtMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIHRvIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQxNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTg1NDYyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIGZyb20g
V2ViS2l0MiB0byBXZWJDb3JlLCBhcyBpdCBjYW4gYmUgdXNlZCBieSBib3RoIExlZ2FjeSBXZWJL
aXQgYW5kIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6fk5vdGlmaWVyKToKKyAgICAgICAgTm90aWZ5IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcyB2aWEgUGFnZSBpbnN0ZWFkIG9mIEVk
aXRvckNsaWVudC4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2
aWNlcyk6CisgICAgICAgIEFkZCBDaHJvbWVDbGllbnQgZnVuY3Rpb25zIGZvciBzZXJ2aWNlcyBh
Y3Rpb25zLgorCisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6c2VsZWN0aW9uUmVjdHNE
aWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgRWRpdG9yQ2xpZW50IGZ1bmN0aW9u
cyBmb3Igbm90aWZ5aW5nIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcywKKyAg
ICAgICAgYmVjYXVzZSBpdCBsaXZlcyBpbiBXZWJDb3JlIHByb3BlciBub3cuCisKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgS2VlcCBhIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb24g
UGFnZS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICBVc2Ugd2luZG93VG9Db250ZW50
cyBpbnN0ZWFkIG9mIHJvb3RWaWV3VG9Db250ZW50czsgZXZlbnRzIGNvbWUgaW4gaW4gd2luZG93
IGNvb3JkaW5hdGVzLgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5n
c0ZvckxheWVyKToKKyAgICAgICAgR2V0IFNldHRpbmdzIGZyb20gTWFpbkZyYW1lLCBub3QgUGFn
ZS4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgIEFkZCBzZXJ2aWNlc0Nv
bnRyb2xzRW5hYmxlZCBzZXR0aW5nLgorCisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBwYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tLgorICAg
ICAgICBNb3ZlZCBmcm9tIFdlYktpdDIuIE1vc3RseSBtZWNoYW5pY2FsIGNoYW5nZXMsIHBsdXM6
CisgICAgICAgICAgICAtIFVzZSB3aW5kb3dUb0NvbnRlbnRzIGluc3RlYWQgb2Ygcm9vdFZpZXdU
b0NvbnRlbnRzOyBldmVudHMgY29tZSBpbiBpbiB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgICAg
ICAgICAtIEN1dCBvZmYgcmVidWlsZCogaWYgc2VydmljZUNvbnRyb2xzRW5hYmxlZCBzZXR0aW5n
IGlzIGZhbHNlCisgICAgICAgICAgICAtIERvbid0IGNyZWF0ZSB0aGUgb3ZlcmxheSBpZiBzZXJ2
aWNlQ29udHJvbHNFbmFibGVkIHNldHRpbmcgaXMgZmFsc2UKKyAgICAgICAgICAgIC0gU2VuZCBj
bGljayBldmVudHMgdmlhIENocm9tZUNsaWVudC4KKyAgICAgICAgICAgIC0gVGllIG91ciBsaWZl
dGltZSB0byBNYWluRnJhbWUgaW5zdGVhZCBvZiBQYWdlLCBhbmQgZ2V0IGxvdHMgb2YgdGhpbmdz
IGZyb20gTWFpbkZyYW1lIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6
CisgICAgICAgIEFkZCBTZXJ2aWNlcyBsb2dnaW5nIGNoYW5uZWwgKG1vdmVkIGZyb20gV2ViS2l0
MikuCisKIDIwMTQtMTAtMDkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1MgRm9udCBMb2FkaW5nXSBEZWNyZW1lbnQgdGhlIGZvbnQgbG9hZGluZyBjb3Vu
dCBiZWZvcmUgbm90aWZ5aW5nIGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIzNmY5ZmEuLmI3ZWMyYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTExMDYsNiArMTEwNiw4IEBACiAJCTJEOEZFQkREMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9z
c2ZhZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ4RkVCREIxNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmggKi87IH07
CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovOyB9OwogCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJEOTNBRUUzMTlE
RjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkzQUVFMTE5REY1NjQxMDAyQTg2
QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oICovOyB9OworCQkyRDkzQUVFNDE5REY1
NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTNBRUUyMTlERjU2NDEwMDJBODZD
MyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tICovOyB9OwogCQkyRDk3RjA0NzE5REQ0
MTNDMDAxRUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUFFMzJDMTlEQ0FGNjAwMEUwMDJEMiAv
KiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovOyB9OwogCQkyRDk3RjA0ODE5REQ0MTQwMDAx
RUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFBRTMyRDE5RENBRjYwMDBFMDAyRDIgLyogTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50LmggKi87IH07CiAJCTJEOUEyNDZFMTVCOUJEMDAwMEQzNDUyNyAvKiBE
T01TZWN1cml0eVBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ5QTI0NkIxNUI5QkJERDAwRDM0NTI3IC8qIERPTVNlY3VyaXR5UG9saWN5Lmgg
Ki87IH07CkBAIC04MTA2LDYgKzgxMDgsOCBAQAogCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExheW91dFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MDUw
QkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDkwNjYwQzA2NjVEOTM3MDA2QjZGMUEgLyogRGF0YVRyYW5zZmVyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YVRyYW5z
ZmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKKwkJMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDkzQUVFMjE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUEyNDZBMTVCOUJCREQwMEQzNDUy
NyAvKiBET01TZWN1cml0eVBvbGljeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01TZWN1cml0eVBvbGljeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEOUEyNDZCMTVCOUJCREQwMEQzNDUyNyAvKiBET01TZWN1cml0eVBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TZWN1cml0eVBvbGljeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlBMjQ3MDE1QjlDMjk1MDBEMzQ1MjcgLyogRE9NRE9N
U2VjdXJpdHlQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9N
U2VjdXJpdHlQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTUzLDYg
KzE3NTU3LDggQEAKIAkJCQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xs
ZXJNYWMubW0gKi8sCiAJCQkJOTNDMDlBN0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxl
ck1hYy5tbSAqLywKIAkJCQkxQzI2NDk3QjBEN0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAg
Ki8sCisJCQkJMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLywKKwkJCQkyRDkzQUVFMjE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSAqLywKIAkJCQlFMUMyRjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0
dGluZ3NNYWMubW0gKi8sCiAJCQkJMjYyNTVGMDIxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2Vu
dE1hYy5tbSAqLywKIAkJCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1l
Vmlldy5oICovLApAQCAtMjM0OTQsNiArMjM1MDAsNyBAQAogCQkJCUZEMzE1RkZGMTJCMDI2NzYw
MEMxQTM1OSAvKiBDaGFubmVsTWVyZ2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
MDIxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyRDkzQUVFMzE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhE
IC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTI4NDAwLDYgKzI4NDA3LDcgQEAKIAkJCQlFMUE1Rjk5QjBFN0VBQTI1
MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3NTc5M0VDODBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDEwQjdFNzIxMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJEOTNBRUU0MTlERjU2NDEwMDJBODZDMyAvKiBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBREVEREIw
RTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg2NjI5RDIwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBjMjAzMzk1
Li40ZjFiMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC02MSw2ICs2MSw3IEBA
CiAjaW5jbHVkZSAiSW5zZXJ0TGlzdENvbW1hbmQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiS2lsbFJpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNs
dWRlICJNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEwMiw2ICsxMDMsMTAgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorI2lu
Y2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZCB7CkBAIC0zMzM5LDcgKzMzNDQsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMoVGltZXI8RWRpdG9yPiYpCiAKIHZvaWQgRWRpdG9yOjpz
Y2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiB7Ci0gICAgaWYgKCFzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzKCkgfHwgIWNsaWVudCgpKQorICAgIGlmICghc2hvdWxkRGV0ZWN0
VGVsZXBob25lTnVtYmVycygpIHx8ICFjbGllbnQoKSB8fCAhbV9mcmFtZS5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuY2xlYXIo
KTsKQEAgLTMzNDgsNyArMzM1Myw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVs
ZXBob25lTnVtYmVycygpCiAKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5nZSgpKSB7
Ci0gICAgICAgIGNsaWVudCgpLT5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKKyAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTMzNzYsNyArMzM4MSw3IEBAIHZvaWQgRWRpdG9y
OjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJhbmdlPiBl
eHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAog
ICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBjbGllbnQoKS0+c2VsZWN0ZWRUZWxl
cGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CisgICAgICAgIG1fZnJhbWUubWFpbkZyYW1lKCku
c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2Vz
Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzg4LDcgKzMzOTMsNyBA
QCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAg
ICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAg
IH0KIAotICAgIGNsaWVudCgpLT5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKKyAgICBtX2ZyYW1lLm1haW5GcmFtZSgpLnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdW
aWV3JiBzdHJpbmdWaWV3LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAppbmRl
eCBhNjVmN2JlLi5mZDZiMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvblJlY3RHYXRoZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuY3BwCkBAIC0yNiwxMiArMjYsMTQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCIKIAorI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQorCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNp
bmNsdWRlICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNzAsOCArNzIsNyBAQCBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyOjpO
b3RpZmllcihTZWxlY3Rpb25SZWN0R2F0aGVyZXImIGdhdGhlcmVyKQogCiBTZWxlY3Rpb25SZWN0
R2F0aGVyZXI6Ok5vdGlmaWVyOjp+Tm90aWZpZXIoKQogewotICAgIGlmIChFZGl0b3JDbGllbnQq
IGNsaWVudCA9IG1fZ2F0aGVyZXIubV9yZW5kZXJWaWV3LnZpZXcoKS5mcmFtZSgpLmVkaXRvcigp
LmNsaWVudCgpKQotICAgICAgICBjbGllbnQtPnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKG1fZ2F0
aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVyLmlzVGV4dE9u
bHkoKSk7CisgICAgbV9nYXRoZXJlci5tX3JlbmRlclZpZXcudmlldygpLmZyYW1lKCkubWFpbkZy
YW1lKCkuc2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KG1fZ2F0aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVyLmlz
VGV4dE9ubHkoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6
Ok5vdGlmaWVyPiBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggMTJiNTg5OC4uMjg3ZmVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00MzgsNiArNDM4LDE0IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsZXZhbnRTZWxlY3Rp
b25TZXJ2aWNlcyhib29sIC8qIGlzVGV4dE9ubHkgKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsgfQog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDJiZTMwMTEuLmFjNGE4MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMTgxLDExICsxODEsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgPSAwOwogCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFu
Z2VkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0
IFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mLCBib29sKSB7IH0K
LSNlbmRpZgotCiAgICAgLy8gU3VwcG9ydCBmb3IgZ2xvYmFsIHNlbGVjdGlvbnMsIHVzZWQgb24g
cGxhdGZvcm1zIGxpa2UgdGhlIFggV2luZG93IFN5c3RlbSB0aGF0IHRyZWF0CiAgICAgLy8gc2Vs
ZWN0aW9uIGFzIGEgdHlwZSBvZiBjbGlwYm9hcmQuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
R2xvYmFsU2VsZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmNwcAppbmRleCA4NTUzNWJkLi43ODAzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL01haW5GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3Bw
CkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKICNp
bmNsdWRlICJXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmgiCiAKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogaW5saW5lIE1haW5GcmFtZTo6TWFpbkZyYW1lKFBhZ2UmIHBhZ2UsIEZy
YW1lTG9hZGVyQ2xpZW50JiBjbGllbnQpCkBAIC0zNyw2ICs0MSw5IEBAIGlubGluZSBNYWluRnJh
bWU6Ok1haW5GcmFtZShQYWdlJiBwYWdlLCBGcmFtZUxvYWRlckNsaWVudCYgY2xpZW50KQogICAg
ICwgbV9zZWxmT25seVJlZkNvdW50KDApCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9sYXRj
aGluZ1N0YXRlKHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsTGF0Y2hpbmdTdGF0ZT4oKSkKKyNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQorI2VuZGlmCiAjZW5kaWYKICAgICAs
IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcihzdGQ6Om1ha2VfdW5pcXVlPFdoZWVsRXZl
bnREZWx0YVRyYWNrZXI+KCkpCiAgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcihzdGQ6Om1h
a2VfdW5pcXVlPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZy
YW1lLmgKaW5kZXggMzhkOTQ1Zi4uZmQ5ZDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9NYWluRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCkBA
IC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZU92ZXJsYXlD
b250cm9sbGVyOwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKK2NsYXNzIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogCiBjbGFzcyBN
YWluRnJhbWUgZmluYWwgOiBwdWJsaWMgRnJhbWUgewpAQCAtNDcsOSArNDgsMTMgQEAgcHVibGlj
OgogICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyBy
ZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAKICNpZiBQTEFURk9STShNQUMpCisj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikKKyAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBzZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCkgeyByZXR1cm4gKm1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsgfQorCiAg
ICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0Y2hpbmdTdGF0ZSgpIHsgcmV0dXJuIG1fbGF0Y2hp
bmdTdGF0ZS5nZXQoKTsgfQogICAgIHZvaWQgcmVzZXRMYXRjaGluZ1N0YXRlKCk7Ci0jZW5kaWYK
KyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9O
VU1CRVJfREVURUNUSU9OKQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogcHJpdmF0ZToKICAg
ICBNYWluRnJhbWUoUGFnZSYsIEZyYW1lTG9hZGVyQ2xpZW50Jik7CkBAIC02MCw2ICs2NSw5IEBA
IHByaXZhdGU6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9s
bExhdGNoaW5nU3RhdGU+IG1fbGF0Y2hpbmdTdGF0ZTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI7CisjZW5kaWYKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXaGVlbEV2ZW50RGVs
dGFUcmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCmluZGV4IDdiNjI3NWMuLjllOGFjMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAgYm9vbCBQYWdl
T3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
CiAgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1vdXNlRXZl
bnQucG9zaXRpb24oKSk7CiAKICAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29v
cmRpbmF0ZXMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRz
KG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisgICAgICAgIG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5k
b3dUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CiAKICAgICAv
LyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KICAgICBpZiAoIWJvdW5kcygpLmNv
bnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXggMWU0NDk2NC4uYzY2MDY1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApA
QCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxG
cmFtZShGcmFtZSYgZnJhbWUpCiAKIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVT
ZXR0aW5nc0ZvckxheWVyKEdyYXBoaWNzTGF5ZXImIGxheWVyKQogewotICAgIFNldHRpbmdzJiBz
ZXR0aW5ncyA9IG1fbWFpbkZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBTZXR0aW5ncyYg
c2V0dGluZ3MgPSBtX21haW5GcmFtZS5zZXR0aW5ncygpOwogICAgIGxheWVyLnNldEFjY2VsZXJh
dGVzRHJhd2luZyhzZXR0aW5ncy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwogICAgIGxh
eWVyLnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOwogICAg
IGxheWVyLnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgppbmRleCAyMmYxNTRhLi4yZjVhNTQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaW4KQEAgLTIzMSwzICsyMzEsNSBAQCB1c2VJbWFnZURvY3VtZW50Rm9y
U3ViZnJhbWVQREYgaW5pdGlhbD1mYWxzZQogbWF4aW11bVNvdXJjZUJ1ZmZlclNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MzE4NzY3MTA0LCBjb25kaXRpb25hbD1NRURJQV9TT1VSQ0UKIAogbG9uZ01v
dXNlUHJlc3NFbmFibGVkIGluaXRpYWw9ZmFsc2UKKworc2VydmljZUNvbnRyb2xzRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBjb25kaXRpb25hbD1TRVJWSUNFX0NPTlRST0xTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3YzNhZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cl9oCisjZGVmaW5lIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXJfaAorCisjaWYgKEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pKSAm
JiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19EREhp
Z2hsaWdodCBEREhpZ2hsaWdodCwgKkRESGlnaGxpZ2h0UmVmOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBMYXlvdXRSZWN0OworY2xhc3MgTWFpbkZyYW1lOworc3RydWN0IEdhcFJlY3Rz
OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoTWFpbkZyYW1lJik7CisgICAgflNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJS
YW5nZXNDaGFuZ2VkKCk7CisgICAgdm9pZCBzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBW
ZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiwgYm9vbCBpc1RleHRP
bmx5KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBIaWdobGlnaHQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24oU2VydmljZXNPdmVybGF5
Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8UmFuZ2U+
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JUZWxlcGhv
bmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4sIFBhc3NSZWZQdHI8UmFuZ2U+KTsKKyAgICAgICAgfkhpZ2hsaWdodCgpOworCisgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgICAgIERESGlnaGxpZ2h0UmVmIGRkSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5nZXQoKTsgfQorICAgICAgICBSYW5n
ZSogcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdldCgpOyB9CisgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOyB9
CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIFRlbGVwaG9uZU51bWJl
ciwKKyAgICAgICAgICAgIFNlbGVjdGlvbgorICAgICAgICB9OworICAgICAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgICAgICB2b2lkIGZhZGVJbigpOworICAg
ICAgICB2b2lkIGZhZGVPdXQoKTsKKworICAgICAgICB2b2lkIHNldERESGlnaGxpZ2h0KERESGln
aGxpZ2h0UmVmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IEhpZ2hsaWdodChT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVm
PiwgUGFzc1JlZlB0cjxSYW5nZT4pOworCisgICAgICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVh
bCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgICAgIHZv
aWQgZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpOworCisgICAgICAgIFJldGFpblB0cjxEREhp
Z2hsaWdodFJlZj4gbV9kZEhpZ2hsaWdodDsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBtX3Jhbmdl
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV9ncmFwaGljc0xheWVy
OworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ciogbV9jb250cm9sbGVyOworICAgIH07CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSop
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFn
ZU92ZXJsYXkmLCBGcmFtZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVPdmVybGF5SWZO
ZWVkZWQoKTsKKyAgICB2b2lkIGhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiwgSGlnaGxpZ2h0
Jik7CisKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQoSGlnaGxpZ2h0JiwgR3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICB2b2lkIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxl
bnRIaWdobGlnaHRzKEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+JiwgSGlnaGxpZ2h0OjpUeXBl
KTsKKyAgICB2b2lkIHJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0
OjpUeXBlKTsKKyAgICB2b2lkIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CisgICAgdm9p
ZCBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOworICAgIHZvaWQgZGlkUmVidWlsZFBvdGVudGlh
bEhpZ2hsaWdodHMoKTsKKworICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wm
IG1vdXNlSXNPdmVyQnV0dG9uKTsKKyAgICB2b2lkIGNsZWFyQWN0aXZlSGlnaGxpZ2h0KCk7Cisg
ICAgSGlnaGxpZ2h0KiBhY3RpdmVIaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhp
Z2hsaWdodC5nZXQoKTsgfQorCisgICAgSGlnaGxpZ2h0KiBmaW5kVGVsZXBob25lTnVtYmVySGln
aGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQmKTsKKworICAgIGJv
b2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpOworCisgICAgYm9vbCBtb3VzZUlzT3Zl
ckhpZ2hsaWdodChIaWdobGlnaHQmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3Q7Cisg
ICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyByZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRT
aG91bGRCZVNob3duKEhpZ2hsaWdodCopIGNvbnN0OworICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpOwor
CisgICAgc3RhdGljIGJvb2wgaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29uc3QgSGlnaGxpZ2h0
KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpOworCisgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHRl
bGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOworCisgICAgdm9pZCBkaWRDcmVh
dGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUhpZ2hsaWdodChI
aWdobGlnaHQqKTsKKyAgICB2b2lkIGRpZEZpbmlzaEZhZGluZ091dEhpZ2hsaWdodChIaWdobGln
aHQqKTsKKworICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWlu
RnJhbWU7IH0KKworICAgIE1haW5GcmFtZSYgbV9tYWluRnJhbWU7CisgICAgUGFnZU92ZXJsYXkq
IG1fc2VydmljZXNPdmVybGF5OworCisgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdo
bGlnaHQ7CisgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OworICAg
IEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fcG90ZW50aWFsSGlnaGxpZ2h0czsKKyAgICBI
YXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX2FuaW1hdGluZ0hpZ2hsaWdodHM7CisKKyAgICBI
YXNoU2V0PEhpZ2hsaWdodCo+IG1faGlnaGxpZ2h0czsKKworICAgIC8vIEZJWE1FOiBUaGVzZSBz
aG91bGQgbW92ZSBvbnRvIEhpZ2hsaWdodC4KKyAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbV9jdXJy
ZW50U2VsZWN0aW9uUmVjdHM7CisgICAgYm9vbCBtX2lzVGV4dE9ubHk7CisKKyAgICBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7
CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX25leHRBY3RpdmVI
aWdobGlnaHRDaGFuZ2VUaW1lOworICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVf
cG9pbnQgbV9sYXN0TW91c2VVcFRpbWU7CisKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJl
bnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBJbnRQb2ludCBtX21vdXNlUG9zaXRp
b247CisKKyAgICBUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX2RldGVybWluZUFj
dGl2ZUhpZ2hsaWdodFRpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKyNlbmRpZiAvLyBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4
YWEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsODU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgiCisK
KyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiQ2hyb21lLmgiCisjaW1w
b3J0ICJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0
b3IuaCIKKyNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgorI2ltcG9ydCAiRmxvYXRRdWFkLmgiCisj
aW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkdhcFJlY3RzLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzTGF5ZXJDQS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWFpbkZyYW1lLmgi
CisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNp
bXBvcnQgIlBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCIKKyNpbXBvcnQgIlNldHRpbmdzLmgiCisj
aW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
CisKKyNpZiBfX2hhc19pbmNsdWRlKDxEYXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZy5o
PikKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nLmg+CisjZWxzZQor
dHlwZWRlZiBzdHJ1Y3QgX19EREhpZ2hsaWdodCBEREhpZ2hsaWdodCwgKkRESGlnaGxpZ2h0UmVm
OworI2VuZGlmCisKKyNpZiBfX2hhc19pbmNsdWRlKDxEYXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0
RHJhd2luZ19Qcml2YXRlLmg+KQorI2ltcG9ydCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERy
YXdpbmdfUHJpdmF0ZS5oPgorI2VuZGlmCisKK2NvbnN0IGZsb2F0IGhpZ2hsaWdodEZhZGVBbmlt
YXRpb25EdXJhdGlvbiA9IDAuMzsKKwordHlwZWRlZiBOU1VJbnRlZ2VyIERESGlnaGxpZ2h0U3R5
bGU7CitzdGF0aWMgY29uc3QgRERIaWdobGlnaHRTdHlsZSBEREhpZ2hsaWdodE5vT3V0bGluZVdp
dGhBcnJvdyA9ICgxIDw8IDE2KTsKK3N0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGln
aGxpZ2h0T3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2KSB8IDE7CisKK1NPRlRfTElOS19QUklW
QVRFX0ZSQU1FV09SS19PUFRJT05BTChEYXRhRGV0ZWN0b3JzKQorU09GVF9MSU5LKERhdGFEZXRl
Y3RvcnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFu
ZERpcmVjdGlvbiwgRERIaWdobGlnaHRSZWYsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENH
UmVjdCogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVjdCBnbG9iYWxWaXNpYmxlUmVjdCwgRERI
aWdobGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRoQXJyb3csIE5TV3JpdGluZ0RpcmVjdGlv
biB3cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNXaXRoRU9MLCBCb29sZWFuIGZsaXBwZWQp
LCAoYWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2JhbFZpc2libGVSZWN0LCBzdHlsZSwgd2l0
aEFycm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0aEVPTCwgZmxpcHBlZCkpCitTT0ZUX0xJ
TksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRMYXllcldpdGhDb250ZXh0LCBDR0xheWVy
UmVmLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCksICho
aWdobGlnaHQsIGNvbnRleHQpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0
R2V0Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQpLCAoaGln
aGxpZ2h0KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hsaWdodFBvaW50SXNPbkhp
Z2hsaWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCwgQ0dQb2ludCBwb2lu
dCwgQm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0LCBwb2ludCwgb25CdXR0b24pKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRh
aW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5n
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBUeXBl
OjpTZWxlY3Rpb24sIGRkSGlnaGxpZ2h0LCByYW5nZSkpOworfQorCitQYXNzUmVmUHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdo
dCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
aWdobGlnaHQoY29udHJvbGxlciwgVHlwZTo6VGVsZXBob25lTnVtYmVyLCBkZEhpZ2hsaWdodCwg
cmFuZ2UpKTsKK30KKworU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdo
bGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSkKKyAgICA6IG1fcmFuZ2UocmFuZ2UpCisgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAsIG1fY29udHJvbGxlcigmY29udHJvbGxlcikKK3sKKyAgICBBU1NFUlQoZGRIaWdobGln
aHQpOworICAgIEFTU0VSVChtX3JhbmdlKTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb250cm9sbGVy
Lm1haW5GcmFtZSgpLnBhZ2UoKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUocGFnZSA/IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCkgOiBudWxscHRyLCAqdGhpcyk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisKKyAgICBzZXREREhpZ2hsaWdodChkZEhpZ2hsaWdodC5nZXQoKSk7CisK
KyAgICAvLyBTZXQgZGlyZWN0bHkgb24gdGhlIFBsYXRmb3JtQ0FMYXllciBzbyB0aGF0IHdoZW4g
d2UgbGVhdmUgdGhlICdmcm9tJyB2YWx1ZSBpbXBsaWNpdAorICAgIC8vIGluIG91ciBhbmltYXRp
b25zLCB3ZSBnZXQgdGhlIHJpZ2h0IGluaXRpYWwgdmFsdWUgcmVnYXJkbGVzcyBvZiBmbHVzaCB0
aW1pbmcuCisgICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3JtQ0FMYXllcigp
LT5zZXRPcGFjaXR5KDApOworCisgICAgY29udHJvbGxlci5kaWRDcmVhdGVIaWdobGlnaHQodGhp
cyk7Cit9CisKK1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6fkhpZ2hsaWdo
dCgpCit7CisgICAgaWYgKG1fY29udHJvbGxlcikKKyAgICAgICAgbV9jb250cm9sbGVyLT53aWxs
RGVzdHJveUhpZ2hsaWdodCh0aGlzKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpIaWdobGlnaHQ6OnNldERESGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCkK
K3sKKyAgICBpZiAoIW1fY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZEhp
Z2hsaWdodCA9IGhpZ2hsaWdodDsKKworICAgIGlmICghbV9kZEhpZ2hsaWdodCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERESGlnaGxpZ2h0
R2V0Qm91bmRpbmdSZWN0KG1fZGRIaWdobGlnaHQuZ2V0KCkpOworICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luKSk7
CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShoaWdobGlnaHRCb3VuZGlu
Z1JlY3Quc2l6ZSkpOworCisgICAgbV9ncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
K30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmludmFsaWRh
dGUoKQoreworICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2NvbnRyb2xs
ZXIgPSBudWxscHRyOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKK3sKKyAgICBp
ZiAoIW1fY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9IG1f
Y29udHJvbGxlci0+bWFpbkZyYW1lKCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdo
bGlnaHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxv
YXRSZWN0JikKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQ0dMYXllclJlZiBoaWdobGlnaHRMYXllciA9IERE
SGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChkZEhpZ2hsaWdodCgpLCBjZ0NvbnRleHQpOwor
ICAgIENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5n
UmVjdChkZEhpZ2hsaWdodCgpKTsKKyAgICBoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luID0g
Q0dQb2ludFplcm87CisKKyAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY2dDb250ZXh0LCBo
aWdobGlnaHRCb3VuZGluZ1JlY3QsIGhpZ2hsaWdodExheWVyKTsKK30KKworZmxvYXQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiAxOworCisgICAgUGFn
ZSogcGFnZSA9IG1fY29udHJvbGxlci0+bWFpbkZyYW1lKCkucGFnZSgpOworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmZh
ZGVJbigpCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGFuaW1hdGlvbiA9IFtD
QUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFth
bmltYXRpb24gc2V0RHVyYXRpb246aGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uXTsKKyAg
ICBbYW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFthbmlt
YXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpmYWxzZV07CisgICAgW2FuaW1hdGlvbiBzZXRU
b1ZhbHVlOkAxXTsKKworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFu
aW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkp
OworICAgIHRvR3JhcGhpY3NMYXllckNBKGxheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRk
QW5pbWF0aW9uRm9yS2V5KCJGYWRlSGlnaGxpZ2h0SW4iLCBwbGF0Zm9ybUFuaW1hdGlvbi5nZXQo
KSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRl
T3V0KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gYW5pbWF0aW9uID0gW0NB
QmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07CisgICAgW2Fu
aW1hdGlvbiBzZXREdXJhdGlvbjpoaWdobGlnaHRGYWRlQW5pbWF0aW9uRHVyYXRpb25dOworICAg
IFthbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2FuaW1h
dGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOmZhbHNlXTsKKyAgICBbYW5pbWF0aW9uIHNldFRv
VmFsdWU6QDBdOworCisgICAgUmVmUHRyPEhpZ2hsaWdodD4gcmV0YWluZWRTZWxmID0gdGhpczsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxl
dGlvbkJsb2NrOltyZXRhaW5lZFNlbGZdICgpIHsKKyAgICAgICAgcmV0YWluZWRTZWxmLT5kaWRG
aW5pc2hGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgfV07CisKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpj
cmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+
cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgiRmFkZUhpZ2hsaWdodE91dCIs
IHBsYXRmb3JtQW5pbWF0aW9uLmdldCgpKTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZGlkRmluaXNo
RmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2NvbnRyb2xsZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2NvbnRyb2xsZXItPmFjdGl2ZUhpZ2hsaWdodCgpID09IHRoaXMp
CisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKK30K
Kworc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShSYW5nZSYg
cmFuZ2UpCit7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgIHJhbmdlLnRl
eHRRdWFkcyh0ZXh0UXVhZHMpOworICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgZm9y
IChhdXRvJiBxdWFkIDogdGV4dFF1YWRzKQorICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocXVh
ZC5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ1Jl
Y3QpOworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKE1haW5GcmFtZSYgbWFpbkZyYW1lKQorICAgIDogbV9tYWluRnJhbWUobWFpbkZyYW1l
KQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXkobnVsbHB0cikKKyAgICAsIG1faXNUZXh0T25seShm
YWxzZSkKKyAgICAsIG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIodGhpcywgJlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQp
Cit7Cit9CisKK1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6On5TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkKK3sKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1faGlnaGxpZ2h0cykKKyAg
ICAgICAgaGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQoreworICAgIC8v
IEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBoYXZlIG1vdmVkIG91
dCBvZiB0aGUgUGFnZSwKKyAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBhbHJlYWR5IGNsZWFyZWQg
b3VyIGJhY2sgcG9pbnRlci4KKyAgICBBU1NFUlQoIW1fc2VydmljZXNPdmVybGF5KTsKK30KKwor
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQYWdlT3Zlcmxh
eSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBudWxs
cHRyOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2Uo
UGFnZU92ZXJsYXkmLCBQYWdlKikKK3sKK30KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25t
ZW50Tm9uZSA9IDA7CitzdGF0aWMgY29uc3QgdWludDhfdCBBbGlnbm1lbnRMZWZ0ID0gMSA8PCAw
Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50UmlnaHQgPSAxIDw8IDE7CisKK3N0YXRp
YyB2b2lkIGV4cGFuZEZvckdhcChWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCB1aW50OF90KiBh
bGlnbm1lbnRzLCBjb25zdCBHYXBSZWN0cyYgZ2FwKQoreworICAgIGlmICghZ2FwLmxlZnQoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0RWRnZSA9IGdhcC5sZWZ0KCkueCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50TGVmdCkKKyAgICAgICAg
ICAgICAgICByZWN0c1tpXS5zaGlmdFhFZGdlVG8obGVmdEVkZ2UpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFnYXAucmlnaHQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTGF5b3V0VW5p
dCByaWdodEVkZ2UgPSBnYXAucmlnaHQoKS5tYXhYKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGFsaWdubWVu
dHNbaV0gJiBBbGlnbm1lbnRSaWdodCkKKyAgICAgICAgICAgICAgICByZWN0c1tpXS5zaGlmdE1h
eFhFZGdlVG8ocmlnaHRFZGdlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHN0aXRjaFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMpCit7CisgICAgaWYg
KHJlY3RzLnNpemUoKSA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPExh
eW91dFJlY3Q+IG5ld1JlY3RzOworICAgIAorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQg
dmVydGljYWwgbGF5b3V0LgorICAgIC8vIEZpcnN0IHN0aXRjaCB0b2dldGhlciBhbGwgdGhlIHJl
Y3RzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgc2l6ZV90IGluZGV4
RnJvbVN0YXJ0ID0gMDsKKyAgICBMYXlvdXRVbml0IGZpcnN0VG9wID0gcmVjdHNbaW5kZXhGcm9t
U3RhcnRdLnkoKTsKKyAgICBMYXlvdXRSZWN0JiBjdXJyZW50UmVjdCA9IHJlY3RzW2luZGV4RnJv
bVN0YXJ0XTsKKyAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgPCByZWN0cy5zaXplKCkgJiYgcmVj
dHNbaW5kZXhGcm9tU3RhcnRdLnkoKSA9PSBmaXJzdFRvcCkKKyAgICAgICAgY3VycmVudFJlY3Qu
dW5pdGUocmVjdHNbaW5kZXhGcm9tU3RhcnQrK10pOworICAgIAorICAgIG5ld1JlY3RzLmFwcGVu
ZChjdXJyZW50UmVjdCk7CisgICAgaWYgKGluZGV4RnJvbVN0YXJ0ID09IHJlY3RzLnNpemUoKSkg
eworICAgICAgICAvLyBBbGwgdGhlIHJlY3RzIGFyZSBvbiBvbmUgbGluZS4gVGhlcmUgaXMgbm90
aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZWN0cy5zd2FwKG5ld1JlY3RzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBOZXh0IHN0aXRjaCB0b2dldGhlciBhbGwgdGhl
IHJlY3RzIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHNlbGVjdGlvbi4KKyAgICBzaXplX3QgaW5k
ZXhGcm9tRW5kID0gcmVjdHMuc2l6ZSgpIC0gMTsKKyAgICBMYXlvdXRVbml0IGxhc3RUb3AgPSBy
ZWN0c1tpbmRleEZyb21FbmRdLnkoKTsKKyAgICBMYXlvdXRSZWN0IGxhc3RSZWN0ID0gcmVjdHNb
aW5kZXhGcm9tRW5kXTsKKyAgICB3aGlsZSAoaW5kZXhGcm9tRW5kID49IGluZGV4RnJvbVN0YXJ0
ICYmIHJlY3RzW2luZGV4RnJvbUVuZF0ueSgpID09IGxhc3RUb3ApCisgICAgICAgIGxhc3RSZWN0
LnVuaXRlKHJlY3RzW2luZGV4RnJvbUVuZC0tXSk7CisgICAgCisgICAgLy8gaW5kZXhGcm9tU3Rh
cnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWN0YW5nbGUgb24gdGhlIHNlY29uZCBsaW5l
LgorICAgIC8vIGluZGV4RnJvbUVuZCBpcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcmVjdGFuZ2xl
IG9uIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgbGluZS4KKyAgICAvLyBpZiB0aGV5IGFyZSBlcXVh
bCwgdGhlcmUgaXMgb25lIGFkZGl0aW9uYWwgcmVjdGFuZ2xlIGZvciB0aGUgbGluZSBpbiB0aGUg
bWlkZGxlLgorICAgIGlmIChpbmRleEZyb21FbmQgPT0gaW5kZXhGcm9tU3RhcnQpCisgICAgICAg
IG5ld1JlY3RzLmFwcGVuZChyZWN0c1tpbmRleEZyb21TdGFydF0pOworICAgIAorICAgIGlmIChp
bmRleEZyb21FbmQgPD0gaW5kZXhGcm9tU3RhcnQpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIG5v
IG1vcmUgcmVjdHMgdG8gc3RpdGNoLiBKdXN0IGFwcGVuZCB0aGUgbGFzdCBsaW5lLgorICAgICAg
ICBuZXdSZWN0cy5hcHBlbmQobGFzdFJlY3QpOworICAgICAgICByZWN0cy5zd2FwKG5ld1JlY3Rz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTdGl0Y2ggdG9nZXRoZXIg
YWxsIHRoZSByZWN0cyBhZnRlciB0aGUgZmlyc3QgbGluZSB1bnRpbCB0aGUgc2Vjb25kIHRvIHRo
ZSBsYXN0IGluY2x1ZGVkLgorICAgIGN1cnJlbnRSZWN0ID0gcmVjdHNbaW5kZXhGcm9tU3RhcnRd
OworICAgIHdoaWxlIChpbmRleEZyb21TdGFydCAhPSBpbmRleEZyb21FbmQpCisgICAgICAgIGN1
cnJlbnRSZWN0LnVuaXRlKHJlY3RzWysraW5kZXhGcm9tU3RhcnRdKTsKKyAgICAKKyAgICBuZXdS
ZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOworICAgIG5ld1JlY3RzLmFwcGVuZChsYXN0UmVjdCk7
CisKKyAgICByZWN0cy5zd2FwKG5ld1JlY3RzKTsKK30KKworc3RhdGljIHZvaWQgY29tcGFjdFJl
Y3RzV2l0aEdhcFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxH
YXBSZWN0cz4mIGdhcFJlY3RzKQoreworICAgIHN0aXRjaFJlY3RzKHJlY3RzKTsKKyAgICAKKyAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhbGlnbm1lbnRzIGFyZSBjb3JyZWN0IGZvciBMVFIg
dGV4dC4KKyAgICAvLyBXZSBzaG91bGQgYWxzbyBhY2NvdW50IGZvciBSVEwuCisgICAgdWludDhf
dCBhbGlnbm1lbnRzWzNdOworICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMSkgeworICAgICAgICBh
bGlnbm1lbnRzWzBdID0gQWxpZ25tZW50TGVmdCB8IEFsaWdubWVudFJpZ2h0OworICAgICAgICBh
bGlnbm1lbnRzWzFdID0gQWxpZ25tZW50Tm9uZTsKKyAgICAgICAgYWxpZ25tZW50c1syXSA9IEFs
aWdubWVudE5vbmU7CisgICAgfSBlbHNlIGlmIChyZWN0cy5zaXplKCkgPT0gMikgeworICAgICAg
ICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50UmlnaHQ7CisgICAgICAgIGFsaWdubWVudHNbMV0g
PSBBbGlnbm1lbnRMZWZ0OworICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50Tm9uZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50UmlnaHQ7Cisg
ICAgICAgIGFsaWdubWVudHNbMV0gPSBBbGlnbm1lbnRMZWZ0IHwgQWxpZ25tZW50UmlnaHQ7Cisg
ICAgICAgIGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnRMZWZ0OworICAgIH0KKworICAgIC8vIEFj
Y291bnQgZm9yIGVhY2ggR2FwUmVjdHMgYnkgZXh0ZW5kaW5nIHRoZSBlZGdlIG9mIGNlcnRhaW4g
TGF5b3V0UmVjdHMgdG8gbWVldCB0aGUgZ2FwLgorICAgIGZvciAoYXV0byYgZ2FwIDogZ2FwUmVj
dHMpCisgICAgICAgIGV4cGFuZEZvckdhcChyZWN0cywgYWxpZ25tZW50cywgZ2FwKTsKKworICAg
IC8vIElmIHdlIGhhdmUgMyByZWN0cyB3ZSBtaWdodCBuZWVkIG9uZSBmaW5hbCBHYXBSZWN0cyB0
byBhbGlnbiB0aGUgZWRnZXMuCisgICAgaWYgKHJlY3RzLnNpemUoKSA9PSAzKSB7CisgICAgICAg
IExheW91dFJlY3QgbGVmdDsKKyAgICAgICAgTGF5b3V0UmVjdCByaWdodDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKGFsaWdubWVu
dHNbaV0gJiBBbGlnbm1lbnRMZWZ0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmVjdHNbaV07CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocmVjdHNbaV0ueCgpIDwgbGVmdC54KCkpCisgICAgICAgICAgICAgICAgICAg
IGxlZnQgPSByZWN0c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhbGlnbm1l
bnRzW2ldICYgQWxpZ25tZW50UmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3RzW2ldOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKChyZWN0c1tpXS54KCkgKyByZWN0c1tpXS53aWR0aCgpKSA+IChyaWdo
dC54KCkgKyByaWdodC53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByZWN0
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVmdC5pc0Vt
cHR5KCkgfHwgIXJpZ2h0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgR2FwUmVjdHMgZ2FwOwor
ICAgICAgICAgICAgZ2FwLnVuaXRlTGVmdChsZWZ0KTsKKyAgICAgICAgICAgIGdhcC51bml0ZVJp
Z2h0KHJpZ2h0KTsKKyAgICAgICAgICAgIGV4cGFuZEZvckdhcChyZWN0cywgYWxpZ25tZW50cywg
Z2FwKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiBnYXBSZWN0cywgYm9vbCBpc1RleHRPbmx5KQor
eworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
IDEwOTAKKyAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cyA9IHJlY3RzOworICAgIG1faXNUZXh0
T25seSA9IGlzVGV4dE9ubHk7CisKKyAgICBtX2xhc3RTZWxlY3Rpb25DaGFuZ2VUaW1lID0gc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisKKyAgICBjb21wYWN0UmVjdHNXaXRoR2Fw
UmVjdHMobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMsIGdhcFJlY3RzKTsKKworICAgIC8vIERhdGFE
ZXRlY3RvcnMgbmVlZHMgdGhlc2UgcmV2ZXJzZWQgaW4gb3JkZXIgdG8gcGxhY2UgdGhlIGFycm93
IGluIHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5yZXZl
cnNlKCk7CisKKyAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIC0g
U2VsZWN0aW9uIHJlY3RzIGNoYW5nZWQgLSBOb3cgaGF2ZSAlbHVcbiIsIHJlY3RzLnNpemUoKSk7
CisKKyAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocmVjdHMpOworICAgIFVOVVNFRF9QQVJBTShnYXBSZWN0cyk7CisgICAgVU5VU0VEX1BBUkFN
KGlzVGV4dE9ubHkpOworI2VuZGlmCit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCisgICAgTE9H
KFNlcnZpY2VzLCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlciAtIFRlbGVwaG9uZSBudW1iZXIg
cmFuZ2VzIGNoYW5nZWRcbiIpOworICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7Cisj
ZW5kaWYKK30KKworYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUlzT3Zlckhp
Z2hsaWdodChIaWdobGlnaHQmIGhpZ2hsaWdodCwgYm9vbCYgbW91c2VJc092ZXJCdXR0b24pIGNv
bnN0Cit7CisgICAgQm9vbGVhbiBvbkJ1dHRvbjsKKyAgICBib29sIGhvdmVyZWQgPSBEREhpZ2hs
aWdodFBvaW50SXNPbkhpZ2hsaWdodChoaWdobGlnaHQuZGRIaWdobGlnaHQoKSwgKENHUG9pbnQp
bV9tb3VzZVBvc2l0aW9uLCAmb25CdXR0b24pOworICAgIG1vdXNlSXNPdmVyQnV0dG9uID0gb25C
dXR0b247CisgICAgcmV0dXJuIGhvdmVyZWQ7Cit9CisKK3N0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0
U2hvdWxkQmVTaG93bihIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKK3sKKyAgICBpZiAoIWhp
Z2hsaWdodCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8o
KTsKKworICAgIGF1dG8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSAy
MDBfbXM7CisgICAgUGFnZSogcGFnZSA9IG1fbWFpbkZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFn
ZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBtaW5pbXVtVGlt
ZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IDEwMDBfbXM7CisKKyAgICBib29sIG1vdXNl
UHJlc3NlZCA9IG1fbWFpbkZyYW1lLmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpOworCisg
ICAgLy8gSGlnaGxpZ2h0IGh5c3RlcmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9uIHNlcnZpY2Vz
LCBiZWNhdXNlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFkeSBtdWNoIG1v
cmUgc3RhYmxlCisgICAgLy8gYnkgdmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRvIGluY2x1ZGUg
dGhlIGVudGlyZSB0ZWxlcGhvbmUgbnVtYmVyLiBIb3dldmVyLCB3ZSB3aWxsIHN0aWxsIGF2b2lk
IGhpZ2hsaWdodGluZworICAgIC8vIHRlbGVwaG9uZSBudW1iZXJzIHdoaWxlIHRoZSBtb3VzZSBp
cyBkb3duLgorICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRl
bGVwaG9uZU51bWJlcikKKyAgICAgICAgcmV0dXJuIG1vdXNlUHJlc3NlZCA/IG1pbmltdW1UaW1l
VW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duIDogMF9tczsKKworICAgIGF1dG8gbm93ID0gc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgYXV0byB0aW1lU2luY2VMYXN0U2Vs
ZWN0aW9uQ2hhbmdlID0gbm93IC0gbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAgICBhdXRv
IHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2ZSA9IG5vdyAtIG1fbmV4dEFjdGl2ZUhpZ2hs
aWdodENoYW5nZVRpbWU7CisgICAgYXV0byB0aW1lU2luY2VMYXN0TW91c2VVcCA9IG1vdXNlUHJl
c3NlZCA/IDBfbXMgOiBub3cgLSBtX2xhc3RNb3VzZVVwVGltZTsKKworICAgIGF1dG8gcmVtYWlu
aW5nRGVsYXkgPSBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHN0ZDo6
bWluKHN0ZDo6bWluKHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UsIHRpbWVTaW5jZUhpZ2hs
aWdodEJlY2FtZUFjdGl2ZSksIHRpbWVTaW5jZUxhc3RNb3VzZVVwKTsKKyAgICByZXR1cm4gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4ocmVtYWlu
aW5nRGVsYXkpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWlu
ZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGltZXI8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cj4mKQoreworICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKQoreworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFy
QWN0aXZlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAoIW1fYWN0aXZlSGlnaGxpZ2h0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PT0gbV9hY3RpdmVIaWdobGlnaHQpCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9u
SGlnaGxpZ2h0ID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxsUG90ZW50aWFsSGln
aGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkKK3sKKyAgICBWZWN0b3I8UmVmUHRy
PEhpZ2hsaWdodD4+IGhpZ2hsaWdodHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdo
dCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBl
KCkgPT0gdHlwZSkKKyAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQoaGlnaGxp
Z2h0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIWhpZ2hsaWdodHNUb1JlbW92ZS5pc0VtcHR5KCkp
CisgICAgICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0c1RvUmVtb3Zl
LnRha2VMYXN0KCkpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxk
UGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKK3sKKyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tYWluRnJhbWUuc2V0dGluZ3MoKS5z
ZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8
UmVmUHRyPEhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7CisKKyAgICBGcmFtZVZp
ZXcmIG1haW5GcmFtZVZpZXcgPSAqbV9tYWluRnJhbWUudmlldygpOworCisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV9tYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byYgcmFuZ2VzID0gZnJhbWUtPmVkaXRvcigpLmRl
dGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7CisgICAgICAgIGZvciAoYXV0byYgcmFuZ2Ug
OiByYW5nZXMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhl
IHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KKyAgICAgICAgICAgIC8v
IFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoYXQgY2FzZT8KKyAgICAgICAgICAgIEludFJlY3QgcmVj
dCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsKKworICAgICAgICAg
ICAgLy8gQ29udmVydCB0byB0aGUgbWFpbiBkb2N1bWVudCdzIGNvb3JkaW5hdGUgc3BhY2UuCisg
ICAgICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRlbnRz
VG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhlIHJp
Z2h0IGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIg
YWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9E
b2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCisgICAgICAgICAg
ICAvLyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdlIG5lZWQgd2hlbiB5b3UgaGF2ZSBhIHRvcENv
bnRlbnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIuCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZp
ZXdGb3JSYW5nZSA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICAgICAg
aWYgKCF2aWV3Rm9yUmFuZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICByZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9y
UmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOworCisgICAgICAgICAg
ICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKKyAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5W
aXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWlu
RnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdodE91dGxpbmVXaXRoQXJy
b3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworCisgICAgICAg
ICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVw
aG9uZU51bWJlcigqdGhpcywgZGRIaWdobGlnaHQsIHJhbmdlKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxp
Z2h0cyhuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51
bWJlcik7CisKKyAgICBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpOworfQorCit2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKK3sK
KyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9tYWluRnJhbWUuc2V0dGluZ3MoKS5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxIaWdo
bGlnaHQ+PiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzOworCisgICAgVmVjdG9yPENHUmVjdD4gY2dS
ZWN0czsKKyAgICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0
cy5zaXplKCkpOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHBhZ2UtPnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAg
ICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbV9tYWluRnJhbWUudmlldygpOworICAgICAg
ICBpZiAoIW1haW5GcmFtZVZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRnJh
bWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLnZp
ZXcoKTsKKworICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0
cykgeworICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJl
Y3QpOworICAgICAgICAgICAgY3VycmVudFJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy0+
d2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3coY3VycmVudFJl
Y3QubG9jYXRpb24oKSkpKTsKKyAgICAgICAgICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpY3Vy
cmVudFJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRk
SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJl
Y3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3Rz
LnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMs
IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JT
ZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVu
dEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUeXBlOjpTZWxl
Y3Rpb24pOworCisgICAgZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKTsKK30KKwordm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNl
cnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiYgbmV3
UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUeXBlIHR5cGUpCit7CisgICAgLy8gSWYg
YW55IG9sZCBIaWdobGlnaHRzIGFyZSBlcXVpdmFsZW50IChieSBSYW5nZSkgdG8gYSBuZXcgSGln
aGxpZ2h0LCByZXVzZSB0aGUgb2xkCisgICAgLy8gb25lIHNvIHRoYXQgYW55IG1ldGFkYXRhIGlz
IHJldGFpbmVkLgorICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IHJldXNlZFBvdGVudGlh
bEhpZ2hsaWdodHM7CisKKyAgICBmb3IgKGF1dG8mIG9sZEhpZ2hsaWdodCA6IG1fcG90ZW50aWFs
SGlnaGxpZ2h0cykgeworICAgICAgICBpZiAob2xkSGlnaGxpZ2h0LT50eXBlKCkgIT0gdHlwZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoYXV0byYgbmV3SGlnaGxpZ2h0
IDogbmV3UG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICAgICAgaWYgKGhpZ2hsaWdodHNB
cmVFcXVpdmFsZW50KG9sZEhpZ2hsaWdodC5nZXQoKSwgbmV3SGlnaGxpZ2h0LmdldCgpKSkgewor
ICAgICAgICAgICAgICAgIG9sZEhpZ2hsaWdodC0+c2V0RERIaWdobGlnaHQobmV3SGlnaGxpZ2h0
LT5kZEhpZ2hsaWdodCgpKTsKKworICAgICAgICAgICAgICAgIHJldXNlZFBvdGVudGlhbEhpZ2hs
aWdodHMuYWRkKG9sZEhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgbmV3UG90ZW50aWFsSGln
aGxpZ2h0cy5yZW1vdmUobmV3SGlnaGxpZ2h0KTsKKworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVtb3ZlQWxsUG90ZW50aWFs
SGlnaGxpZ2h0c09mVHlwZSh0eXBlKTsKKworICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQo
bmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmVu
ZCgpKTsKKyAgICBtX3BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKHJldXNlZFBvdGVudGlhbEhpZ2hs
aWdodHMuYmVnaW4oKSwgcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5lbmQoKSk7Cit9CisKK2Jv
b2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNl
cygpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCkpCisgICAgICAg
IHJldHVybiBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5oYXNSZWxldmFudFNlbGVjdGlvblNlcnZp
Y2VzKG1faXNUZXh0T25seSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKK3sKKyAg
ICBpZiAobV9wb3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9z
ZXJ2aWNlc092ZXJsYXkpCisgICAgICAgICAgICBtX21haW5GcmFtZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpLmlzRW1wdHkoKSAmJiAh
aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
cmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKKworICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247Cisg
ICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKK30KKwordm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQoKQorewor
ICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X21haW5GcmFtZS5zZXR0aW5ncygpLnNlcnZpY2VDb250cm9sc0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6
OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAg
bV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOworICAgIG1fbWFpbkZyYW1lLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworfQorCitWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9y
Rm9jdXNlZEZyYW1lKCkKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9tYWluRnJhbWUucGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5lZGl0b3IoKS5kZXRlY3RlZFRl
bGVwaG9uZU51bWJlclJhbmdlcygpOworfQorCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGln
aGxpZ2h0KiBiKQoreworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKCFhIHx8ICFiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+dHlw
ZSgpID09IGItPnR5cGUoKSAmJiBhcmVSYW5nZXNFcXVhbChhLT5yYW5nZSgpLCBiLT5yYW5nZSgp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6ZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdobGln
aHQoSGlnaGxpZ2h0JiBzZWxlY3Rpb25IaWdobGlnaHQpCit7CisgICAgaWYgKHNlbGVjdGlvbkhp
Z2hsaWdodC50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUGFnZSogcGFnZSA9IG1fbWFpbkZyYW1lLnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gcGFnZS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxS
YW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7
CisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVw
aG9uZU51bWJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChoaWdobGln
aHQtPnJhbmdlKCktPmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAgICAg
ICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hs
aWdodChib29sJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKK3sKKyAgICBtb3Vz
ZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOworCisgICAgUmVmUHRyPEhpZ2hs
aWdodD4gbmV3QWN0aXZlSGlnaGxpZ2h0OworCisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBt
X3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09
IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBh
bHJlYWR5IGZvdW5kIGEgbmV3IGFjdGl2ZSBoaWdobGlnaHQsIGFuZCBpdCdzCisgICAgICAgICAg
ICAvLyBhIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0LCBwcmVmZXIgdGhhdCBvdmVyIHRoaXMg
c2VsZWN0aW9uIGhpZ2hsaWdodC4KKyAgICAgICAgICAgIGlmIChuZXdBY3RpdmVIaWdobGlnaHQg
JiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhv
bmVOdW1iZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIElm
IHRoaXMgaGlnaGxpZ2h0IGhhcyBubyBjb21wYXRpYmxlIHNlcnZpY2VzLCBpdCBjYW4ndCBiZSBh
Y3RpdmUuCisgICAgICAgICAgICBpZiAoIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRo
aXMgaGlnaGxpZ2h0IGlzbid0IGhvdmVyZWQsIGl0IGNhbid0IGJlIGFjdGl2ZS4KKyAgICAgICAg
Ym9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsKKyAgICAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdo
dCgqaGlnaGxpZ2h0LCBtb3VzZUlzT3ZlckJ1dHRvbikpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBoaWdobGlnaHQ7CisgICAgICAgIG1vdXNl
SXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gbW91c2VJc092ZXJCdXR0b247CisgICAgfQor
CisgICAgLy8gSWYgb3VyIG5ldyBhY3RpdmUgaGlnaGxpZ2h0IGlzIGEgc2VsZWN0aW9uIGhpZ2hs
aWdodCB0aGF0IGlzIGNvbXBsZXRlbHkgY29udGFpbmVkCisgICAgLy8gYnkgb25lIG9mIHRoZSBw
aG9uZSBudW1iZXIgaGlnaGxpZ2h0cywgd2UnbGwgbWFrZSB0aGUgcGhvbmUgbnVtYmVyIGhpZ2hs
aWdodCBhY3RpdmUgZXZlbiBpZiBpdCdzIG5vdCBob3ZlcmVkLgorICAgIGlmIChuZXdBY3RpdmVI
aWdobGlnaHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBl
OjpTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKEhpZ2hsaWdodCogY29udGFpbmVkVGVsZXBob25l
TnVtYmVySGlnaGxpZ2h0ID0gZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdT
ZWxlY3Rpb25IaWdobGlnaHQoKm5ld0FjdGl2ZUhpZ2hsaWdodCkpIHsKKyAgICAgICAgICAgIG5l
d0FjdGl2ZUhpZ2hsaWdodCA9IGNvbnRhaW5lZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodDsKKwor
ICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaW5pdGlhbGx5IGNob29zZSB0aGUgdGVsZXBo
b25lIG51bWJlciBoaWdobGlnaHQgb3ZlciB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCBpZiB0aGUK
KyAgICAgICAgICAgIC8vIG1vdXNlIGlzIG92ZXIgdGhlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxp
Z2h0J3MgYnV0dG9uLCBzbyB3ZSBrbm93IHRoYXQgaXQncyBub3QgaG92ZXJlZCBpZiB3ZSBnb3Qg
aGVyZS4KKyAgICAgICAgICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRoaXMtPmhpZ2hsaWdodHNBcmVFcXVp
dmFsZW50KG1fYWN0aXZlSGlnaGxpZ2h0LmdldCgpLCBuZXdBY3RpdmVIaWdobGlnaHQuZ2V0KCkp
KSB7CisgICAgICAgIC8vIFdoZW4gdHJhbnNpdGlvbmluZyB0byBhIG5ldyBoaWdobGlnaHQsIHdl
IG1pZ2h0IGVuZCB1cCBpbiBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQgbXVsdGlwbGUgdGltZXMK
KyAgICAgICAgLy8gYmVmb3JlIHRoZSBuZXcgaGlnaGxpZ2h0IGFjdHVhbGx5IGJlY29tZXMgYWN0
aXZlLiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IG5leHQtYnV0LW5vdC15ZXQtYWN0aXZlCisgICAg
ICAgIC8vIGhpZ2hsaWdodCwgYW5kIG9ubHkgcmVzZXQgdGhlIGFjdGl2ZSBoaWdobGlnaHQgaHlz
dGVyZXNpcyB3aGVuIHRoYXQgY2hhbmdlcy4KKyAgICAgICAgaWYgKG1fbmV4dEFjdGl2ZUhpZ2hs
aWdodCAhPSBuZXdBY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2ZUhp
Z2hsaWdodCA9IG5ld0FjdGl2ZUhpZ2hsaWdodDsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2ZUhp
Z2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bnVsbHB0cjsKKworICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAg
IG1fYWN0aXZlSGlnaGxpZ2h0LT5mYWRlT3V0KCk7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hs
aWdodCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlbWFpbmluZ1RpbWVV
bnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSB0aGlzLT5yZW1haW5pbmdUaW1lVW50aWxIaWdo
bGlnaHRTaG91bGRCZVNob3duKG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSk7CisgICAgICAgIGlm
IChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID4gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb246Onplcm8oKSkgeworICAgICAgICAgICAgbV9kZXRlcm1p
bmVBY3RpdmVIaWdobGlnaHRUaW1lci5zdGFydE9uZVNob3QocmVtYWluaW5nVGltZVVudGlsSGln
aGxpZ2h0U2hvdWxkQmVTaG93bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodC5yZWxlYXNl
KCk7CisKKyAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBtX3Nl
cnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIo
KSk7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgbV9t
b3VzZVBvc2l0aW9uID0gbV9tYWluRnJhbWUudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50
LnBvc2l0aW9uKCkpOworCisgICAgYm9vbCBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRv
biA9IGZhbHNlOworICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2
ZUhpZ2hsaWdodEJ1dHRvbik7CisKKyAgICAvLyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBp
ZiBhbnkgYnV0dG9uIG90aGVyIHRoYW4gdGhlIGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFu
ZCBpZ25vcmUgdGhlIGV2ZW50LgorICAgIGlmIChldmVudC5idXR0b24oKSAhPSBNb3VzZUJ1dHRv
bjo6TGVmdEJ1dHRvbikgeworICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hs
aWdodCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGUgbW91c2UgbGlmdGVkIHdoaWxlIHN0aWxsIG92ZXIgdGhlIGhpZ2hsaWdodCBidXR0b24g
dGhhdCBpdCB3ZW50IGRvd24gb24sIHRoZW4gdGhhdCBpcyBhIGNsaWNrLgorICAgIGlmIChldmVu
dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCkgeworICAgICAgICBSZWZQ
dHI8SGlnaGxpZ2h0PiBtb3VzZURvd25IaWdobGlnaHQgPSBtX2N1cnJlbnRNb3VzZURvd25PbkJ1
dHRvbkhpZ2hsaWdodDsKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGln
aHQgPSBudWxscHRyOworCisgICAgICAgIG1fbGFzdE1vdXNlVXBUaW1lID0gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6bm93KCk7CisKKyAgICAgICAgaWYgKG1vdXNlSXNPdmVyQWN0aXZlSGln
aGxpZ2h0QnV0dG9uICYmIG1vdXNlRG93bkhpZ2hsaWdodCkgeworICAgICAgICAgICAgaGFuZGxl
Q2xpY2sobV9tb3VzZVBvc2l0aW9uLCAqbW91c2VEb3duSGlnaGxpZ2h0KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gSWYgdGhlIG1vdXNlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGJ1dHRv
biB0cmFja2luZyBhIHBvdGVudGlhbCBjbGljaywgc3RvcCB0cmFja2luZyB0aGUgY2xpY2suCisg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkKSB7CisgICAg
ICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCAmJiBtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24g
b3ZlciB0aGUgYWN0aXZlIGhpZ2hsaWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVu
dGlhbCBjbGljay4KKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
UHJlc3NlZCkgeworICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJB
Y3RpdmVIaWdobGlnaHRCdXR0b24pIHsKKyAgICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9u
QnV0dG9uSGlnaGxpZ2h0ID0gbV9hY3RpdmVIaWdobGlnaHQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Ny
b2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKGZyYW1lLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKCk7CisgICAgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKKworICAgIGJvb2wgbW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxp
Z2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKK30KKwordm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVDbGljayhjb25zdCBJbnRQb2ludCYgY2xpY2tQb2lu
dCwgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
X21haW5GcmFtZS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsK
KworICAgIFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhjbGlja1BvaW50KTsKKworICAgIGlmIChoaWdobGlnaHQudHlwZSgp
ID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gdGVsZXBob25l
TnVtYmVyUmFuZ2VzID0gdGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCk7Cisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkVGVsZXBob25lTnVtYmVyczsKKyAgICAgICAg
c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJlc2VydmVDYXBhY2l0eSh0ZWxlcGhvbmVOdW1iZXJS
YW5nZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHRlbGVwaG9uZU51bWJl
clJhbmdlcykKKyAgICAgICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5hcHBlbmQocmFu
Z2UtPnRleHQoKSk7CisKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2Vs
ZWN0aW9uU2VydmljZUNsaWNrKHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMsIHdpbmRvd1BvaW50
KTsKKyAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpU
ZWxlcGhvbmVOdW1iZXIpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRl
bGVwaG9uZU51bWJlckNsaWNrKGhpZ2hsaWdodC5yYW5nZSgpLT50ZXh0KCksIHdpbmRvd1BvaW50
KTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRDcmVhdGVIaWdobGln
aHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit7CisgICAgQVNTRVJUKCFtX2hpZ2hsaWdodHMuY29u
dGFpbnMoaGlnaGxpZ2h0KSk7CisgICAgbV9oaWdobGlnaHRzLmFkZChoaWdobGlnaHQpOworfQor
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxEZXN0cm95SGlnaGxpZ2h0KEhp
Z2hsaWdodCogaGlnaGxpZ2h0KQoreworICAgIEFTU0VSVChtX2hpZ2hsaWdodHMuY29udGFpbnMo
aGlnaGxpZ2h0KSk7CisgICAgbV9oaWdobGlnaHRzLnJlbW92ZShoaWdobGlnaHQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIChFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkgJiYgUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDQ4NmRlMmIuLmIwYzI4NTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTcyLDYgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIE0oV2ViQXVkaW8pIFwKICAgICBNKFdlYkdMKSBcCiAgICAgTShXZWJSZXBsYXkp
IFwKKyAgICBNKFNlcnZpY2VzKSBcCiAKICNkZWZpbmUgREVDTEFSRV9MT0dfQ0hBTk5FTChuYW1l
KSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJ
WChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDdmZTc5MzguLjg2Y2Qw
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNC0xMC0wOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3NDE2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODU0NjI4Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgTW92ZSBTZXJ2aWNlcyBsb2dnaW5nIGNoYW5uZWwgdG8g
V2ViQ29yZS4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6aGFuZGxlVGVsZXBob25lTnVtYmVy
Q2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmhhbmRsZVNlbGVjdGlv
blNlcnZpY2VDbGljayk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6aGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyk6CisgICAgICAgIEltcGxlbWVudCBzZXJ2aWNlcy1yZWxh
dGVkIENocm9tZUNsaWVudCBjYWxsYmFja3MuCisgICAgICAgIENsaWNrcyBhcmUgZm9yd2FyZGVk
IHRvIFdlYlBhZ2VNYWMgd2hlcmUgdGhleSBkbyB3aGF0IHRoZXkgdXNlZCB0bzsKKyAgICAgICAg
aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyBpcyBpbXBsZW1lbnRlZCBhcyBpdCB3YXMgd2hl
biBpdCBsaXZlZAorICAgICAgICBpbnNpZGUgU2VydmljZXNPdmVybGF5Q29udHJvbGxlci4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNlbGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIFJlbW92ZSBXZWJF
ZGl0b3JDbGllbnQgb3ZlcnJpZGVzIGZvciBub3ctcmVtb3ZlZCBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJl
bmNlcyk6CisgICAgICAgIEZvcndhcmQgc2VydmljZUNvbnRyb2xzRW5hYmxlZCBzZXR0aW5nIHRv
IFdlYkNvcmUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VydmljZUNvbnRyb2xzRW5hYmxlZCk6IERl
bGV0ZWQuCisKIDIwMTQtMTAtMDkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIENyYXNoIGluIENGVVJMRG93bmxvYWRDbGllbnQuZGlkRmFpbCBpZiB0aGUg
ZG93bmxvYWQgaGFzIGEgbnVsbCByZXN1bWVEYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgK
aW5kZXggMGUzZTFkZS4uZjVkOTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
NTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBNKFRleHRJbnB1dCkgXAogICAg
IE0oVmlldykgXAogICAgIE0oSURCKSBcCi0gICAgTShTZXJ2aWNlcykgXAogCiAjZGVmaW5lIERF
Q0xBUkVfTE9HX0NIQU5ORUwobmFtZSkgXAogICAgIGV4dGVybiBXVEZMb2dDaGFubmVsIEpPSU5f
TE9HX0NIQU5ORUxfV0lUSF9QUkVGSVgoTE9HX0NIQU5ORUxfUFJFRklYLCBuYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
ZDdlYzNmLi5jNTY4ZjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNyArOTMxLDYgQEAKIAkJNTE4RThGMEIxNkIyMDkz
NzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwMjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxv
YWRNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNTE4RThGMEMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25s
b2FkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5oICovOyB9Owog
CQk1MThFOEYwRDE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwNTE2QjIwOTM3MDBFOTE0
MjkgLyogRG93bmxvYWRNYWMubW0gKi87IH07Ci0JCTUxOTJENTc2MTk2MUZEMDMwMENEMTlBQSAv
KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5MkQ1NzUxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTUxOTMzREVGMTk2NUVCMzEwMDhBQzNFQSAv
KiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTkzM0RFQjE5NjVFQjI0MDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oICovOyB9
OwogCQk1MTkzM0RGMDE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTMzREVDMTk2NUVCMjQw
MDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLm1tICovOyB9OwogCQk1MUE0RDVBOTE2Q0FDNEZGMDAw
RTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3Rp
Y3NSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTI5NDksOCArMjk0OCw2IEBACiAJCTUxOEU4RjAyMTZC
MjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRNYW5hZ2VyLmNwcDsgcGF0aCA9IERvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYw
MzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERvd25sb2FkTWFuYWdlci5oOyBwYXRoID0gRG93bmxvYWRzL0Rvd25s
b2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYwNTE2QjIw
OTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBEb3dubG9hZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTkyRDU3NTE5NjFGRDAzMDBDRDE5QUEgLyogU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxOTMzREVCMTk2NUVCMjQwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbnVVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE5MzNERUMxOTY1RUIyNDAwOEFDM0VBIC8qIE1lbnVVdGlsaXRp
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZW51VXRpbGl0
aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE0RDVBODE2Q0FDNEZGMDAw
RTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RhdGlzdGljc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTY5OSw3ICs1Njk2LDYgQEAKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oICovLAogCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQ
YWdlT3ZlcmxheS5jcHAgKi8sCiAJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBh
Z2VPdmVybGF5LmggKi8sCi0JCQkJNTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyog
Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYyNzVC
MzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKIAkJCQkyRDgx
OUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNz
YWdlcy5pbiAqLywKQEAgLTY0NjgsNyArNjQ2NCw2IEBACiAJCQkJMUFCMTZBRTcxNjRCM0E4ODAw
MjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gKi8sCiAJCQkJMUFCMTZBREMxNjQ4
NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUFC
MTZBREIxNjQ4NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tICov
LAotCQkJCTUxOTJENTc1MTk2MUZEMDMwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tICovLAogCQkJCTFBQUYyNjM3MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oICovLAogCQkJCTFBQUYyNjM2MTQ2ODdDMzkwMDRBMUU4QSAvKiBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSAqLywKIAkJCQkxQzhFMkRBRDEyNzhDNUIy
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0gKi8sCkBAIC04NzI5LDcgKzg3MjQsNiBA
QAogCQkJCTUxMkY1ODk2MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTAwRDRDMTgyRDZFQjAwMDA4N0RENyAv
KiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMkY1ODk4
MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTE5MkQ1NzYxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MThFOEVGODE2QjIwOTFDMDBF
OTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
OEU4RUZCMTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEyRjU4QTIxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAppbmRleCA1ZGUwYzUzLi40NzlkZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCkBAIC0xMDc0LDUgKzEwNzQsMjQgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENy
eXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3RvcjwKIH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9S
TShNQUMpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2so
Y29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sK
KyAgICBtX3BhZ2UtPmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKG51bWJlciwgcG9pbnQpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKK3ZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRlbGVwaG9uZU51bWJlcnMsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3BhZ2UtPmhhbmRsZVNlbGVj
dGlvblNlcnZpY2VDbGljayhzZWxlY3Rpb24sIHRlbGVwaG9uZU51bWJlcnMsIHBvaW50KTsKK30K
KworYm9vbCBXZWJDaHJvbWVDbGllbnQ6Omhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoYm9v
bCBpc1RleHRPbmx5KSBjb25zdAoreworICAgIHJldHVybiAoaXNUZXh0T25seSAmJiBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpKSB8fCBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7Cit9CisKKyNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGI0ZDdkNGEuLmQxNDg2MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzA1LDYgKzMwNSwxNCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCB1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9y
PHVpbnQ4X3Q+JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb24mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdGVsZXBob25lTnVt
YmVycywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyhib29sIGlzVGV4dE9ubHkpIGNvbnN0IG92
ZXJyaWRlOworI2VuZGlmCisKICAgICBTdHJpbmcgbV9jYWNoZWRUb29sVGlwOwogICAgIG11dGFi
bGUgUmVmUHRyPFdlYkZyYW1lPiBtX2NhY2hlZEZyYW1lU2V0TGFyZ2VzdEZyYW1lOwogICAgIG11
dGFibGUgYm9vbCBtX2NhY2hlZE1haW5GcmFtZUhhc0hvcml6b250YWxTY3JvbGxiYXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKaW5kZXggMTdmYzNhNS4uMTZkZTFiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5o
IgogCiAjaW5jbHVkZSAiRWRpdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC01MzEsMjAgKzUzMCw0IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpCiAjZW5kaWYK
IH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNDaGFuZ2VkKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgbV9wYWdlLT5z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7Ci0jZW5kaWYKLX0KLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZWxlY3Rpb25SZWN0
c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8
R2FwUmVjdHM+JiBnYXBSZWN0cywgYm9vbCBpc1RleHRPbmx5KQotewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBpZiAobV9wYWdlLT5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCi0gICAgICAgIG1f
cGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KHJlY3RzLCBnYXBSZWN0cywgaXNUZXh0T25seSk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykgJiYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGYzNGE5
ZWIuLmY0NDE4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTY4LDExICsxNjgsNiBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgb3Zl
cnJpZGU7CiAKLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pIHx8IEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
UmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxheW91dFJlY3Q+JiwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkdhcFJlY3RzPiYsIGJvb2wgaXNUZXh0T25seSkgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLQogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTFkMzNjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXJfaAotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotdHlwZWRlZiB2b2lkKiBE
REhpZ2hsaWdodFJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5b3V0UmVjdDsK
LXN0cnVjdCBHYXBSZWN0czsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2U7Ci0KLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFdlYkNvcmU6
OlBhZ2VPdmVybGF5OjpDbGllbnQgewotcHVibGljOgotICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIoV2ViUGFnZSYpOwotICAgIH5TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIHNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxheW91dFJlY3Q+
JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdhcFJlY3RzPiYsIGJvb2wgaXNUZXh0T25seSk7Ci0K
LXByaXZhdGU6Ci0gICAgY2xhc3MgSGlnaGxpZ2h0IDogcHVibGljIFJlZkNvdW50ZWQ8SGlnaGxp
Z2h0PiwgcHJpdmF0ZSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGlnaGxpZ2h0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yU2VsZWN0aW9uKFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXImLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRl
Rm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImLCBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPik7Ci0gICAgICAgIH5I
aWdobGlnaHQoKTsKLQotICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgICAgICBEREhp
Z2hsaWdodFJlZiBkZEhpZ2hsaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZGRIaWdobGlnaHQuZ2V0
KCk7IH0KLSAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9y
YW5nZS5nZXQoKTsgfQotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NMYXllci5nZXQoKTsgfQotCi0gICAgICAgIGVudW0gY2xh
c3MgVHlwZSB7Ci0gICAgICAgICAgICBUZWxlcGhvbmVOdW1iZXIsCi0gICAgICAgICAgICBTZWxl
Y3Rpb24KLSAgICAgICAgfTsKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICAgICAgdm9pZCBmYWRlSW4oKTsKLSAgICAgICAgdm9pZCBmYWRlT3V0KCk7
Ci0KLSAgICAgICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJlZik7Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBleHBsaWNpdCBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJv
bGxlciYsIFR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+KTsKLQotICAgICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGluQ2xpcCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIGRpZEZpbmlzaEZhZGVPdXRBbmlt
YXRpb24oKTsKLQotICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fZGRIaWdobGln
aHQ7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9yYW5nZTsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fZ3JhcGhpY3NMYXllcjsKLSAg
ICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIqIG1f
Y29udHJvbGxlcjsKLSAgICB9OwotCi0gICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6
RnJhbWUmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0g
ICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIEhpZ2hsaWdodCYp
OwotCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpOwotCi0gICAgdm9pZCByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdF
cXVpdmFsZW50SGlnaGxpZ2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiYsIEhpZ2hsaWdo
dDo6VHlwZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhp
Z2hsaWdodDo6VHlwZSk7Ci0gICAgdm9pZCBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwot
ICAgIHZvaWQgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKLSAgICB2b2lkIGRpZFJlYnVpbGRQ
b3RlbnRpYWxIaWdobGlnaHRzKCk7Ci0KLSAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dChib29sJiBtb3VzZUlzT3ZlckJ1dHRvbik7Ci0gICAgdm9pZCBjbGVhckFjdGl2ZUhpZ2hsaWdo
dCgpOwotICAgIEhpZ2hsaWdodCogYWN0aXZlSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVIaWdobGlnaHQuZ2V0KCk7IH0KLQotICAgIEhpZ2hsaWdodCogZmluZFRlbGVwaG9uZU51
bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdobGlnaHQoSGlnaGxpZ2h0Jik7Ci0K
LSAgICBib29sIGhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKTsKLQotICAgIGJvb2wgbW91
c2VJc092ZXJIaWdobGlnaHQoSGlnaGxpZ2h0JiwgYm9vbCYgbW91c2VJc092ZXJCdXR0b24pIGNv
bnN0OwotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgcmVtYWluaW5nVGltZVVudGlsSGln
aGxpZ2h0U2hvdWxkQmVTaG93bihIaWdobGlnaHQqKSBjb25zdDsKLSAgICB2b2lkIGRldGVybWlu
ZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcj4mKTsKLQotICAgIHN0YXRpYyBib29sIGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50
KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJh
bWUoKTsKLQotICAgIHZvaWQgZGlkQ3JlYXRlSGlnaGxpZ2h0KEhpZ2hsaWdodCopOwotICAgIHZv
aWQgd2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0Kik7Ci0gICAgdm9pZCBkaWRGaW5pc2hG
YWRpbmdPdXRIaWdobGlnaHQoSGlnaGxpZ2h0Kik7Ci0KLSAgICBXZWJQYWdlJiB3ZWJQYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9Ci0KLSAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Ci0g
ICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwotCi0gICAgUmVmUHRy
PEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7Ci0gICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9u
ZXh0QWN0aXZlSGlnaGxpZ2h0OwotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fcG90
ZW50aWFsSGlnaGxpZ2h0czsKLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX2FuaW1h
dGluZ0hpZ2hsaWdodHM7Ci0KLSAgICBIYXNoU2V0PEhpZ2hsaWdodCo+IG1faGlnaGxpZ2h0czsK
LQotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgbW92ZSBvbnRvIEhpZ2hsaWdodC4KLSAgICBW
ZWN0b3I8V2ViQ29yZTo6TGF5b3V0UmVjdD4gbV9jdXJyZW50U2VsZWN0aW9uUmVjdHM7Ci0gICAg
Ym9vbCBtX2lzVGV4dE9ubHk7Ci0KLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50IG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7Ci0gICAgc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6dGltZV9wb2ludCBtX25leHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lOwotICAg
IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0TW91c2VVcFRpbWU7
Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hs
aWdodDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX21vdXNlUG9zaXRpb247Ci0KLSAgICBXZWJD
b3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX2RldGVybWluZUFjdGl2ZUhp
Z2hsaWdodFRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgJiYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQotI2VuZGlmIC8vIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDJiZmZjMzQuLjk5ZDYz
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJQbHVnaW5Qcm94eS5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKICNpbmNsdWRlICJQcmludEluZm8uaCIKLSNpbmNsdWRlICJTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgiCiAjaW5jbHVkZSAi
U2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCkBA
IC0yNjMsOSArMjYyLDYgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX251bWJlck9m
UHJpbWFyeVNuYXBzaG90RGV0ZWN0aW9uQXR0ZW1wdHMoMCkKICAgICAsIG1fZGV0ZXJtaW5lUHJp
bWFyeVNuYXBzaG90dGVkUGx1Z0luVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUGFn
ZTo6ZGV0ZXJtaW5lUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luVGltZXJGaXJlZCkKICNlbmRpZgot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICwgbV9zZXJ2aWNlQ29udHJvbHNFbmFi
bGVkKGZhbHNlKQotI2VuZGlmCiAgICAgLCBtX2xheWVySG9zdGluZ01vZGUocGFyYW1ldGVycy5s
YXllckhvc3RpbmdNb2RlKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9wZGZQbHVnaW5F
bmFibGVkKGZhbHNlKQpAQCAtMjYyNiwxMCArMjYyMiw2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRl
UHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAgICAgbV9wZGZQ
bHVnaW5FbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
OjpwZGZQbHVnaW5FbmFibGVkS2V5KCkpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICBtX3NlcnZpY2VDb250cm9sc0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNlcnZpY2VDb250cm9sc0VuYWJsZWRLZXkoKSk7
Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBnZW5lcmF0ZWQgZnJvbSBt
YWNybyBleHBhbnNpb24gZm9yIGFsbCBwcmVmZXJlbmNlcywKICAgICAvLyBidXQgd2UgY3VycmVu
dGx5IGRvbid0IG1hdGNoIHRoZSBuYW1pbmcgb2YgV2ViQ29yZSBleGFjdGx5IHNvIHdlIGFyZQog
ICAgIC8vIGhhbmRyb2xsaW5nIHRoZSBib29sZWFuIGFuZCBpbnRlZ2VyIHByZWZlcmVuY2VzIHVu
dGlsIHRoYXQgaXMgZml4ZWQuCkBAIC0yODQ1LDYgKzI4MzcsMTAgQEAgdm9pZCBXZWJQYWdlOjp1
cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEdhbWVwYWRzRW5hYmxl
ZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmdhbWVwYWRzRW5h
YmxlZEtleSgpKSk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAg
IHNldHRpbmdzLnNldFNlcnZpY2VDb250cm9sc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9y
S2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzZXJ2aWNlQ29udHJvbHNFbmFibGVkS2V5KCkpKTsKKyNl
bmRpZgorCiAgICAgaWYgKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tl
eTo6cGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWRLZXkoKSkpCiAg
ICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRCeVdlYlByZWZlcmVuY2Uuc3RvcCgp
OwogICAgIGVsc2UKQEAgLTQ3NzgsMTYgKzQ3NzQsNiBAQCBib29sIFdlYlBhZ2U6OnN5bmNocm9u
b3VzTWVzc2FnZXNTaG91bGRTcGluUnVuTG9vcCgpCiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9Ci0gICAgCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikKLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6
OnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQotewotICAgIGlmICghbV9zZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyKQotICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+KCp0aGlzKTsKLQotICAgIHJl
dHVybiAqbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwotfQotI2VuZGlmCiAKIHZvaWQgV2Vi
UGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMWIwNzY3MS4u
ODM4MWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC0xNDEsNyArMTQxLDYgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3Q7
CiBjbGFzcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiBjbGFzcyBQYWdl
QmFubmVyOwogY2xhc3MgUGx1Z2luVmlldzsKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI7CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwogY2xhc3MgV2ViQ29sb3JD
aG9vc2VyOwogY2xhc3MgV2ViQ29udGV4dE1lbnU7CkBAIC04MjgsMTEgKzgyNyw5IEBAIHB1Ymxp
YzoKICAgICAvLyBXaGlsZSB0aGlzIGlzIG5vdCBpZGVhbCwgaXQgZG9lcyBub3QgaGF2ZSB0byBi
ZSBhcHBsaWVkIHRvIGV2ZXJ5IHBsYXRmb3JtIGF0IHRoZSBtb21lbnQuCiAgICAgc3RhdGljIGJv
b2wgc3luY2hyb25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCk7CiAKLSNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAK
LSAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBzZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCk7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikKICAgICB2b2lkIGhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0
IFN0cmluZyYgbnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZvaWQgaGFu
ZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHRlbGVwaG9uZU51bWJlcnMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7Ci0gICAgYm9vbCBzZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXJ2aWNlQ29udHJvbHNFbmFibGVkOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgZGlkQ2hhbmdlU2Ny
b2xsT2Zmc2V0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKQEAgLTEwOTEsMTAgKzEwODgsNiBA
QCBwcml2YXRlOgogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1fZGV0ZXJtaW5lUHJpbWFy
eVNuYXBzaG90dGVkUGx1Z0luVGltZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0gICAgYm9vbCBt
X3NlcnZpY2VDb250cm9sc0VuYWJsZWQ7Ci0jZW5kaWYKLQogICAgIC8vIFRoZSBsYXllciBob3N0
aW5nIG1vZGUuCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xheWVySG9zdGluZ01vZGU7CiAKQEAg
LTEyNjksMTAgKzEyNjIsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXRUJHTCkKICAgICBXZWJD
b3JlOjpXZWJHTExvYWRQb2xpY3kgbV9zeXN0ZW1XZWJHTFBvbGljeTsKICNlbmRpZgotCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWE1YmQ5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw4MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgotCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExB
VEZPUk0oTUFDKQotCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJQYWdlLmgiCi0j
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5k
bGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0dhcFJlY3RzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJDQS5oPgotI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRm
b3JtQ0FBbmltYXRpb25NYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KLQot
I2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nLmg+KQot
I2ltcG9ydCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmcuaD4KLSNlbHNlCi10eXBl
ZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwotI2VuZGlmCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxE
YXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZ19Qcml2YXRlLmg+KQotI2ltcG9ydCA8RGF0
YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmdfUHJpdmF0ZS5oPgotI2VuZGlmCi0KLWNvbnN0
IGZsb2F0IGhpZ2hsaWdodEZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLQotdHlwZWRlZiBO
U1VJbnRlZ2VyIERESGlnaGxpZ2h0U3R5bGU7Ci1zdGF0aWMgY29uc3QgRERIaWdobGlnaHRTdHls
ZSBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2KTsKLXN0YXRpYyBjb25z
dCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0T3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2
KSB8IDE7Ci0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChEYXRhRGV0ZWN0
b3JzKQotU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3Rz
SW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbiwgRERIaWdobGlnaHRSZWYsIChDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIENHUmVjdCogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVj
dCBnbG9iYWxWaXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRo
QXJyb3csIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNX
aXRoRU9MLCBCb29sZWFuIGZsaXBwZWQpLCAoYWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2Jh
bFZpc2libGVSZWN0LCBzdHlsZSwgd2l0aEFycm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0
aEVPTCwgZmxpcHBlZCkpCi1TT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRM
YXllcldpdGhDb250ZXh0LCBDR0xheWVyUmVmLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBD
R0NvbnRleHRSZWYgY29udGV4dCksIChoaWdobGlnaHQsIGNvbnRleHQpKQotU09GVF9MSU5LKERh
dGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hs
aWdodFJlZiBoaWdobGlnaHQpLCAoaGlnaGxpZ2h0KSkKLVNPRlRfTElOSyhEYXRhRGV0ZWN0b3Jz
LCBEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVm
IGhpZ2hsaWdodCwgQ0dQb2ludCBwb2ludCwgQm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0
LCBwb2ludCwgb25CdXR0b24pKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNl
bGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBUeXBlOjpTZWxl
Y3Rpb24sIGRkSGlnaGxpZ2h0LCByYW5nZSkpOwotfQotCi1QYXNzUmVmUHRyPFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCwgUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaWdobGln
aHQoY29udHJvbGxlciwgVHlwZTo6VGVsZXBob25lTnVtYmVyLCBkZEhpZ2hsaWdodCwgcmFuZ2Up
KTsKLX0KLQotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdobGlnaHQo
U2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBSZXRhaW5Q
dHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZSkKLSAgICA6IG1fcmFuZ2UocmFuZ2UpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAs
IG1fY29udHJvbGxlcigmY29udHJvbGxlcikKLXsKLSAgICBBU1NFUlQoZGRIaWdobGlnaHQpOwot
ICAgIEFTU0VSVChtX3JhbmdlKTsKLQotICAgIERyYXdpbmdBcmVhKiBkcmF3aW5nQXJlYSA9IGNv
bnRyb2xsZXIud2ViUGFnZSgpLmRyYXdpbmdBcmVhKCk7Ci0gICAgbV9ncmFwaGljc0xheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKGRyYXdpbmdBcmVhID8gZHJhd2luZ0FyZWEtPmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkgOiBudWxscHRyLCAqdGhpcyk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0KLSAgICBzZXREREhpZ2hsaWdodChkZEhpZ2hsaWdodC5n
ZXQoKSk7Ci0KLSAgICAvLyBTZXQgZGlyZWN0bHkgb24gdGhlIFBsYXRmb3JtQ0FMYXllciBzbyB0
aGF0IHdoZW4gd2UgbGVhdmUgdGhlICdmcm9tJyB2YWx1ZSBpbXBsaWNpdAotICAgIC8vIGluIG91
ciBhbmltYXRpb25zLCB3ZSBnZXQgdGhlIHJpZ2h0IGluaXRpYWwgdmFsdWUgcmVnYXJkbGVzcyBv
ZiBmbHVzaCB0aW1pbmcuCi0gICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3Jt
Q0FMYXllcigpLT5zZXRPcGFjaXR5KDApOwotCi0gICAgY29udHJvbGxlci5kaWRDcmVhdGVIaWdo
bGlnaHQodGhpcyk7Ci19Ci0KLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6
fkhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKG1fY29udHJvbGxlcikKLSAgICAgICAgbV9jb250cm9s
bGVyLT53aWxsRGVzdHJveUhpZ2hsaWdodCh0aGlzKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OnNldERESGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmIGhp
Z2hsaWdodCkKLXsKLSAgICBpZiAoIW1fY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9kZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLQotICAgIGlmICghbV9kZEhpZ2hsaWdodCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERE
SGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KG1fZGRIaWdobGlnaHQuZ2V0KCkpOwotICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChoaWdobGlnaHRCb3VuZGluZ1JlY3Qu
b3JpZ2luKSk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShoaWdobGln
aHRCb3VuZGluZ1JlY3Quc2l6ZSkpOwotCi0gICAgbV9ncmFwaGljc0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OmludmFsaWRhdGUoKQotewotICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBt
X2NvbnRyb2xsZXIgPSBudWxscHRyOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OkhpZ2hsaWdodDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikK
LXsKLSAgICBpZiAoIW1fY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKERy
YXdpbmdBcmVhKiBkcmF3aW5nQXJlYSA9IG1fY29udHJvbGxlci0+d2ViUGFnZSgpLmRyYXdpbmdB
cmVhKCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVz
aCgpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6cGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGlu
Q2xpcCkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgQ0dMYXllclJlZiBoaWdobGlnaHRMYXllciA9IERESGln
aGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChkZEhpZ2hsaWdodCgpLCBjZ0NvbnRleHQpOwotICAg
IENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5nUmVj
dChkZEhpZ2hsaWdodCgpKTsKLSAgICBoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luID0gQ0dQ
b2ludFplcm87Ci0KLSAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY2dDb250ZXh0LCBoaWdo
bGlnaHRCb3VuZGluZ1JlY3QsIGhpZ2hsaWdodExheWVyKTsKLX0KLQotZmxvYXQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJu
IG1fY29udHJvbGxlci0+d2ViUGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRlSW4oKQotewotICAgIFJl
dGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBhbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKLSAgICBbYW5pbWF0aW9uIHNldER1cmF0
aW9uOmhpZ2hsaWdodEZhZGVBbmltYXRpb25EdXJhdGlvbl07Ci0gICAgW2FuaW1hdGlvbiBzZXRG
aWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbYW5pbWF0aW9uIHNldFJlbW92ZWRP
bkNvbXBsZXRpb246ZmFsc2VdOwotICAgIFthbmltYXRpb24gc2V0VG9WYWx1ZTpAMV07Ci0KLSAg
ICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQbGF0Zm9y
bUNBQW5pbWF0aW9uTWFjOjpjcmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKLSAgICB0b0dyYXBoaWNz
TGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgi
RmFkZUhpZ2hsaWdodEluIiwgcGxhdGZvcm1BbmltYXRpb24uZ2V0KCkpOwotfQotCi12b2lkIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZmFkZU91dCgpCi17Ci0gICAgUmV0
YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFu
aW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOwotICAgIFthbmltYXRpb24gc2V0RHVyYXRp
b246aGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uXTsKLSAgICBbYW5pbWF0aW9uIHNldEZp
bGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFthbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpmYWxzZV07Ci0gICAgW2FuaW1hdGlvbiBzZXRUb1ZhbHVlOkAwXTsKLQotICAg
IFJlZlB0cjxIaWdobGlnaHQ+IHJldGFpbmVkU2VsZiA9IHRoaXM7Ci0gICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9jazpbcmV0YWlu
ZWRTZWxmXSAoKSB7Ci0gICAgICAgIHJldGFpbmVkU2VsZi0+ZGlkRmluaXNoRmFkZU91dEFuaW1h
dGlvbigpOwotICAgIH1dOwotCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IHBsYXRm
b3JtQW5pbWF0aW9uID0gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6Y3JlYXRlKGFuaW1hdGlvbi5n
ZXQoKSk7Ci0gICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3JtQ0FMYXllcigp
LT5hZGRBbmltYXRpb25Gb3JLZXkoIkZhZGVIaWdobGlnaHRPdXQiLCBwbGF0Zm9ybUFuaW1hdGlv
bi5nZXQoKSk7Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24o
KQotewotICAgIGlmICghbV9jb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9jb250cm9sbGVyLT5hY3RpdmVIaWdobGlnaHQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBsYXllcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0
IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoUmFuZ2UmIHJhbmdlKQotewotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS50ZXh0UXVhZHModGV4dFF1YWRz
KTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRl
eHRRdWFkcykKLSAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHF1YWQuYm91bmRpbmdCb3goKSk7
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdSZWN0KTsKLX0KLQotU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJiB3
ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX3NlcnZpY2VzT3Zlcmxh
eShudWxscHRyKQotICAgICwgbV9pc1RleHRPbmx5KGZhbHNlKQotICAgICwgbV9kZXRlcm1pbmVB
Y3RpdmVIaWdobGlnaHRUaW1lcih0aGlzLCAmU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0
ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZCkKLXsKLX0KLQotU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQotewotICAgIGZvciAoYXV0
byYgaGlnaGxpZ2h0IDogbV9oaWdobGlnaHRzKQotICAgICAgICBoaWdobGlnaHQtPmludmFsaWRh
dGUoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURl
c3Ryb3llZChQYWdlT3ZlcmxheSYpCi17Ci0gICAgLy8gQmVmb3JlIHRoZSBvdmVybGF5IGlzIGRl
c3Ryb3llZCwgaXQgc2hvdWxkIGhhdmUgbW92ZWQgb3V0IG9mIHRoZSBXZWJQYWdlLAotICAgIC8v
IGF0IHdoaWNoIHBvaW50IHdlIGFscmVhZHkgY2xlYXJlZCBvdXIgYmFjayBwb2ludGVyLgotICAg
IEFTU0VSVCghbV9zZXJ2aWNlc092ZXJsYXkpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKLXsKLSAg
ICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc2VydmljZXNPdmVy
bGF5KTsKLSAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQot
ewotfQotCi1zdGF0aWMgY29uc3QgdWludDhfdCBBbGlnbm1lbnROb25lID0gMDsKLXN0YXRpYyBj
b25zdCB1aW50OF90IEFsaWdubWVudExlZnQgPSAxIDw8IDA7Ci1zdGF0aWMgY29uc3QgdWludDhf
dCBBbGlnbm1lbnRSaWdodCA9IDEgPDwgMTsKLQotc3RhdGljIHZvaWQgZXhwYW5kRm9yR2FwKFZl
Y3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIHVpbnQ4X3QqIGFsaWdubWVudHMsIGNvbnN0IEdhcFJl
Y3RzJiBnYXApCi17Ci0gICAgaWYgKCFnYXAubGVmdCgpLmlzRW1wdHkoKSkgewotICAgICAgICBM
YXlvdXRVbml0IGxlZnRFZGdlID0gZ2FwLmxlZnQoKS54KCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGFsaWdu
bWVudHNbaV0gJiBBbGlnbm1lbnRMZWZ0KQotICAgICAgICAgICAgICAgIHJlY3RzW2ldLnNoaWZ0
WEVkZ2VUbyhsZWZ0RWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdhcC5yaWdo
dCgpLmlzRW1wdHkoKSkgewotICAgICAgICBMYXlvdXRVbml0IHJpZ2h0RWRnZSA9IGdhcC5yaWdo
dCgpLm1heFgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudFJpZ2h0
KQotICAgICAgICAgICAgICAgIHJlY3RzW2ldLnNoaWZ0TWF4WEVkZ2VUbyhyaWdodEVkZ2UpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RpdGNoUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cykKLXsKLSAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbmV3UmVjdHM7Ci0g
ICAgCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCB2ZXJ0aWNhbCBsYXlvdXQuCi0gICAg
Ly8gRmlyc3Qgc3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgb24gdGhlIGZpcnN0IGxpbmUg
b2YgdGhlIHNlbGVjdGlvbi4KLSAgICBzaXplX3QgaW5kZXhGcm9tU3RhcnQgPSAwOwotICAgIExh
eW91dFVuaXQgZmlyc3RUb3AgPSByZWN0c1tpbmRleEZyb21TdGFydF0ueSgpOwotICAgIExheW91
dFJlY3QmIGN1cnJlbnRSZWN0ID0gcmVjdHNbaW5kZXhGcm9tU3RhcnRdOwotICAgIHdoaWxlIChp
bmRleEZyb21TdGFydCA8IHJlY3RzLnNpemUoKSAmJiByZWN0c1tpbmRleEZyb21TdGFydF0ueSgp
ID09IGZpcnN0VG9wKQotICAgICAgICBjdXJyZW50UmVjdC51bml0ZShyZWN0c1tpbmRleEZyb21T
dGFydCsrXSk7Ci0gICAgCi0gICAgbmV3UmVjdHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKLSAgICBp
ZiAoaW5kZXhGcm9tU3RhcnQgPT0gcmVjdHMuc2l6ZSgpKSB7Ci0gICAgICAgIC8vIEFsbCB0aGUg
cmVjdHMgYXJlIG9uIG9uZSBsaW5lLiBUaGVyZSBpcyBub3RoaW5nIGVsc2UgdG8gZG8uCi0gICAg
ICAgIHJlY3RzLnN3YXAobmV3UmVjdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIC8vIE5leHQgc3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgb24gdGhlIGxhc3QgbGlu
ZSBvZiB0aGUgc2VsZWN0aW9uLgotICAgIHNpemVfdCBpbmRleEZyb21FbmQgPSByZWN0cy5zaXpl
KCkgLSAxOwotICAgIExheW91dFVuaXQgbGFzdFRvcCA9IHJlY3RzW2luZGV4RnJvbUVuZF0ueSgp
OwotICAgIExheW91dFJlY3QgbGFzdFJlY3QgPSByZWN0c1tpbmRleEZyb21FbmRdOwotICAgIHdo
aWxlIChpbmRleEZyb21FbmQgPj0gaW5kZXhGcm9tU3RhcnQgJiYgcmVjdHNbaW5kZXhGcm9tRW5k
XS55KCkgPT0gbGFzdFRvcCkKLSAgICAgICAgbGFzdFJlY3QudW5pdGUocmVjdHNbaW5kZXhGcm9t
RW5kLS1dKTsKLSAgICAKLSAgICAvLyBpbmRleEZyb21TdGFydCBpcyB0aGUgaW5kZXggb2YgdGhl
IGZpcnN0IHJlY3RhbmdsZSBvbiB0aGUgc2Vjb25kIGxpbmUuCi0gICAgLy8gaW5kZXhGcm9tRW5k
IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCByZWN0YW5nbGUgb24gdGhlIHNlY29uZCB0byB0aGUg
bGFzdCBsaW5lLgotICAgIC8vIGlmIHRoZXkgYXJlIGVxdWFsLCB0aGVyZSBpcyBvbmUgYWRkaXRp
b25hbCByZWN0YW5nbGUgZm9yIHRoZSBsaW5lIGluIHRoZSBtaWRkbGUuCi0gICAgaWYgKGluZGV4
RnJvbUVuZCA9PSBpbmRleEZyb21TdGFydCkKLSAgICAgICAgbmV3UmVjdHMuYXBwZW5kKHJlY3Rz
W2luZGV4RnJvbVN0YXJ0XSk7Ci0gICAgCi0gICAgaWYgKGluZGV4RnJvbUVuZCA8PSBpbmRleEZy
b21TdGFydCkgewotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gbW9yZSByZWN0cyB0byBzdGl0Y2gu
IEp1c3QgYXBwZW5kIHRoZSBsYXN0IGxpbmUuCi0gICAgICAgIG5ld1JlY3RzLmFwcGVuZChsYXN0
UmVjdCk7Ci0gICAgICAgIHJlY3RzLnN3YXAobmV3UmVjdHMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIC8vIFN0aXRjaCB0b2dldGhlciBhbGwgdGhlIHJlY3RzIGFmdGVyIHRo
ZSBmaXJzdCBsaW5lIHVudGlsIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgaW5jbHVkZWQuCi0gICAg
Y3VycmVudFJlY3QgPSByZWN0c1tpbmRleEZyb21TdGFydF07Ci0gICAgd2hpbGUgKGluZGV4RnJv
bVN0YXJ0ICE9IGluZGV4RnJvbUVuZCkKLSAgICAgICAgY3VycmVudFJlY3QudW5pdGUocmVjdHNb
KytpbmRleEZyb21TdGFydF0pOwotICAgIAotICAgIG5ld1JlY3RzLmFwcGVuZChjdXJyZW50UmVj
dCk7Ci0gICAgbmV3UmVjdHMuYXBwZW5kKGxhc3RSZWN0KTsKLQotICAgIHJlY3RzLnN3YXAobmV3
UmVjdHMpOwotfQotCi1zdGF0aWMgdm9pZCBjb21wYWN0UmVjdHNXaXRoR2FwUmVjdHMoVmVjdG9y
PExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMpCi17
Ci0gICAgc3RpdGNoUmVjdHMocmVjdHMpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIGFsaWdubWVudHMgYXJlIGNvcnJlY3QgZm9yIExUUiB0ZXh0LgotICAgIC8vIFdlIHNob3Vs
ZCBhbHNvIGFjY291bnQgZm9yIFJUTC4KLSAgICB1aW50OF90IGFsaWdubWVudHNbM107Ci0gICAg
aWYgKHJlY3RzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGFsaWdubWVudHNbMF0gPSBBbGlnbm1l
bnRMZWZ0IHwgQWxpZ25tZW50UmlnaHQ7Ci0gICAgICAgIGFsaWdubWVudHNbMV0gPSBBbGlnbm1l
bnROb25lOwotICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50Tm9uZTsKLSAgICB9IGVs
c2UgaWYgKHJlY3RzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIGFsaWdubWVudHNbMF0gPSBBbGln
bm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1sxXSA9IEFsaWdubWVudExlZnQ7Ci0gICAg
ICAgIGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnROb25lOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFsaWdubWVudHNbMF0gPSBBbGlnbm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1sxXSA9
IEFsaWdubWVudExlZnQgfCBBbGlnbm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1syXSA9
IEFsaWdubWVudExlZnQ7Ci0gICAgfQotCi0gICAgLy8gQWNjb3VudCBmb3IgZWFjaCBHYXBSZWN0
cyBieSBleHRlbmRpbmcgdGhlIGVkZ2Ugb2YgY2VydGFpbiBMYXlvdXRSZWN0cyB0byBtZWV0IHRo
ZSBnYXAuCi0gICAgZm9yIChhdXRvJiBnYXAgOiBnYXBSZWN0cykKLSAgICAgICAgZXhwYW5kRm9y
R2FwKHJlY3RzLCBhbGlnbm1lbnRzLCBnYXApOwotCi0gICAgLy8gSWYgd2UgaGF2ZSAzIHJlY3Rz
IHdlIG1pZ2h0IG5lZWQgb25lIGZpbmFsIEdhcFJlY3RzIHRvIGFsaWduIHRoZSBlZGdlcy4KLSAg
ICBpZiAocmVjdHMuc2l6ZSgpID09IDMpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBsZWZ0OwotICAg
ICAgICBMYXlvdXRSZWN0IHJpZ2h0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudExlZnQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSByZWN0c1tpXTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWN0c1tpXS54
KCkgPCBsZWZ0LngoKSkKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3RzW2ldOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRSaWdo
dCkgewotICAgICAgICAgICAgICAgIGlmIChyaWdodC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcmVjdHNbaV07Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJlY3Rz
W2ldLngoKSArIHJlY3RzW2ldLndpZHRoKCkpID4gKHJpZ2h0LngoKSArIHJpZ2h0LndpZHRoKCkp
KQotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3RzW2ldOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsZWZ0LmlzRW1wdHkoKSB8fCAhcmlnaHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBHYXBSZWN0cyBnYXA7Ci0gICAgICAgICAgICBnYXAudW5pdGVM
ZWZ0KGxlZnQpOwotICAgICAgICAgICAgZ2FwLnVuaXRlUmlnaHQocmlnaHQpOwotICAgICAgICAg
ICAgZXhwYW5kRm9yR2FwKHJlY3RzLCBhbGlnbm1lbnRzLCBnYXApOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3RzRGlk
Q2hhbmdlKGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxHYXBS
ZWN0cz4mIGdhcFJlY3RzLCBib29sIGlzVGV4dE9ubHkpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIG1fY3VycmVudFNl
bGVjdGlvblJlY3RzID0gcmVjdHM7Ci0gICAgbV9pc1RleHRPbmx5ID0gaXNUZXh0T25seTsKLQot
ICAgIG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojpub3coKTsKLQotICAgIGNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0cyhtX2N1cnJlbnRTZWxlY3Rp
b25SZWN0cywgZ2FwUmVjdHMpOwotCi0gICAgLy8gRGF0YURldGVjdG9ycyBuZWVkcyB0aGVzZSBy
ZXZlcnNlZCBpbiBvcmRlciB0byBwbGFjZSB0aGUgYXJyb3cgaW4gdGhlIHJpZ2h0IGxvY2F0aW9u
LgotICAgIG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnJldmVyc2UoKTsKLQotICAgIExPRyhTZXJ2
aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBTZWxlY3Rpb24gcmVjdHMgY2hhbmdl
ZCAtIE5vdyBoYXZlICVsdVxuIiwgcmVjdHMuc2l6ZSgpKTsKLQotICAgIGJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWN0cyk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdhcFJlY3RzKTsKLSAgICBVTlVTRURfUEFSQU0oaXNUZXh0T25seSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyIC0gVGVsZXBob25lIG51bWJlciByYW5nZXMgY2hhbmdlZFxuIik7Ci0g
ICAgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKTsKLSNlbmRpZgotfQotCi1ib29sIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlSXNPdmVySGlnaGxpZ2h0KEhpZ2hsaWdodCYgaGln
aGxpZ2h0LCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3QKLXsKLSAgICBCb29sZWFuIG9u
QnV0dG9uOwotICAgIGJvb2wgaG92ZXJlZCA9IERESGlnaGxpZ2h0UG9pbnRJc09uSGlnaGxpZ2h0
KGhpZ2hsaWdodC5kZEhpZ2hsaWdodCgpLCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1
dHRvbik7Ci0gICAgbW91c2VJc092ZXJCdXR0b24gPSBvbkJ1dHRvbjsKLSAgICByZXR1cm4gaG92
ZXJlZDsKLX0KLQotc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KSBjb25zdAotewotICAgIGlmICghaGlnaGxpZ2h0KQotICAgICAgICByZXR1
cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6emVybygpOwotCi0gICAgYXV0byBtaW5pbXVt
VGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IDIwMF9tczsKLSAgICBpZiAobV93ZWJQ
YWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIG1pbmlt
dW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID0gMTAwMF9tczsKLQotICAgIGJvb2wg
bW91c2VQcmVzc2VkID0gZmFsc2U7Ci0gICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBh
Z2UubWFpbkZyYW1lKCkpCi0gICAgICAgIG1vdXNlUHJlc3NlZCA9IG1haW5GcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubW91c2VQcmVzc2VkKCk7Ci0KLSAgICAvLyBIaWdobGlnaHQgaHlzdGVyZXNpcyBp
cyBvbmx5IGZvciBzZWxlY3Rpb24gc2VydmljZXMsIGJlY2F1c2UgdGVsZXBob25lIG51bWJlciBo
aWdobGlnaHRzIGFyZSBhbHJlYWR5IG11Y2ggbW9yZSBzdGFibGUKLSAgICAvLyBieSB2aXJ0dWUg
b2YgYmVpbmcgZXhwYW5kZWQgdG8gaW5jbHVkZSB0aGUgZW50aXJlIHRlbGVwaG9uZSBudW1iZXIu
IEhvd2V2ZXIsIHdlIHdpbGwgc3RpbGwgYXZvaWQgaGlnaGxpZ2h0aW5nCi0gICAgLy8gdGVsZXBo
b25lIG51bWJlcnMgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCi0gICAgaWYgKGhpZ2hsaWdodC0+
dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQotICAgICAgICByZXR1
cm4gbW91c2VQcmVzc2VkID8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24g
OiAwX21zOwotCi0gICAgYXV0byBub3cgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3co
KTsKLSAgICBhdXRvIHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UgPSBub3cgLSBtX2xhc3RT
ZWxlY3Rpb25DaGFuZ2VUaW1lOwotICAgIGF1dG8gdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0
aXZlID0gbm93IC0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZTsKLSAgICBhdXRvIHRp
bWVTaW5jZUxhc3RNb3VzZVVwID0gbW91c2VQcmVzc2VkID8gMF9tcyA6IG5vdyAtIG1fbGFzdE1v
dXNlVXBUaW1lOwotCi0gICAgYXV0byByZW1haW5pbmdEZWxheSA9IG1pbmltdW1UaW1lVW50aWxI
aWdobGlnaHRTaG91bGRCZVNob3duIC0gc3RkOjptaW4oc3RkOjptaW4odGltZVNpbmNlTGFzdFNl
bGVjdGlvbkNoYW5nZSwgdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0aXZlKSwgdGltZVNpbmNl
TGFzdE1vdXNlVXApOwotICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzPihyZW1haW5pbmdEZWxheSk7Ci19Ci0KLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChU
aW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpCi17Ci0gICAgYm9vbCBtb3VzZUlzT3Zl
ckJ1dHRvbjsKLSAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJCdXR0b24p
OwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVy
bGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQotewotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmNsZWFyQWN0aXZlSGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAoIW1fYWN0aXZlSGlnaGxpZ2h0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdo
bGlnaHQgPT0gbV9hY3RpdmVIaWdobGlnaHQpCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9u
QnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxsUG90ZW50
aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkKLXsKLSAgICBWZWN0b3I8
UmVmUHRyPEhpZ2hsaWdodD4+IGhpZ2hsaWdodHNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8mIGhp
Z2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0
LT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQo
aGlnaGxpZ2h0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIWhpZ2hsaWdodHNUb1JlbW92ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0c1Rv
UmVtb3ZlLnRha2VMYXN0KCkpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKLXsKLSAgICBpZiAoIURhdGFEZXRlY3RvcnNM
aWJyYXJ5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdo
dD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7Ci0KLSAgICBGcmFtZSogbWFpbkZyYW1lID0gbV93
ZWJQYWdlLm1haW5GcmFtZSgpOwotICAgIEZyYW1lVmlldyYgbWFpbkZyYW1lVmlldyA9ICptYWlu
RnJhbWUtPnZpZXcoKTsKLQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGF1dG8m
IHJhbmdlcyA9IGZyYW1lLT5lZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygp
OwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIGNob2tlIGlmIHRoZSByYW5nZSB3cmFwcyBhcm91bmQgdGhlIGVkZ2Ug
b2YgdGhlIHZpZXcuCi0gICAgICAgICAgICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNh
c2U/Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZv
clJhbmdlKCpyYW5nZSk7Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gdGhlIG1haW4gZG9j
dW1lbnQncyBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3MgYSBs
aXR0bGUgY3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVuIHdpbmRvd1RvQ29u
dGVudHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNwYWNlLgotICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0
byBTY3JvbGxWaWV3IGZvciBjb250ZW50c1RvRG9jdW1lbnQoKS4gUmlnaHQgbm93LCBjb250ZW50
c1RvUm9vdFZpZXcoKSBpcwotICAgICAgICAgICAgLy8gbm90IGVxdWl2YWxlbnQgdG8gd2hhdCB3
ZSBuZWVkIHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50SW5zZXQgb3IgYSBoZWFkZXIgYmFubmVy
LgotICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1
bWVudCgpLnZpZXcoKTsKLSAgICAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihtYWluRnJhbWVW
aWV3LndpbmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KHJlY3Qu
bG9jYXRpb24oKSkpKTsKLQotICAgICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJlY3Q7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihE
REhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rp
b24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3Qo
KSwgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwsIE5PLCBZRVMpKTsKLQotICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5h
ZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoKnRoaXMsIGRkSGlnaGxpZ2h0
LCByYW5nZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5
cGVQcmVzZXJ2aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywg
SGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgZGlkUmVidWlsZFBvdGVu
dGlhbEhpZ2hsaWdodHMoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpi
dWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFy
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBu
ZXdQb3RlbnRpYWxIaWdobGlnaHRzOwotCi0gICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0czsKLSAg
ICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5zaXplKCkp
OwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fd2ViUGFnZS5jb3JlUGFn
ZSgpLT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7
Ci0gICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lKCk7Ci0gICAg
ICAgIEZyYW1lVmlldyYgbWFpbkZyYW1lVmlldyA9ICptYWluRnJhbWUtPnZpZXcoKTsKLSAgICAg
ICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVu
dCgpLnZpZXcoKTsKLQotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rp
b25SZWN0cykgewotICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJbnRS
ZWN0KHJlY3QpOwotICAgICAgICAgICAgY3VycmVudFJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1l
Vmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhjdXJy
ZW50UmVjdC5sb2NhdGlvbigpKSkpOwotICAgICAgICAgICAgY2dSZWN0cy5hcHBlbmQoKENHUmVj
dCljdXJyZW50UmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGln
aGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihu
dWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERI
aWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bCwgTk8sIFlFUykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdo
bGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGln
aHQsIHNlbGVjdGlvblJhbmdlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXBsYWNlSGln
aGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhuZXdQb3RlbnRpYWxI
aWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbik7Ci0KLSAgICBkaWRSZWJ1aWxk
UG90ZW50aWFsSGlnaGxpZ2h0cygpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OnJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRz
KEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+JiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdo
bGlnaHQ6OlR5cGUgdHlwZSkKLXsKLSAgICAvLyBJZiBhbnkgb2xkIEhpZ2hsaWdodHMgYXJlIGVx
dWl2YWxlbnQgKGJ5IFJhbmdlKSB0byBhIG5ldyBIaWdobGlnaHQsIHJldXNlIHRoZSBvbGQKLSAg
ICAvLyBvbmUgc28gdGhhdCBhbnkgbWV0YWRhdGEgaXMgcmV0YWluZWQuCi0gICAgSGFzaFNldDxS
ZWZQdHI8SGlnaGxpZ2h0Pj4gcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0czsKLQotICAgIGZvciAo
YXV0byYgb2xkSGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlm
IChvbGRIaWdobGlnaHQtPnR5cGUoKSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZm9yIChhdXRvJiBuZXdIaWdobGlnaHQgOiBuZXdQb3RlbnRpYWxIaWdobGlnaHRz
KSB7Ci0gICAgICAgICAgICBpZiAoaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQob2xkSGlnaGxpZ2h0
LmdldCgpLCBuZXdIaWdobGlnaHQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgb2xkSGlnaGxp
Z2h0LT5zZXREREhpZ2hsaWdodChuZXdIaWdobGlnaHQtPmRkSGlnaGxpZ2h0KCkpOwotCi0gICAg
ICAgICAgICAgICAgcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQob2xkSGlnaGxpZ2h0KTsK
LSAgICAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZShuZXdIaWdobGln
aHQpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKHR5cGUpOwot
Ci0gICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLmFkZChuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmJl
Z2luKCksIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuZW5kKCkpOwotICAgIG1fcG90ZW50aWFsSGln
aGxpZ2h0cy5hZGQocmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCByZXVzZWRQb3Rl
bnRpYWxIaWdobGlnaHRzLmVuZCgpKTsKLX0KLQotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkKLXsKLSAgICByZXR1cm4gKG1faXNU
ZXh0T25seSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpKSB8
fCBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7Ci19Ci0KLXZv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdo
dHMoKQotewotICAgIGlmIChtX3BvdGVudGlhbEhpZ2hsaWdodHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKLSAgICAgICAgICAgIG1fd2ViUGFnZS5tYWluRnJh
bWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2
aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2Vk
RnJhbWUoKS5pc0VtcHR5KCkgJiYgIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0KLSAgICBib29s
IG1vdXNlSXNPdmVyQnV0dG9uOwotICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlz
T3ZlckJ1dHRvbik7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRl
T3ZlcmxheUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5
OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAg
IG1fc2VydmljZXNPdmVybGF5ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UubWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5
LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotfQotCi1WZWN0
b3I8UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVt
YmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV93ZWJQYWdl
LmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gVmVjdG9yPFJlZlB0
cjxSYW5nZT4+KCk7Ci0KLSAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCkuZWRpdG9yKCkuZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsK
LX0KLQotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoaWdobGlnaHRzQXJlRXF1aXZh
bGVudChjb25zdCBIaWdobGlnaHQqIGEsIGNvbnN0IEhpZ2hsaWdodCogYikKLXsKLSAgICBpZiAo
YSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPnR5cGUoKSA9PSBiLT50eXBlKCkgJiYgYXJl
UmFuZ2VzRXF1YWwoYS0+cmFuZ2UoKSwgYi0+cmFuZ2UoKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpI
aWdobGlnaHQqIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJI
aWdobGlnaHRDb250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KEhpZ2hsaWdodCYgc2VsZWN0aW9u
SGlnaGxpZ2h0KQotewotICAgIGlmIChzZWxlY3Rpb25IaWdobGlnaHQudHlwZSgpICE9IEhpZ2hs
aWdodDo6VHlwZTo6U2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5z
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmVmUHRyPFJhbmdlPiBhY3RpdmVTZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghYWN0aXZlU2VsZWN0aW9uUmFu
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgp
ICE9IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+cmFuZ2UoKS0+Y29udGFpbnMoKmFjdGl2ZVNl
bGVjdGlvblJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlSGln
aGxpZ2h0QnV0dG9uKQotewotICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0g
ZmFsc2U7Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBuZXdBY3RpdmVIaWdobGlnaHQ7Ci0KLSAg
ICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pIHsK
LSAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYSBuZXcgYWN0aXZlIGhpZ2hs
aWdodCwgYW5kIGl0J3MKLSAgICAgICAgICAgIC8vIGEgdGVsZXBob25lIG51bWJlciBoaWdobGln
aHQsIHByZWZlciB0aGF0IG92ZXIgdGhpcyBzZWxlY3Rpb24gaGlnaGxpZ2h0LgotICAgICAgICAg
ICAgaWYgKG5ld0FjdGl2ZUhpZ2hsaWdodCAmJiBuZXdBY3RpdmVIaWdobGlnaHQtPnR5cGUoKSA9
PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgLy8gSWYgdGhpcyBoaWdobGlnaHQgaGFzIG5vIGNvbXBhdGli
bGUgc2VydmljZXMsIGl0IGNhbid0IGJlIGFjdGl2ZS4KLSAgICAgICAgICAgIGlmICghaGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBoaWdobGlnaHQgaXNuJ3QgaG92ZXJlZCwgaXQg
Y2FuJ3QgYmUgYWN0aXZlLgotICAgICAgICBib29sIG1vdXNlSXNPdmVyQnV0dG9uOwotICAgICAg
ICBpZiAoIW1vdXNlSXNPdmVySGlnaGxpZ2h0KCpoaWdobGlnaHQsIG1vdXNlSXNPdmVyQnV0dG9u
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5ld0FjdGl2ZUhpZ2hsaWdodCA9
IGhpZ2hsaWdodDsKLSAgICAgICAgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gPSBt
b3VzZUlzT3ZlckJ1dHRvbjsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgbmV3IGFjdGl2ZSBoaWdo
bGlnaHQgaXMgYSBzZWxlY3Rpb24gaGlnaGxpZ2h0IHRoYXQgaXMgY29tcGxldGVseSBjb250YWlu
ZWQKLSAgICAvLyBieSBvbmUgb2YgdGhlIHBob25lIG51bWJlciBoaWdobGlnaHRzLCB3ZSdsbCBt
YWtlIHRoZSBwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGFjdGl2ZSBldmVuIGlmIGl0J3Mgbm90IGhv
dmVyZWQuCi0gICAgaWYgKG5ld0FjdGl2ZUhpZ2hsaWdodCAmJiBuZXdBY3RpdmVIaWdobGlnaHQt
PnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikgewotICAgICAgICBpZiAoSGln
aGxpZ2h0KiBjb250YWluZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQgPSBmaW5kVGVsZXBob25l
TnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCgqbmV3QWN0aXZlSGln
aGxpZ2h0KSkgewotICAgICAgICAgICAgbmV3QWN0aXZlSGlnaGxpZ2h0ID0gY29udGFpbmVkVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0OwotCi0gICAgICAgICAgICAvLyBXZSB3aWxsIGFsd2F5cyBp
bml0aWFsbHkgY2hvb3NlIHRoZSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCBvdmVyIHRoZSBz
ZWxlY3Rpb24gaGlnaGxpZ2h0IGlmIHRoZQotICAgICAgICAgICAgLy8gbW91c2UgaXMgb3ZlciB0
aGUgdGVsZXBob25lIG51bWJlciBoaWdobGlnaHQncyBidXR0b24sIHNvIHdlIGtub3cgdGhhdCBp
dCdzIG5vdCBob3ZlcmVkIGlmIHdlIGdvdCBoZXJlLgotICAgICAgICAgICAgbW91c2VJc092ZXJB
Y3RpdmVIaWdobGlnaHRCdXR0b24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghdGhpcy0+aGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQobV9hY3RpdmVIaWdobGlnaHQuZ2V0KCks
IG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSkpIHsKLSAgICAgICAgLy8gV2hlbiB0cmFuc2l0aW9u
aW5nIHRvIGEgbmV3IGhpZ2hsaWdodCwgd2UgbWlnaHQgZW5kIHVwIGluIGRldGVybWluZUFjdGl2
ZUhpZ2hsaWdodCBtdWx0aXBsZSB0aW1lcwotICAgICAgICAvLyBiZWZvcmUgdGhlIG5ldyBoaWdo
bGlnaHQgYWN0dWFsbHkgYmVjb21lcyBhY3RpdmUuIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgbmV4
dC1idXQtbm90LXlldC1hY3RpdmUKLSAgICAgICAgLy8gaGlnaGxpZ2h0LCBhbmQgb25seSByZXNl
dCB0aGUgYWN0aXZlIGhpZ2hsaWdodCBoeXN0ZXJlc2lzIHdoZW4gdGhhdCBjaGFuZ2VzLgotICAg
ICAgICBpZiAobV9uZXh0QWN0aXZlSGlnaGxpZ2h0ICE9IG5ld0FjdGl2ZUhpZ2hsaWdodCkgewot
ICAgICAgICAgICAgbV9uZXh0QWN0aXZlSGlnaGxpZ2h0ID0gbmV3QWN0aXZlSGlnaGxpZ2h0Owot
ICAgICAgICAgICAgbV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZSA9IHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6Om5vdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotCi0gICAgICAgIGlmIChtX2FjdGl2
ZUhpZ2hsaWdodCkgewotICAgICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQtPmZhZGVPdXQoKTsK
LSAgICAgICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGF1dG8gcmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IHRo
aXMtPnJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24obmV3QWN0aXZlSGln
aGxpZ2h0LmdldCgpKTsKLSAgICAgICAgaWYgKHJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNo
b3VsZEJlU2hvd24gPiBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpkdXJhdGlvbjo6emVybygp
KSB7Ci0gICAgICAgICAgICBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyLnN0YXJ0T25l
U2hvdChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbV9u
ZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKLQotICAgICAgICBpZiAobV9hY3RpdmVIaWdo
bGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigpLmFkZENoaWxk
KG1fYWN0aXZlSGlnaGxpZ2h0LT5sYXllcigpKTsKLSAgICAgICAgICAgIG1fYWN0aXZlSGlnaGxp
Z2h0LT5mYWRlSW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldmVudCkKLXsKLSAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9zaXRp
b24oKSk7Ci0KLSAgICBib29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFs
c2U7Ci0gICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxp
Z2h0QnV0dG9uKTsKLQotICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBi
dXR0b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9y
ZSB0aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0
QnV0dG9uKSB7Ci0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBt
b3VzZSBsaWZ0ZWQgd2hpbGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0
IHdlbnQgZG93biBvbiwgdGhlbiB0aGF0IGlzIGEgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkKSB7Ci0gICAgICAgIFJlZlB0cjxIaWdo
bGlnaHQ+IG1vdXNlRG93bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGln
aGxpZ2h0OwotICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51
bGxwdHI7Ci0KLSAgICAgICAgbV9sYXN0TW91c2VVcFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5
X2Nsb2NrOjpub3coKTsKLQotICAgICAgICBpZiAobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRC
dXR0b24gJiYgbW91c2VEb3duSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBoYW5kbGVDbGljayht
X21vdXNlUG9zaXRpb24sICptb3VzZURvd25IaWdobGlnaHQpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB0aGUgbW91c2UgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNr
aW5nIGEgcG90ZW50aWFsIGNsaWNrLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay4KLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQpIHsKLSAgICAgICAgaWYg
KG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZl
SGlnaGxpZ2h0QnV0dG9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgbV9j
dXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRo
ZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNs
aWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2Vk
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhp
Z2hsaWdodEJ1dHRvbikgewotICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25I
aWdobGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFt
ZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAoZnJhbWUuaXNNYWluRnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMo
KTsKLSAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOwotCi0gICAgYm9vbCBtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbjsKLSAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOwotfQotCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50LCBIaWdo
bGlnaHQmIGhpZ2hsaWdodCkKLXsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFn
ZS5tYWluRnJhbWVWaWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93
KGNsaWNrUG9pbnQpOwotCi0gICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpU
eXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMgPSB0
ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAgICAgICBzZWxlY3RlZFRlbGVwaG9u
ZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51bWJlclJhbmdlcy5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25lTnVtYmVyUmFuZ2VzKQotICAgICAg
ICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChyYW5nZS0+dGV4dCgpKTsKLQot
ICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rp
b24oKSwgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7Ci0gICAgfSBlbHNl
IGlmIChoaWdobGlnaHQudHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVy
KQotICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGlnaGxpZ2h0
LnJhbmdlKCktPnRleHQoKSwgd2luZG93UG9pbnQpOwotfQotCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENyZWF0ZUhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsK
LSAgICBBU1NFUlQoIW1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKLSAgICBtX2hp
Z2hsaWdodHMuYWRkKGhpZ2hsaWdodCk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6d2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAg
QVNTRVJUKG1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKLSAgICBtX2hpZ2hsaWdo
dHMucmVtb3ZlKGhpZ2hsaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239562</attachid>
            <date>2014-10-09 13:02:06 -0700</date>
            <delta_ts>2014-10-09 13:22:19 -0700</delta_ts>
            <desc>fix mac build</desc>
            <filename>soc.diff</filename>
            <type>text/plain</type>
            <size>112095</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZmU3OWQ4Li5lNDI2MGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTQtMTAtMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIHRvIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQxNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTg1NDYyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIGZyb20g
V2ViS2l0MiB0byBXZWJDb3JlLCBhcyBpdCBjYW4gYmUgdXNlZCBieSBib3RoIExlZ2FjeSBXZWJL
aXQgYW5kIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6fk5vdGlmaWVyKToKKyAgICAgICAgTm90aWZ5IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcyB2aWEgUGFnZSBpbnN0ZWFkIG9mIEVk
aXRvckNsaWVudC4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2
aWNlcyk6CisgICAgICAgIEFkZCBDaHJvbWVDbGllbnQgZnVuY3Rpb25zIGZvciBzZXJ2aWNlcyBh
Y3Rpb25zLgorCisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6c2VsZWN0aW9uUmVjdHNE
aWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgRWRpdG9yQ2xpZW50IGZ1bmN0aW9u
cyBmb3Igbm90aWZ5aW5nIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb2YgY2hhbmdlcywKKyAg
ICAgICAgYmVjYXVzZSBpdCBsaXZlcyBpbiBXZWJDb3JlIHByb3BlciBub3cuCisKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgS2VlcCBhIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgb24g
UGFnZS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICBVc2Ugd2luZG93VG9Db250ZW50
cyBpbnN0ZWFkIG9mIHJvb3RWaWV3VG9Db250ZW50czsgZXZlbnRzIGNvbWUgaW4gaW4gd2luZG93
IGNvb3JkaW5hdGVzLgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5n
c0ZvckxheWVyKToKKyAgICAgICAgR2V0IFNldHRpbmdzIGZyb20gTWFpbkZyYW1lLCBub3QgUGFn
ZS4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisgICAgICAgIEFkZCBzZXJ2aWNlc0Nv
bnRyb2xzRW5hYmxlZCBzZXR0aW5nLgorCisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBwYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tLgorICAg
ICAgICBNb3ZlZCBmcm9tIFdlYktpdDIuIE1vc3RseSBtZWNoYW5pY2FsIGNoYW5nZXMsIHBsdXM6
CisgICAgICAgICAgICAtIFVzZSB3aW5kb3dUb0NvbnRlbnRzIGluc3RlYWQgb2Ygcm9vdFZpZXdU
b0NvbnRlbnRzOyBldmVudHMgY29tZSBpbiBpbiB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgICAg
ICAgICAtIEN1dCBvZmYgcmVidWlsZCogaWYgc2VydmljZUNvbnRyb2xzRW5hYmxlZCBzZXR0aW5n
IGlzIGZhbHNlCisgICAgICAgICAgICAtIERvbid0IGNyZWF0ZSB0aGUgb3ZlcmxheSBpZiBzZXJ2
aWNlQ29udHJvbHNFbmFibGVkIHNldHRpbmcgaXMgZmFsc2UKKyAgICAgICAgICAgIC0gU2VuZCBj
bGljayBldmVudHMgdmlhIENocm9tZUNsaWVudC4KKyAgICAgICAgICAgIC0gVGllIG91ciBsaWZl
dGltZSB0byBNYWluRnJhbWUgaW5zdGVhZCBvZiBQYWdlLCBhbmQgZ2V0IGxvdHMgb2YgdGhpbmdz
IGZyb20gTWFpbkZyYW1lIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6
CisgICAgICAgIEFkZCBTZXJ2aWNlcyBsb2dnaW5nIGNoYW5uZWwgKG1vdmVkIGZyb20gV2ViS2l0
MikuCisKIDIwMTQtMTAtMDkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1MgRm9udCBMb2FkaW5nXSBEZWNyZW1lbnQgdGhlIGZvbnQgbG9hZGluZyBjb3Vu
dCBiZWZvcmUgbm90aWZ5aW5nIGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIzNmY5ZmEuLmI3ZWMyYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTExMDYsNiArMTEwNiw4IEBACiAJCTJEOEZFQkREMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9z
c2ZhZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ4RkVCREIxNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmggKi87IH07
CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovOyB9OwogCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJEOTNBRUUzMTlE
RjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkzQUVFMTE5REY1NjQxMDAyQTg2
QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oICovOyB9OworCQkyRDkzQUVFNDE5REY1
NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTNBRUUyMTlERjU2NDEwMDJBODZD
MyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tICovOyB9OwogCQkyRDk3RjA0NzE5REQ0
MTNDMDAxRUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUFFMzJDMTlEQ0FGNjAwMEUwMDJEMiAv
KiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovOyB9OwogCQkyRDk3RjA0ODE5REQ0MTQwMDAx
RUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFBRTMyRDE5RENBRjYwMDBFMDAyRDIgLyogTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50LmggKi87IH07CiAJCTJEOUEyNDZFMTVCOUJEMDAwMEQzNDUyNyAvKiBE
T01TZWN1cml0eVBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ5QTI0NkIxNUI5QkJERDAwRDM0NTI3IC8qIERPTVNlY3VyaXR5UG9saWN5Lmgg
Ki87IH07CkBAIC04MTA2LDYgKzgxMDgsOCBAQAogCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTgg
LyogTGF5b3V0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExheW91dFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MDUw
QkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDkwNjYwQzA2NjVEOTM3MDA2QjZGMUEgLyogRGF0YVRyYW5zZmVyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YVRyYW5z
ZmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKKwkJMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDkzQUVFMjE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUEyNDZBMTVCOUJCREQwMEQzNDUy
NyAvKiBET01TZWN1cml0eVBvbGljeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01TZWN1cml0eVBvbGljeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEOUEyNDZCMTVCOUJCREQwMEQzNDUyNyAvKiBET01TZWN1cml0eVBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TZWN1cml0eVBvbGljeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlBMjQ3MDE1QjlDMjk1MDBEMzQ1MjcgLyogRE9NRE9N
U2VjdXJpdHlQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9N
U2VjdXJpdHlQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTUzLDYg
KzE3NTU3LDggQEAKIAkJCQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xs
ZXJNYWMubW0gKi8sCiAJCQkJOTNDMDlBN0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxl
ck1hYy5tbSAqLywKIAkJCQkxQzI2NDk3QjBEN0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAg
Ki8sCisJCQkJMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLywKKwkJCQkyRDkzQUVFMjE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSAqLywKIAkJCQlFMUMyRjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0
dGluZ3NNYWMubW0gKi8sCiAJCQkJMjYyNTVGMDIxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2Vu
dE1hYy5tbSAqLywKIAkJCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1l
Vmlldy5oICovLApAQCAtMjM0OTQsNiArMjM1MDAsNyBAQAogCQkJCUZEMzE1RkZGMTJCMDI2NzYw
MEMxQTM1OSAvKiBDaGFubmVsTWVyZ2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
MDIxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyRDkzQUVFMzE5REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhE
IC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTI4NDAwLDYgKzI4NDA3LDcgQEAKIAkJCQlFMUE1Rjk5QjBFN0VBQTI1
MDBBRjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3NTc5M0VDODBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDEwQjdFNzIxMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJEOTNBRUU0MTlERjU2NDEwMDJBODZDMyAvKiBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBREVEREIw
RTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg2NjI5RDIwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBjMjAzMzk1
Li40ZjFiMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC02MSw2ICs2MSw3IEBA
CiAjaW5jbHVkZSAiSW5zZXJ0TGlzdENvbW1hbmQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiS2lsbFJpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNs
dWRlICJNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEwMiw2ICsxMDMsMTAgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorI2lu
Y2x1ZGUgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZCB7CkBAIC0zMzM5LDcgKzMzNDQsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMoVGltZXI8RWRpdG9yPiYpCiAKIHZvaWQgRWRpdG9yOjpz
Y2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiB7Ci0gICAgaWYgKCFzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzKCkgfHwgIWNsaWVudCgpKQorICAgIGlmICghc2hvdWxkRGV0ZWN0
VGVsZXBob25lTnVtYmVycygpIHx8ICFjbGllbnQoKSB8fCAhbV9mcmFtZS5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuY2xlYXIo
KTsKQEAgLTMzNDgsNyArMzM1Myw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVs
ZXBob25lTnVtYmVycygpCiAKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5nZSgpKSB7
Ci0gICAgICAgIGNsaWVudCgpLT5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKKyAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTMzNzYsNyArMzM4MSw3IEBAIHZvaWQgRWRpdG9y
OjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJhbmdlPiBl
eHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAog
ICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBjbGllbnQoKS0+c2VsZWN0ZWRUZWxl
cGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CisgICAgICAgIG1fZnJhbWUubWFpbkZyYW1lKCku
c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2Vz
Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzg4LDcgKzMzOTMsNyBA
QCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAg
ICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAg
IH0KIAotICAgIGNsaWVudCgpLT5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKKyAgICBtX2ZyYW1lLm1haW5GcmFtZSgpLnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdW
aWV3JiBzdHJpbmdWaWV3LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAppbmRl
eCBhNjVmN2JlLi5mZDZiMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvblJlY3RHYXRoZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuY3BwCkBAIC0yNiwxMiArMjYsMTQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCIKIAorI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQorCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNp
bmNsdWRlICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNzAsOCArNzIsNyBAQCBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyOjpO
b3RpZmllcihTZWxlY3Rpb25SZWN0R2F0aGVyZXImIGdhdGhlcmVyKQogCiBTZWxlY3Rpb25SZWN0
R2F0aGVyZXI6Ok5vdGlmaWVyOjp+Tm90aWZpZXIoKQogewotICAgIGlmIChFZGl0b3JDbGllbnQq
IGNsaWVudCA9IG1fZ2F0aGVyZXIubV9yZW5kZXJWaWV3LnZpZXcoKS5mcmFtZSgpLmVkaXRvcigp
LmNsaWVudCgpKQotICAgICAgICBjbGllbnQtPnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKG1fZ2F0
aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVyLmlzVGV4dE9u
bHkoKSk7CisgICAgbV9nYXRoZXJlci5tX3JlbmRlclZpZXcudmlldygpLmZyYW1lKCkubWFpbkZy
YW1lKCkuc2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KG1fZ2F0aGVyZXIubV9yZWN0cywgbV9nYXRoZXJlci5tX2dhcFJlY3RzLCBtX2dhdGhlcmVyLmlz
VGV4dE9ubHkoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6
Ok5vdGlmaWVyPiBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggMTJiNTg5OC4uMjg3ZmVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00MzgsNiArNDM4LDE0IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIHsgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsZXZhbnRTZWxlY3Rp
b25TZXJ2aWNlcyhib29sIC8qIGlzVGV4dE9ubHkgKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsgfQog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDJiZTMwMTEuLmFjNGE4MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtMTgxLDExICsxODEsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgPSAwOwogCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFu
Z2VkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0
IFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mLCBib29sKSB7IH0K
LSNlbmRpZgotCiAgICAgLy8gU3VwcG9ydCBmb3IgZ2xvYmFsIHNlbGVjdGlvbnMsIHVzZWQgb24g
cGxhdGZvcm1zIGxpa2UgdGhlIFggV2luZG93IFN5c3RlbSB0aGF0IHRyZWF0CiAgICAgLy8gc2Vs
ZWN0aW9uIGFzIGEgdHlwZSBvZiBjbGlwYm9hcmQuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
R2xvYmFsU2VsZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmNwcAppbmRleCA4NTUzNWJkLi43ODAzZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL01haW5GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3Bw
CkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKICNp
bmNsdWRlICJXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmgiCiAKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogaW5saW5lIE1haW5GcmFtZTo6TWFpbkZyYW1lKFBhZ2UmIHBhZ2UsIEZy
YW1lTG9hZGVyQ2xpZW50JiBjbGllbnQpCkBAIC0zNyw2ICs0MSw5IEBAIGlubGluZSBNYWluRnJh
bWU6Ok1haW5GcmFtZShQYWdlJiBwYWdlLCBGcmFtZUxvYWRlckNsaWVudCYgY2xpZW50KQogICAg
ICwgbV9zZWxmT25seVJlZkNvdW50KDApCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9sYXRj
aGluZ1N0YXRlKHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsTGF0Y2hpbmdTdGF0ZT4oKSkKKyNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQorI2VuZGlmCiAjZW5kaWYKICAgICAs
IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcihzdGQ6Om1ha2VfdW5pcXVlPFdoZWVsRXZl
bnREZWx0YVRyYWNrZXI+KCkpCiAgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcihzdGQ6Om1h
a2VfdW5pcXVlPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZy
YW1lLmgKaW5kZXggMzhkOTQ1Zi4uYmQ2Y2U3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9NYWluRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCkBA
IC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZU92ZXJsYXlD
b250cm9sbGVyOwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKK2NsYXNzIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogCiBjbGFzcyBN
YWluRnJhbWUgZmluYWwgOiBwdWJsaWMgRnJhbWUgewpAQCAtNDcsOSArNDgsMTMgQEAgcHVibGlj
OgogICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyBy
ZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAKICNpZiBQTEFURk9STShNQUMpCisj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikKKyAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBzZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCkgeyByZXR1cm4gKm1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsgfQorI2Vu
ZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJF
Ul9ERVRFQ1RJT04pCisKICAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKiBsYXRjaGluZ1N0YXRlKCkg
eyByZXR1cm4gbV9sYXRjaGluZ1N0YXRlLmdldCgpOyB9CiAgICAgdm9pZCByZXNldExhdGNoaW5n
U3RhdGUoKTsKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogcHJpdmF0ZToKICAg
ICBNYWluRnJhbWUoUGFnZSYsIEZyYW1lTG9hZGVyQ2xpZW50Jik7CkBAIC02MCw2ICs2NSw5IEBA
IHByaXZhdGU6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9s
bExhdGNoaW5nU3RhdGU+IG1fbGF0Y2hpbmdTdGF0ZTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI7CisjZW5kaWYKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXaGVlbEV2ZW50RGVs
dGFUcmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCmluZGV4IDdiNjI3NWMuLjllOGFjMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC0xNjgsNyArMTY4LDcgQEAgYm9vbCBQYWdl
T3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
CiAgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1vdXNlRXZl
bnQucG9zaXRpb24oKSk7CiAKICAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29v
cmRpbmF0ZXMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRz
KG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisgICAgICAgIG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5k
b3dUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CiAKICAgICAv
LyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KICAgICBpZiAoIWJvdW5kcygpLmNv
bnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXggMWU0NDk2NC4uYzY2MDY1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApA
QCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxG
cmFtZShGcmFtZSYgZnJhbWUpCiAKIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVT
ZXR0aW5nc0ZvckxheWVyKEdyYXBoaWNzTGF5ZXImIGxheWVyKQogewotICAgIFNldHRpbmdzJiBz
ZXR0aW5ncyA9IG1fbWFpbkZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBTZXR0aW5ncyYg
c2V0dGluZ3MgPSBtX21haW5GcmFtZS5zZXR0aW5ncygpOwogICAgIGxheWVyLnNldEFjY2VsZXJh
dGVzRHJhd2luZyhzZXR0aW5ncy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwogICAgIGxh
eWVyLnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOwogICAg
IGxheWVyLnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgppbmRleCAyMmYxNTRhLi4yZjVhNTQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaW4KQEAgLTIzMSwzICsyMzEsNSBAQCB1c2VJbWFnZURvY3VtZW50Rm9y
U3ViZnJhbWVQREYgaW5pdGlhbD1mYWxzZQogbWF4aW11bVNvdXJjZUJ1ZmZlclNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MzE4NzY3MTA0LCBjb25kaXRpb25hbD1NRURJQV9TT1VSQ0UKIAogbG9uZ01v
dXNlUHJlc3NFbmFibGVkIGluaXRpYWw9ZmFsc2UKKworc2VydmljZUNvbnRyb2xzRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBjb25kaXRpb25hbD1TRVJWSUNFX0NPTlRST0xTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3YzNhZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cl9oCisjZGVmaW5lIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXJfaAorCisjaWYgKEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pKSAm
JiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19EREhp
Z2hsaWdodCBEREhpZ2hsaWdodCwgKkRESGlnaGxpZ2h0UmVmOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBMYXlvdXRSZWN0OworY2xhc3MgTWFpbkZyYW1lOworc3RydWN0IEdhcFJlY3Rz
OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoTWFpbkZyYW1lJik7CisgICAgflNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJS
YW5nZXNDaGFuZ2VkKCk7CisgICAgdm9pZCBzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBW
ZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiwgYm9vbCBpc1RleHRP
bmx5KTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBIaWdobGlnaHQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24oU2VydmljZXNPdmVybGF5
Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8UmFuZ2U+
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JUZWxlcGhv
bmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4sIFBhc3NSZWZQdHI8UmFuZ2U+KTsKKyAgICAgICAgfkhpZ2hsaWdodCgpOworCisgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgICAgIERESGlnaGxpZ2h0UmVmIGRkSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5nZXQoKTsgfQorICAgICAgICBSYW5n
ZSogcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdldCgpOyB9CisgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOyB9
CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIFRlbGVwaG9uZU51bWJl
ciwKKyAgICAgICAgICAgIFNlbGVjdGlvbgorICAgICAgICB9OworICAgICAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgICAgICB2b2lkIGZhZGVJbigpOworICAg
ICAgICB2b2lkIGZhZGVPdXQoKTsKKworICAgICAgICB2b2lkIHNldERESGlnaGxpZ2h0KERESGln
aGxpZ2h0UmVmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IEhpZ2hsaWdodChT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVm
PiwgUGFzc1JlZlB0cjxSYW5nZT4pOworCisgICAgICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVh
bCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgICAgIHZv
aWQgZGlkRmluaXNoRmFkZU91dEFuaW1hdGlvbigpOworCisgICAgICAgIFJldGFpblB0cjxEREhp
Z2hsaWdodFJlZj4gbV9kZEhpZ2hsaWdodDsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBtX3Jhbmdl
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV9ncmFwaGljc0xheWVy
OworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ciogbV9jb250cm9sbGVyOworICAgIH07CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSop
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFn
ZU92ZXJsYXkmLCBGcmFtZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVPdmVybGF5SWZO
ZWVkZWQoKTsKKyAgICB2b2lkIGhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiwgSGlnaGxpZ2h0
Jik7CisKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQoSGlnaGxpZ2h0JiwgR3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICB2b2lkIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxl
bnRIaWdobGlnaHRzKEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+JiwgSGlnaGxpZ2h0OjpUeXBl
KTsKKyAgICB2b2lkIHJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0
OjpUeXBlKTsKKyAgICB2b2lkIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CisgICAgdm9p
ZCBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOworICAgIHZvaWQgZGlkUmVidWlsZFBvdGVudGlh
bEhpZ2hsaWdodHMoKTsKKworICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wm
IG1vdXNlSXNPdmVyQnV0dG9uKTsKKyAgICB2b2lkIGNsZWFyQWN0aXZlSGlnaGxpZ2h0KCk7Cisg
ICAgSGlnaGxpZ2h0KiBhY3RpdmVIaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUhp
Z2hsaWdodC5nZXQoKTsgfQorCisgICAgSGlnaGxpZ2h0KiBmaW5kVGVsZXBob25lTnVtYmVySGln
aGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQmKTsKKworICAgIGJv
b2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpOworCisgICAgYm9vbCBtb3VzZUlzT3Zl
ckhpZ2hsaWdodChIaWdobGlnaHQmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3Q7Cisg
ICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyByZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRT
aG91bGRCZVNob3duKEhpZ2hsaWdodCopIGNvbnN0OworICAgIHZvaWQgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpOwor
CisgICAgc3RhdGljIGJvb2wgaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29uc3QgSGlnaGxpZ2h0
KiBhLCBjb25zdCBIaWdobGlnaHQqIGIpOworCisgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHRl
bGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOworCisgICAgdm9pZCBkaWRDcmVh
dGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUhpZ2hsaWdodChI
aWdobGlnaHQqKTsKKyAgICB2b2lkIGRpZEZpbmlzaEZhZGluZ091dEhpZ2hsaWdodChIaWdobGln
aHQqKTsKKworICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWlu
RnJhbWU7IH0KKworICAgIE1haW5GcmFtZSYgbV9tYWluRnJhbWU7CisgICAgUGFnZU92ZXJsYXkq
IG1fc2VydmljZXNPdmVybGF5OworCisgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdo
bGlnaHQ7CisgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OworICAg
IEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fcG90ZW50aWFsSGlnaGxpZ2h0czsKKyAgICBI
YXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX2FuaW1hdGluZ0hpZ2hsaWdodHM7CisKKyAgICBI
YXNoU2V0PEhpZ2hsaWdodCo+IG1faGlnaGxpZ2h0czsKKworICAgIC8vIEZJWE1FOiBUaGVzZSBz
aG91bGQgbW92ZSBvbnRvIEhpZ2hsaWdodC4KKyAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbV9jdXJy
ZW50U2VsZWN0aW9uUmVjdHM7CisgICAgYm9vbCBtX2lzVGV4dE9ubHk7CisKKyAgICBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7
CisgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX25leHRBY3RpdmVI
aWdobGlnaHRDaGFuZ2VUaW1lOworICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVf
cG9pbnQgbV9sYXN0TW91c2VVcFRpbWU7CisKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJl
bnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBJbnRQb2ludCBtX21vdXNlUG9zaXRp
b247CisKKyAgICBUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX2RldGVybWluZUFj
dGl2ZUhpZ2hsaWdodFRpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKyNlbmRpZiAvLyBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4
YWEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsODU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgiCisK
KyNpZiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikpICYmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiQ2hyb21lLmgiCisjaW1w
b3J0ICJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJFZGl0
b3IuaCIKKyNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgorI2ltcG9ydCAiRmxvYXRRdWFkLmgiCisj
aW1wb3J0ICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkdhcFJlY3RzLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzTGF5ZXJDQS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWFpbkZyYW1lLmgi
CisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNp
bXBvcnQgIlBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCIKKyNpbXBvcnQgIlNldHRpbmdzLmgiCisj
aW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
CisKKyNpZiBfX2hhc19pbmNsdWRlKDxEYXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZy5o
PikKKyNpbXBvcnQgPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nLmg+CisjZWxzZQor
dHlwZWRlZiBzdHJ1Y3QgX19EREhpZ2hsaWdodCBEREhpZ2hsaWdodCwgKkRESGlnaGxpZ2h0UmVm
OworI2VuZGlmCisKKyNpZiBfX2hhc19pbmNsdWRlKDxEYXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0
RHJhd2luZ19Qcml2YXRlLmg+KQorI2ltcG9ydCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERy
YXdpbmdfUHJpdmF0ZS5oPgorI2VuZGlmCisKK2NvbnN0IGZsb2F0IGhpZ2hsaWdodEZhZGVBbmlt
YXRpb25EdXJhdGlvbiA9IDAuMzsKKwordHlwZWRlZiBOU1VJbnRlZ2VyIERESGlnaGxpZ2h0U3R5
bGU7CitzdGF0aWMgY29uc3QgRERIaWdobGlnaHRTdHlsZSBEREhpZ2hsaWdodE5vT3V0bGluZVdp
dGhBcnJvdyA9ICgxIDw8IDE2KTsKK3N0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGln
aGxpZ2h0T3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2KSB8IDE7CisKK1NPRlRfTElOS19QUklW
QVRFX0ZSQU1FV09SS19PUFRJT05BTChEYXRhRGV0ZWN0b3JzKQorU09GVF9MSU5LKERhdGFEZXRl
Y3RvcnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFu
ZERpcmVjdGlvbiwgRERIaWdobGlnaHRSZWYsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENH
UmVjdCogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVjdCBnbG9iYWxWaXNpYmxlUmVjdCwgRERI
aWdobGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRoQXJyb3csIE5TV3JpdGluZ0RpcmVjdGlv
biB3cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNXaXRoRU9MLCBCb29sZWFuIGZsaXBwZWQp
LCAoYWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2JhbFZpc2libGVSZWN0LCBzdHlsZSwgd2l0
aEFycm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0aEVPTCwgZmxpcHBlZCkpCitTT0ZUX0xJ
TksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRMYXllcldpdGhDb250ZXh0LCBDR0xheWVy
UmVmLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCksICho
aWdobGlnaHQsIGNvbnRleHQpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0
R2V0Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQpLCAoaGln
aGxpZ2h0KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hsaWdodFBvaW50SXNPbkhp
Z2hsaWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCwgQ0dQb2ludCBwb2lu
dCwgQm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0LCBwb2ludCwgb25CdXR0b24pKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRh
aW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5n
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBUeXBl
OjpTZWxlY3Rpb24sIGRkSGlnaGxpZ2h0LCByYW5nZSkpOworfQorCitQYXNzUmVmUHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdo
dCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
aWdobGlnaHQoY29udHJvbGxlciwgVHlwZTo6VGVsZXBob25lTnVtYmVyLCBkZEhpZ2hsaWdodCwg
cmFuZ2UpKTsKK30KKworU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdo
bGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSkKKyAgICA6IG1fcmFuZ2UocmFuZ2UpCisgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAsIG1fY29udHJvbGxlcigmY29udHJvbGxlcikKK3sKKyAgICBBU1NFUlQoZGRIaWdobGln
aHQpOworICAgIEFTU0VSVChtX3JhbmdlKTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb250cm9sbGVy
Lm1haW5GcmFtZSgpLnBhZ2UoKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUocGFnZSA/IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCkgOiBudWxscHRyLCAqdGhpcyk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CisKKyAgICBzZXREREhpZ2hsaWdodChkZEhpZ2hsaWdodC5nZXQoKSk7CisK
KyAgICAvLyBTZXQgZGlyZWN0bHkgb24gdGhlIFBsYXRmb3JtQ0FMYXllciBzbyB0aGF0IHdoZW4g
d2UgbGVhdmUgdGhlICdmcm9tJyB2YWx1ZSBpbXBsaWNpdAorICAgIC8vIGluIG91ciBhbmltYXRp
b25zLCB3ZSBnZXQgdGhlIHJpZ2h0IGluaXRpYWwgdmFsdWUgcmVnYXJkbGVzcyBvZiBmbHVzaCB0
aW1pbmcuCisgICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3JtQ0FMYXllcigp
LT5zZXRPcGFjaXR5KDApOworCisgICAgY29udHJvbGxlci5kaWRDcmVhdGVIaWdobGlnaHQodGhp
cyk7Cit9CisKK1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6fkhpZ2hsaWdo
dCgpCit7CisgICAgaWYgKG1fY29udHJvbGxlcikKKyAgICAgICAgbV9jb250cm9sbGVyLT53aWxs
RGVzdHJveUhpZ2hsaWdodCh0aGlzKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpIaWdobGlnaHQ6OnNldERESGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCkK
K3sKKyAgICBpZiAoIW1fY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZEhp
Z2hsaWdodCA9IGhpZ2hsaWdodDsKKworICAgIGlmICghbV9kZEhpZ2hsaWdodCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERESGlnaGxpZ2h0
R2V0Qm91bmRpbmdSZWN0KG1fZGRIaWdobGlnaHQuZ2V0KCkpOworICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luKSk7
CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShoaWdobGlnaHRCb3VuZGlu
Z1JlY3Quc2l6ZSkpOworCisgICAgbV9ncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
K30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmludmFsaWRh
dGUoKQoreworICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2NvbnRyb2xs
ZXIgPSBudWxscHRyOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKK3sKKyAgICBp
ZiAoIW1fY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9IG1f
Y29udHJvbGxlci0+bWFpbkZyYW1lKCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdo
bGlnaHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxv
YXRSZWN0JikKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQ0dMYXllclJlZiBoaWdobGlnaHRMYXllciA9IERE
SGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChkZEhpZ2hsaWdodCgpLCBjZ0NvbnRleHQpOwor
ICAgIENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5n
UmVjdChkZEhpZ2hsaWdodCgpKTsKKyAgICBoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luID0g
Q0dQb2ludFplcm87CisKKyAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY2dDb250ZXh0LCBo
aWdobGlnaHRCb3VuZGluZ1JlY3QsIGhpZ2hsaWdodExheWVyKTsKK30KKworZmxvYXQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiAxOworCisgICAgUGFn
ZSogcGFnZSA9IG1fY29udHJvbGxlci0+bWFpbkZyYW1lKCkucGFnZSgpOworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmZh
ZGVJbigpCit7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGFuaW1hdGlvbiA9IFtD
QUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFth
bmltYXRpb24gc2V0RHVyYXRpb246aGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uXTsKKyAg
ICBbYW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFthbmlt
YXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpmYWxzZV07CisgICAgW2FuaW1hdGlvbiBzZXRU
b1ZhbHVlOkAxXTsKKworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFu
aW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkp
OworICAgIHRvR3JhcGhpY3NMYXllckNBKGxheWVyKCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRk
QW5pbWF0aW9uRm9yS2V5KCJGYWRlSGlnaGxpZ2h0SW4iLCBwbGF0Zm9ybUFuaW1hdGlvbi5nZXQo
KSk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRl
T3V0KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gYW5pbWF0aW9uID0gW0NB
QmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07CisgICAgW2Fu
aW1hdGlvbiBzZXREdXJhdGlvbjpoaWdobGlnaHRGYWRlQW5pbWF0aW9uRHVyYXRpb25dOworICAg
IFthbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2FuaW1h
dGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOmZhbHNlXTsKKyAgICBbYW5pbWF0aW9uIHNldFRv
VmFsdWU6QDBdOworCisgICAgUmVmUHRyPEhpZ2hsaWdodD4gcmV0YWluZWRTZWxmID0gdGhpczsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxl
dGlvbkJsb2NrOltyZXRhaW5lZFNlbGZdICgpIHsKKyAgICAgICAgcmV0YWluZWRTZWxmLT5kaWRG
aW5pc2hGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgfV07CisKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpj
cmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJDQShsYXllcigpKS0+
cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgiRmFkZUhpZ2hsaWdodE91dCIs
IHBsYXRmb3JtQW5pbWF0aW9uLmdldCgpKTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZGlkRmluaXNo
RmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2NvbnRyb2xsZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2NvbnRyb2xsZXItPmFjdGl2ZUhpZ2hsaWdodCgpID09IHRoaXMp
CisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKK30K
Kworc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShSYW5nZSYg
cmFuZ2UpCit7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOworICAgIHJhbmdlLnRl
eHRRdWFkcyh0ZXh0UXVhZHMpOworICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgZm9y
IChhdXRvJiBxdWFkIDogdGV4dFF1YWRzKQorICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocXVh
ZC5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ1Jl
Y3QpOworfQorCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKE1haW5GcmFtZSYgbWFpbkZyYW1lKQorICAgIDogbV9tYWluRnJhbWUobWFpbkZyYW1l
KQorICAgICwgbV9zZXJ2aWNlc092ZXJsYXkobnVsbHB0cikKKyAgICAsIG1faXNUZXh0T25seShm
YWxzZSkKKyAgICAsIG1fZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIodGhpcywgJlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQp
Cit7Cit9CisKK1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6On5TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkKK3sKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1faGlnaGxpZ2h0cykKKyAg
ICAgICAgaGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQoreworICAgIC8v
IEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBoYXZlIG1vdmVkIG91
dCBvZiB0aGUgUGFnZSwKKyAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBhbHJlYWR5IGNsZWFyZWQg
b3VyIGJhY2sgcG9pbnRlci4KKyAgICBBU1NFUlQoIW1fc2VydmljZXNPdmVybGF5KTsKK30KKwor
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQYWdlT3Zlcmxh
eSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBudWxs
cHRyOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2Uo
UGFnZU92ZXJsYXkmLCBQYWdlKikKK3sKK30KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25t
ZW50Tm9uZSA9IDA7CitzdGF0aWMgY29uc3QgdWludDhfdCBBbGlnbm1lbnRMZWZ0ID0gMSA8PCAw
Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50UmlnaHQgPSAxIDw8IDE7CisKK3N0YXRp
YyB2b2lkIGV4cGFuZEZvckdhcChWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCB1aW50OF90KiBh
bGlnbm1lbnRzLCBjb25zdCBHYXBSZWN0cyYgZ2FwKQoreworICAgIGlmICghZ2FwLmxlZnQoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0RWRnZSA9IGdhcC5sZWZ0KCkueCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50TGVmdCkKKyAgICAgICAg
ICAgICAgICByZWN0c1tpXS5zaGlmdFhFZGdlVG8obGVmdEVkZ2UpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFnYXAucmlnaHQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTGF5b3V0VW5p
dCByaWdodEVkZ2UgPSBnYXAucmlnaHQoKS5tYXhYKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGFsaWdubWVu
dHNbaV0gJiBBbGlnbm1lbnRSaWdodCkKKyAgICAgICAgICAgICAgICByZWN0c1tpXS5zaGlmdE1h
eFhFZGdlVG8ocmlnaHRFZGdlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHN0aXRjaFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMpCit7CisgICAgaWYg
KHJlY3RzLnNpemUoKSA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPExh
eW91dFJlY3Q+IG5ld1JlY3RzOworICAgIAorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQg
dmVydGljYWwgbGF5b3V0LgorICAgIC8vIEZpcnN0IHN0aXRjaCB0b2dldGhlciBhbGwgdGhlIHJl
Y3RzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzZWxlY3Rpb24uCisgICAgc2l6ZV90IGluZGV4
RnJvbVN0YXJ0ID0gMDsKKyAgICBMYXlvdXRVbml0IGZpcnN0VG9wID0gcmVjdHNbaW5kZXhGcm9t
U3RhcnRdLnkoKTsKKyAgICBMYXlvdXRSZWN0JiBjdXJyZW50UmVjdCA9IHJlY3RzW2luZGV4RnJv
bVN0YXJ0XTsKKyAgICB3aGlsZSAoaW5kZXhGcm9tU3RhcnQgPCByZWN0cy5zaXplKCkgJiYgcmVj
dHNbaW5kZXhGcm9tU3RhcnRdLnkoKSA9PSBmaXJzdFRvcCkKKyAgICAgICAgY3VycmVudFJlY3Qu
dW5pdGUocmVjdHNbaW5kZXhGcm9tU3RhcnQrK10pOworICAgIAorICAgIG5ld1JlY3RzLmFwcGVu
ZChjdXJyZW50UmVjdCk7CisgICAgaWYgKGluZGV4RnJvbVN0YXJ0ID09IHJlY3RzLnNpemUoKSkg
eworICAgICAgICAvLyBBbGwgdGhlIHJlY3RzIGFyZSBvbiBvbmUgbGluZS4gVGhlcmUgaXMgbm90
aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZWN0cy5zd2FwKG5ld1JlY3RzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBOZXh0IHN0aXRjaCB0b2dldGhlciBhbGwgdGhl
IHJlY3RzIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHNlbGVjdGlvbi4KKyAgICBzaXplX3QgaW5k
ZXhGcm9tRW5kID0gcmVjdHMuc2l6ZSgpIC0gMTsKKyAgICBMYXlvdXRVbml0IGxhc3RUb3AgPSBy
ZWN0c1tpbmRleEZyb21FbmRdLnkoKTsKKyAgICBMYXlvdXRSZWN0IGxhc3RSZWN0ID0gcmVjdHNb
aW5kZXhGcm9tRW5kXTsKKyAgICB3aGlsZSAoaW5kZXhGcm9tRW5kID49IGluZGV4RnJvbVN0YXJ0
ICYmIHJlY3RzW2luZGV4RnJvbUVuZF0ueSgpID09IGxhc3RUb3ApCisgICAgICAgIGxhc3RSZWN0
LnVuaXRlKHJlY3RzW2luZGV4RnJvbUVuZC0tXSk7CisgICAgCisgICAgLy8gaW5kZXhGcm9tU3Rh
cnQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWN0YW5nbGUgb24gdGhlIHNlY29uZCBsaW5l
LgorICAgIC8vIGluZGV4RnJvbUVuZCBpcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcmVjdGFuZ2xl
IG9uIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgbGluZS4KKyAgICAvLyBpZiB0aGV5IGFyZSBlcXVh
bCwgdGhlcmUgaXMgb25lIGFkZGl0aW9uYWwgcmVjdGFuZ2xlIGZvciB0aGUgbGluZSBpbiB0aGUg
bWlkZGxlLgorICAgIGlmIChpbmRleEZyb21FbmQgPT0gaW5kZXhGcm9tU3RhcnQpCisgICAgICAg
IG5ld1JlY3RzLmFwcGVuZChyZWN0c1tpbmRleEZyb21TdGFydF0pOworICAgIAorICAgIGlmIChp
bmRleEZyb21FbmQgPD0gaW5kZXhGcm9tU3RhcnQpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIG5v
IG1vcmUgcmVjdHMgdG8gc3RpdGNoLiBKdXN0IGFwcGVuZCB0aGUgbGFzdCBsaW5lLgorICAgICAg
ICBuZXdSZWN0cy5hcHBlbmQobGFzdFJlY3QpOworICAgICAgICByZWN0cy5zd2FwKG5ld1JlY3Rz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTdGl0Y2ggdG9nZXRoZXIg
YWxsIHRoZSByZWN0cyBhZnRlciB0aGUgZmlyc3QgbGluZSB1bnRpbCB0aGUgc2Vjb25kIHRvIHRo
ZSBsYXN0IGluY2x1ZGVkLgorICAgIGN1cnJlbnRSZWN0ID0gcmVjdHNbaW5kZXhGcm9tU3RhcnRd
OworICAgIHdoaWxlIChpbmRleEZyb21TdGFydCAhPSBpbmRleEZyb21FbmQpCisgICAgICAgIGN1
cnJlbnRSZWN0LnVuaXRlKHJlY3RzWysraW5kZXhGcm9tU3RhcnRdKTsKKyAgICAKKyAgICBuZXdS
ZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOworICAgIG5ld1JlY3RzLmFwcGVuZChsYXN0UmVjdCk7
CisKKyAgICByZWN0cy5zd2FwKG5ld1JlY3RzKTsKK30KKworc3RhdGljIHZvaWQgY29tcGFjdFJl
Y3RzV2l0aEdhcFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxH
YXBSZWN0cz4mIGdhcFJlY3RzKQoreworICAgIHN0aXRjaFJlY3RzKHJlY3RzKTsKKyAgICAKKyAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhbGlnbm1lbnRzIGFyZSBjb3JyZWN0IGZvciBMVFIg
dGV4dC4KKyAgICAvLyBXZSBzaG91bGQgYWxzbyBhY2NvdW50IGZvciBSVEwuCisgICAgdWludDhf
dCBhbGlnbm1lbnRzWzNdOworICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMSkgeworICAgICAgICBh
bGlnbm1lbnRzWzBdID0gQWxpZ25tZW50TGVmdCB8IEFsaWdubWVudFJpZ2h0OworICAgICAgICBh
bGlnbm1lbnRzWzFdID0gQWxpZ25tZW50Tm9uZTsKKyAgICAgICAgYWxpZ25tZW50c1syXSA9IEFs
aWdubWVudE5vbmU7CisgICAgfSBlbHNlIGlmIChyZWN0cy5zaXplKCkgPT0gMikgeworICAgICAg
ICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50UmlnaHQ7CisgICAgICAgIGFsaWdubWVudHNbMV0g
PSBBbGlnbm1lbnRMZWZ0OworICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50Tm9uZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhbGlnbm1lbnRzWzBdID0gQWxpZ25tZW50UmlnaHQ7Cisg
ICAgICAgIGFsaWdubWVudHNbMV0gPSBBbGlnbm1lbnRMZWZ0IHwgQWxpZ25tZW50UmlnaHQ7Cisg
ICAgICAgIGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnRMZWZ0OworICAgIH0KKworICAgIC8vIEFj
Y291bnQgZm9yIGVhY2ggR2FwUmVjdHMgYnkgZXh0ZW5kaW5nIHRoZSBlZGdlIG9mIGNlcnRhaW4g
TGF5b3V0UmVjdHMgdG8gbWVldCB0aGUgZ2FwLgorICAgIGZvciAoYXV0byYgZ2FwIDogZ2FwUmVj
dHMpCisgICAgICAgIGV4cGFuZEZvckdhcChyZWN0cywgYWxpZ25tZW50cywgZ2FwKTsKKworICAg
IC8vIElmIHdlIGhhdmUgMyByZWN0cyB3ZSBtaWdodCBuZWVkIG9uZSBmaW5hbCBHYXBSZWN0cyB0
byBhbGlnbiB0aGUgZWRnZXMuCisgICAgaWYgKHJlY3RzLnNpemUoKSA9PSAzKSB7CisgICAgICAg
IExheW91dFJlY3QgbGVmdDsKKyAgICAgICAgTGF5b3V0UmVjdCByaWdodDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKGFsaWdubWVu
dHNbaV0gJiBBbGlnbm1lbnRMZWZ0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcmVjdHNbaV07CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocmVjdHNbaV0ueCgpIDwgbGVmdC54KCkpCisgICAgICAgICAgICAgICAgICAg
IGxlZnQgPSByZWN0c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhbGlnbm1l
bnRzW2ldICYgQWxpZ25tZW50UmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3RzW2ldOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKChyZWN0c1tpXS54KCkgKyByZWN0c1tpXS53aWR0aCgpKSA+IChyaWdo
dC54KCkgKyByaWdodC53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByZWN0
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVmdC5pc0Vt
cHR5KCkgfHwgIXJpZ2h0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgR2FwUmVjdHMgZ2FwOwor
ICAgICAgICAgICAgZ2FwLnVuaXRlTGVmdChsZWZ0KTsKKyAgICAgICAgICAgIGdhcC51bml0ZVJp
Z2h0KHJpZ2h0KTsKKyAgICAgICAgICAgIGV4cGFuZEZvckdhcChyZWN0cywgYWxpZ25tZW50cywg
Z2FwKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCBjb25zdCBWZWN0b3I8R2FwUmVjdHM+JiBnYXBSZWN0cywgYm9vbCBpc1RleHRPbmx5KQor
eworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
IDEwOTAKKyAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cyA9IHJlY3RzOworICAgIG1faXNUZXh0
T25seSA9IGlzVGV4dE9ubHk7CisKKyAgICBtX2xhc3RTZWxlY3Rpb25DaGFuZ2VUaW1lID0gc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisKKyAgICBjb21wYWN0UmVjdHNXaXRoR2Fw
UmVjdHMobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMsIGdhcFJlY3RzKTsKKworICAgIC8vIERhdGFE
ZXRlY3RvcnMgbmVlZHMgdGhlc2UgcmV2ZXJzZWQgaW4gb3JkZXIgdG8gcGxhY2UgdGhlIGFycm93
IGluIHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5yZXZl
cnNlKCk7CisKKyAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIC0g
U2VsZWN0aW9uIHJlY3RzIGNoYW5nZWQgLSBOb3cgaGF2ZSAlbHVcbiIsIHJlY3RzLnNpemUoKSk7
CisKKyAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocmVjdHMpOworICAgIFVOVVNFRF9QQVJBTShnYXBSZWN0cyk7CisgICAgVU5VU0VEX1BBUkFN
KGlzVGV4dE9ubHkpOworI2VuZGlmCit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCisgICAgTE9H
KFNlcnZpY2VzLCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlciAtIFRlbGVwaG9uZSBudW1iZXIg
cmFuZ2VzIGNoYW5nZWRcbiIpOworICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7Cisj
ZW5kaWYKK30KKworYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUlzT3Zlckhp
Z2hsaWdodChIaWdobGlnaHQmIGhpZ2hsaWdodCwgYm9vbCYgbW91c2VJc092ZXJCdXR0b24pIGNv
bnN0Cit7CisgICAgQm9vbGVhbiBvbkJ1dHRvbjsKKyAgICBib29sIGhvdmVyZWQgPSBEREhpZ2hs
aWdodFBvaW50SXNPbkhpZ2hsaWdodChoaWdobGlnaHQuZGRIaWdobGlnaHQoKSwgKENHUG9pbnQp
bV9tb3VzZVBvc2l0aW9uLCAmb25CdXR0b24pOworICAgIG1vdXNlSXNPdmVyQnV0dG9uID0gb25C
dXR0b247CisgICAgcmV0dXJuIGhvdmVyZWQ7Cit9CisKK3N0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0
U2hvdWxkQmVTaG93bihIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKK3sKKyAgICBpZiAoIWhp
Z2hsaWdodCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8o
KTsKKworICAgIGF1dG8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSAy
MDBfbXM7CisgICAgUGFnZSogcGFnZSA9IG1fbWFpbkZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFn
ZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBtaW5pbXVtVGlt
ZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IDEwMDBfbXM7CisKKyAgICBib29sIG1vdXNl
UHJlc3NlZCA9IG1fbWFpbkZyYW1lLmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpOworCisg
ICAgLy8gSGlnaGxpZ2h0IGh5c3RlcmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9uIHNlcnZpY2Vz
LCBiZWNhdXNlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFkeSBtdWNoIG1v
cmUgc3RhYmxlCisgICAgLy8gYnkgdmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRvIGluY2x1ZGUg
dGhlIGVudGlyZSB0ZWxlcGhvbmUgbnVtYmVyLiBIb3dldmVyLCB3ZSB3aWxsIHN0aWxsIGF2b2lk
IGhpZ2hsaWdodGluZworICAgIC8vIHRlbGVwaG9uZSBudW1iZXJzIHdoaWxlIHRoZSBtb3VzZSBp
cyBkb3duLgorICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRl
bGVwaG9uZU51bWJlcikKKyAgICAgICAgcmV0dXJuIG1vdXNlUHJlc3NlZCA/IG1pbmltdW1UaW1l
VW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duIDogMF9tczsKKworICAgIGF1dG8gbm93ID0gc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgYXV0byB0aW1lU2luY2VMYXN0U2Vs
ZWN0aW9uQ2hhbmdlID0gbm93IC0gbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAgICBhdXRv
IHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2ZSA9IG5vdyAtIG1fbmV4dEFjdGl2ZUhpZ2hs
aWdodENoYW5nZVRpbWU7CisgICAgYXV0byB0aW1lU2luY2VMYXN0TW91c2VVcCA9IG1vdXNlUHJl
c3NlZCA/IDBfbXMgOiBub3cgLSBtX2xhc3RNb3VzZVVwVGltZTsKKworICAgIGF1dG8gcmVtYWlu
aW5nRGVsYXkgPSBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHN0ZDo6
bWluKHN0ZDo6bWluKHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UsIHRpbWVTaW5jZUhpZ2hs
aWdodEJlY2FtZUFjdGl2ZSksIHRpbWVTaW5jZUxhc3RNb3VzZVVwKTsKKyAgICByZXR1cm4gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4ocmVtYWlu
aW5nRGVsYXkpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWlu
ZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGltZXI8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cj4mKQoreworICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKQoreworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFy
QWN0aXZlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAoIW1fYWN0aXZlSGlnaGxpZ2h0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PT0gbV9hY3RpdmVIaWdobGlnaHQpCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9u
SGlnaGxpZ2h0ID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxsUG90ZW50aWFsSGln
aGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkKK3sKKyAgICBWZWN0b3I8UmVmUHRy
PEhpZ2hsaWdodD4+IGhpZ2hsaWdodHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdo
dCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBl
KCkgPT0gdHlwZSkKKyAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQoaGlnaGxp
Z2h0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIWhpZ2hsaWdodHNUb1JlbW92ZS5pc0VtcHR5KCkp
CisgICAgICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0c1RvUmVtb3Zl
LnRha2VMYXN0KCkpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxk
UGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKK3sKKyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tYWluRnJhbWUuc2V0dGluZ3MoKS5z
ZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8
UmVmUHRyPEhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7CisKKyAgICBGcmFtZVZp
ZXcmIG1haW5GcmFtZVZpZXcgPSAqbV9tYWluRnJhbWUudmlldygpOworCisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV9tYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byYgcmFuZ2VzID0gZnJhbWUtPmVkaXRvcigpLmRl
dGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCk7CisgICAgICAgIGZvciAoYXV0byYgcmFuZ2Ug
OiByYW5nZXMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhl
IHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KKyAgICAgICAgICAgIC8v
IFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoYXQgY2FzZT8KKyAgICAgICAgICAgIEludFJlY3QgcmVj
dCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsKKworICAgICAgICAg
ICAgLy8gQ29udmVydCB0byB0aGUgbWFpbiBkb2N1bWVudCdzIGNvb3JkaW5hdGUgc3BhY2UuCisg
ICAgICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRlbnRz
VG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhlIHJp
Z2h0IGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIg
YWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9E
b2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCisgICAgICAgICAg
ICAvLyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdlIG5lZWQgd2hlbiB5b3UgaGF2ZSBhIHRvcENv
bnRlbnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIuCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZp
ZXdGb3JSYW5nZSA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICAgICAg
aWYgKCF2aWV3Rm9yUmFuZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICByZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9y
UmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOworCisgICAgICAgICAg
ICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKKyAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5W
aXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWlu
RnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdodE91dGxpbmVXaXRoQXJy
b3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworCisgICAgICAg
ICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVw
aG9uZU51bWJlcigqdGhpcywgZGRIaWdobGlnaHQsIHJhbmdlKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxp
Z2h0cyhuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51
bWJlcik7CisKKyAgICBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpOworfQorCit2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKK3sK
KyAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9tYWluRnJhbWUuc2V0dGluZ3MoKS5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxIaWdo
bGlnaHQ+PiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzOworCisgICAgVmVjdG9yPENHUmVjdD4gY2dS
ZWN0czsKKyAgICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0
cy5zaXplKCkpOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHBhZ2UtPnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAg
ICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbV9tYWluRnJhbWUudmlldygpOworICAgICAg
ICBpZiAoIW1haW5GcmFtZVZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRnJh
bWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLnZp
ZXcoKTsKKworICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0
cykgeworICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJl
Y3QpOworICAgICAgICAgICAgY3VycmVudFJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy0+
d2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3coY3VycmVudFJl
Y3QubG9jYXRpb24oKSkpKTsKKyAgICAgICAgICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpY3Vy
cmVudFJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRk
SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJl
Y3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3Rz
LnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMs
IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JT
ZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVu
dEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUeXBlOjpTZWxl
Y3Rpb24pOworCisgICAgZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKTsKK30KKwordm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNl
cnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiYgbmV3
UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUeXBlIHR5cGUpCit7CisgICAgLy8gSWYg
YW55IG9sZCBIaWdobGlnaHRzIGFyZSBlcXVpdmFsZW50IChieSBSYW5nZSkgdG8gYSBuZXcgSGln
aGxpZ2h0LCByZXVzZSB0aGUgb2xkCisgICAgLy8gb25lIHNvIHRoYXQgYW55IG1ldGFkYXRhIGlz
IHJldGFpbmVkLgorICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IHJldXNlZFBvdGVudGlh
bEhpZ2hsaWdodHM7CisKKyAgICBmb3IgKGF1dG8mIG9sZEhpZ2hsaWdodCA6IG1fcG90ZW50aWFs
SGlnaGxpZ2h0cykgeworICAgICAgICBpZiAob2xkSGlnaGxpZ2h0LT50eXBlKCkgIT0gdHlwZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoYXV0byYgbmV3SGlnaGxpZ2h0
IDogbmV3UG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICAgICAgaWYgKGhpZ2hsaWdodHNB
cmVFcXVpdmFsZW50KG9sZEhpZ2hsaWdodC5nZXQoKSwgbmV3SGlnaGxpZ2h0LmdldCgpKSkgewor
ICAgICAgICAgICAgICAgIG9sZEhpZ2hsaWdodC0+c2V0RERIaWdobGlnaHQobmV3SGlnaGxpZ2h0
LT5kZEhpZ2hsaWdodCgpKTsKKworICAgICAgICAgICAgICAgIHJldXNlZFBvdGVudGlhbEhpZ2hs
aWdodHMuYWRkKG9sZEhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgbmV3UG90ZW50aWFsSGln
aGxpZ2h0cy5yZW1vdmUobmV3SGlnaGxpZ2h0KTsKKworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmVtb3ZlQWxsUG90ZW50aWFs
SGlnaGxpZ2h0c09mVHlwZSh0eXBlKTsKKworICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQo
bmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmVu
ZCgpKTsKKyAgICBtX3BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKHJldXNlZFBvdGVudGlhbEhpZ2hs
aWdodHMuYmVnaW4oKSwgcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5lbmQoKSk7Cit9CisKK2Jv
b2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNl
cygpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCkpCisgICAgICAg
IHJldHVybiBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5oYXNSZWxldmFudFNlbGVjdGlvblNlcnZp
Y2VzKG1faXNUZXh0T25seSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKK3sKKyAg
ICBpZiAobV9wb3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9z
ZXJ2aWNlc092ZXJsYXkpCisgICAgICAgICAgICBtX21haW5GcmFtZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpLmlzRW1wdHkoKSAmJiAh
aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
cmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKKworICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247Cisg
ICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKK30KKwordm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQoKQorewor
ICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X21haW5GcmFtZS5zZXR0aW5ncygpLnNlcnZpY2VDb250cm9sc0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6
OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAg
bV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOworICAgIG1fbWFpbkZyYW1lLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworfQorCitWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9y
Rm9jdXNlZEZyYW1lKCkKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9tYWluRnJhbWUucGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5lZGl0b3IoKS5kZXRlY3RlZFRl
bGVwaG9uZU51bWJlclJhbmdlcygpOworfQorCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGln
aGxpZ2h0KiBiKQoreworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKCFhIHx8ICFiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+dHlw
ZSgpID09IGItPnR5cGUoKSAmJiBhcmVSYW5nZXNFcXVhbChhLT5yYW5nZSgpLCBiLT5yYW5nZSgp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6ZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdobGln
aHQoSGlnaGxpZ2h0JiBzZWxlY3Rpb25IaWdobGlnaHQpCit7CisgICAgaWYgKHNlbGVjdGlvbkhp
Z2hsaWdodC50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUGFnZSogcGFnZSA9IG1fbWFpbkZyYW1lLnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gcGFnZS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxS
YW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7
CisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVw
aG9uZU51bWJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChoaWdobGln
aHQtPnJhbmdlKCktPmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAgICAg
ICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hs
aWdodChib29sJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKK3sKKyAgICBtb3Vz
ZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IGZhbHNlOworCisgICAgUmVmUHRyPEhpZ2hs
aWdodD4gbmV3QWN0aXZlSGlnaGxpZ2h0OworCisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBt
X3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09
IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBh
bHJlYWR5IGZvdW5kIGEgbmV3IGFjdGl2ZSBoaWdobGlnaHQsIGFuZCBpdCdzCisgICAgICAgICAg
ICAvLyBhIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0LCBwcmVmZXIgdGhhdCBvdmVyIHRoaXMg
c2VsZWN0aW9uIGhpZ2hsaWdodC4KKyAgICAgICAgICAgIGlmIChuZXdBY3RpdmVIaWdobGlnaHQg
JiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhv
bmVOdW1iZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIElm
IHRoaXMgaGlnaGxpZ2h0IGhhcyBubyBjb21wYXRpYmxlIHNlcnZpY2VzLCBpdCBjYW4ndCBiZSBh
Y3RpdmUuCisgICAgICAgICAgICBpZiAoIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRo
aXMgaGlnaGxpZ2h0IGlzbid0IGhvdmVyZWQsIGl0IGNhbid0IGJlIGFjdGl2ZS4KKyAgICAgICAg
Ym9vbCBtb3VzZUlzT3ZlckJ1dHRvbjsKKyAgICAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdo
dCgqaGlnaGxpZ2h0LCBtb3VzZUlzT3ZlckJ1dHRvbikpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBuZXdBY3RpdmVIaWdobGlnaHQgPSBoaWdobGlnaHQ7CisgICAgICAgIG1vdXNl
SXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gbW91c2VJc092ZXJCdXR0b247CisgICAgfQor
CisgICAgLy8gSWYgb3VyIG5ldyBhY3RpdmUgaGlnaGxpZ2h0IGlzIGEgc2VsZWN0aW9uIGhpZ2hs
aWdodCB0aGF0IGlzIGNvbXBsZXRlbHkgY29udGFpbmVkCisgICAgLy8gYnkgb25lIG9mIHRoZSBw
aG9uZSBudW1iZXIgaGlnaGxpZ2h0cywgd2UnbGwgbWFrZSB0aGUgcGhvbmUgbnVtYmVyIGhpZ2hs
aWdodCBhY3RpdmUgZXZlbiBpZiBpdCdzIG5vdCBob3ZlcmVkLgorICAgIGlmIChuZXdBY3RpdmVI
aWdobGlnaHQgJiYgbmV3QWN0aXZlSGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBl
OjpTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKEhpZ2hsaWdodCogY29udGFpbmVkVGVsZXBob25l
TnVtYmVySGlnaGxpZ2h0ID0gZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdT
ZWxlY3Rpb25IaWdobGlnaHQoKm5ld0FjdGl2ZUhpZ2hsaWdodCkpIHsKKyAgICAgICAgICAgIG5l
d0FjdGl2ZUhpZ2hsaWdodCA9IGNvbnRhaW5lZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodDsKKwor
ICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaW5pdGlhbGx5IGNob29zZSB0aGUgdGVsZXBo
b25lIG51bWJlciBoaWdobGlnaHQgb3ZlciB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCBpZiB0aGUK
KyAgICAgICAgICAgIC8vIG1vdXNlIGlzIG92ZXIgdGhlIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxp
Z2h0J3MgYnV0dG9uLCBzbyB3ZSBrbm93IHRoYXQgaXQncyBub3QgaG92ZXJlZCBpZiB3ZSBnb3Qg
aGVyZS4KKyAgICAgICAgICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRoaXMtPmhpZ2hsaWdodHNBcmVFcXVp
dmFsZW50KG1fYWN0aXZlSGlnaGxpZ2h0LmdldCgpLCBuZXdBY3RpdmVIaWdobGlnaHQuZ2V0KCkp
KSB7CisgICAgICAgIC8vIFdoZW4gdHJhbnNpdGlvbmluZyB0byBhIG5ldyBoaWdobGlnaHQsIHdl
IG1pZ2h0IGVuZCB1cCBpbiBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQgbXVsdGlwbGUgdGltZXMK
KyAgICAgICAgLy8gYmVmb3JlIHRoZSBuZXcgaGlnaGxpZ2h0IGFjdHVhbGx5IGJlY29tZXMgYWN0
aXZlLiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IG5leHQtYnV0LW5vdC15ZXQtYWN0aXZlCisgICAg
ICAgIC8vIGhpZ2hsaWdodCwgYW5kIG9ubHkgcmVzZXQgdGhlIGFjdGl2ZSBoaWdobGlnaHQgaHlz
dGVyZXNpcyB3aGVuIHRoYXQgY2hhbmdlcy4KKyAgICAgICAgaWYgKG1fbmV4dEFjdGl2ZUhpZ2hs
aWdodCAhPSBuZXdBY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2ZUhp
Z2hsaWdodCA9IG5ld0FjdGl2ZUhpZ2hsaWdodDsKKyAgICAgICAgICAgIG1fbmV4dEFjdGl2ZUhp
Z2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bnVsbHB0cjsKKworICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKKyAgICAgICAgICAg
IG1fYWN0aXZlSGlnaGxpZ2h0LT5mYWRlT3V0KCk7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hs
aWdodCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlbWFpbmluZ1RpbWVV
bnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSB0aGlzLT5yZW1haW5pbmdUaW1lVW50aWxIaWdo
bGlnaHRTaG91bGRCZVNob3duKG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSk7CisgICAgICAgIGlm
IChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID4gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb246Onplcm8oKSkgeworICAgICAgICAgICAgbV9kZXRlcm1p
bmVBY3RpdmVIaWdobGlnaHRUaW1lci5zdGFydE9uZVNob3QocmVtYWluaW5nVGltZVVudGlsSGln
aGxpZ2h0U2hvdWxkQmVTaG93bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG1fbmV4dEFjdGl2ZUhpZ2hsaWdodC5yZWxlYXNl
KCk7CisKKyAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBtX3Nl
cnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIo
KSk7CisgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgbV9t
b3VzZVBvc2l0aW9uID0gbV9tYWluRnJhbWUudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50
LnBvc2l0aW9uKCkpOworCisgICAgYm9vbCBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRv
biA9IGZhbHNlOworICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2
ZUhpZ2hsaWdodEJ1dHRvbik7CisKKyAgICAvLyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBp
ZiBhbnkgYnV0dG9uIG90aGVyIHRoYW4gdGhlIGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFu
ZCBpZ25vcmUgdGhlIGV2ZW50LgorICAgIGlmIChldmVudC5idXR0b24oKSAhPSBNb3VzZUJ1dHRv
bjo6TGVmdEJ1dHRvbikgeworICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hs
aWdodCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGUgbW91c2UgbGlmdGVkIHdoaWxlIHN0aWxsIG92ZXIgdGhlIGhpZ2hsaWdodCBidXR0b24g
dGhhdCBpdCB3ZW50IGRvd24gb24sIHRoZW4gdGhhdCBpcyBhIGNsaWNrLgorICAgIGlmIChldmVu
dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCkgeworICAgICAgICBSZWZQ
dHI8SGlnaGxpZ2h0PiBtb3VzZURvd25IaWdobGlnaHQgPSBtX2N1cnJlbnRNb3VzZURvd25PbkJ1
dHRvbkhpZ2hsaWdodDsKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGln
aHQgPSBudWxscHRyOworCisgICAgICAgIG1fbGFzdE1vdXNlVXBUaW1lID0gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6bm93KCk7CisKKyAgICAgICAgaWYgKG1vdXNlSXNPdmVyQWN0aXZlSGln
aGxpZ2h0QnV0dG9uICYmIG1vdXNlRG93bkhpZ2hsaWdodCkgeworICAgICAgICAgICAgaGFuZGxl
Q2xpY2sobV9tb3VzZVBvc2l0aW9uLCAqbW91c2VEb3duSGlnaGxpZ2h0KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gSWYgdGhlIG1vdXNlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGJ1dHRv
biB0cmFja2luZyBhIHBvdGVudGlhbCBjbGljaywgc3RvcCB0cmFja2luZyB0aGUgY2xpY2suCisg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkKSB7CisgICAg
ICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCAmJiBtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24g
b3ZlciB0aGUgYWN0aXZlIGhpZ2hsaWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVu
dGlhbCBjbGljay4KKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
UHJlc3NlZCkgeworICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJB
Y3RpdmVIaWdobGlnaHRCdXR0b24pIHsKKyAgICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9u
QnV0dG9uSGlnaGxpZ2h0ID0gbV9hY3RpdmVIaWdobGlnaHQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Ny
b2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKGZyYW1lLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKCk7CisgICAgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKKworICAgIGJvb2wgbW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxp
Z2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKK30KKwordm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVDbGljayhjb25zdCBJbnRQb2ludCYgY2xpY2tQb2lu
dCwgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
X21haW5GcmFtZS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsK
KworICAgIFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhjbGlja1BvaW50KTsKKworICAgIGlmIChoaWdobGlnaHQudHlwZSgp
ID09IEhpZ2hsaWdodDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gdGVsZXBob25l
TnVtYmVyUmFuZ2VzID0gdGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCk7Cisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkVGVsZXBob25lTnVtYmVyczsKKyAgICAgICAg
c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJlc2VydmVDYXBhY2l0eSh0ZWxlcGhvbmVOdW1iZXJS
YW5nZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHRlbGVwaG9uZU51bWJl
clJhbmdlcykKKyAgICAgICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5hcHBlbmQocmFu
Z2UtPnRleHQoKSk7CisKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2Vs
ZWN0aW9uU2VydmljZUNsaWNrKHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMsIHdpbmRvd1BvaW50
KTsKKyAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpU
ZWxlcGhvbmVOdW1iZXIpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRl
bGVwaG9uZU51bWJlckNsaWNrKGhpZ2hsaWdodC5yYW5nZSgpLT50ZXh0KCksIHdpbmRvd1BvaW50
KTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRDcmVhdGVIaWdobGln
aHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit7CisgICAgQVNTRVJUKCFtX2hpZ2hsaWdodHMuY29u
dGFpbnMoaGlnaGxpZ2h0KSk7CisgICAgbV9oaWdobGlnaHRzLmFkZChoaWdobGlnaHQpOworfQor
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxEZXN0cm95SGlnaGxpZ2h0KEhp
Z2hsaWdodCogaGlnaGxpZ2h0KQoreworICAgIEFTU0VSVChtX2hpZ2hsaWdodHMuY29udGFpbnMo
aGlnaGxpZ2h0KSk7CisgICAgbV9oaWdobGlnaHRzLnJlbW92ZShoaWdobGlnaHQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIChFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkgJiYgUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDQ4NmRlMmIuLmIwYzI4NTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTcyLDYgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIE0oV2ViQXVkaW8pIFwKICAgICBNKFdlYkdMKSBcCiAgICAgTShXZWJSZXBsYXkp
IFwKKyAgICBNKFNlcnZpY2VzKSBcCiAKICNkZWZpbmUgREVDTEFSRV9MT0dfQ0hBTk5FTChuYW1l
KSBcCiAgICAgZXh0ZXJuIFdURkxvZ0NoYW5uZWwgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJ
WChMT0dfQ0hBTk5FTF9QUkVGSVgsIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDdmZTc5MzguLjg2Y2Qw
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNC0xMC0wOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3NDE2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODU0NjI4Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgTW92ZSBTZXJ2aWNlcyBsb2dnaW5nIGNoYW5uZWwgdG8g
V2ViQ29yZS4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6aGFuZGxlVGVsZXBob25lTnVtYmVy
Q2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmhhbmRsZVNlbGVjdGlv
blNlcnZpY2VDbGljayk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6aGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyk6CisgICAgICAgIEltcGxlbWVudCBzZXJ2aWNlcy1yZWxh
dGVkIENocm9tZUNsaWVudCBjYWxsYmFja3MuCisgICAgICAgIENsaWNrcyBhcmUgZm9yd2FyZGVk
IHRvIFdlYlBhZ2VNYWMgd2hlcmUgdGhleSBkbyB3aGF0IHRoZXkgdXNlZCB0bzsKKyAgICAgICAg
aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyBpcyBpbXBsZW1lbnRlZCBhcyBpdCB3YXMgd2hl
biBpdCBsaXZlZAorICAgICAgICBpbnNpZGUgU2VydmljZXNPdmVybGF5Q29udHJvbGxlci4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNlbGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIFJlbW92ZSBXZWJF
ZGl0b3JDbGllbnQgb3ZlcnJpZGVzIGZvciBub3ctcmVtb3ZlZCBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJl
bmNlcyk6CisgICAgICAgIEZvcndhcmQgc2VydmljZUNvbnRyb2xzRW5hYmxlZCBzZXR0aW5nIHRv
IFdlYkNvcmUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VydmljZUNvbnRyb2xzRW5hYmxlZCk6IERl
bGV0ZWQuCisKIDIwMTQtMTAtMDkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIENyYXNoIGluIENGVVJMRG93bmxvYWRDbGllbnQuZGlkRmFpbCBpZiB0aGUg
ZG93bmxvYWQgaGFzIGEgbnVsbCByZXN1bWVEYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgK
aW5kZXggMGUzZTFkZS4uZjVkOTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
NTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBNKFRleHRJbnB1dCkgXAogICAg
IE0oVmlldykgXAogICAgIE0oSURCKSBcCi0gICAgTShTZXJ2aWNlcykgXAogCiAjZGVmaW5lIERF
Q0xBUkVfTE9HX0NIQU5ORUwobmFtZSkgXAogICAgIGV4dGVybiBXVEZMb2dDaGFubmVsIEpPSU5f
TE9HX0NIQU5ORUxfV0lUSF9QUkVGSVgoTE9HX0NIQU5ORUxfUFJFRklYLCBuYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
ZDdlYzNmLi5jNTY4ZjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNyArOTMxLDYgQEAKIAkJNTE4RThGMEIxNkIyMDkz
NzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwMjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxv
YWRNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNTE4RThGMEMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25s
b2FkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5oICovOyB9Owog
CQk1MThFOEYwRDE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwNTE2QjIwOTM3MDBFOTE0
MjkgLyogRG93bmxvYWRNYWMubW0gKi87IH07Ci0JCTUxOTJENTc2MTk2MUZEMDMwMENEMTlBQSAv
KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5MkQ1NzUxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTUxOTMzREVGMTk2NUVCMzEwMDhBQzNFQSAv
KiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTkzM0RFQjE5NjVFQjI0MDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oICovOyB9
OwogCQk1MTkzM0RGMDE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTMzREVDMTk2NUVCMjQw
MDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLm1tICovOyB9OwogCQk1MUE0RDVBOTE2Q0FDNEZGMDAw
RTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3Rp
Y3NSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTI5NDksOCArMjk0OCw2IEBACiAJCTUxOEU4RjAyMTZC
MjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRNYW5hZ2VyLmNwcDsgcGF0aCA9IERvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYw
MzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERvd25sb2FkTWFuYWdlci5oOyBwYXRoID0gRG93bmxvYWRzL0Rvd25s
b2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYwNTE2QjIw
OTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBEb3dubG9hZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTkyRDU3NTE5NjFGRDAzMDBDRDE5QUEgLyogU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxOTMzREVCMTk2NUVCMjQwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbnVVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE5MzNERUMxOTY1RUIyNDAwOEFDM0VBIC8qIE1lbnVVdGlsaXRp
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZW51VXRpbGl0
aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE0RDVBODE2Q0FDNEZGMDAw
RTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RhdGlzdGljc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTY5OSw3ICs1Njk2LDYgQEAKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oICovLAogCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQ
YWdlT3ZlcmxheS5jcHAgKi8sCiAJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBh
Z2VPdmVybGF5LmggKi8sCi0JCQkJNTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyog
Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYyNzVC
MzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKIAkJCQkyRDgx
OUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNz
YWdlcy5pbiAqLywKQEAgLTY0NjgsNyArNjQ2NCw2IEBACiAJCQkJMUFCMTZBRTcxNjRCM0E4ODAw
MjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gKi8sCiAJCQkJMUFCMTZBREMxNjQ4
NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUFC
MTZBREIxNjQ4NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tICov
LAotCQkJCTUxOTJENTc1MTk2MUZEMDMwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tICovLAogCQkJCTFBQUYyNjM3MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oICovLAogCQkJCTFBQUYyNjM2MTQ2ODdDMzkwMDRBMUU4QSAvKiBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSAqLywKIAkJCQkxQzhFMkRBRDEyNzhDNUIy
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0gKi8sCkBAIC04NzI5LDcgKzg3MjQsNiBA
QAogCQkJCTUxMkY1ODk2MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTAwRDRDMTgyRDZFQjAwMDA4N0RENyAv
KiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMkY1ODk4
MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTE5MkQ1NzYxOTYxRkQwMzAwQ0QxOUFBIC8qIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MThFOEVGODE2QjIwOTFDMDBF
OTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
OEU4RUZCMTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEyRjU4QTIxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAppbmRleCA1ZGUwYzUzLi40NzlkZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCkBAIC0xMDc0LDUgKzEwNzQsMjQgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENy
eXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3RvcjwKIH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9S
TShNQUMpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2so
Y29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sK
KyAgICBtX3BhZ2UtPmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKG51bWJlciwgcG9pbnQpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKK3ZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRlbGVwaG9uZU51bWJlcnMsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3BhZ2UtPmhhbmRsZVNlbGVj
dGlvblNlcnZpY2VDbGljayhzZWxlY3Rpb24sIHRlbGVwaG9uZU51bWJlcnMsIHBvaW50KTsKK30K
KworYm9vbCBXZWJDaHJvbWVDbGllbnQ6Omhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoYm9v
bCBpc1RleHRPbmx5KSBjb25zdAoreworICAgIHJldHVybiAoaXNUZXh0T25seSAmJiBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpKSB8fCBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7Cit9CisKKyNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGI0ZDdkNGEuLmQxNDg2MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzA1LDYgKzMwNSwxNCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCB1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9y
PHVpbnQ4X3Q+JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb24mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdGVsZXBob25lTnVt
YmVycywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyhib29sIGlzVGV4dE9ubHkpIGNvbnN0IG92
ZXJyaWRlOworI2VuZGlmCisKICAgICBTdHJpbmcgbV9jYWNoZWRUb29sVGlwOwogICAgIG11dGFi
bGUgUmVmUHRyPFdlYkZyYW1lPiBtX2NhY2hlZEZyYW1lU2V0TGFyZ2VzdEZyYW1lOwogICAgIG11
dGFibGUgYm9vbCBtX2NhY2hlZE1haW5GcmFtZUhhc0hvcml6b250YWxTY3JvbGxiYXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKaW5kZXggMTdmYzNhNS4uMTZkZTFiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5o
IgogCiAjaW5jbHVkZSAiRWRpdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC01MzEsMjAgKzUzMCw0IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpCiAjZW5kaWYK
IH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNDaGFuZ2VkKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgbV9wYWdlLT5z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7Ci0jZW5kaWYKLX0KLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZWxlY3Rpb25SZWN0
c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8
R2FwUmVjdHM+JiBnYXBSZWN0cywgYm9vbCBpc1RleHRPbmx5KQotewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBpZiAobV9wYWdlLT5zZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkpCi0gICAgICAgIG1f
cGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KHJlY3RzLCBnYXBSZWN0cywgaXNUZXh0T25seSk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykgJiYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGYzNGE5
ZWIuLmY0NDE4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTY4LDExICsxNjgsNiBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgb3Zl
cnJpZGU7CiAKLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pIHx8IEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
UmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxheW91dFJlY3Q+JiwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkdhcFJlY3RzPiYsIGJvb2wgaXNUZXh0T25seSkgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLQogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTFkMzNjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXJfaAotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotdHlwZWRlZiB2b2lkKiBE
REhpZ2hsaWdodFJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5b3V0UmVjdDsK
LXN0cnVjdCBHYXBSZWN0czsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2U7Ci0KLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFdlYkNvcmU6
OlBhZ2VPdmVybGF5OjpDbGllbnQgewotcHVibGljOgotICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIoV2ViUGFnZSYpOwotICAgIH5TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIHNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxheW91dFJlY3Q+
JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdhcFJlY3RzPiYsIGJvb2wgaXNUZXh0T25seSk7Ci0K
LXByaXZhdGU6Ci0gICAgY2xhc3MgSGlnaGxpZ2h0IDogcHVibGljIFJlZkNvdW50ZWQ8SGlnaGxp
Z2h0PiwgcHJpdmF0ZSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGlnaGxpZ2h0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yU2VsZWN0aW9uKFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXImLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPik7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRl
Rm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImLCBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPik7Ci0gICAgICAgIH5I
aWdobGlnaHQoKTsKLQotICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgICAgICBEREhp
Z2hsaWdodFJlZiBkZEhpZ2hsaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZGRIaWdobGlnaHQuZ2V0
KCk7IH0KLSAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9y
YW5nZS5nZXQoKTsgfQotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NMYXllci5nZXQoKTsgfQotCi0gICAgICAgIGVudW0gY2xh
c3MgVHlwZSB7Ci0gICAgICAgICAgICBUZWxlcGhvbmVOdW1iZXIsCi0gICAgICAgICAgICBTZWxl
Y3Rpb24KLSAgICAgICAgfTsKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICAgICAgdm9pZCBmYWRlSW4oKTsKLSAgICAgICAgdm9pZCBmYWRlT3V0KCk7
Ci0KLSAgICAgICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJlZik7Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBleHBsaWNpdCBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJv
bGxlciYsIFR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+KTsKLQotICAgICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGluQ2xpcCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIGRpZEZpbmlzaEZhZGVPdXRBbmlt
YXRpb24oKTsKLQotICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fZGRIaWdobGln
aHQ7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9yYW5nZTsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fZ3JhcGhpY3NMYXllcjsKLSAg
ICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIqIG1f
Y29udHJvbGxlcjsKLSAgICB9OwotCi0gICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6
RnJhbWUmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0g
ICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIEhpZ2hsaWdodCYp
OwotCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpOwotCi0gICAgdm9pZCByZXBsYWNlSGlnaGxpZ2h0c09mVHlwZVByZXNlcnZpbmdF
cXVpdmFsZW50SGlnaGxpZ2h0cyhIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiYsIEhpZ2hsaWdo
dDo6VHlwZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhp
Z2hsaWdodDo6VHlwZSk7Ci0gICAgdm9pZCBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwot
ICAgIHZvaWQgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKLSAgICB2b2lkIGRpZFJlYnVpbGRQ
b3RlbnRpYWxIaWdobGlnaHRzKCk7Ci0KLSAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dChib29sJiBtb3VzZUlzT3ZlckJ1dHRvbik7Ci0gICAgdm9pZCBjbGVhckFjdGl2ZUhpZ2hsaWdo
dCgpOwotICAgIEhpZ2hsaWdodCogYWN0aXZlSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVIaWdobGlnaHQuZ2V0KCk7IH0KLQotICAgIEhpZ2hsaWdodCogZmluZFRlbGVwaG9uZU51
bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdobGlnaHQoSGlnaGxpZ2h0Jik7Ci0K
LSAgICBib29sIGhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKTsKLQotICAgIGJvb2wgbW91
c2VJc092ZXJIaWdobGlnaHQoSGlnaGxpZ2h0JiwgYm9vbCYgbW91c2VJc092ZXJCdXR0b24pIGNv
bnN0OwotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgcmVtYWluaW5nVGltZVVudGlsSGln
aGxpZ2h0U2hvdWxkQmVTaG93bihIaWdobGlnaHQqKSBjb25zdDsKLSAgICB2b2lkIGRldGVybWlu
ZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcj4mKTsKLQotICAgIHN0YXRpYyBib29sIGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50
KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJh
bWUoKTsKLQotICAgIHZvaWQgZGlkQ3JlYXRlSGlnaGxpZ2h0KEhpZ2hsaWdodCopOwotICAgIHZv
aWQgd2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0Kik7Ci0gICAgdm9pZCBkaWRGaW5pc2hG
YWRpbmdPdXRIaWdobGlnaHQoSGlnaGxpZ2h0Kik7Ci0KLSAgICBXZWJQYWdlJiB3ZWJQYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9Ci0KLSAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Ci0g
ICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwotCi0gICAgUmVmUHRy
PEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7Ci0gICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9u
ZXh0QWN0aXZlSGlnaGxpZ2h0OwotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+IG1fcG90
ZW50aWFsSGlnaGxpZ2h0czsKLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX2FuaW1h
dGluZ0hpZ2hsaWdodHM7Ci0KLSAgICBIYXNoU2V0PEhpZ2hsaWdodCo+IG1faGlnaGxpZ2h0czsK
LQotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgbW92ZSBvbnRvIEhpZ2hsaWdodC4KLSAgICBW
ZWN0b3I8V2ViQ29yZTo6TGF5b3V0UmVjdD4gbV9jdXJyZW50U2VsZWN0aW9uUmVjdHM7Ci0gICAg
Ym9vbCBtX2lzVGV4dE9ubHk7Ci0KLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50IG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7Ci0gICAgc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6dGltZV9wb2ludCBtX25leHRBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1lOwotICAg
IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0TW91c2VVcFRpbWU7
Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hs
aWdodDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX21vdXNlUG9zaXRpb247Ci0KLSAgICBXZWJD
b3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX2RldGVybWluZUFjdGl2ZUhp
Z2hsaWdodFRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgJiYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQotI2VuZGlmIC8vIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDJiZmZjMzQuLjk5ZDYz
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJQbHVnaW5Qcm94eS5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKICNpbmNsdWRlICJQcmludEluZm8uaCIKLSNpbmNsdWRlICJTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgiCiAjaW5jbHVkZSAi
U2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCkBA
IC0yNjMsOSArMjYyLDYgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX251bWJlck9m
UHJpbWFyeVNuYXBzaG90RGV0ZWN0aW9uQXR0ZW1wdHMoMCkKICAgICAsIG1fZGV0ZXJtaW5lUHJp
bWFyeVNuYXBzaG90dGVkUGx1Z0luVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUGFn
ZTo6ZGV0ZXJtaW5lUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luVGltZXJGaXJlZCkKICNlbmRpZgot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICwgbV9zZXJ2aWNlQ29udHJvbHNFbmFi
bGVkKGZhbHNlKQotI2VuZGlmCiAgICAgLCBtX2xheWVySG9zdGluZ01vZGUocGFyYW1ldGVycy5s
YXllckhvc3RpbmdNb2RlKQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgbV9wZGZQbHVnaW5F
bmFibGVkKGZhbHNlKQpAQCAtMjYyNiwxMCArMjYyMiw2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRl
UHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAgICAgbV9wZGZQ
bHVnaW5FbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
OjpwZGZQbHVnaW5FbmFibGVkS2V5KCkpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICBtX3NlcnZpY2VDb250cm9sc0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNlcnZpY2VDb250cm9sc0VuYWJsZWRLZXkoKSk7
Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBnZW5lcmF0ZWQgZnJvbSBt
YWNybyBleHBhbnNpb24gZm9yIGFsbCBwcmVmZXJlbmNlcywKICAgICAvLyBidXQgd2UgY3VycmVu
dGx5IGRvbid0IG1hdGNoIHRoZSBuYW1pbmcgb2YgV2ViQ29yZSBleGFjdGx5IHNvIHdlIGFyZQog
ICAgIC8vIGhhbmRyb2xsaW5nIHRoZSBib29sZWFuIGFuZCBpbnRlZ2VyIHByZWZlcmVuY2VzIHVu
dGlsIHRoYXQgaXMgZml4ZWQuCkBAIC0yODQ1LDYgKzI4MzcsMTAgQEAgdm9pZCBXZWJQYWdlOjp1
cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEdhbWVwYWRzRW5hYmxl
ZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmdhbWVwYWRzRW5h
YmxlZEtleSgpKSk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAg
IHNldHRpbmdzLnNldFNlcnZpY2VDb250cm9sc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9y
S2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzZXJ2aWNlQ29udHJvbHNFbmFibGVkS2V5KCkpKTsKKyNl
bmRpZgorCiAgICAgaWYgKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tl
eTo6cGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWRLZXkoKSkpCiAg
ICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRCeVdlYlByZWZlcmVuY2Uuc3RvcCgp
OwogICAgIGVsc2UKQEAgLTQ3NzgsMTYgKzQ3NzQsNiBAQCBib29sIFdlYlBhZ2U6OnN5bmNocm9u
b3VzTWVzc2FnZXNTaG91bGRTcGluUnVuTG9vcCgpCiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9Ci0gICAgCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikKLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6
OnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQotewotICAgIGlmICghbV9zZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyKQotICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+KCp0aGlzKTsKLQotICAgIHJl
dHVybiAqbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwotfQotI2VuZGlmCiAKIHZvaWQgV2Vi
UGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMWIwNzY3MS4u
ODM4MWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC0xNDEsNyArMTQxLDYgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3Q7
CiBjbGFzcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiBjbGFzcyBQYWdl
QmFubmVyOwogY2xhc3MgUGx1Z2luVmlldzsKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI7CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwogY2xhc3MgV2ViQ29sb3JD
aG9vc2VyOwogY2xhc3MgV2ViQ29udGV4dE1lbnU7CkBAIC04MjgsMTEgKzgyNyw5IEBAIHB1Ymxp
YzoKICAgICAvLyBXaGlsZSB0aGlzIGlzIG5vdCBpZGVhbCwgaXQgZG9lcyBub3QgaGF2ZSB0byBi
ZSBhcHBsaWVkIHRvIGV2ZXJ5IHBsYXRmb3JtIGF0IHRoZSBtb21lbnQuCiAgICAgc3RhdGljIGJv
b2wgc3luY2hyb25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCk7CiAKLSNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAK
LSAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBzZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCk7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikKICAgICB2b2lkIGhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0
IFN0cmluZyYgbnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZvaWQgaGFu
ZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHRlbGVwaG9uZU51bWJlcnMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7Ci0gICAgYm9vbCBzZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXJ2aWNlQ29udHJvbHNFbmFibGVkOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgZGlkQ2hhbmdlU2Ny
b2xsT2Zmc2V0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKQEAgLTEwOTEsMTAgKzEwODgsNiBA
QCBwcml2YXRlOgogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1fZGV0ZXJtaW5lUHJpbWFy
eVNuYXBzaG90dGVkUGx1Z0luVGltZXI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0gICAgYm9vbCBt
X3NlcnZpY2VDb250cm9sc0VuYWJsZWQ7Ci0jZW5kaWYKLQogICAgIC8vIFRoZSBsYXllciBob3N0
aW5nIG1vZGUuCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xheWVySG9zdGluZ01vZGU7CiAKQEAg
LTEyNjksMTAgKzEyNjIsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXRUJHTCkKICAgICBXZWJD
b3JlOjpXZWJHTExvYWRQb2xpY3kgbV9zeXN0ZW1XZWJHTFBvbGljeTsKICNlbmRpZgotCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWE1YmQ5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw4MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIgotCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExB
VEZPUk0oTUFDKQotCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJQYWdlLmgiCi0j
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5k
bGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0dhcFJlY3RzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJDQS5oPgotI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRm
b3JtQ0FBbmltYXRpb25NYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KLQot
I2lmIF9faGFzX2luY2x1ZGUoPERhdGFEZXRlY3RvcnMvRERIaWdobGlnaHREcmF3aW5nLmg+KQot
I2ltcG9ydCA8RGF0YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmcuaD4KLSNlbHNlCi10eXBl
ZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwotI2VuZGlmCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxE
YXRhRGV0ZWN0b3JzL0RESGlnaGxpZ2h0RHJhd2luZ19Qcml2YXRlLmg+KQotI2ltcG9ydCA8RGF0
YURldGVjdG9ycy9EREhpZ2hsaWdodERyYXdpbmdfUHJpdmF0ZS5oPgotI2VuZGlmCi0KLWNvbnN0
IGZsb2F0IGhpZ2hsaWdodEZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLQotdHlwZWRlZiBO
U1VJbnRlZ2VyIERESGlnaGxpZ2h0U3R5bGU7Ci1zdGF0aWMgY29uc3QgRERIaWdobGlnaHRTdHls
ZSBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2KTsKLXN0YXRpYyBjb25z
dCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0T3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2
KSB8IDE7Ci0KLVNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChEYXRhRGV0ZWN0
b3JzKQotU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3Rz
SW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbiwgRERIaWdobGlnaHRSZWYsIChDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIENHUmVjdCogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVj
dCBnbG9iYWxWaXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRo
QXJyb3csIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNX
aXRoRU9MLCBCb29sZWFuIGZsaXBwZWQpLCAoYWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2Jh
bFZpc2libGVSZWN0LCBzdHlsZSwgd2l0aEFycm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0
aEVPTCwgZmxpcHBlZCkpCi1TT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRM
YXllcldpdGhDb250ZXh0LCBDR0xheWVyUmVmLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBD
R0NvbnRleHRSZWYgY29udGV4dCksIChoaWdobGlnaHQsIGNvbnRleHQpKQotU09GVF9MSU5LKERh
dGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hs
aWdodFJlZiBoaWdobGlnaHQpLCAoaGlnaGxpZ2h0KSkKLVNPRlRfTElOSyhEYXRhRGV0ZWN0b3Jz
LCBEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVm
IGhpZ2hsaWdodCwgQ0dQb2ludCBwb2ludCwgQm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0
LCBwb2ludCwgb25CdXR0b24pKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNl
bGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBUeXBlOjpTZWxl
Y3Rpb24sIGRkSGlnaGxpZ2h0LCByYW5nZSkpOwotfQotCi1QYXNzUmVmUHRyPFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCwgUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaWdobGln
aHQoY29udHJvbGxlciwgVHlwZTo6VGVsZXBob25lTnVtYmVyLCBkZEhpZ2hsaWdodCwgcmFuZ2Up
KTsKLX0KLQotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdobGlnaHQo
U2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBSZXRhaW5Q
dHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZSkKLSAgICA6IG1fcmFuZ2UocmFuZ2UpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAs
IG1fY29udHJvbGxlcigmY29udHJvbGxlcikKLXsKLSAgICBBU1NFUlQoZGRIaWdobGlnaHQpOwot
ICAgIEFTU0VSVChtX3JhbmdlKTsKLQotICAgIERyYXdpbmdBcmVhKiBkcmF3aW5nQXJlYSA9IGNv
bnRyb2xsZXIud2ViUGFnZSgpLmRyYXdpbmdBcmVhKCk7Ci0gICAgbV9ncmFwaGljc0xheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKGRyYXdpbmdBcmVhID8gZHJhd2luZ0FyZWEtPmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkgOiBudWxscHRyLCAqdGhpcyk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0KLSAgICBzZXREREhpZ2hsaWdodChkZEhpZ2hsaWdodC5n
ZXQoKSk7Ci0KLSAgICAvLyBTZXQgZGlyZWN0bHkgb24gdGhlIFBsYXRmb3JtQ0FMYXllciBzbyB0
aGF0IHdoZW4gd2UgbGVhdmUgdGhlICdmcm9tJyB2YWx1ZSBpbXBsaWNpdAotICAgIC8vIGluIG91
ciBhbmltYXRpb25zLCB3ZSBnZXQgdGhlIHJpZ2h0IGluaXRpYWwgdmFsdWUgcmVnYXJkbGVzcyBv
ZiBmbHVzaCB0aW1pbmcuCi0gICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3Jt
Q0FMYXllcigpLT5zZXRPcGFjaXR5KDApOwotCi0gICAgY29udHJvbGxlci5kaWRDcmVhdGVIaWdo
bGlnaHQodGhpcyk7Ci19Ci0KLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6
fkhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKG1fY29udHJvbGxlcikKLSAgICAgICAgbV9jb250cm9s
bGVyLT53aWxsRGVzdHJveUhpZ2hsaWdodCh0aGlzKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OnNldERESGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmIGhp
Z2hsaWdodCkKLXsKLSAgICBpZiAoIW1fY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9kZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLQotICAgIGlmICghbV9kZEhpZ2hsaWdodCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERE
SGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KG1fZGRIaWdobGlnaHQuZ2V0KCkpOwotICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChoaWdobGlnaHRCb3VuZGluZ1JlY3Qu
b3JpZ2luKSk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShoaWdobGln
aHRCb3VuZGluZ1JlY3Quc2l6ZSkpOwotCi0gICAgbV9ncmFwaGljc0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OmludmFsaWRhdGUoKQotewotICAgIGxheWVyKCktPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBt
X2NvbnRyb2xsZXIgPSBudWxscHRyOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OkhpZ2hsaWdodDo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikK
LXsKLSAgICBpZiAoIW1fY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKERy
YXdpbmdBcmVhKiBkcmF3aW5nQXJlYSA9IG1fY29udHJvbGxlci0+d2ViUGFnZSgpLmRyYXdpbmdB
cmVhKCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVz
aCgpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6cGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGlu
Q2xpcCkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgQ0dMYXllclJlZiBoaWdobGlnaHRMYXllciA9IERESGln
aGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChkZEhpZ2hsaWdodCgpLCBjZ0NvbnRleHQpOwotICAg
IENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5nUmVj
dChkZEhpZ2hsaWdodCgpKTsKLSAgICBoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luID0gQ0dQ
b2ludFplcm87Ci0KLSAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY2dDb250ZXh0LCBoaWdo
bGlnaHRCb3VuZGluZ1JlY3QsIGhpZ2hsaWdodExheWVyKTsKLX0KLQotZmxvYXQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJu
IG1fY29udHJvbGxlci0+d2ViUGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpmYWRlSW4oKQotewotICAgIFJl
dGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBhbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKLSAgICBbYW5pbWF0aW9uIHNldER1cmF0
aW9uOmhpZ2hsaWdodEZhZGVBbmltYXRpb25EdXJhdGlvbl07Ci0gICAgW2FuaW1hdGlvbiBzZXRG
aWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbYW5pbWF0aW9uIHNldFJlbW92ZWRP
bkNvbXBsZXRpb246ZmFsc2VdOwotICAgIFthbmltYXRpb24gc2V0VG9WYWx1ZTpAMV07Ci0KLSAg
ICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gcGxhdGZvcm1BbmltYXRpb24gPSBQbGF0Zm9y
bUNBQW5pbWF0aW9uTWFjOjpjcmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKLSAgICB0b0dyYXBoaWNz
TGF5ZXJDQShsYXllcigpKS0+cGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgi
RmFkZUhpZ2hsaWdodEluIiwgcGxhdGZvcm1BbmltYXRpb24uZ2V0KCkpOwotfQotCi12b2lkIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZmFkZU91dCgpCi17Ci0gICAgUmV0
YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFu
aW1hdGlvbldpdGhLZXlQYXRoOkAib3BhY2l0eSJdOwotICAgIFthbmltYXRpb24gc2V0RHVyYXRp
b246aGlnaGxpZ2h0RmFkZUFuaW1hdGlvbkR1cmF0aW9uXTsKLSAgICBbYW5pbWF0aW9uIHNldEZp
bGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFthbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpmYWxzZV07Ci0gICAgW2FuaW1hdGlvbiBzZXRUb1ZhbHVlOkAwXTsKLQotICAg
IFJlZlB0cjxIaWdobGlnaHQ+IHJldGFpbmVkU2VsZiA9IHRoaXM7Ci0gICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9jazpbcmV0YWlu
ZWRTZWxmXSAoKSB7Ci0gICAgICAgIHJldGFpbmVkU2VsZi0+ZGlkRmluaXNoRmFkZU91dEFuaW1h
dGlvbigpOwotICAgIH1dOwotCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IHBsYXRm
b3JtQW5pbWF0aW9uID0gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6Y3JlYXRlKGFuaW1hdGlvbi5n
ZXQoKSk7Ci0gICAgdG9HcmFwaGljc0xheWVyQ0EobGF5ZXIoKSktPnBsYXRmb3JtQ0FMYXllcigp
LT5hZGRBbmltYXRpb25Gb3JLZXkoIkZhZGVIaWdobGlnaHRPdXQiLCBwbGF0Zm9ybUFuaW1hdGlv
bi5nZXQoKSk7Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24o
KQotewotICAgIGlmICghbV9jb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9jb250cm9sbGVyLT5hY3RpdmVIaWdobGlnaHQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBsYXllcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0
IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoUmFuZ2UmIHJhbmdlKQotewotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS50ZXh0UXVhZHModGV4dFF1YWRz
KTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRl
eHRRdWFkcykKLSAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHF1YWQuYm91bmRpbmdCb3goKSk7
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdSZWN0KTsKLX0KLQotU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJiB3
ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX3NlcnZpY2VzT3Zlcmxh
eShudWxscHRyKQotICAgICwgbV9pc1RleHRPbmx5KGZhbHNlKQotICAgICwgbV9kZXRlcm1pbmVB
Y3RpdmVIaWdobGlnaHRUaW1lcih0aGlzLCAmU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0
ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZCkKLXsKLX0KLQotU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQotewotICAgIGZvciAoYXV0
byYgaGlnaGxpZ2h0IDogbV9oaWdobGlnaHRzKQotICAgICAgICBoaWdobGlnaHQtPmludmFsaWRh
dGUoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURl
c3Ryb3llZChQYWdlT3ZlcmxheSYpCi17Ci0gICAgLy8gQmVmb3JlIHRoZSBvdmVybGF5IGlzIGRl
c3Ryb3llZCwgaXQgc2hvdWxkIGhhdmUgbW92ZWQgb3V0IG9mIHRoZSBXZWJQYWdlLAotICAgIC8v
IGF0IHdoaWNoIHBvaW50IHdlIGFscmVhZHkgY2xlYXJlZCBvdXIgYmFjayBwb2ludGVyLgotICAg
IEFTU0VSVCghbV9zZXJ2aWNlc092ZXJsYXkpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKLXsKLSAg
ICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc2VydmljZXNPdmVy
bGF5KTsKLSAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQot
ewotfQotCi1zdGF0aWMgY29uc3QgdWludDhfdCBBbGlnbm1lbnROb25lID0gMDsKLXN0YXRpYyBj
b25zdCB1aW50OF90IEFsaWdubWVudExlZnQgPSAxIDw8IDA7Ci1zdGF0aWMgY29uc3QgdWludDhf
dCBBbGlnbm1lbnRSaWdodCA9IDEgPDwgMTsKLQotc3RhdGljIHZvaWQgZXhwYW5kRm9yR2FwKFZl
Y3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIHVpbnQ4X3QqIGFsaWdubWVudHMsIGNvbnN0IEdhcFJl
Y3RzJiBnYXApCi17Ci0gICAgaWYgKCFnYXAubGVmdCgpLmlzRW1wdHkoKSkgewotICAgICAgICBM
YXlvdXRVbml0IGxlZnRFZGdlID0gZ2FwLmxlZnQoKS54KCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGFsaWdu
bWVudHNbaV0gJiBBbGlnbm1lbnRMZWZ0KQotICAgICAgICAgICAgICAgIHJlY3RzW2ldLnNoaWZ0
WEVkZ2VUbyhsZWZ0RWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdhcC5yaWdo
dCgpLmlzRW1wdHkoKSkgewotICAgICAgICBMYXlvdXRVbml0IHJpZ2h0RWRnZSA9IGdhcC5yaWdo
dCgpLm1heFgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudFJpZ2h0
KQotICAgICAgICAgICAgICAgIHJlY3RzW2ldLnNoaWZ0TWF4WEVkZ2VUbyhyaWdodEVkZ2UpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RpdGNoUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cykKLXsKLSAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWZWN0b3I8TGF5b3V0UmVjdD4gbmV3UmVjdHM7Ci0g
ICAgCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCB2ZXJ0aWNhbCBsYXlvdXQuCi0gICAg
Ly8gRmlyc3Qgc3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgb24gdGhlIGZpcnN0IGxpbmUg
b2YgdGhlIHNlbGVjdGlvbi4KLSAgICBzaXplX3QgaW5kZXhGcm9tU3RhcnQgPSAwOwotICAgIExh
eW91dFVuaXQgZmlyc3RUb3AgPSByZWN0c1tpbmRleEZyb21TdGFydF0ueSgpOwotICAgIExheW91
dFJlY3QmIGN1cnJlbnRSZWN0ID0gcmVjdHNbaW5kZXhGcm9tU3RhcnRdOwotICAgIHdoaWxlIChp
bmRleEZyb21TdGFydCA8IHJlY3RzLnNpemUoKSAmJiByZWN0c1tpbmRleEZyb21TdGFydF0ueSgp
ID09IGZpcnN0VG9wKQotICAgICAgICBjdXJyZW50UmVjdC51bml0ZShyZWN0c1tpbmRleEZyb21T
dGFydCsrXSk7Ci0gICAgCi0gICAgbmV3UmVjdHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKLSAgICBp
ZiAoaW5kZXhGcm9tU3RhcnQgPT0gcmVjdHMuc2l6ZSgpKSB7Ci0gICAgICAgIC8vIEFsbCB0aGUg
cmVjdHMgYXJlIG9uIG9uZSBsaW5lLiBUaGVyZSBpcyBub3RoaW5nIGVsc2UgdG8gZG8uCi0gICAg
ICAgIHJlY3RzLnN3YXAobmV3UmVjdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIC8vIE5leHQgc3RpdGNoIHRvZ2V0aGVyIGFsbCB0aGUgcmVjdHMgb24gdGhlIGxhc3QgbGlu
ZSBvZiB0aGUgc2VsZWN0aW9uLgotICAgIHNpemVfdCBpbmRleEZyb21FbmQgPSByZWN0cy5zaXpl
KCkgLSAxOwotICAgIExheW91dFVuaXQgbGFzdFRvcCA9IHJlY3RzW2luZGV4RnJvbUVuZF0ueSgp
OwotICAgIExheW91dFJlY3QgbGFzdFJlY3QgPSByZWN0c1tpbmRleEZyb21FbmRdOwotICAgIHdo
aWxlIChpbmRleEZyb21FbmQgPj0gaW5kZXhGcm9tU3RhcnQgJiYgcmVjdHNbaW5kZXhGcm9tRW5k
XS55KCkgPT0gbGFzdFRvcCkKLSAgICAgICAgbGFzdFJlY3QudW5pdGUocmVjdHNbaW5kZXhGcm9t
RW5kLS1dKTsKLSAgICAKLSAgICAvLyBpbmRleEZyb21TdGFydCBpcyB0aGUgaW5kZXggb2YgdGhl
IGZpcnN0IHJlY3RhbmdsZSBvbiB0aGUgc2Vjb25kIGxpbmUuCi0gICAgLy8gaW5kZXhGcm9tRW5k
IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCByZWN0YW5nbGUgb24gdGhlIHNlY29uZCB0byB0aGUg
bGFzdCBsaW5lLgotICAgIC8vIGlmIHRoZXkgYXJlIGVxdWFsLCB0aGVyZSBpcyBvbmUgYWRkaXRp
b25hbCByZWN0YW5nbGUgZm9yIHRoZSBsaW5lIGluIHRoZSBtaWRkbGUuCi0gICAgaWYgKGluZGV4
RnJvbUVuZCA9PSBpbmRleEZyb21TdGFydCkKLSAgICAgICAgbmV3UmVjdHMuYXBwZW5kKHJlY3Rz
W2luZGV4RnJvbVN0YXJ0XSk7Ci0gICAgCi0gICAgaWYgKGluZGV4RnJvbUVuZCA8PSBpbmRleEZy
b21TdGFydCkgewotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gbW9yZSByZWN0cyB0byBzdGl0Y2gu
IEp1c3QgYXBwZW5kIHRoZSBsYXN0IGxpbmUuCi0gICAgICAgIG5ld1JlY3RzLmFwcGVuZChsYXN0
UmVjdCk7Ci0gICAgICAgIHJlY3RzLnN3YXAobmV3UmVjdHMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIC8vIFN0aXRjaCB0b2dldGhlciBhbGwgdGhlIHJlY3RzIGFmdGVyIHRo
ZSBmaXJzdCBsaW5lIHVudGlsIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgaW5jbHVkZWQuCi0gICAg
Y3VycmVudFJlY3QgPSByZWN0c1tpbmRleEZyb21TdGFydF07Ci0gICAgd2hpbGUgKGluZGV4RnJv
bVN0YXJ0ICE9IGluZGV4RnJvbUVuZCkKLSAgICAgICAgY3VycmVudFJlY3QudW5pdGUocmVjdHNb
KytpbmRleEZyb21TdGFydF0pOwotICAgIAotICAgIG5ld1JlY3RzLmFwcGVuZChjdXJyZW50UmVj
dCk7Ci0gICAgbmV3UmVjdHMuYXBwZW5kKGxhc3RSZWN0KTsKLQotICAgIHJlY3RzLnN3YXAobmV3
UmVjdHMpOwotfQotCi1zdGF0aWMgdm9pZCBjb21wYWN0UmVjdHNXaXRoR2FwUmVjdHMoVmVjdG9y
PExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMpCi17
Ci0gICAgc3RpdGNoUmVjdHMocmVjdHMpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIGFsaWdubWVudHMgYXJlIGNvcnJlY3QgZm9yIExUUiB0ZXh0LgotICAgIC8vIFdlIHNob3Vs
ZCBhbHNvIGFjY291bnQgZm9yIFJUTC4KLSAgICB1aW50OF90IGFsaWdubWVudHNbM107Ci0gICAg
aWYgKHJlY3RzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGFsaWdubWVudHNbMF0gPSBBbGlnbm1l
bnRMZWZ0IHwgQWxpZ25tZW50UmlnaHQ7Ci0gICAgICAgIGFsaWdubWVudHNbMV0gPSBBbGlnbm1l
bnROb25lOwotICAgICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50Tm9uZTsKLSAgICB9IGVs
c2UgaWYgKHJlY3RzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIGFsaWdubWVudHNbMF0gPSBBbGln
bm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1sxXSA9IEFsaWdubWVudExlZnQ7Ci0gICAg
ICAgIGFsaWdubWVudHNbMl0gPSBBbGlnbm1lbnROb25lOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFsaWdubWVudHNbMF0gPSBBbGlnbm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1sxXSA9
IEFsaWdubWVudExlZnQgfCBBbGlnbm1lbnRSaWdodDsKLSAgICAgICAgYWxpZ25tZW50c1syXSA9
IEFsaWdubWVudExlZnQ7Ci0gICAgfQotCi0gICAgLy8gQWNjb3VudCBmb3IgZWFjaCBHYXBSZWN0
cyBieSBleHRlbmRpbmcgdGhlIGVkZ2Ugb2YgY2VydGFpbiBMYXlvdXRSZWN0cyB0byBtZWV0IHRo
ZSBnYXAuCi0gICAgZm9yIChhdXRvJiBnYXAgOiBnYXBSZWN0cykKLSAgICAgICAgZXhwYW5kRm9y
R2FwKHJlY3RzLCBhbGlnbm1lbnRzLCBnYXApOwotCi0gICAgLy8gSWYgd2UgaGF2ZSAzIHJlY3Rz
IHdlIG1pZ2h0IG5lZWQgb25lIGZpbmFsIEdhcFJlY3RzIHRvIGFsaWduIHRoZSBlZGdlcy4KLSAg
ICBpZiAocmVjdHMuc2l6ZSgpID09IDMpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBsZWZ0OwotICAg
ICAgICBMYXlvdXRSZWN0IHJpZ2h0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudExlZnQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSByZWN0c1tpXTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWN0c1tpXS54
KCkgPCBsZWZ0LngoKSkKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3RzW2ldOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRSaWdo
dCkgewotICAgICAgICAgICAgICAgIGlmIChyaWdodC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcmVjdHNbaV07Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJlY3Rz
W2ldLngoKSArIHJlY3RzW2ldLndpZHRoKCkpID4gKHJpZ2h0LngoKSArIHJpZ2h0LndpZHRoKCkp
KQotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3RzW2ldOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsZWZ0LmlzRW1wdHkoKSB8fCAhcmlnaHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBHYXBSZWN0cyBnYXA7Ci0gICAgICAgICAgICBnYXAudW5pdGVM
ZWZ0KGxlZnQpOwotICAgICAgICAgICAgZ2FwLnVuaXRlUmlnaHQocmlnaHQpOwotICAgICAgICAg
ICAgZXhwYW5kRm9yR2FwKHJlY3RzLCBhbGlnbm1lbnRzLCBnYXApOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3RzRGlk
Q2hhbmdlKGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxHYXBS
ZWN0cz4mIGdhcFJlY3RzLCBib29sIGlzVGV4dE9ubHkpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIG1fY3VycmVudFNl
bGVjdGlvblJlY3RzID0gcmVjdHM7Ci0gICAgbV9pc1RleHRPbmx5ID0gaXNUZXh0T25seTsKLQot
ICAgIG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojpub3coKTsKLQotICAgIGNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0cyhtX2N1cnJlbnRTZWxlY3Rp
b25SZWN0cywgZ2FwUmVjdHMpOwotCi0gICAgLy8gRGF0YURldGVjdG9ycyBuZWVkcyB0aGVzZSBy
ZXZlcnNlZCBpbiBvcmRlciB0byBwbGFjZSB0aGUgYXJyb3cgaW4gdGhlIHJpZ2h0IGxvY2F0aW9u
LgotICAgIG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnJldmVyc2UoKTsKLQotICAgIExPRyhTZXJ2
aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBTZWxlY3Rpb24gcmVjdHMgY2hhbmdl
ZCAtIE5vdyBoYXZlICVsdVxuIiwgcmVjdHMuc2l6ZSgpKTsKLQotICAgIGJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWN0cyk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdhcFJlY3RzKTsKLSAgICBVTlVTRURfUEFSQU0oaXNUZXh0T25seSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyIC0gVGVsZXBob25lIG51bWJlciByYW5nZXMgY2hhbmdlZFxuIik7Ci0g
ICAgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKTsKLSNlbmRpZgotfQotCi1ib29sIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlSXNPdmVySGlnaGxpZ2h0KEhpZ2hsaWdodCYgaGln
aGxpZ2h0LCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3QKLXsKLSAgICBCb29sZWFuIG9u
QnV0dG9uOwotICAgIGJvb2wgaG92ZXJlZCA9IERESGlnaGxpZ2h0UG9pbnRJc09uSGlnaGxpZ2h0
KGhpZ2hsaWdodC5kZEhpZ2hsaWdodCgpLCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1
dHRvbik7Ci0gICAgbW91c2VJc092ZXJCdXR0b24gPSBvbkJ1dHRvbjsKLSAgICByZXR1cm4gaG92
ZXJlZDsKLX0KLQotc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KSBjb25zdAotewotICAgIGlmICghaGlnaGxpZ2h0KQotICAgICAgICByZXR1
cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6emVybygpOwotCi0gICAgYXV0byBtaW5pbXVt
VGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IDIwMF9tczsKLSAgICBpZiAobV93ZWJQ
YWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIG1pbmlt
dW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duID0gMTAwMF9tczsKLQotICAgIGJvb2wg
bW91c2VQcmVzc2VkID0gZmFsc2U7Ci0gICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBh
Z2UubWFpbkZyYW1lKCkpCi0gICAgICAgIG1vdXNlUHJlc3NlZCA9IG1haW5GcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubW91c2VQcmVzc2VkKCk7Ci0KLSAgICAvLyBIaWdobGlnaHQgaHlzdGVyZXNpcyBp
cyBvbmx5IGZvciBzZWxlY3Rpb24gc2VydmljZXMsIGJlY2F1c2UgdGVsZXBob25lIG51bWJlciBo
aWdobGlnaHRzIGFyZSBhbHJlYWR5IG11Y2ggbW9yZSBzdGFibGUKLSAgICAvLyBieSB2aXJ0dWUg
b2YgYmVpbmcgZXhwYW5kZWQgdG8gaW5jbHVkZSB0aGUgZW50aXJlIHRlbGVwaG9uZSBudW1iZXIu
IEhvd2V2ZXIsIHdlIHdpbGwgc3RpbGwgYXZvaWQgaGlnaGxpZ2h0aW5nCi0gICAgLy8gdGVsZXBo
b25lIG51bWJlcnMgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCi0gICAgaWYgKGhpZ2hsaWdodC0+
dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQotICAgICAgICByZXR1
cm4gbW91c2VQcmVzc2VkID8gbWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24g
OiAwX21zOwotCi0gICAgYXV0byBub3cgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3co
KTsKLSAgICBhdXRvIHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFuZ2UgPSBub3cgLSBtX2xhc3RT
ZWxlY3Rpb25DaGFuZ2VUaW1lOwotICAgIGF1dG8gdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0
aXZlID0gbm93IC0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZTsKLSAgICBhdXRvIHRp
bWVTaW5jZUxhc3RNb3VzZVVwID0gbW91c2VQcmVzc2VkID8gMF9tcyA6IG5vdyAtIG1fbGFzdE1v
dXNlVXBUaW1lOwotCi0gICAgYXV0byByZW1haW5pbmdEZWxheSA9IG1pbmltdW1UaW1lVW50aWxI
aWdobGlnaHRTaG91bGRCZVNob3duIC0gc3RkOjptaW4oc3RkOjptaW4odGltZVNpbmNlTGFzdFNl
bGVjdGlvbkNoYW5nZSwgdGltZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0aXZlKSwgdGltZVNpbmNl
TGFzdE1vdXNlVXApOwotICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzPihyZW1haW5pbmdEZWxheSk7Ci19Ci0KLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChU
aW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpCi17Ci0gICAgYm9vbCBtb3VzZUlzT3Zl
ckJ1dHRvbjsKLSAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJCdXR0b24p
OwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVy
bGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQotewotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmNsZWFyQWN0aXZlSGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAoIW1fYWN0aXZlSGlnaGxpZ2h0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdo
bGlnaHQgPT0gbV9hY3RpdmVIaWdobGlnaHQpCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9u
QnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxsUG90ZW50
aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkKLXsKLSAgICBWZWN0b3I8
UmVmUHRyPEhpZ2hsaWdodD4+IGhpZ2hsaWdodHNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8mIGhp
Z2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0
LT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQo
aGlnaGxpZ2h0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIWhpZ2hsaWdodHNUb1JlbW92ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5yZW1vdmUoaGlnaGxpZ2h0c1Rv
UmVtb3ZlLnRha2VMYXN0KCkpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKLXsKLSAgICBpZiAoIURhdGFEZXRlY3RvcnNM
aWJyYXJ5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdo
dD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7Ci0KLSAgICBGcmFtZSogbWFpbkZyYW1lID0gbV93
ZWJQYWdlLm1haW5GcmFtZSgpOwotICAgIEZyYW1lVmlldyYgbWFpbkZyYW1lVmlldyA9ICptYWlu
RnJhbWUtPnZpZXcoKTsKLQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGF1dG8m
IHJhbmdlcyA9IGZyYW1lLT5lZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygp
OwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIGNob2tlIGlmIHRoZSByYW5nZSB3cmFwcyBhcm91bmQgdGhlIGVkZ2Ug
b2YgdGhlIHZpZXcuCi0gICAgICAgICAgICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNh
c2U/Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZv
clJhbmdlKCpyYW5nZSk7Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gdGhlIG1haW4gZG9j
dW1lbnQncyBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3MgYSBs
aXR0bGUgY3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVuIHdpbmRvd1RvQ29u
dGVudHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNwYWNlLgotICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0
byBTY3JvbGxWaWV3IGZvciBjb250ZW50c1RvRG9jdW1lbnQoKS4gUmlnaHQgbm93LCBjb250ZW50
c1RvUm9vdFZpZXcoKSBpcwotICAgICAgICAgICAgLy8gbm90IGVxdWl2YWxlbnQgdG8gd2hhdCB3
ZSBuZWVkIHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50SW5zZXQgb3IgYSBoZWFkZXIgYmFubmVy
LgotICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1
bWVudCgpLnZpZXcoKTsKLSAgICAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihtYWluRnJhbWVW
aWV3LndpbmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KHJlY3Qu
bG9jYXRpb24oKSkpKTsKLQotICAgICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJlY3Q7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihE
REhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rp
b24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3Qo
KSwgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwsIE5PLCBZRVMpKTsKLQotICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5h
ZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoKnRoaXMsIGRkSGlnaGxpZ2h0
LCByYW5nZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5
cGVQcmVzZXJ2aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywg
SGlnaGxpZ2h0OjpUeXBlOjpUZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgZGlkUmVidWlsZFBvdGVu
dGlhbEhpZ2hsaWdodHMoKTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpi
dWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFy
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBu
ZXdQb3RlbnRpYWxIaWdobGlnaHRzOwotCi0gICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0czsKLSAg
ICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5zaXplKCkp
OwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fd2ViUGFnZS5jb3JlUGFn
ZSgpLT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7
Ci0gICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lKCk7Ci0gICAg
ICAgIEZyYW1lVmlldyYgbWFpbkZyYW1lVmlldyA9ICptYWluRnJhbWUtPnZpZXcoKTsKLSAgICAg
ICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVu
dCgpLnZpZXcoKTsKLQotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rp
b25SZWN0cykgewotICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJbnRS
ZWN0KHJlY3QpOwotICAgICAgICAgICAgY3VycmVudFJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1l
Vmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhjdXJy
ZW50UmVjdC5sb2NhdGlvbigpKSkpOwotICAgICAgICAgICAgY2dSZWN0cy5hcHBlbmQoKENHUmVj
dCljdXJyZW50UmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGln
aGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihu
dWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERI
aWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bCwgTk8sIFlFUykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdo
bGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGln
aHQsIHNlbGVjdGlvblJhbmdlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXBsYWNlSGln
aGxpZ2h0c09mVHlwZVByZXNlcnZpbmdFcXVpdmFsZW50SGlnaGxpZ2h0cyhuZXdQb3RlbnRpYWxI
aWdobGlnaHRzLCBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbik7Ci0KLSAgICBkaWRSZWJ1aWxk
UG90ZW50aWFsSGlnaGxpZ2h0cygpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OnJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRIaWdobGlnaHRz
KEhhc2hTZXQ8UmVmUHRyPEhpZ2hsaWdodD4+JiBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLCBIaWdo
bGlnaHQ6OlR5cGUgdHlwZSkKLXsKLSAgICAvLyBJZiBhbnkgb2xkIEhpZ2hsaWdodHMgYXJlIGVx
dWl2YWxlbnQgKGJ5IFJhbmdlKSB0byBhIG5ldyBIaWdobGlnaHQsIHJldXNlIHRoZSBvbGQKLSAg
ICAvLyBvbmUgc28gdGhhdCBhbnkgbWV0YWRhdGEgaXMgcmV0YWluZWQuCi0gICAgSGFzaFNldDxS
ZWZQdHI8SGlnaGxpZ2h0Pj4gcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0czsKLQotICAgIGZvciAo
YXV0byYgb2xkSGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlm
IChvbGRIaWdobGlnaHQtPnR5cGUoKSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZm9yIChhdXRvJiBuZXdIaWdobGlnaHQgOiBuZXdQb3RlbnRpYWxIaWdobGlnaHRz
KSB7Ci0gICAgICAgICAgICBpZiAoaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQob2xkSGlnaGxpZ2h0
LmdldCgpLCBuZXdIaWdobGlnaHQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgb2xkSGlnaGxp
Z2h0LT5zZXREREhpZ2hsaWdodChuZXdIaWdobGlnaHQtPmRkSGlnaGxpZ2h0KCkpOwotCi0gICAg
ICAgICAgICAgICAgcmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQob2xkSGlnaGxpZ2h0KTsK
LSAgICAgICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZShuZXdIaWdobGln
aHQpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKHR5cGUpOwot
Ci0gICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLmFkZChuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmJl
Z2luKCksIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuZW5kKCkpOwotICAgIG1fcG90ZW50aWFsSGln
aGxpZ2h0cy5hZGQocmV1c2VkUG90ZW50aWFsSGlnaGxpZ2h0cy5iZWdpbigpLCByZXVzZWRQb3Rl
bnRpYWxIaWdobGlnaHRzLmVuZCgpKTsKLX0KLQotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkKLXsKLSAgICByZXR1cm4gKG1faXNU
ZXh0T25seSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpKSB8
fCBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7Ci19Ci0KLXZv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdo
dHMoKQotewotICAgIGlmIChtX3BvdGVudGlhbEhpZ2hsaWdodHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKLSAgICAgICAgICAgIG1fd2ViUGFnZS5tYWluRnJh
bWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2
aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2Vk
RnJhbWUoKS5pc0VtcHR5KCkgJiYgIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0KLSAgICBib29s
IG1vdXNlSXNPdmVyQnV0dG9uOwotICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlz
T3ZlckJ1dHRvbik7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRl
T3ZlcmxheUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5
OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAg
IG1fc2VydmljZXNPdmVybGF5ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UubWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5
LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotfQotCi1WZWN0
b3I8UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVt
YmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV93ZWJQYWdl
LmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gVmVjdG9yPFJlZlB0
cjxSYW5nZT4+KCk7Ci0KLSAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCkuZWRpdG9yKCkuZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsK
LX0KLQotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoaWdobGlnaHRzQXJlRXF1aXZh
bGVudChjb25zdCBIaWdobGlnaHQqIGEsIGNvbnN0IEhpZ2hsaWdodCogYikKLXsKLSAgICBpZiAo
YSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPnR5cGUoKSA9PSBiLT50eXBlKCkgJiYgYXJl
UmFuZ2VzRXF1YWwoYS0+cmFuZ2UoKSwgYi0+cmFuZ2UoKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpI
aWdobGlnaHQqIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdW1iZXJI
aWdobGlnaHRDb250YWluaW5nU2VsZWN0aW9uSGlnaGxpZ2h0KEhpZ2hsaWdodCYgc2VsZWN0aW9u
SGlnaGxpZ2h0KQotewotICAgIGlmIChzZWxlY3Rpb25IaWdobGlnaHQudHlwZSgpICE9IEhpZ2hs
aWdodDo6VHlwZTo6U2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5z
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmVmUHRyPFJhbmdlPiBhY3RpdmVTZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghYWN0aXZlU2VsZWN0aW9uUmFu
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgp
ICE9IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+cmFuZ2UoKS0+Y29udGFpbnMoKmFjdGl2ZVNl
bGVjdGlvblJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlSGln
aGxpZ2h0QnV0dG9uKQotewotICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0g
ZmFsc2U7Ci0KLSAgICBSZWZQdHI8SGlnaGxpZ2h0PiBuZXdBY3RpdmVIaWdobGlnaHQ7Ci0KLSAg
ICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pIHsK
LSAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYSBuZXcgYWN0aXZlIGhpZ2hs
aWdodCwgYW5kIGl0J3MKLSAgICAgICAgICAgIC8vIGEgdGVsZXBob25lIG51bWJlciBoaWdobGln
aHQsIHByZWZlciB0aGF0IG92ZXIgdGhpcyBzZWxlY3Rpb24gaGlnaGxpZ2h0LgotICAgICAgICAg
ICAgaWYgKG5ld0FjdGl2ZUhpZ2hsaWdodCAmJiBuZXdBY3RpdmVIaWdobGlnaHQtPnR5cGUoKSA9
PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgLy8gSWYgdGhpcyBoaWdobGlnaHQgaGFzIG5vIGNvbXBhdGli
bGUgc2VydmljZXMsIGl0IGNhbid0IGJlIGFjdGl2ZS4KLSAgICAgICAgICAgIGlmICghaGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBoaWdobGlnaHQgaXNuJ3QgaG92ZXJlZCwgaXQg
Y2FuJ3QgYmUgYWN0aXZlLgotICAgICAgICBib29sIG1vdXNlSXNPdmVyQnV0dG9uOwotICAgICAg
ICBpZiAoIW1vdXNlSXNPdmVySGlnaGxpZ2h0KCpoaWdobGlnaHQsIG1vdXNlSXNPdmVyQnV0dG9u
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5ld0FjdGl2ZUhpZ2hsaWdodCA9
IGhpZ2hsaWdodDsKLSAgICAgICAgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gPSBt
b3VzZUlzT3ZlckJ1dHRvbjsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgbmV3IGFjdGl2ZSBoaWdo
bGlnaHQgaXMgYSBzZWxlY3Rpb24gaGlnaGxpZ2h0IHRoYXQgaXMgY29tcGxldGVseSBjb250YWlu
ZWQKLSAgICAvLyBieSBvbmUgb2YgdGhlIHBob25lIG51bWJlciBoaWdobGlnaHRzLCB3ZSdsbCBt
YWtlIHRoZSBwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGFjdGl2ZSBldmVuIGlmIGl0J3Mgbm90IGhv
dmVyZWQuCi0gICAgaWYgKG5ld0FjdGl2ZUhpZ2hsaWdodCAmJiBuZXdBY3RpdmVIaWdobGlnaHQt
PnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikgewotICAgICAgICBpZiAoSGln
aGxpZ2h0KiBjb250YWluZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQgPSBmaW5kVGVsZXBob25l
TnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCgqbmV3QWN0aXZlSGln
aGxpZ2h0KSkgewotICAgICAgICAgICAgbmV3QWN0aXZlSGlnaGxpZ2h0ID0gY29udGFpbmVkVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0OwotCi0gICAgICAgICAgICAvLyBXZSB3aWxsIGFsd2F5cyBp
bml0aWFsbHkgY2hvb3NlIHRoZSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCBvdmVyIHRoZSBz
ZWxlY3Rpb24gaGlnaGxpZ2h0IGlmIHRoZQotICAgICAgICAgICAgLy8gbW91c2UgaXMgb3ZlciB0
aGUgdGVsZXBob25lIG51bWJlciBoaWdobGlnaHQncyBidXR0b24sIHNvIHdlIGtub3cgdGhhdCBp
dCdzIG5vdCBob3ZlcmVkIGlmIHdlIGdvdCBoZXJlLgotICAgICAgICAgICAgbW91c2VJc092ZXJB
Y3RpdmVIaWdobGlnaHRCdXR0b24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghdGhpcy0+aGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQobV9hY3RpdmVIaWdobGlnaHQuZ2V0KCks
IG5ld0FjdGl2ZUhpZ2hsaWdodC5nZXQoKSkpIHsKLSAgICAgICAgLy8gV2hlbiB0cmFuc2l0aW9u
aW5nIHRvIGEgbmV3IGhpZ2hsaWdodCwgd2UgbWlnaHQgZW5kIHVwIGluIGRldGVybWluZUFjdGl2
ZUhpZ2hsaWdodCBtdWx0aXBsZSB0aW1lcwotICAgICAgICAvLyBiZWZvcmUgdGhlIG5ldyBoaWdo
bGlnaHQgYWN0dWFsbHkgYmVjb21lcyBhY3RpdmUuIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgbmV4
dC1idXQtbm90LXlldC1hY3RpdmUKLSAgICAgICAgLy8gaGlnaGxpZ2h0LCBhbmQgb25seSByZXNl
dCB0aGUgYWN0aXZlIGhpZ2hsaWdodCBoeXN0ZXJlc2lzIHdoZW4gdGhhdCBjaGFuZ2VzLgotICAg
ICAgICBpZiAobV9uZXh0QWN0aXZlSGlnaGxpZ2h0ICE9IG5ld0FjdGl2ZUhpZ2hsaWdodCkgewot
ICAgICAgICAgICAgbV9uZXh0QWN0aXZlSGlnaGxpZ2h0ID0gbmV3QWN0aXZlSGlnaGxpZ2h0Owot
ICAgICAgICAgICAgbV9uZXh0QWN0aXZlSGlnaGxpZ2h0Q2hhbmdlVGltZSA9IHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6Om5vdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotCi0gICAgICAgIGlmIChtX2FjdGl2
ZUhpZ2hsaWdodCkgewotICAgICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQtPmZhZGVPdXQoKTsK
LSAgICAgICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGF1dG8gcmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biA9IHRo
aXMtPnJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24obmV3QWN0aXZlSGln
aGxpZ2h0LmdldCgpKTsKLSAgICAgICAgaWYgKHJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNo
b3VsZEJlU2hvd24gPiBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpkdXJhdGlvbjo6emVybygp
KSB7Ci0gICAgICAgICAgICBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyLnN0YXJ0T25l
U2hvdChyZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbV9u
ZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKLQotICAgICAgICBpZiAobV9hY3RpdmVIaWdo
bGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigpLmFkZENoaWxk
KG1fYWN0aXZlSGlnaGxpZ2h0LT5sYXllcigpKTsKLSAgICAgICAgICAgIG1fYWN0aXZlSGlnaGxp
Z2h0LT5mYWRlSW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldmVudCkKLXsKLSAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9zaXRp
b24oKSk7Ci0KLSAgICBib29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFs
c2U7Ci0gICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxp
Z2h0QnV0dG9uKTsKLQotICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBi
dXR0b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9y
ZSB0aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0
QnV0dG9uKSB7Ci0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBt
b3VzZSBsaWZ0ZWQgd2hpbGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0
IHdlbnQgZG93biBvbiwgdGhlbiB0aGF0IGlzIGEgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkKSB7Ci0gICAgICAgIFJlZlB0cjxIaWdo
bGlnaHQ+IG1vdXNlRG93bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGln
aGxpZ2h0OwotICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51
bGxwdHI7Ci0KLSAgICAgICAgbV9sYXN0TW91c2VVcFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5
X2Nsb2NrOjpub3coKTsKLQotICAgICAgICBpZiAobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRC
dXR0b24gJiYgbW91c2VEb3duSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBoYW5kbGVDbGljayht
X21vdXNlUG9zaXRpb24sICptb3VzZURvd25IaWdobGlnaHQpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB0aGUgbW91c2UgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNr
aW5nIGEgcG90ZW50aWFsIGNsaWNrLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay4KLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQpIHsKLSAgICAgICAgaWYg
KG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZl
SGlnaGxpZ2h0QnV0dG9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgbV9j
dXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRo
ZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNs
aWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2Vk
KSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhp
Z2hsaWdodEJ1dHRvbikgewotICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25I
aWdobGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFt
ZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAoZnJhbWUuaXNNYWluRnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMo
KTsKLSAgICBidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpOwotCi0gICAgYm9vbCBtb3VzZUlzT3Zl
ckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbjsKLSAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOwotfQotCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50LCBIaWdo
bGlnaHQmIGhpZ2hsaWdodCkKLXsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFn
ZS5tYWluRnJhbWVWaWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93
KGNsaWNrUG9pbnQpOwotCi0gICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpU
eXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMgPSB0
ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAgICAgICBzZWxlY3RlZFRlbGVwaG9u
ZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51bWJlclJhbmdlcy5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25lTnVtYmVyUmFuZ2VzKQotICAgICAg
ICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChyYW5nZS0+dGV4dCgpKTsKLQot
ICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rp
b24oKSwgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7Ci0gICAgfSBlbHNl
IGlmIChoaWdobGlnaHQudHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVy
KQotICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGlnaGxpZ2h0
LnJhbmdlKCktPnRleHQoKSwgd2luZG93UG9pbnQpOwotfQotCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENyZWF0ZUhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsK
LSAgICBBU1NFUlQoIW1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKLSAgICBtX2hp
Z2hsaWdodHMuYWRkKGhpZ2hsaWdodCk7Ci19Ci0KLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6d2lsbERlc3Ryb3lIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAg
QVNTRVJUKG1faGlnaGxpZ2h0cy5jb250YWlucyhoaWdobGlnaHQpKTsKLSAgICBtX2hpZ2hsaWdo
dHMucmVtb3ZlKGhpZ2hsaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykK
</data>
<flag name="review"
          id="264292"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>