<?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>202352</bug_id>
          
          <creation_ts>2019-09-28 16:00:21 -0700</creation_ts>
          <short_desc>[LFC][IFC] Remove InlineLayout abstraction layer</short_desc>
          <delta_ts>2019-09-29 08:08:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit 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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1575096</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-09-28 16:00:21 -0700</bug_when>
    <thetext>one too many layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575097</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-28 16:00:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/55811532&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575098</commentid>
    <comment_count>2</comment_count>
      <attachid>379796</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-28 16:13:52 -0700</bug_when>
    <thetext>Created attachment 379796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575119</commentid>
    <comment_count>3</comment_count>
      <attachid>379799</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-28 20:41:10 -0700</bug_when>
    <thetext>Created attachment 379799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575122</commentid>
    <comment_count>4</comment_count>
      <attachid>379802</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-28 21:28:04 -0700</bug_when>
    <thetext>Created attachment 379802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575145</commentid>
    <comment_count>5</comment_count>
      <attachid>379802</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-29 08:08:48 -0700</bug_when>
    <thetext>Comment on attachment 379802
Patch

Clearing flags on attachment: 379802

Committed r250490: &lt;https://trac.webkit.org/changeset/250490&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575146</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-29 08:08:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379796</attachid>
            <date>2019-09-28 16:13:52 -0700</date>
            <delta_ts>2019-09-28 20:41:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202352-20190928161348.patch</filename>
            <type>text/plain</type>
            <size>61244</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhlNDg0MDI0NzA5ZWM0
MzY4ZjI4NzhkOGI3ZTczMmZhYzdmOGUwYS4uZDM5NDdjNWRhMDNjYWFhNThiYjQ2NjVmNjNjMTkw
YWMwN2Y2ZmQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA5LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW1vdmUg
SW5saW5lTGF5b3V0IGFic3RyYWN0aW9uIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzNTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1
ODExNTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW5saW5lTGF5b3V0IGZ1bmN0aW9ucyB0byBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC4g
Tm93IGlubGluZSBsYXlvdXQgaGFzCisgICAgICAgIDEuIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IC1oaWdoIGxldmVsIGxheW91dCBhbmQgcHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uLCBpbmxp
bmUgY29udGVudCBjb2xsZWN0aW9uLCBkaXNwbGF5IGJveCBjb25zdHJ1Y3Rpb24KKyAgICAgICAg
Mi4gTGluZUxheW91dCAtcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgaW5saW5lIGNvbnRlbnQgb24g
dGhlIGN1cnJlbnQgbGluZSAocGFydGlhbCBpbmxpbmUgY29udGVudCBoYW5kbGluZywgbGluZSBi
cmVha2luZyBldGMpCisgICAgICAgIDMuIExpbmUgLXJlcHJlc2VudHMgYW4gYWN0dWFsIGxpbmUs
IHR1cm5zIGlubGluZSBjb250ZW50IGludG8gcnVucy4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJ
bkZsb3dDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVk
SW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxDb25zdHJhaW50c0ZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0
RGlzcGxheUJveGVzRm9yTGluZSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0U3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6SW5saW5lTGF5b3V0Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlv
dXQ6OmZvcm1hdHRpbmdSb290IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Zm9ybWF0dGluZ1N0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OklubGluZUxheW91dDo6d2lkdGhDb25zdHJhaW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU6OmlubGluZUl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVMYXlvdXQ6OkxpbmVJbnB1dDo6TGluZUlucHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6TGluZUxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmNvbW1pdFBlbmRpbmdDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50Ojpy
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRD
b250ZW50Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxh
eW91dDo6VW5jb21taXR0ZWRDb250ZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50Ojp3aWR0aCBjb25zdCk6CisK
IDIwMTktMDktMjggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJRkNdIE1vdmUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgdG8gTGluZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA1NjExNjM2ZGRhZmYzN2I3M2RmYWIwMDgyOWQ1MzQyYTM1NWY1MTJkLi5mOTU4NmZhMDQ4
Y2I3ZWVkMjg2NTliYTA2MGI4ZGY4YTEwZTJiZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQxOSwx
MiArMTQxOSwxMiBAQCBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKIGxheW91dC9m
bG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
SW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZVRleHRJdGVtLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2OTBiZDJkMjVj
MmM4YTUzN2M1NTM4ODFiYzU2YjFiNTE0NDE0Y2JhLi4wOGUyYTBhMmMyYTlhZTc4NDU4YjMzYmE2
MjhkYWZkMmM3NTY0NTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDAzLDYgKzIwMDMsNyBAQAogCQk2RjBDRDY5NTIyOUVE
MzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUu
aCAqLzsgfTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjFDQzFERDIy
NUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJCRUEgLyog
TGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjI2RUI0ODIzNDAw
NEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGlu
ZUxpbmVMYXlvdXQuaCAqLzsgfTsKIAkJNkYzRTFGNjIyMTM2MTQyMDAwQTY1QTA4IC8qIEZsb2F0
Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjNF
MUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyog
TGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NBM0NBMjA4QzJCMkUw
MDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTkxNTksOSArOTE2MCwxMCBAQAogCQk2RjFDQzFERDIyNUY4QjQy
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0
ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2
NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
MjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjVCMjAwMjIwQTg1
QUIwMDAwMDExQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElu
bGluZUxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZUxheW91dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJF
QSAvKiBMYXlvdXRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dENvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJC
RUEgLyogTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBJ
bmxpbmVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGlu
ZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3
Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0
MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY0ODIsNyArMTY0ODQsNiBAQAogCQkJCTZGN0NBM0M5MjA4QzJC
MkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNkY3Q0Ez
QzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCiAJCQkJ
NkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwICovLAotCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovLAogCQkJCTZGMTBCMDg2MjJCODU2OEQwMDkwRTY5
QyAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8sCiAJCQkJMTE1Q0ZBN0Qy
MDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJMTE1
Q0ZBN0MyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oICovLApAQCAt
MTY0OTEsNiArMTY0OTIsOCBAQAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxp
bmVJdGVtLmggKi8sCiAJCQkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmUu
Y3BwICovLAogCQkJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8s
CisJCQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVMYXlvdXQuaCAqLywK
KwkJCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIgLyogSW5saW5lTGluZUxheW91dC5jcHAgKi8s
CiAJCQkJNkZCNDdFNjEyMjc3NDI1QTAwQzdCQ0IwIC8qIElubGluZUxpbmVCb3guaCAqLywKIAkJ
CQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuY3BwICovLAog
CQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICovLApA
QCAtMjk2OTcsNiArMjk3MDAsNyBAQAogCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAw
RTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
MjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkYyNkVCNDgyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxp
bmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQy
MThCNkI5QUIwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGRmYWUz
Mjg5YjQ3NjM2ZTA2Yzk3NWM3MTA2MjFhMGM0ZjJmNmZhMmMuLmNmNDI4MDVmNWFmZGM2MTU1NWI0
MjVkMThhY2UwMWI4OTUzY2NhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTg4LDEwICs4OCw0MSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbkZsb3dDb250ZW50KCkKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVSdW5zKCkuY2xl
YXIoKTsKIAogICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0KCp0
aGlzLCB1c2VkSG9yaXpvbnRhbFZhbHVlcykubGF5b3V0KGZvcm1hdHRpbmdTdGF0ZSgpLmlubGlu
ZUl0ZW1zKCkpOworICAgIGxpbmVMYXlvdXQodXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIExP
R19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAt
PiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290
KCkgPDwgIikiKTsKIH0KIAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91
dChVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBhdXRv
JiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CisgICAgYXV0
byBsaW5lTG9naWNhbFRvcCA9IGdlb21ldHJ5Rm9yQm94KHJvb3QoKSkuY29udGVudEJveFRvcCgp
OworICAgIExpbmVMYXlvdXQ6OkluZGV4QW5kUmFuZ2UgY3VycmVudElubGluZUl0ZW07CisgICAg
d2hpbGUgKGN1cnJlbnRJbmxpbmVJdGVtLmluZGV4IDwgaW5saW5lSXRlbXMuc2l6ZSgpKSB7Cisg
ICAgICAgIGF1dG8gbGluZUNvbnN0cmFpbnRzID0gaW5pdGlhbENvbnN0cmFpbnRzRm9yTGluZSh1
c2VkSG9yaXpvbnRhbFZhbHVlcywgbGluZUxvZ2ljYWxUb3ApOworICAgICAgICBhdXRvIGxpbmVJ
bnB1dCA9IExpbmVMYXlvdXQ6OkxpbmVJbnB1dCB7IGxpbmVDb25zdHJhaW50cywgcm9vdCgpLnN0
eWxlKCkudGV4dEFsaWduKCksIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVtcyB9OworICAg
ICAgICBhdXRvIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0IHsgKnRoaXMsIGxpbmVJbnB1dCB9Owor
CisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0LmxheW91dCgpOworICAgICAg
ICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmVDb250ZW50LCB1c2VkSG9yaXpvbnRhbFZhbHVl
cyk7CisKKyAgICAgICAgaWYgKGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQpIHsKKyAgICAgICAg
ICAgIGN1cnJlbnRJbmxpbmVJdGVtID0geyBsaW5lQ29udGVudC5sYXN0Q29tbWl0dGVkLT5pbmRl
eCArIDEsIFdURjo6bnVsbG9wdCB9OworICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBsaW5l
Q29udGVudC5saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIEZsb2F0cyBwcmV2ZW50ZWQgdXMgcGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUg
bGluZS4KKyAgICAgICAgICAgIEFTU0VSVChsaW5lSW5wdXQuaW5pdGlhbENvbnN0cmFpbnRzLmxp
bmVJc0NvbnN0cmFpbmVkQnlGbG9hdCk7CisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBuZXh0IGxp
bmUgYmVsb3cgdGhlIGludHJ1c2l2ZSBmbG9hdC4KKyAgICAgICAgICAgIGF1dG8gZmxvYXRpbmdD
b250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRl
KCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMg
PSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMoeyBsaW5lTG9naWNhbFRvcCB9KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQgfHwgZmxvYXRDb25zdHJhaW50cy5y
aWdodCk7CisgICAgICAgICAgICBzdGF0aWMgYXV0byBpbmlmaXRlUG9pbnQgPSBQb2ludEluQ29u
dGV4dFJvb3Q6Om1heCgpOworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsZWZ0IGFuZCByaWdo
dCBjb25zdHJhaW50cywgd2UgbmVlZCB0byBwaWNrIHRoZSBvbmUgdGhhdCdzIGNsb3NlciB0byB0
aGUgY3VycmVudCBsaW5lLgorICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihm
bG9hdENvbnN0cmFpbnRzLmxlZnQudmFsdWVPcihpbmlmaXRlUG9pbnQpLnksIGZsb2F0Q29uc3Ry
YWludHMucmlnaHQudmFsdWVPcihpbmlmaXRlUG9pbnQpLnkpOworICAgICAgICAgICAgQVNTRVJU
KGxpbmVMb2dpY2FsVG9wIDwgaW5pZml0ZVBvaW50LnkpOworICAgICAgICB9CisgICAgfQorfQor
CiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJv
b3QoY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIFVzZWRIb3Jpem9udGFsVmFsdWVz
IHVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGljYWxWYWx1ZXMgdXNlZFZlcnRpY2FsVmFs
dWVzKQogewogICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNGbG9hdGluZ1Bvc2l0
aW9uZWQoKSB8fCBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNJbmxpbmVCbG9ja0JveCgpKTsKQEAg
LTE4Myw3ICsyMTQsNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbgogICAgICAgICAgICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoKTsKICAgICAgICAgfQogICAg
ICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBV
c2VkSG9yaXpvbnRhbFZhbHVlczo6Q29uc3RyYWludHMgeyB7IH0sIGF2YWlsYWJsZVdpZHRoIH0g
fTsKLSAgICAgICAgcmV0dXJuIElubGluZUxheW91dCgqdGhpcywgdXNlZEhvcml6b250YWxWYWx1
ZXMpLmNvbXB1dGVkSW50cmluc2ljV2lkdGgoZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMo
KSk7CisgICAgICAgIHJldHVybiBjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludCh1
c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgfTsKIAogICAgIGF1dG8gY29uc3RyYWludHMgPSBn
ZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IG1heGltdW1MaW5lV2lk
dGgoMCksIG1heGltdW1MaW5lV2lkdGgoTGF5b3V0VW5pdDo6bWF4KCkpIH0pOwpAQCAtMTkxLDYg
KzIyMiwyNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbgogICAgIHJldHVybiBjb25zdHJhaW50
czsKIH0KIAorTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250
YWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgYXV0byYgaW5saW5lSXRlbXMgPSBmb3JtYXR0aW5nU3Rh
dGUoKS5pbmxpbmVJdGVtcygpOworICAgIExheW91dFVuaXQgbWF4aW11bUxpbmVXaWR0aDsKKyAg
ICBMaW5lTGF5b3V0OjpJbmRleEFuZFJhbmdlIGN1cnJlbnRJbmxpbmVJdGVtOworICAgIHdoaWxl
IChjdXJyZW50SW5saW5lSXRlbS5pbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkgeworICAgICAg
ICAvLyBPbmx5IHRoZSBob3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3
aGVuIGNvbXB1dGluZyBpbnRyaW5zaWMgd2lkdGguCisgICAgICAgIGF1dG8gaW5pdGlhbExpbmVD
b25zdHJhaW50cyA9IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyB7IHsgfSwgdXNlZEhvcml6b250
YWxWYWx1ZXMuY29uc3RyYWludHMud2lkdGgsIGZhbHNlLCB7IH0gfTsKKyAgICAgICAgYXV0byBs
aW5lSW5wdXQgPSBMaW5lTGF5b3V0OjpMaW5lSW5wdXQgeyBpbml0aWFsTGluZUNvbnN0cmFpbnRz
LCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMgfTsKKworICAgICAgICBhdXRvIGxpbmVD
b250ZW50ID0gTGluZUxheW91dCgqdGhpcywgbGluZUlucHV0KS5sYXlvdXQoKTsKKworICAgICAg
ICBjdXJyZW50SW5saW5lSXRlbSA9IHsgbGluZUNvbnRlbnQubGFzdENvbW1pdHRlZC0+aW5kZXgg
KyAxLCB7IH0gfTsKKyAgICAgICAgTGF5b3V0VW5pdCBmbG9hdHNXaWR0aDsKKyAgICAgICAgZm9y
IChhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5mbG9hdHMpCisgICAgICAgICAgICBmbG9h
dHNXaWR0aCArPSBnZW9tZXRyeUZvckJveChmbG9hdEl0ZW0tPmxheW91dEJveCgpKS5tYXJnaW5C
b3hXaWR0aCgpOworICAgICAgICBtYXhpbXVtTGluZVdpZHRoID0gc3RkOjptYXgobWF4aW11bUxp
bmVXaWR0aCwgZmxvYXRzV2lkdGggKyBsaW5lQ29udGVudC5saW5lQm94LmxvZ2ljYWxXaWR0aCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIG1heGltdW1MaW5lV2lkdGg7Cit9CisKIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290
KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jp
em9udGFsVmFsdWVzKQogewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zv
cm1hdHRpbmdDb250ZXh0KCkpOwpAQCAtMzExLDYgKzM2MywxMzUgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoKQogICAgIH0KIH0KIAorTGluZTo6
SW5pdGlhbENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsQ29uc3Ry
YWludHNGb3JMaW5lKFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzLCBj
b25zdCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKQoreworICAgIGF1dG8gbGluZUxvZ2ljYWxM
ZWZ0ID0gZ2VvbWV0cnlGb3JCb3gocm9vdCgpKS5jb250ZW50Qm94TGVmdCgpOworICAgIGF1dG8g
YXZhaWxhYmxlV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cy53aWR0aDsK
KyAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZhbHNlOworCisgICAgYXV0byBm
bG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0
aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAgICAvLyBDaGVjayBmb3IgaW50cnVkaW5n
IGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUgd2lkdGggZm9yIHRoaXMg
bGluZSBhY2NvcmRpbmdseS4KKyAgICBpZiAoIWZsb2F0aW5nQ29udGV4dC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFp
bnRzKHsgbGluZUxvZ2ljYWxUb3AgfSk7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZXNlIGNvbnN0
cmFpbnRzIGFjdHVhbGx5IHB1dCBsaW1pdGF0aW9uIG9uIHRoZSBsaW5lLgorICAgICAgICBpZiAo
ZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBsaW5l
TG9naWNhbExlZnQpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLmxlZnQgPSB7IH07CisK
KyAgICAgICAgYXV0byBsaW5lTG9naWNhbFJpZ2h0ID0gZ2VvbWV0cnlGb3JCb3gocm9vdCgpKS5j
b250ZW50Qm94UmlnaHQoKTsKKyAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQgJiYg
ZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbFJpZ2h0KQorICAgICAgICAg
ICAgZmxvYXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsKKworICAgICAgICBsaW5lSXNDb25zdHJh
aW5lZEJ5RmxvYXQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQgfHwgZmxvYXRDb25zdHJhaW50cy5y
aWdodDsKKworICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3Ry
YWludHMucmlnaHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQt
PnggPD0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCk7CisgICAgICAgICAgICBhdmFpbGFibGVX
aWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggLSBmbG9hdENvbnN0cmFpbnRzLmxlZnQt
Png7CisgICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQt
Png7CisgICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0KSB7CisgICAgICAg
ICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7
CisgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSAoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
IC0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0
Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+
PSBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBmbG9hdENv
bnN0cmFpbnRzLnJpZ2h0LT54IC0gbGluZUxvZ2ljYWxMZWZ0OworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwg
bGluZUxvZ2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCwgcXVpcmtzKCkubGluZUhlaWdodENvbnN0cmFpbnRzKHJvb3QoKSkgfTsKK30KKwordm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5l
TGF5b3V0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVz
ZWRIb3Jpem9udGFsVmFsdWVzKQoreworICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMt
PmZvcm1hdHRpbmdTdGF0ZSgpOworCisgICAgaWYgKCFsaW5lQ29udGVudC5mbG9hdHMuaXNFbXB0
eSgpKSB7CisgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsg
cm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9OworICAgICAg
ICAvLyBNb3ZlIGZsb2F0cyB0byB0aGVpciBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5mbG9hdHMpIHsKKyAgICAgICAgICAg
IGF1dG8mIGZsb2F0Qm94ID0gZmxvYXRJdGVtLT5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChmbG9hdEJveCk7Cisg
ICAgICAgICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgorICAgICAgICAgICAgYXV0
byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7CisgICAgICAgICAgICBkaXNwbGF5Qm94
LnNldFRvcExlZnQoeyBsaW5lQm94LmxvZ2ljYWxMZWZ0KCksIGxpbmVCb3gubG9naWNhbFRvcCgp
IH0pOworICAgICAgICAgICAgLy8gRmxvYXQgaXQuCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNl
dFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxvYXRCb3gpKTsKKyAg
ICAgICAgICAgIGZsb2F0aW5nQ29udGV4dC5hcHBlbmQoZmxvYXRCb3gpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQWRkIGZpbmFsIGRpc3BsYXkgcnVucyB0byBzdGF0ZS4KKyAgICBmb3Ig
KGF1dG8mIGxpbmVSdW4gOiBsaW5lQ29udGVudC5ydW5MaXN0KSB7CisgICAgICAgIC8vIElubGlu
ZSBsZXZlbCBjb250YWluZXJzICg8c3Bhbj4pIGRvbid0IGdlbmVyYXRlIGlubGluZSBydW5zLgor
ICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250YWluZXJTdGFydCgpIHx8IGxpbmVSdW4tPmlzQ29u
dGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9ybWF0dGluZ1N0
YXRlLmFkZElubGluZVJ1bihsaW5lUnVuLT5kaXNwbGF5UnVuKCkpOworICAgIH0KKworICAgIC8v
IENvbXB1dGUgYm94IGZpbmFsIGdlb21ldHJ5LgorICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZUNv
bnRlbnQucnVuTGlzdDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsaW5l
UnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgbGluZVJ1biA9IGxpbmVSdW5z
LmF0KGluZGV4KTsKKyAgICAgICAgYXV0byYgbG9naWNhbFJlY3QgPSBsaW5lUnVuLT5sb2dpY2Fs
UmVjdCgpOworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLT5sYXlvdXRCb3goKTsK
KyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxh
eW91dEJveCk7CisKKyAgICAgICAgaWYgKGxpbmVSdW4tPmlzTGluZUJyZWFrKCkpIHsKKyAgICAg
ICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChsb2dpY2FsUmVjdC50b3BMZWZ0KCkpOworICAg
ICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgobG9naWNhbFJlY3Qud2lkdGgo
KSk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQobG9naWNhbFJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJbmxpbmUgbGV2ZWwgYm94IChyZXBsYWNlZCBvciBpbmxpbmUtYmxvY2spCisgICAgICAg
IGlmIChsaW5lUnVuLT5pc0JveCgpKSB7CisgICAgICAgICAgICBhdXRvIHRvcExlZnQgPSBsb2dp
Y2FsUmVjdC50b3BMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9z
aXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQ
b3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7
CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9wTGVmdCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWlu
ZXIgc3RhcnQgKDxzcGFuPikKKyAgICAgICAgaWYgKGxpbmVSdW4tPmlzQ29udGFpbmVyU3RhcnQo
KSkgeworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExl
ZnQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElu
bGluZSBsZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+KQorICAgICAgICBpZiAobGluZVJ1bi0+
aXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bv
c2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gaW5mbG93T2Zmc2V0ID0gZ2VvbWV0
cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5
KGluZmxvd09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVW
ZXJ0aWNhbGx5KGluZmxvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIG1hcmdpbkJveFdpZHRoID0gbG9naWNhbFJlY3QubGVmdCgpIC0gZGlzcGxheUJv
eC5sZWZ0KCk7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdp
ZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgp
ICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOworICAgICAgICAgICAgLy8g
RklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOworICAgICAgICAgICAgZGlzcGxheUJveC5z
ZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVSdW4tPmlzVGV4dCgpKSB7Cisg
ICAgICAgICAgICBjb25zdCBMaW5lOjpSdW4qIHByZXZpb3VzTGluZVJ1biA9ICFpbmRleCA/IG51
bGxwdHIgOiBsaW5lUnVuc1tpbmRleCAtIDFdLmdldCgpOworICAgICAgICAgICAgLy8gRklYTUUg
dGFrZSBjb250ZW50IGJyZWFraW5nIGludG8gYWNjb3VudCB3aGVuIHBhcnQgb2YgdGhlIGxheW91
dCBib3ggaXMgb24gdGhlIHByZXZpb3VzIGxpbmUuCisgICAgICAgICAgICBhdXRvIGZpcnN0SW5s
aW5lUnVuRm9yTGF5b3V0Qm94ID0gIXByZXZpb3VzTGluZVJ1biB8fCAmcHJldmlvdXNMaW5lUnVu
LT5sYXlvdXRCb3goKSAhPSAmbGF5b3V0Qm94OworICAgICAgICAgICAgYXV0byBsb2dpY2FsV2lk
dGggPSBsaW5lUnVuLT5pc1Zpc3VhbGx5RW1wdHkoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxS
ZWN0LndpZHRoKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3gp
IHsKKyAgICAgICAgICAgICAgICAvLyBTZXR1cCBkaXNwbGF5IGJveCBmb3IgdGhlIGFzc29jaWF0
ZWQgbGF5b3V0IGJveC4KKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobG9n
aWNhbFJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hXaWR0aChsb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
Q29udGVudEJveEhlaWdodChsb2dpY2FsUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FIGZpeCBpdCBmb3IgbXVsdGlydW4vbXVsdGls
aW5lLgorICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGRpc3Bs
YXlCb3guY29udGVudEJveFdpZHRoKCkgKyBsb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRMaW5lQm94KGxpbmVDb250ZW50
LmxpbmVCb3gpOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IDk5MmYzNzBlYTRmNjE5MDY0M2UwYmU4NmE1NDRiZGQzMWYwMmYzNzQuLmM2YzgxMzFkOTRi
YWYwZTQwNTQ1YWYyOTVmODQyNjUyNGMzMzMxMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGlu
ZS5oIgorI2luY2x1ZGUgIklubGluZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDI5ICs1Miw2IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoKSBvdmVycmlkZTsKIAotICAgIGNsYXNzIElubGluZUxheW91dCB7
Ci0gICAgcHVibGljOgotICAgICAgICBJbmxpbmVMYXlvdXQoSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgIHZvaWQgbGF5b3V0KGNvbnN0IElu
bGluZUl0ZW1zJik7Ci0gICAgICAgIExheW91dFVuaXQgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aChj
b25zdCBJbmxpbmVJdGVtcyYpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTGluZTo6
SW5pdGlhbENvbnN0cmFpbnRzIGluaXRpYWxDb25zdHJhaW50c0ZvckxpbmUoY29uc3QgTGF5b3V0
VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0KLSAgICAgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgp
OyB9Ci0gICAgICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICAgICAgY29u
c3QgQ29udGFpbmVyJiBmb3JtYXR0aW5nUm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9y
bWF0dGluZ0NvbnRleHQucm9vdCgpOyB9Ci0gICAgICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYg
Zm9ybWF0dGluZ1N0YXRlKCkgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5mb3Jt
YXR0aW5nU3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRVbml0IHdpZHRoQ29uc3RyYWludCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMud2lkdGg7IH0K
LQotICAgICAgICBMaW5lQ29udGVudCBwbGFjZUlubGluZUl0ZW1zKGNvbnN0IExpbmVJbnB1dCYp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldHVwRGlzcGxheUJveGVzKGNvbnN0IExpbmVDb250ZW50
Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9p
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICAgICAgVXNlZEhvcml6b250YWxWYWx1ZXMgbV91
c2VkSG9yaXpvbnRhbFZhbHVlczsKLSAgICB9OwotCiAgICAgY2xhc3MgUXVpcmtzIDogcHVibGlj
IEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewogICAgIHB1YmxpYzoKICAgICAgICAgYm9vbCBs
aW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpSdW5MaXN0JikgY29uc3Q7CkBA
IC0xMDIsMjMgKzgwLDI2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRyeSgqdGhp
cyk7IH0KIAorICAgIHZvaWQgbGluZUxheW91dChVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAg
dm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiwgVXNlZEhvcml6b250
YWxWYWx1ZXMsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7CiAgICAgdm9pZCBjb21wdXRlSG9yaXpvbnRh
bEFuZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMsIFVz
ZWRWZXJ0aWNhbFZhbHVlcyk7CiAKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZv
cm1hdHRpbmdSb290KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICB2b2lk
IGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYsIFVz
ZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGljYWxWYWx1ZXMpOworICAgIExheW91dFVuaXQg
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoVXNlZEhvcml6b250YWxWYWx1ZXMp
IGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmLCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgdm9pZCBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNv
bnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGljYWxWYWx1ZXMpOwogICAg
IHZvaWQgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKTsKIAogICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKTsKKyAgICBMaW5lOjpJbml0
aWFsQ29uc3RyYWludHMgaW5pdGlhbENvbnN0cmFpbnRzRm9yTGluZShVc2VkSG9yaXpvbnRhbFZh
bHVlcywgY29uc3QgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7CisgICAgdm9pZCBzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXQ6OkxpbmVDb250ZW50JiwgVXNlZEhvcml6
b250YWxWYWx1ZXMpOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+
KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZv
cm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQog
ICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBzdHJ1Y3R1cmUgdGhhdCByZXF1aXJlcyBubyBm
cmllbmRpbmcuCiAgICAgZnJpZW5kIGNsYXNzIExpbmU7Ci0gICAgZnJpZW5kIGNsYXNzIElubGlu
ZUxheW91dDsKIH07CiAKIGlubGluZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
Okdlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWQ2MzZkNmFkZmRhOGMxNWVl
M2RlNzQwMDg1NzhiZTc3OGNhODhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCi0KLSNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9hdGlu
Z1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAi
SW5saW5lTGluZS5oIgotI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCi0jaW5jbHVkZSAiTGF5
b3V0U3RhdGUuaCIKLSNpbmNsdWRlICJUZXh0VXRpbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RhdGljIExheW91dFVuaXQgaW5saW5lSXRlbVdpZHRo
KGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCi17Ci0gICAg
aWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKSB7Ci0gICAgICAgIGF1dG8mIGlubGlu
ZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOwotICAgICAg
ICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29sbGFwc2VkKCkgPyBpbmxpbmVUZXh0SXRl
bS5zdGFydCgpICsgMSA6IGlubGluZVRleHRJdGVtLmVuZCgpOwotICAgICAgICByZXR1cm4gVGV4
dFV0aWw6OndpZHRoKGlubGluZVRleHRJdGVtLmxheW91dEJveCgpLCBpbmxpbmVUZXh0SXRlbS5z
dGFydCgpLCBlbmQsIGNvbnRlbnRMb2dpY2FsTGVmdCk7Ci0gICAgfQotCi0gICAgYXV0byYgbGF5
b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0KLSAgICBpZiAo
bGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBib3hHZW9t
ZXRyeS5tYXJnaW5Cb3hXaWR0aCgpOwotCi0gICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQot
ICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsKLQotICAgIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpblN0
YXJ0KCkgKyBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nTGVm
dCgpLnZhbHVlT3IoMCk7Ci0KLSAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luRW5kKCkgKyBib3hHZW9tZXRyeS5ib3Jk
ZXJSaWdodCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKLQotICAg
IC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykKLSAgICByZXR1
cm4gYm94R2VvbWV0cnkud2lkdGgoKTsKLX0KLQotc3RydWN0IEluZGV4QW5kUmFuZ2UgewotICAg
IHVuc2lnbmVkIGluZGV4IHsgMCB9OwotICAgIHN0cnVjdCBSYW5nZSB7Ci0gICAgICAgIHVuc2ln
bmVkIHN0YXJ0IHsgMCB9OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0gICAgfTsK
LSAgICBPcHRpb25hbDxSYW5nZT4gcGFydGlhbENvbnRleHQ7Ci19OwotCi1zdHJ1Y3QgTGluZUlu
cHV0IHsKLSAgICBMaW5lSW5wdXQoY29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiwgVGV4
dEFsaWduTW9kZSwgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRl
bXMmKTsKLSAgICBMaW5lSW5wdXQoY29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiwgSW5k
ZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMmKTsKLQotICAgIExp
bmU6OkluaXRpYWxDb25zdHJhaW50cyBpbml0aWFsQ29uc3RyYWludHM7Ci0gICAgVGV4dEFsaWdu
TW9kZSBob3Jpem9udGFsQWxpZ25tZW50OwotICAgIC8vIEZJWE1FIEFsdGVybmF0aXZlbHkgd2Ug
Y291bGQganVzdCBoYXZlIGEgc2Vjb25kIHBhc3Mgd2l0aCB2ZXJ0aWNhbCBwb3NpdGlvbmluZyAo
cHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uIG9wdHMgb3V0KSAKLSAgICBMaW5lOjpTa2lwQWxp
Z25tZW50IHNraXBBbGlnbm1lbnQgeyBMaW5lOjpTa2lwQWxpZ25tZW50OjpObyB9OwotICAgIElu
ZGV4QW5kUmFuZ2UgZmlyc3RJbmxpbmVJdGVtOwotICAgIGNvbnN0IElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtczsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBmbG9hdE1pbmltdW1Mb2dpY2FsQm90
dG9tOwotfTsKLQotTGluZUlucHV0OjpMaW5lSW5wdXQoY29uc3QgTGluZTo6SW5pdGlhbENvbnN0
cmFpbnRzJiBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxB
bGlnbm1lbnQsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1Byb2Nlc3MsIGNvbnN0IElubGluZUl0ZW1z
JiBpbmxpbmVJdGVtcykKLSAgICA6IGluaXRpYWxDb25zdHJhaW50cyhpbml0aWFsTGluZUNvbnN0
cmFpbnRzKQotICAgICwgaG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQot
ICAgICwgZmlyc3RJbmxpbmVJdGVtKGZpcnN0VG9Qcm9jZXNzKQotICAgICwgaW5saW5lSXRlbXMo
aW5saW5lSXRlbXMpCi17Ci19Ci0KLUxpbmVJbnB1dDo6TGluZUlucHV0KGNvbnN0IExpbmU6Oklu
aXRpYWxDb25zdHJhaW50cyYgaW5pdGlhbExpbmVDb25zdHJhaW50cywgSW5kZXhBbmRSYW5nZSBm
aXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQotICAgIDogaW5p
dGlhbENvbnN0cmFpbnRzKGluaXRpYWxMaW5lQ29uc3RyYWludHMpCi0gICAgLCBza2lwQWxpZ25t
ZW50KExpbmU6OlNraXBBbGlnbm1lbnQ6OlllcykKLSAgICAsIGZpcnN0SW5saW5lSXRlbShmaXJz
dFRvUHJvY2VzcykKLSAgICAsIGlubGluZUl0ZW1zKGlubGluZUl0ZW1zKQotewotfQotCi1zdHJ1
Y3QgTGluZUNvbnRlbnQgewotICAgIE9wdGlvbmFsPEluZGV4QW5kUmFuZ2U+IGxhc3RDb21taXR0
ZWQ7Ci0gICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IGZsb2F0czsKLSAgICBjb25zdCBM
aW5lOjpSdW5MaXN0IHJ1bkxpc3Q7Ci0gICAgY29uc3QgTGluZUJveCBsaW5lQm94OwotfTsKLQot
Y2xhc3MgTGluZUxheW91dCB7Ci1wdWJsaWM6Ci0gICAgTGluZUxheW91dChjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IExpbmVJbnB1dCYpOwotCi0gICAgTGluZUNvbnRlbnQg
bGF5b3V0KCk7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDsgfQotICAgIGVudW0gY2xhc3MgSXNFbmRPZkxpbmUgeyBObywgWWVzIH07Ci0gICAgSXNF
bmRPZkxpbmUgcGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICB2b2lkIGNv
bW1pdFBlbmRpbmdDb250ZW50KCk7Ci0gICAgTGluZUNvbnRlbnQgY2xvc2UoKTsKLSAgICAKLSAg
ICBzdHJ1Y3QgVW5jb21taXR0ZWRDb250ZW50IHsKLSAgICAgICAgc3RydWN0IFJ1biB7Ci0gICAg
ICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOwotICAgICAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGg7Ci0gICAgICAgIH07Ci0gICAgICAgIHZvaWQgYWRkKGNvbnN0IElu
bGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIHZvaWQgcmVzZXQo
KTsKLQotICAgICAgICBWZWN0b3I8UnVuPiBydW5zKCkgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1
bnM7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV91bmNvbW1pdHRl
ZFJ1bnMuaXNFbXB0eSgpOyB9Ci0gICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3VuY29tbWl0dGVkUnVucy5zaXplKCk7IH0KLSAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3Rv
cjxSdW4+IG1fdW5jb21taXR0ZWRSdW5zOwotICAgICAgICBMYXlvdXRVbml0IG1fd2lkdGg7Ci0g
ICAgfTsKLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0OwotICAgIGNvbnN0IExpbmVJbnB1dCYgbV9saW5lSW5wdXQ7Ci0gICAgTGlu
ZSBtX2xpbmU7Ci0gICAgTGluZUJyZWFrZXIgbV9saW5lQnJlYWtlcjsKLSAgICBib29sIG1fbGlu
ZUhhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKLSAgICBVbmNvbW1pdHRlZENvbnRlbnQgbV91
bmNvbW1pdHRlZENvbnRlbnQ7Ci0gICAgdW5zaWduZWQgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgeyAwIH07Ci0gICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IG1fZmxvYXRzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV9sZWFkaW5nUGFydGlhbElubGluZVRl
eHRJdGVtOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV90cmFpbGluZ1Bh
cnRpYWxJbmxpbmVUZXh0SXRlbTsKLX07Ci0KLXZvaWQgTGluZUxheW91dDo6VW5jb21taXR0ZWRD
b250ZW50OjphZGQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgpCi17Ci0gICAgbV91bmNvbW1pdHRlZFJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwg
bG9naWNhbFdpZHRoIH0pOwotICAgIG1fd2lkdGggKz0gbG9naWNhbFdpZHRoOwotfQotCi12b2lk
IExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6cmVzZXQoKQotewotICAgIG1fdW5jb21t
aXR0ZWRSdW5zLmNsZWFyKCk7Ci0gICAgbV93aWR0aCA9IDA7Ci19Ci0KLUxpbmVMYXlvdXQ6Okxp
bmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdD
b250ZXh0LCBjb25zdCBMaW5lSW5wdXQmIGxpbmVJbnB1dCkKLSAgICA6IG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgLCBtX2xpbmVJbnB1dChs
aW5lSW5wdXQpCi0gICAgLCBtX2xpbmUoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1
dC5pbml0aWFsQ29uc3RyYWludHMsIGxpbmVJbnB1dC5ob3Jpem9udGFsQWxpZ25tZW50LCBsaW5l
SW5wdXQuc2tpcEFsaWdubWVudCkKLSAgICAsIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0KGxpbmVJ
bnB1dC5pbml0aWFsQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KQotewotfQot
Ci12b2lkIExpbmVMYXlvdXQ6OmNvbW1pdFBlbmRpbmdDb250ZW50KCkKLXsKLSAgICBpZiAobV91
bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb21t
aXR0ZWRJbmxpbmVJdGVtQ291bnQgKz0gbV91bmNvbW1pdHRlZENvbnRlbnQuc2l6ZSgpOwotICAg
IGZvciAoYXV0byYgdW5jb21taXR0ZWRSdW4gOiBtX3VuY29tbWl0dGVkQ29udGVudC5ydW5zKCkp
Ci0gICAgICAgIG1fbGluZS5hcHBlbmQodW5jb21taXR0ZWRSdW4uaW5saW5lSXRlbSwgdW5jb21t
aXR0ZWRSdW4ubG9naWNhbFdpZHRoKTsKLSAgICBtX3VuY29tbWl0dGVkQ29udGVudC5yZXNldCgp
OwotfQotCi1MaW5lQ29udGVudCBMaW5lTGF5b3V0OjpjbG9zZSgpCi17Ci0gICAgQVNTRVJUKG1f
Y29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHx8IG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0KTsKLSAg
ICBpZiAoIW1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50KQotICAgICAgICByZXR1cm4gTGluZUNv
bnRlbnQgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUobV9mbG9hdHMpLCBtX2xpbmUuY2xvc2UoKSwg
bV9saW5lLmxpbmVCb3goKSB9OwotCi0gICAgYXV0byBsYXN0SW5saW5lSXRlbUluZGV4ID0gbV9s
aW5lSW5wdXQuZmlyc3RJbmxpbmVJdGVtLmluZGV4ICsgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgLSAxOwotICAgIE9wdGlvbmFsPEluZGV4QW5kUmFuZ2U6OlJhbmdlPiBwYXJ0aWFsQ29udGV4
dDsKLSAgICBpZiAobV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSkKLSAgICAgICAgcGFy
dGlhbENvbnRleHQgPSBJbmRleEFuZFJhbmdlOjpSYW5nZSB7IG1fdHJhaWxpbmdQYXJ0aWFsSW5s
aW5lVGV4dEl0ZW0tPnN0YXJ0KCksIG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0tPmxl
bmd0aCgpIH07Ci0KLSAgICBhdXRvIGxhc3RDb21taXRlZEl0ZW0gPSBJbmRleEFuZFJhbmdlIHsg
bGFzdElubGluZUl0ZW1JbmRleCwgcGFydGlhbENvbnRleHQgfTsKLSAgICByZXR1cm4gTGluZUNv
bnRlbnQgeyBsYXN0Q29tbWl0ZWRJdGVtLCBXVEZNb3ZlKG1fZmxvYXRzKSwgbV9saW5lLmNsb3Nl
KCksIG1fbGluZS5saW5lQm94KCkgfTsKLX0KLQotTGluZUxheW91dDo6SXNFbmRPZkxpbmUgTGlu
ZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17
Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fbGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbV91
bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKTsKLSAgICBhdXRvIGN1cnJlbnRMb2dpY2FsUmlnaHQg
PSBtX2xpbmUubGluZUJveCgpLmxvZ2ljYWxSaWdodCgpICsgbV91bmNvbW1pdHRlZENvbnRlbnQu
d2lkdGgoKTsKLSAgICBhdXRvIGl0ZW1Mb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoZm9y
bWF0dGluZ0NvbnRleHQoKSwgaW5saW5lSXRlbSwgY3VycmVudExvZ2ljYWxSaWdodCk7Ci0KLSAg
ICAvLyBGSVhNRTogRW5zdXJlIExpbmVDb250ZXh0Ojp0cmltbWFibGVXaWR0aCBpbmNsdWRlcyB1
bmNvbW1pdHRlZCBjb250ZW50IGlmIG5lZWRlZC4KLSAgICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRF
bXB0eSA9ICFtX2xpbmUuaGFzQ29udGVudCgpICYmICFtX2xpbmVIYXNJbnRydXNpdmVGbG9hdDsK
LSAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IG1fbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0
KGlubGluZUl0ZW0sIGl0ZW1Mb2dpY2FsV2lkdGgsIHsgYXZhaWxhYmxlV2lkdGgsIGN1cnJlbnRM
b2dpY2FsUmlnaHQsIG1fbGluZS50cmFpbGluZ1RyaW1tYWJsZVdpZHRoKCksIGxpbmVJc0NvbnNp
ZGVyZWRFbXB0eSB9KTsKLSAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2luZ09wcG9y
dHVuaXR5KQotICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwotCi0gICAgLy8gQ29udGVu
dCBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgbGluZS4KLSAgICBpZiAoYnJlYWtpbmdDb250ZXh0
LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OldyYXAp
Ci0gICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6WWVzOwotCi0gICAgLy8gUGFydGlhbCBjb250
ZW50IHN0YXlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgaWYgKGJyZWFraW5nQ29udGV4dC5i
cmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpTcGxpdCkg
ewotICAgICAgICBBU1NFUlQoaW5saW5lSXRlbS5pc1RleHQoKSk7Ci0gICAgICAgIGF1dG8mIGlu
bGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOwotICAg
ICAgICBhdXRvIHNwbGl0RGF0YSA9IFRleHRVdGlsOjpzcGxpdChpbmxpbmVUZXh0SXRlbS5sYXlv
dXRCb3goKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCks
IGl0ZW1Mb2dpY2FsV2lkdGgsIGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0KTsK
LSAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFydGlhbCB0cmFpbGluZyBpbmxpbmUgaXRlbS4KLSAg
ICAgICAgQVNTRVJUKCFtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtKTsKLSAgICAgICAg
bV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSA9IGlubGluZVRleHRJdGVtLnNwbGl0KHNw
bGl0RGF0YS5zdGFydCwgc3BsaXREYXRhLmxlbmd0aCk7Ci0gICAgICAgIG1fdW5jb21taXR0ZWRD
b250ZW50LmFkZCgqbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSwgc3BsaXREYXRhLmxv
Z2ljYWxXaWR0aCk7Ci0gICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7Ci0gICAgICAgIHJl
dHVybiBJc0VuZE9mTGluZTo6WWVzOwotICAgIH0KLQotICAgIEFTU0VSVChicmVha2luZ0NvbnRl
eHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6S2Vl
cCk7Ci0gICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKSB7Ci0gICAgICAgIGF1dG8mIGZsb2F0
Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICAgICAgLy8gU2hyaW5rIGF2YWlsYWJs
ZSBzcGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgot
ICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGZsb2F0Qm94KS5tYXJnaW5Cb3hXaWR0aCgpOwotICAgICAgICBmbG9hdEJveC5pc0xl
ZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IG1fbGluZS5tb3ZlTG9naWNhbExlZnQoZmxvYXRCb3hX
aWR0aCkgOiBtX2xpbmUubW92ZUxvZ2ljYWxSaWdodChmbG9hdEJveFdpZHRoKTsKLSAgICAgICAg
bV9mbG9hdHMuYXBwZW5kKG1ha2VXZWFrUHRyKGlubGluZUl0ZW0pKTsKLSAgICAgICAgKyttX2Nv
bW1pdHRlZElubGluZUl0ZW1Db3VudDsKLSAgICAgICAgbV9saW5lSGFzSW50cnVzaXZlRmxvYXQg
PSB0cnVlOwotICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6Ok5vOwotICAgIH0KLQotICAgIG1f
dW5jb21taXR0ZWRDb250ZW50LmFkZChpbmxpbmVJdGVtLCBpdGVtTG9naWNhbFdpZHRoKTsKLSAg
ICBpZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KQotICAgICAgICBj
b21taXRQZW5kaW5nQ29udGVudCgpOwotCi0gICAgcmV0dXJuIGlubGluZUl0ZW0uaXNIYXJkTGlu
ZUJyZWFrKCkgPyBJc0VuZE9mTGluZTo6WWVzIDogSXNFbmRPZkxpbmU6Ok5vOwotfQotCi1MaW5l
Q29udGVudCBMaW5lTGF5b3V0OjpsYXlvdXQoKQotewotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0
aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBsYWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJl
bnQgbGluZS4KLSAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJ0aWFsIHRleHQgZnJvbSB0aGUgcHJl
dmlvdXMgbGluZS4KLSAgICBhdXRvIGZpcnN0SW5saW5lSXRlbSA9IG1fbGluZUlucHV0LmZpcnN0
SW5saW5lSXRlbTsKLSAgICB1bnNpZ25lZCBmaXJzdE5vblBhcnRpYWxJbmRleCA9IGZpcnN0SW5s
aW5lSXRlbS5pbmRleDsKLSAgICBpZiAoZmlyc3RJbmxpbmVJdGVtLnBhcnRpYWxDb250ZXh0KSB7
Ci0gICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGlubGluZSBpdGVtIChzcGxpdCB0ZXh0IGZyb20g
dGhlIHByZXZpb3VzIGxpbmUpLgotICAgICAgICBhdXRvJiBvcmlnaW5hbFRleHRJdGVtID0gbV9s
aW5lSW5wdXQuaW5saW5lSXRlbXNbZmlyc3RJbmxpbmVJdGVtLmluZGV4XTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQob3JpZ2luYWxUZXh0SXRlbS0+aXNUZXh0KCkpOwotCi0gICAgICAgIGF1dG8g
dGV4dFJhbmdlID0gKmZpcnN0SW5saW5lSXRlbS5wYXJ0aWFsQ29udGV4dDsKLSAgICAgICAgLy8g
Q29uc3RydWN0IGEgcGFydGlhbCBsZWFkaW5nIGlubGluZSBpdGVtLgotICAgICAgICBBU1NFUlQo
IW1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7Ci0gICAgICAgIG1fbGVhZGluZ1BhcnRp
YWxJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPigqb3JpZ2luYWxUZXh0
SXRlbSkuc3BsaXQodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKTsKLSAgICAgICAg
aWYgKHBsYWNlSW5saW5lSXRlbSgqbV9sZWFkaW5nUGFydGlhbElubGluZVRleHRJdGVtKSA9PSBJ
c0VuZE9mTGluZTo6WWVzKQotICAgICAgICAgICAgcmV0dXJuIGNsb3NlKCk7Ci0gICAgICAgICsr
Zmlyc3ROb25QYXJ0aWFsSW5kZXg7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvIGlubGluZUl0ZW1J
bmRleCA9IGZpcnN0Tm9uUGFydGlhbEluZGV4OyBpbmxpbmVJdGVtSW5kZXggPCBtX2xpbmVJbnB1
dC5pbmxpbmVJdGVtcy5zaXplKCk7ICsraW5saW5lSXRlbUluZGV4KSB7Ci0gICAgICAgIGlmIChw
bGFjZUlubGluZUl0ZW0oKm1fbGluZUlucHV0LmlubGluZUl0ZW1zW2lubGluZUl0ZW1JbmRleF0p
ID09IElzRW5kT2ZMaW5lOjpZZXMpCi0gICAgICAgICAgICByZXR1cm4gY2xvc2UoKTsKLSAgICB9
Ci0gICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKLSAgICByZXR1cm4gY2xvc2UoKTsKLX0KLQot
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6SW5saW5lTGF5b3V0KElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgVXNlZEhvcml6b250
YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdD
b250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV91c2VkSG9yaXpvbnRhbFZh
bHVlcyh1c2VkSG9yaXpvbnRhbFZhbHVlcykKLXsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6SW5saW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0
ZW1zKQotewotICAgIGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KCkpLmNvbnRlbnRCb3hUb3AoKTsKLSAgICBJbmRl
eEFuZFJhbmdlIGN1cnJlbnRJbmxpbmVJdGVtOwotICAgIHdoaWxlIChjdXJyZW50SW5saW5lSXRl
bS5pbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkgewotICAgICAgICBhdXRvIGxpbmVJbnB1dCA9
IExpbmVJbnB1dCB7IGluaXRpYWxDb25zdHJhaW50c0ZvckxpbmUobGluZUxvZ2ljYWxUb3ApLCBm
b3JtYXR0aW5nUm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGN1cnJlbnRJbmxpbmVJdGVtLCBp
bmxpbmVJdGVtcyB9OwotICAgICAgICBhdXRvIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0IHsgZm9y
bWF0dGluZ0NvbnRleHQoKSwgbGluZUlucHV0IH07Ci0KLSAgICAgICAgYXV0byBsaW5lQ29udGVu
dCA9IGxpbmVMYXlvdXQubGF5b3V0KCk7Ci0gICAgICAgIHNldHVwRGlzcGxheUJveGVzKGxpbmVD
b250ZW50KTsKLQotICAgICAgICBpZiAobGluZUNvbnRlbnQubGFzdENvbW1pdHRlZCkgewotICAg
ICAgICAgICAgY3VycmVudElubGluZUl0ZW0gPSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQt
PmluZGV4ICsgMSwgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9
IGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbEJvdHRvbSgpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBjb250ZW50IG9u
IHRoZSBsaW5lLgotICAgICAgICAgICAgQVNTRVJUKGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWlu
dHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KTsKLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIG5l
eHQgbGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0LgotICAgICAgICAgICAgYXV0byBmbG9h
dGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5nUm9vdCgpLCBmb3JtYXR0
aW5nQ29udGV4dCgpLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKLSAgICAg
ICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50
cyh7IGxpbmVMb2dpY2FsVG9wIH0pOwotICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWlu
dHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KTsKLSAgICAgICAgICAgIHN0YXRpYyBh
dXRvIGluaWZpdGVQb2ludCA9IFBvaW50SW5Db250ZXh0Um9vdDo6bWF4KCk7Ci0gICAgICAgICAg
ICAvLyBJbiBjYXNlIG9mIGxlZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBp
Y2sgdGhlIG9uZSB0aGF0J3MgY2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAg
ICBsaW5lTG9naWNhbFRvcCA9IHN0ZDo6bWluKGZsb2F0Q29uc3RyYWludHMubGVmdC52YWx1ZU9y
KGluaWZpdGVQb2ludCkueSwgZmxvYXRDb25zdHJhaW50cy5yaWdodC52YWx1ZU9yKGluaWZpdGVQ
b2ludCkueSk7Ci0gICAgICAgICAgICBBU1NFUlQobGluZUxvZ2ljYWxUb3AgPCBpbmlmaXRlUG9p
bnQueSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUxpbmU6OkluaXRpYWxDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0Ojppbml0aWFsQ29uc3RyYWludHNG
b3JMaW5lKGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCi17Ci0gICAgYXV0byBsaW5l
TG9naWNhbExlZnQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRp
bmdSb290KCkpLmNvbnRlbnRCb3hMZWZ0KCk7Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHdp
ZHRoQ29uc3RyYWludCgpOwotICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmFs
c2U7Ci0KLSAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IGZvcm1h
dHRpbmdSb290KCksIGZvcm1hdHRpbmdDb250ZXh0KCksIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0
aW5nU3RhdGUoKSB9OwotICAgIC8vIENoZWNrIGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1
c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5
LgotICAgIGlmICghZmxvYXRpbmdDb250ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIGZs
b2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMoeyBsaW5lTG9naWNh
bFRvcCB9KTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkg
cHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRz
LmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKLSAg
ICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKLQotICAgICAgICBhdXRvIGxp
bmVMb2dpY2FsUmlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZvcm1h
dHRpbmdSb290KCkpLmNvbnRlbnRCb3hSaWdodCgpOwotICAgICAgICBpZiAoZmxvYXRDb25zdHJh
aW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsUmln
aHQpCi0gICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0geyB9OwotCi0gICAgICAg
IGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdCB8fCBmbG9h
dENvbnN0cmFpbnRzLnJpZ2h0OwotCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQg
JiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29u
c3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54KTsKLSAgICAgICAg
ICAgIGF2YWlsYWJsZVdpZHRoID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCAtIGZsb2F0Q29u
c3RyYWludHMubGVmdC0+eDsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29u
c3RyYWludHMubGVmdC0+eDsKLSAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLmxl
ZnQpIHsKLSAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPj0gbGlu
ZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoIC09IChmbG9hdENvbnN0
cmFpbnRzLmxlZnQtPnggLSBsaW5lTG9naWNhbExlZnQpOwotICAgICAgICAgICAgbGluZUxvZ2lj
YWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54OwotICAgICAgICB9IGVsc2UgaWYgKGZs
b2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVX
aWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggLSBsaW5lTG9naWNhbExlZnQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIExpbmU6OkluaXRpYWxDb25zdHJhaW50cyB7IHsgbGlu
ZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBhdmFpbGFibGVXaWR0aCwgbGluZUlzQ29u
c3RyYWluZWRCeUZsb2F0LCBmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLmxpbmVIZWlnaHRD
b25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCgpKSB9OwotfQotCi1MYXlvdXRVbml0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGgoY29u
c3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKSBjb25zdAotewotICAgIGF1dG8mIGZvcm1hdHRp
bmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICBMYXlvdXRVbml0IG1h
eGltdW1MaW5lV2lkdGg7Ci0gICAgSW5kZXhBbmRSYW5nZSBjdXJyZW50SW5saW5lSXRlbTsKLSAg
ICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkpIHsK
LSAgICAgICAgLy8gT25seSB0aGUgaG9yaXp0b25hbCBhdmFpbGFibGUgd2lkdGggaXMgY29uc3Ry
YWluZWQgd2hlbiBjb21wdXRpbmcgaW50cmluc2ljIHdpZHRoLgotICAgICAgICBhdXRvIGluaXRp
YWxMaW5lQ29uc3RyYWludHMgPSBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMgeyB7IH0sIHdpZHRo
Q29uc3RyYWludCgpLCBmYWxzZSwgeyB9IH07Ci0gICAgICAgIGF1dG8gbGluZUlucHV0ID0gTGlu
ZUlucHV0IHsgaW5pdGlhbExpbmVDb25zdHJhaW50cywgY3VycmVudElubGluZUl0ZW0sIGlubGlu
ZUl0ZW1zIH07Ci0KLSAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IExpbmVMYXlvdXQoZm9ybWF0
dGluZ0NvbnRleHQsIGxpbmVJbnB1dCkubGF5b3V0KCk7Ci0KLSAgICAgICAgY3VycmVudElubGlu
ZUl0ZW0gPSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4ICsgMSwgeyB9IH07Ci0g
ICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7Ci0gICAgICAgIGZvciAoYXV0byYgZmxvYXRJ
dGVtIDogbGluZUNvbnRlbnQuZmxvYXRzKQotICAgICAgICAgICAgZmxvYXRzV2lkdGggKz0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goZmxvYXRJdGVtLT5sYXlvdXRCb3goKSkubWFy
Z2luQm94V2lkdGgoKTsKLSAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRoICsgbGluZUNvbnRlbnQubGluZUJveC5sb2dpY2FsV2lk
dGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBtYXhpbXVtTGluZVdpZHRoOwotfQotCi12b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OnNldHVwRGlzcGxheUJveGVzKGNv
bnN0IExpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29u
dGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byYgZm9ybWF0dGluZ1N0
YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBmbG9hdGluZ0NvbnRleHQg
PSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5nUm9vdCgpLCBmb3JtYXR0aW5nQ29udGV4dCwg
Zm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9OwotCi0gICAgLy8gTW92ZSBmbG9hdHMg
dG8gdGhlaXIgZmluYWwgcG9zaXRpb24uCi0gICAgZm9yIChjb25zdCBhdXRvJiBmbG9hdEl0ZW0g
OiBsaW5lQ29udGVudC5mbG9hdHMpIHsKLSAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0
ZW0tPmxheW91dEJveCgpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0
YXRlLmRpc3BsYXlCb3goZmxvYXRCb3gpOwotICAgICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9u
IGZpcnN0LgotICAgICAgICBhdXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJveDsKLSAg
ICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZUJveC5sb2dpY2FsTGVmdCgpLCBsaW5l
Qm94LmxvZ2ljYWxUb3AoKSB9KTsKLSAgICAgICAgLy8gRmxvYXQgaXQuCi0gICAgICAgIGRpc3Bs
YXlCb3guc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJv
eCkpOwotICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBwZW5kKGZsb2F0Qm94KTsKLSAgICB9Ci0K
LSAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRvIHN0YXRlLgotICAgIGZvciAoYXV0byYg
bGluZVJ1biA6IGxpbmVDb250ZW50LnJ1bkxpc3QpIHsKLSAgICAgICAgLy8gSW5saW5lIGxldmVs
IGNvbnRhaW5lcnMgKDxzcGFuPikgZG9uJ3QgZ2VuZXJhdGUgaW5saW5lIHJ1bnMuCi0gICAgICAg
IGlmIChsaW5lUnVuLT5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgbGluZVJ1bi0+aXNDb250YWluZXJF
bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRk
SW5saW5lUnVuKGxpbmVSdW4tPmRpc3BsYXlSdW4oKSk7Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0
ZSBib3ggZmluYWwgZ2VvbWV0cnkuCi0gICAgYXV0byBnZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5KCk7Ci0gICAgYXV0byYgbGluZVJ1bnMgPSBsaW5lQ29udGVudC5ydW5MaXN0
OwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVSdW5zLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICBhdXRvJiBsaW5lUnVuID0gbGluZVJ1bnMuYXQoaW5kZXgpOwot
ICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVSdW4tPmxvZ2ljYWxSZWN0KCk7Ci0gICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4tPmxheW91dEJveCgpOwotICAgICAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLQot
ICAgICAgICBpZiAobGluZVJ1bi0+aXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgZGlzcGxh
eUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBkaXNw
bGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsUmVjdC53aWR0aCgpKTsKLSAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChsb2dpY2FsUmVjdC5oZWlnaHQoKSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBs
ZXZlbCBib3ggKHJlcGxhY2VkIG9yIGlubGluZS1ibG9jaykKLSAgICAgICAgaWYgKGxpbmVSdW4t
PmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdG9wTGVmdCA9IGxvZ2ljYWxSZWN0LnRvcExl
ZnQoKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICAgICAgdG9wTGVmdCArPSBnZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRp
b25PZmZzZXQobGF5b3V0Qm94LCBtX3VzZWRIb3Jpem9udGFsVmFsdWVzKTsKLSAgICAgICAgICAg
IGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lciBzdGFydCAoPHNw
YW4+KQotICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250YWluZXJTdGFydCgpKSB7Ci0gICAgICAg
ICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5saW5lIGxldmVsIGNv
bnRhaW5lciBlbmQgKDwvc3Bhbj4pCi0gICAgICAgIGlmIChsaW5lUnVuLT5pc0NvbnRhaW5lckVu
ZCgpKSB7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBnZW9tZXRyeS5pbkZsb3dQb3Np
dGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBtX3VzZWRIb3Jpem9udGFsVmFsdWVzKTsK
LSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoaW5mbG93T2Zmc2V0
LndpZHRoKCkpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gubW92ZVZlcnRpY2FsbHkoaW5m
bG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gbWFy
Z2luQm94V2lkdGggPSBsb2dpY2FsUmVjdC5sZWZ0KCkgLSBkaXNwbGF5Qm94LmxlZnQoKTsKLSAg
ICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxh
eUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94
LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRSBmaXggaXQg
Zm9yIG11bHRpbGluZS4KLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRo
KGNvbnRlbnRCb3hXaWR0aCk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hI
ZWlnaHQobG9naWNhbFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGluZVJ1bi0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIGNv
bnN0IExpbmU6OlJ1biogcHJldmlvdXNMaW5lUnVuID0gIWluZGV4ID8gbnVsbHB0ciA6IGxpbmVS
dW5zW2luZGV4IC0gMV0uZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRSB0YWtlIGNvbnRlbnQg
YnJlYWtpbmcgaW50byBhY2NvdW50IHdoZW4gcGFydCBvZiB0aGUgbGF5b3V0IGJveCBpcyBvbiB0
aGUgcHJldmlvdXMgbGluZS4KLSAgICAgICAgICAgIGF1dG8gZmlyc3RJbmxpbmVSdW5Gb3JMYXlv
dXRCb3ggPSAhcHJldmlvdXNMaW5lUnVuIHx8ICZwcmV2aW91c0xpbmVSdW4tPmxheW91dEJveCgp
ICE9ICZsYXlvdXRCb3g7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGxpbmVSdW4t
PmlzVmlzdWFsbHlFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFJlY3Qud2lkdGgoKTsK
LSAgICAgICAgICAgIGlmIChmaXJzdElubGluZVJ1bkZvckxheW91dEJveCkgewotICAgICAgICAg
ICAgICAgIC8vIFNldHVwIGRpc3BsYXkgYm94IGZvciB0aGUgYXNzb2NpYXRlZCBsYXlvdXQgYm94
LgotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChsb2dpY2FsUmVjdC50b3BM
ZWZ0KCkpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGxv
Z2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVp
Z2h0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aXJ1bi9tdWx0aWxpbmUuCi0gICAgICAg
ICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoZGlzcGxheUJveC5jb250ZW50
Qm94V2lkdGgoKSArIGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3gobGluZUNvbnRlbnQubGluZUJveCk7Ci19
Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oCmluZGV4IGU0NTQ4
NzY3Y2Q3N2FjNjliNWJjYzZkZDc5ODY1NTE4N2RkMGNmMWUuLmE0YjA0NmQzNGFlOWE0MmQyNTc5
Y2RkNzc5NmRlM2Y4NTUxM2ZjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oCkBAIC00
OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbmxpbmVGb3JtYXR0aW5nU3RhdGUo
KTsKIAogICAgIElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRl
bXM7IH0KKyAgICBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMoKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUl0ZW1zOyB9CiAgICAgdm9pZCBhZGRJbmxpbmVJdGVtKHN0ZDo6dW5pcXVlX3B0
cjxJbmxpbmVJdGVtPiYmIGlubGluZUl0ZW0pIHsgbV9pbmxpbmVJdGVtcy5hcHBlbmQoV1RGTW92
ZShpbmxpbmVJdGVtKSk7IH0KIAogICAgIElubGluZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVy
biBtX2lubGluZVJ1bnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU5OTA0
NmNjYzQyNjZmM2YzODM3ZmYyOGU0ZTJiMTg1MDc3ZWU5OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3Bw
CkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklubGluZUxpbmVMYXlvdXQuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQorCisjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmxv
YXRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1
ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIlRleHRVdGlsLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVt
V2lkdGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK3sK
KyAgICBpZiAoaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpIHsKKyAgICAgICAgYXV0byYg
aW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7Cisg
ICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzZWQoKSA/IGlubGluZVRl
eHRJdGVtLnN0YXJ0KCkgKyAxIDogaW5saW5lVGV4dEl0ZW0uZW5kKCk7CisgICAgICAgIHJldHVy
biBUZXh0VXRpbDo6d2lkdGgoaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCksIGlubGluZVRleHRJ
dGVtLnN0YXJ0KCksIGVuZCwgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICB9CisKKyAgICBhdXRv
JiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgIGF1dG8mIGJveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKworICAg
IGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkJveFdpZHRoKCk7CisKKyAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2Vk
KCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOworCisgICAgaWYgKGlubGlu
ZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFy
Z2luU3RhcnQoKSArIGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKSArIGJveEdlb21ldHJ5LnBhZGRp
bmdMZWZ0KCkudmFsdWVPcigwKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5k
KCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKSArIGJveEdlb21ldHJ5
LmJvcmRlclJpZ2h0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwor
CisgICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKQorICAg
IHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOworfQorCitMaW5lTGF5b3V0OjpMaW5lSW5wdXQ6
OkxpbmVJbnB1dChjb25zdCBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMmIGluaXRpYWxMaW5lQ29u
c3RyYWludHMsIFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSW5kZXhBbmRSYW5n
ZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQorICAgIDog
aW5pdGlhbENvbnN0cmFpbnRzKGluaXRpYWxMaW5lQ29uc3RyYWludHMpCisgICAgLCBob3Jpem9u
dGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCisgICAgLCBmaXJzdElubGluZUl0ZW0o
Zmlyc3RUb1Byb2Nlc3MpCisgICAgLCBpbmxpbmVJdGVtcyhpbmxpbmVJdGVtcykKK3sKK30KKwor
TGluZUxheW91dDo6TGluZUlucHV0OjpMaW5lSW5wdXQoY29uc3QgTGluZTo6SW5pdGlhbENvbnN0
cmFpbnRzJiBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBJbmRleEFuZFJhbmdlIGZpcnN0VG9Qcm9j
ZXNzLCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCisgICAgOiBpbml0aWFsQ29uc3Ry
YWludHMoaW5pdGlhbExpbmVDb25zdHJhaW50cykKKyAgICAsIHNraXBBbGlnbm1lbnQoTGluZTo6
U2tpcEFsaWdubWVudDo6WWVzKQorICAgICwgZmlyc3RJbmxpbmVJdGVtKGZpcnN0VG9Qcm9jZXNz
KQorICAgICwgaW5saW5lSXRlbXMoaW5saW5lSXRlbXMpCit7Cit9CisKK3ZvaWQgTGluZUxheW91
dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwg
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCit7CisgICAgbV91bmNvbW1pdHRlZFJ1bnMuYXBwZW5k
KHsgaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoIH0pOworICAgIG1fd2lkdGggKz0gbG9naWNhbFdp
ZHRoOworfQorCit2b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6cmVzZXQoKQor
eworICAgIG1fdW5jb21taXR0ZWRSdW5zLmNsZWFyKCk7CisgICAgbV93aWR0aCA9IDA7Cit9CisK
K0xpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBMaW5lSW5wdXQmIGxpbmVJbnB1dCkKKyAgICA6
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAg
LCBtX2xpbmVJbnB1dChsaW5lSW5wdXQpCisgICAgLCBtX2xpbmUoaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWludHMsIGxpbmVJbnB1dC5ob3Jpem9udGFs
QWxpZ25tZW50LCBsaW5lSW5wdXQuc2tpcEFsaWdubWVudCkKKyAgICAsIG1fbGluZUhhc0ludHJ1
c2l2ZUZsb2F0KGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRC
eUZsb2F0KQoreworfQorCitMaW5lTGF5b3V0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0OjpsYXlv
dXQoKQoreworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBs
YWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAvLyBTdGFydCB3
aXRoIHRoZSBwYXJ0aWFsIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZS4KKyAgICBhdXRvIGZp
cnN0SW5saW5lSXRlbSA9IG1fbGluZUlucHV0LmZpcnN0SW5saW5lSXRlbTsKKyAgICB1bnNpZ25l
ZCBmaXJzdE5vblBhcnRpYWxJbmRleCA9IGZpcnN0SW5saW5lSXRlbS5pbmRleDsKKyAgICBpZiAo
Zmlyc3RJbmxpbmVJdGVtLnBhcnRpYWxDb250ZXh0KSB7CisgICAgICAgIC8vIEhhbmRsZSBwYXJ0
aWFsIGlubGluZSBpdGVtIChzcGxpdCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUpLgorICAg
ICAgICBhdXRvJiBvcmlnaW5hbFRleHRJdGVtID0gbV9saW5lSW5wdXQuaW5saW5lSXRlbXNbZmly
c3RJbmxpbmVJdGVtLmluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3JpZ2luYWxUZXh0
SXRlbS0+aXNUZXh0KCkpOworCisgICAgICAgIGF1dG8gdGV4dFJhbmdlID0gKmZpcnN0SW5saW5l
SXRlbS5wYXJ0aWFsQ29udGV4dDsKKyAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFydGlhbCBsZWFk
aW5nIGlubGluZSBpdGVtLgorICAgICAgICBBU1NFUlQoIW1fbGVhZGluZ1BhcnRpYWxJbmxpbmVU
ZXh0SXRlbSk7CisgICAgICAgIG1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSA9IGRvd25j
YXN0PElubGluZVRleHRJdGVtPigqb3JpZ2luYWxUZXh0SXRlbSkuc3BsaXQodGV4dFJhbmdlLnN0
YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgaWYgKHBsYWNlSW5saW5lSXRlbSgqbV9s
ZWFkaW5nUGFydGlhbElubGluZVRleHRJdGVtKSA9PSBJc0VuZE9mTGluZTo6WWVzKQorICAgICAg
ICAgICAgcmV0dXJuIGNsb3NlKCk7CisgICAgICAgICsrZmlyc3ROb25QYXJ0aWFsSW5kZXg7Cisg
ICAgfQorCisgICAgZm9yIChhdXRvIGlubGluZUl0ZW1JbmRleCA9IGZpcnN0Tm9uUGFydGlhbElu
ZGV4OyBpbmxpbmVJdGVtSW5kZXggPCBtX2xpbmVJbnB1dC5pbmxpbmVJdGVtcy5zaXplKCk7ICsr
aW5saW5lSXRlbUluZGV4KSB7CisgICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0oKm1fbGluZUlu
cHV0LmlubGluZUl0ZW1zW2lubGluZUl0ZW1JbmRleF0pID09IElzRW5kT2ZMaW5lOjpZZXMpCisg
ICAgICAgICAgICByZXR1cm4gY2xvc2UoKTsKKyAgICB9CisgICAgY29tbWl0UGVuZGluZ0NvbnRl
bnQoKTsKKyAgICByZXR1cm4gY2xvc2UoKTsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojpjb21taXRQ
ZW5kaW5nQ29udGVudCgpCit7CisgICAgaWYgKG1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICs9IG1f
dW5jb21taXR0ZWRDb250ZW50LnNpemUoKTsKKyAgICBmb3IgKGF1dG8mIHVuY29tbWl0dGVkUnVu
IDogbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKQorICAgICAgICBtX2xpbmUuYXBwZW5kKHVu
Y29tbWl0dGVkUnVuLmlubGluZUl0ZW0sIHVuY29tbWl0dGVkUnVuLmxvZ2ljYWxXaWR0aCk7Cisg
ICAgbV91bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKK30KKworTGluZUxheW91dDo6TGluZUNv
bnRlbnQgTGluZUxheW91dDo6Y2xvc2UoKQoreworICAgIEFTU0VSVChtX2NvbW1pdHRlZElubGlu
ZUl0ZW1Db3VudCB8fCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdCk7CisgICAgaWYgKCFtX2NvbW1p
dHRlZElubGluZUl0ZW1Db3VudCkKKyAgICAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbV9saW5lLmNsb3NlKCksIG1fbGluZS5saW5lQm94
KCkgfTsKKworICAgIGF1dG8gbGFzdElubGluZUl0ZW1JbmRleCA9IG1fbGluZUlucHV0LmZpcnN0
SW5saW5lSXRlbS5pbmRleCArIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IC0gMTsKKyAgICBP
cHRpb25hbDxJbmRleEFuZFJhbmdlOjpSYW5nZT4gcGFydGlhbENvbnRleHQ7CisgICAgaWYgKG1f
dHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0pCisgICAgICAgIHBhcnRpYWxDb250ZXh0ID0g
SW5kZXhBbmRSYW5nZTo6UmFuZ2UgeyBtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtLT5z
dGFydCgpLCBtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtLT5sZW5ndGgoKSB9OworCisg
ICAgYXV0byBsYXN0Q29tbWl0ZWRJdGVtID0gSW5kZXhBbmRSYW5nZSB7IGxhc3RJbmxpbmVJdGVt
SW5kZXgsIHBhcnRpYWxDb250ZXh0IH07CisgICAgcmV0dXJuIExpbmVDb250ZW50IHsgbGFzdENv
bW1pdGVkSXRlbSwgV1RGTW92ZShtX2Zsb2F0cyksIG1fbGluZS5jbG9zZSgpLCBtX2xpbmUubGlu
ZUJveCgpIH07Cit9CisKK0xpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXQ6OnBsYWNl
SW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIGF1dG8gYXZh
aWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIG1fdW5jb21taXR0ZWRDb250
ZW50LndpZHRoKCk7CisgICAgYXV0byBjdXJyZW50TG9naWNhbFJpZ2h0ID0gbV9saW5lLmxpbmVC
b3goKS5sb2dpY2FsUmlnaHQoKSArIG1fdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7CisgICAg
YXV0byBpdGVtTG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0
KCksIGlubGluZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmlnaHQpOworCisgICAgLy8gRklYTUU6IEVu
c3VyZSBMaW5lQ29udGV4dDo6dHJpbW1hYmxlV2lkdGggaW5jbHVkZXMgdW5jb21taXR0ZWQgY29u
dGVudCBpZiBuZWVkZWQuCisgICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSAhbV9saW5l
Lmhhc0NvbnRlbnQoKSAmJiAhbV9saW5lSGFzSW50cnVzaXZlRmxvYXQ7CisgICAgYXV0byBicmVh
a2luZ0NvbnRleHQgPSBtX2xpbmVCcmVha2VyLmJyZWFraW5nQ29udGV4dChpbmxpbmVJdGVtLCBp
dGVtTG9naWNhbFdpZHRoLCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBt
X2xpbmUudHJhaWxpbmdUcmltbWFibGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkgfSk7
CisgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAg
ICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKworICAgIC8vIENvbnRlbnQgZG9lcyBub3QgZml0
IHRoZSBjdXJyZW50IGxpbmUuCisgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2
aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQorICAgICAgICByZXR1
cm4gSXNFbmRPZkxpbmU6OlllczsKKworICAgIC8vIFBhcnRpYWwgY29udGVudCBzdGF5cyBvbiB0
aGUgY3VycmVudCBsaW5lLgorICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlv
ciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6U3BsaXQpIHsKKyAgICAgICAgQVNT
RVJUKGlubGluZUl0ZW0uaXNUZXh0KCkpOworICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9
IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKKyAgICAgICAgYXV0byBzcGxp
dERhdGEgPSBUZXh0VXRpbDo6c3BsaXQoaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCksIGlubGlu
ZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmxlbmd0aCgpLCBpdGVtTG9naWNhbFdp
ZHRoLCBhdmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgICAgIC8vIENv
bnN0cnVjdCBhIHBhcnRpYWwgdHJhaWxpbmcgaW5saW5lIGl0ZW0uCisgICAgICAgIEFTU0VSVCgh
bV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7CisgICAgICAgIG1fdHJhaWxpbmdQYXJ0
aWFsSW5saW5lVGV4dEl0ZW0gPSBpbmxpbmVUZXh0SXRlbS5zcGxpdChzcGxpdERhdGEuc3RhcnQs
IHNwbGl0RGF0YS5sZW5ndGgpOworICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5hZGQoKm1f
dHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0sIHNwbGl0RGF0YS5sb2dpY2FsV2lkdGgpOwor
ICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOworICAgICAgICByZXR1cm4gSXNFbmRPZkxp
bmU6OlllczsKKyAgICB9CisKKyAgICBBU1NFUlQoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVo
YXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OktlZXApOworICAgIGlmIChp
bmxpbmVJdGVtLmlzRmxvYXQoKSkgeworICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGlubGluZUl0
ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIC8vIFNocmluayBhdmFpbGFibGUgc3BhY2UgZm9yIGN1
cnJlbnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KKyAgICAgICAgYXV0byBm
bG9hdEJveFdpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmbG9hdEJv
eCkubWFyZ2luQm94V2lkdGgoKTsKKyAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3Np
dGlvbmVkKCkgPyBtX2xpbmUubW92ZUxvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbV9saW5l
Lm1vdmVMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CisgICAgICAgIG1fZmxvYXRzLmFwcGVu
ZChtYWtlV2Vha1B0cihpbmxpbmVJdGVtKSk7CisgICAgICAgICsrbV9jb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQ7CisgICAgICAgIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpObzsKKyAgICB9CisKKyAgICBtX3VuY29tbWl0dGVkQ29u
dGVudC5hZGQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7CisgICAgaWYgKGJyZWFraW5n
Q29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgY29tbWl0UGVuZGluZ0Nv
bnRlbnQoKTsKKworICAgIHJldHVybiBpbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpID8gSXNF
bmRPZkxpbmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsKK30KKworfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWU0MDlhMzBhODZkM2VjMWZiNjM3YjMwNGFjY2Qy
N2M4ZjhiMmVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKKworI2luY2x1ZGUgIklubGluZUxpbmUuaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIExpbmVMYXlvdXQgeworcHVibGljOgorICAgIHN0
cnVjdCBMaW5lSW5wdXQ7CisgICAgTGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYsIGNvbnN0IExpbmVJbnB1dCYpOworCisgICAgc3RydWN0IExpbmVDb250ZW50OworICAg
IExpbmVDb250ZW50IGxheW91dCgpOworCisgICAgc3RydWN0IEluZGV4QW5kUmFuZ2UgeworICAg
ICAgICB1bnNpZ25lZCBpbmRleCB7IDAgfTsKKyAgICAgICAgc3RydWN0IFJhbmdlIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
IHsgMCB9OworICAgICAgICB9OworICAgICAgICBPcHRpb25hbDxSYW5nZT4gcGFydGlhbENvbnRl
eHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBMaW5lSW5wdXQgeworICAgICAgICBMaW5lSW5wdXQo
Y29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiwgVGV4dEFsaWduTW9kZSwgSW5kZXhBbmRS
YW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMmKTsKKyAgICAgICAgTGluZUlu
cHV0KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYsIEluZGV4QW5kUmFuZ2UgZmlyc3RU
b1Byb2Nlc3MsIGNvbnN0IElubGluZUl0ZW1zJik7CisKKyAgICAgICAgTGluZTo6SW5pdGlhbENv
bnN0cmFpbnRzIGluaXRpYWxDb25zdHJhaW50czsKKyAgICAgICAgVGV4dEFsaWduTW9kZSBob3Jp
em9udGFsQWxpZ25tZW50OworICAgICAgICAvLyBGSVhNRSBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxk
IGp1c3QgaGF2ZSBhIHNlY29uZCBwYXNzIHdpdGggdmVydGljYWwgcG9zaXRpb25pbmcgKHByZWZl
cnJlZCB3aWR0aCBjb21wdXRhdGlvbiBvcHRzIG91dCkgCisgICAgICAgIExpbmU6OlNraXBBbGln
bm1lbnQgc2tpcEFsaWdubWVudCB7IExpbmU6OlNraXBBbGlnbm1lbnQ6Ok5vIH07CisgICAgICAg
IEluZGV4QW5kUmFuZ2UgZmlyc3RJbmxpbmVJdGVtOworICAgICAgICBjb25zdCBJbmxpbmVJdGVt
cyYgaW5saW5lSXRlbXM7CisgICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGZsb2F0TWluaW11
bUxvZ2ljYWxCb3R0b207CisgICAgfTsKKworICAgIHN0cnVjdCBMaW5lQ29udGVudCB7CisgICAg
ICAgIE9wdGlvbmFsPEluZGV4QW5kUmFuZ2U+IGxhc3RDb21taXR0ZWQ7CisgICAgICAgIFZlY3Rv
cjxXZWFrUHRyPElubGluZUl0ZW0+PiBmbG9hdHM7CisgICAgICAgIGNvbnN0IExpbmU6OlJ1bkxp
c3QgcnVuTGlzdDsKKyAgICAgICAgY29uc3QgTGluZUJveCBsaW5lQm94OworICAgIH07CisKK3By
aXZhdGU6CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQorICAgIGVu
dW0gY2xhc3MgSXNFbmRPZkxpbmUgeyBObywgWWVzIH07CisgICAgSXNFbmRPZkxpbmUgcGxhY2VJ
bmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mKTsKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdDb250
ZW50KCk7CisgICAgTGluZUNvbnRlbnQgY2xvc2UoKTsKKyAgICAKKyAgICBzdHJ1Y3QgVW5jb21t
aXR0ZWRDb250ZW50IHsKKyAgICAgICAgc3RydWN0IFJ1biB7CisgICAgICAgICAgICBjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtOworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGg7CisgICAgICAgIH07CisgICAgICAgIHZvaWQgYWRkKGNvbnN0IElubGluZUl0ZW0mLCBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgICAgICBW
ZWN0b3I8UnVuPiBydW5zKCkgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnM7IH0KKyAgICAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnMuaXNFbXB0eSgp
OyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVk
UnVucy5zaXplKCk7IH0KKyAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxSdW4+IG1fdW5jb21t
aXR0ZWRSdW5zOworICAgICAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisgICAgfTsKKworICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0Owor
ICAgIGNvbnN0IExpbmVJbnB1dCYgbV9saW5lSW5wdXQ7CisgICAgTGluZSBtX2xpbmU7CisgICAg
TGluZUJyZWFrZXIgbV9saW5lQnJlYWtlcjsKKyAgICBib29sIG1fbGluZUhhc0ludHJ1c2l2ZUZs
b2F0IHsgZmFsc2UgfTsKKyAgICBVbmNvbW1pdHRlZENvbnRlbnQgbV91bmNvbW1pdHRlZENvbnRl
bnQ7CisgICAgdW5zaWduZWQgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgeyAwIH07CisgICAg
VmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IG1fZmxvYXRzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbmxpbmVUZXh0SXRlbT4gbV9sZWFkaW5nUGFydGlhbElubGluZVRleHRJdGVtOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0
SXRlbTsKK307CisKK30KK30KKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379799</attachid>
            <date>2019-09-28 20:41:10 -0700</date>
            <delta_ts>2019-09-28 21:28:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202352-20190928204109.patch</filename>
            <type>text/plain</type>
            <size>62351</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVjNzc0MzZkODE2M2Qx
N2Q1ZmQ3OGI2N2MwZjViNDA2ZGRmOGYzMS4uMmM1YWY0NTIwMDA1YjU0MmE3NGFlMzM5Y2U0OTg2
MDc4NGNhNzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA5LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW1vdmUg
SW5saW5lTGF5b3V0IGFic3RyYWN0aW9uIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzNTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1
ODExNTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW5saW5lTGF5b3V0IGZ1bmN0aW9ucyB0byBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC4g
Tm93IGlubGluZSBsYXlvdXQgaGFzCisgICAgICAgIDEuIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IC1oaWdoIGxldmVsIGxheW91dCBhbmQgcHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uLCBpbmxp
bmUgY29udGVudCBjb2xsZWN0aW9uLCBkaXNwbGF5IGJveCBjb25zdHJ1Y3Rpb24KKyAgICAgICAg
Mi4gTGluZUxheW91dCAtcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgaW5saW5lIGNvbnRlbnQgb24g
dGhlIGN1cnJlbnQgbGluZSAocGFydGlhbCBpbmxpbmUgY29udGVudCBoYW5kbGluZywgbGluZSBi
cmVha2luZyBldGMpCisgICAgICAgIDMuIExpbmUgLXJlcHJlc2VudHMgYW4gYWN0dWFsIGxpbmUs
IHR1cm5zIGlubGluZSBjb250ZW50IGludG8gcnVucy4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJ
bkZsb3dDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVk
SW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxDb25zdHJhaW50c0ZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0
RGlzcGxheUJveGVzRm9yTGluZSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0U3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6SW5saW5lTGF5b3V0Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlv
dXQ6OmZvcm1hdHRpbmdSb290IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Zm9ybWF0dGluZ1N0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OklubGluZUxheW91dDo6d2lkdGhDb25zdHJhaW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU6OmlubGluZUl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVMYXlvdXQ6OkxpbmVJbnB1dDo6TGluZUlucHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6TGluZUxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmNvbW1pdFBlbmRpbmdDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50Ojpy
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRD
b250ZW50Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxh
eW91dDo6VW5jb21taXR0ZWRDb250ZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50Ojp3aWR0aCBjb25zdCk6CisK
IDIwMTktMDktMjggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJRkNdIE1vdmUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgdG8gTGluZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA1NjExNjM2ZGRhZmYzN2I3M2RmYWIwMDgyOWQ1MzQyYTM1NWY1MTJkLi5mOTU4NmZhMDQ4
Y2I3ZWVkMjg2NTliYTA2MGI4ZGY4YTEwZTJiZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQxOSwx
MiArMTQxOSwxMiBAQCBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKIGxheW91dC9m
bG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
SW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZVRleHRJdGVtLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2OTBiZDJkMjVj
MmM4YTUzN2M1NTM4ODFiYzU2YjFiNTE0NDE0Y2JhLi5iNjg0N2FmYmI1YjMxMDk3ZjljY2IwZTky
NTM3NTUwNTRkZjdiYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDAzLDYgKzIwMDMsNyBAQAogCQk2RjBDRDY5NTIyOUVE
MzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUu
aCAqLzsgfTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjFDQzFERDIy
NUY4QjQyMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJCRUEgLyog
TGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjI2RUI0ODIzNDAw
NEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGlu
ZUxpbmVMYXlvdXQuaCAqLzsgfTsKIAkJNkYzRTFGNjIyMTM2MTQyMDAwQTY1QTA4IC8qIEZsb2F0
Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjNF
MUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyog
TGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NBM0NBMjA4QzJCMkUw
MDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTkxNTksOSArOTE2MCwxMCBAQAogCQk2RjFDQzFERDIyNUY4QjQy
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0
ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2
NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
MjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjVCMjAwMjIwQTg1
QUIwMDAwMDExQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElu
bGluZUxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZUxheW91dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJF
QSAvKiBMYXlvdXRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dENvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJC
RUEgLyogTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBJ
bmxpbmVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGlu
ZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3
Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0
MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTY0ODIsNyArMTY0ODQsNiBAQAogCQkJCTZGN0NBM0M5MjA4QzJC
MkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNkY3Q0Ez
QzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCiAJCQkJ
NkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwICovLAotCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovLAogCQkJCTZGMTBCMDg2MjJCODU2OEQwMDkwRTY5
QyAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgKi8sCiAJCQkJMTE1Q0ZBN0Qy
MDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJMTE1
Q0ZBN0MyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oICovLApAQCAt
MTY0OTQsNiArMTY0OTUsOCBAQAogCQkJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxp
bmVMaW5lQm94LmggKi8sCiAJCQkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxp
bmVCcmVha2VyLmNwcCAqLywKIAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5l
TGluZUJyZWFrZXIuaCAqLywKKwkJCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIgLyogSW5saW5l
TGluZUxheW91dC5jcHAgKi8sCisJCQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGlu
ZUxpbmVMYXlvdXQuaCAqLywKIAkJCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5l
VGV4dEl0ZW0uY3BwICovLAogCQkJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVU
ZXh0SXRlbS5oICovLAogCQkJKTsKQEAgLTI4MzA2LDkgKzI4MzA5LDkgQEAKIAkJCQlGRkI2OThD
RDE4MzNGMTc2MDAxNThBMzEgLyogTGluZUluZm8uY3BwICovLAogCQkJCUZGQjY5OENFMTgzM0Yx
NzYwMDE1OEEzMSAvKiBMaW5lSW5mby5oICovLAogCQkJCUZGRUZBQjJEMTgzQkNCNkYwMDUxNDUz
NCAvKiBMaW5lSW5saW5lSGVhZGVycy5oICovLAorCQkJCUZGRUZBQjI5MTgzODBEQTAwMDUxNDUz
NCAvKiBMaW5lTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5jcHAgKi8sCiAJCQkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFE
RTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLywKLQkJCQlGRkVGQUIyOTE4MzgwREEwMDA1
MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmggKi8sCiAJCQkJRkZEQkMwNDYxODNEMjdCNzAwNDA3
MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdCNzAwNDA3MTA5IC8q
IExpbmVXaWR0aC5oICovLAogCQkJCUZGQUMzMEZEMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGlu
Z09iamVjdHMuY3BwICovLApAQCAtMjk3NDksNiArMjk3NTIsNyBAQAogCQkJCTZGMENENjk1MjI5
RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2
MzIyNzc0MjVBMDBDN0JDQjAgLyogSW5saW5lTGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkZFMTk4MTcyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUxheW91dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0
eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRD
OUU0IC8qIElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzA3
NDQsOCArMzA3NDgsOCBAQAogCQkJCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NjUwRDAwQkYyMjAwNzFCNzgyIC8qIExp
bmVhckdyYWRpZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIzMUM5MUUxMEFF
MUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg0
QTMzRTIzMDU1MzI1MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkZFRkFCMkExODM4MERBMDAwNTE0NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQ4NEEzM0UyMzA1NTMyNTAwOUFERTZBIC8qIExpbmVMYXlvdXRU
cmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGREJDMDQ3MTgzRDI3QjcwMDQwNzEwOSAv
KiBMaW5lV2lkdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUNCQTlEQzBCMURGNDRERjQwMDA1Njc1
QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQzQjI2MzFEREQxNTIwMDAx
NEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IGRmYWUzMjg5YjQ3NjM2ZTA2Yzk3NWM3MTA2MjFhMGM0ZjJmNmZh
MmMuLmNmNDI4MDVmNWFmZGM2MTU1NWI0MjVkMThhY2UwMWI4OTUzY2NhZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTg4LDEwICs4OCw0MSBAQCB2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KCkKICAgICBmb3JtYXR0aW5n
U3RhdGUoKS5pbmxpbmVSdW5zKCkuY2xlYXIoKTsKIAogICAgIGNvbGxlY3RJbmxpbmVDb250ZW50
KCk7Ci0gICAgSW5saW5lTGF5b3V0KCp0aGlzLCB1c2VkSG9yaXpvbnRhbFZhbHVlcykubGF5b3V0
KGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCkpOworICAgIGxpbmVMYXlvdXQodXNlZEhv
cml6b250YWxWYWx1ZXMpOwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZv
cm1hdHRpbmcgcm9vdCgiIDw8ICZyb290KCkgPDwgIikiKTsKIH0KIAordm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6bGluZUxheW91dChVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9yaXpv
bnRhbFZhbHVlcykKK3sKKyAgICBhdXRvJiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgp
LmlubGluZUl0ZW1zKCk7CisgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGdlb21ldHJ5Rm9yQm94
KHJvb3QoKSkuY29udGVudEJveFRvcCgpOworICAgIExpbmVMYXlvdXQ6OkluZGV4QW5kUmFuZ2Ug
Y3VycmVudElubGluZUl0ZW07CisgICAgd2hpbGUgKGN1cnJlbnRJbmxpbmVJdGVtLmluZGV4IDwg
aW5saW5lSXRlbXMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gbGluZUNvbnN0cmFpbnRzID0gaW5p
dGlhbENvbnN0cmFpbnRzRm9yTGluZSh1c2VkSG9yaXpvbnRhbFZhbHVlcywgbGluZUxvZ2ljYWxU
b3ApOworICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVMYXlvdXQ6OkxpbmVJbnB1dCB7IGxp
bmVDb25zdHJhaW50cywgcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGN1cnJlbnRJbmxpbmVJ
dGVtLCBpbmxpbmVJdGVtcyB9OworICAgICAgICBhdXRvIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0
IHsgKnRoaXMsIGxpbmVJbnB1dCB9OworCisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5l
TGF5b3V0LmxheW91dCgpOworICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmVDb250
ZW50LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisKKyAgICAgICAgaWYgKGxpbmVDb250ZW50Lmxh
c3RDb21taXR0ZWQpIHsKKyAgICAgICAgICAgIGN1cnJlbnRJbmxpbmVJdGVtID0geyBsaW5lQ29u
dGVudC5sYXN0Q29tbWl0dGVkLT5pbmRleCArIDEsIFdURjo6bnVsbG9wdCB9OworICAgICAgICAg
ICAgbGluZUxvZ2ljYWxUb3AgPSBsaW5lQ29udGVudC5saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZsb2F0cyBwcmV2ZW50ZWQgdXMgcGxh
Y2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KKyAgICAgICAgICAgIEFTU0VSVChsaW5lSW5w
dXQuaW5pdGlhbENvbnN0cmFpbnRzLmxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCk7CisgICAgICAg
ICAgICAvLyBNb3ZlIHRoZSBuZXh0IGxpbmUgYmVsb3cgdGhlIGludHJ1c2l2ZSBmbG9hdC4KKyAg
ICAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgp
LCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgICAgICAg
ICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMoeyBs
aW5lTG9naWNhbFRvcCB9KTsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxl
ZnQgfHwgZmxvYXRDb25zdHJhaW50cy5yaWdodCk7CisgICAgICAgICAgICBzdGF0aWMgYXV0byBp
bmlmaXRlUG9pbnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOworICAgICAgICAgICAgLy8g
SW4gY2FzZSBvZiBsZWZ0IGFuZCByaWdodCBjb25zdHJhaW50cywgd2UgbmVlZCB0byBwaWNrIHRo
ZSBvbmUgdGhhdCdzIGNsb3NlciB0byB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAgICAgbGlu
ZUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihmbG9hdENvbnN0cmFpbnRzLmxlZnQudmFsdWVPcihpbmlm
aXRlUG9pbnQpLnksIGZsb2F0Q29uc3RyYWludHMucmlnaHQudmFsdWVPcihpbmlmaXRlUG9pbnQp
LnkpOworICAgICAgICAgICAgQVNTRVJUKGxpbmVMb2dpY2FsVG9wIDwgaW5pZml0ZVBvaW50Lnkp
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojps
YXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGlj
YWxWYWx1ZXMgdXNlZFZlcnRpY2FsVmFsdWVzKQogewogICAgIEFTU0VSVChmb3JtYXR0aW5nQ29u
dGV4dFJvb3QuaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBmb3JtYXR0aW5nQ29udGV4dFJvb3Qu
aXNJbmxpbmVCbG9ja0JveCgpKTsKQEAgLTE4Myw3ICsyMTQsNyBAQCBGb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbgogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVu
dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0g
VXNlZEhvcml6b250YWxWYWx1ZXMgeyBVc2VkSG9yaXpvbnRhbFZhbHVlczo6Q29uc3RyYWludHMg
eyB7IH0sIGF2YWlsYWJsZVdpZHRoIH0gfTsKLSAgICAgICAgcmV0dXJuIElubGluZUxheW91dCgq
dGhpcywgdXNlZEhvcml6b250YWxWYWx1ZXMpLmNvbXB1dGVkSW50cmluc2ljV2lkdGgoZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKSk7CisgICAgICAgIHJldHVybiBjb21wdXRlZEludHJp
bnNpY1dpZHRoRm9yQ29uc3RyYWludCh1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgfTsKIAog
ICAgIGF1dG8gY29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgo
cm9vdCgpLCB7IG1heGltdW1MaW5lV2lkdGgoMCksIG1heGltdW1MaW5lV2lkdGgoTGF5b3V0VW5p
dDo6bWF4KCkpIH0pOwpAQCAtMTkxLDYgKzIyMiwyNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJ
bgogICAgIHJldHVybiBjb25zdHJhaW50czsKIH0KIAorTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoVXNlZEhvcml6
b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgYXV0byYgaW5s
aW5lSXRlbXMgPSBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOworICAgIExheW91dFVu
aXQgbWF4aW11bUxpbmVXaWR0aDsKKyAgICBMaW5lTGF5b3V0OjpJbmRleEFuZFJhbmdlIGN1cnJl
bnRJbmxpbmVJdGVtOworICAgIHdoaWxlIChjdXJyZW50SW5saW5lSXRlbS5pbmRleCA8IGlubGlu
ZUl0ZW1zLnNpemUoKSkgeworICAgICAgICAvLyBPbmx5IHRoZSBob3JpenRvbmFsIGF2YWlsYWJs
ZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGluZyBpbnRyaW5zaWMgd2lkdGguCisg
ICAgICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJhaW50cyA9IExpbmU6OkluaXRpYWxDb25zdHJh
aW50cyB7IHsgfSwgdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMud2lkdGgsIGZhbHNl
LCB7IH0gfTsKKyAgICAgICAgYXV0byBsaW5lSW5wdXQgPSBMaW5lTGF5b3V0OjpMaW5lSW5wdXQg
eyBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMg
fTsKKworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gTGluZUxheW91dCgqdGhpcywgbGluZUlu
cHV0KS5sYXlvdXQoKTsKKworICAgICAgICBjdXJyZW50SW5saW5lSXRlbSA9IHsgbGluZUNvbnRl
bnQubGFzdENvbW1pdHRlZC0+aW5kZXggKyAxLCB7IH0gfTsKKyAgICAgICAgTGF5b3V0VW5pdCBm
bG9hdHNXaWR0aDsKKyAgICAgICAgZm9yIChhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5m
bG9hdHMpCisgICAgICAgICAgICBmbG9hdHNXaWR0aCArPSBnZW9tZXRyeUZvckJveChmbG9hdEl0
ZW0tPmxheW91dEJveCgpKS5tYXJnaW5Cb3hXaWR0aCgpOworICAgICAgICBtYXhpbXVtTGluZVdp
ZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVXaWR0aCwgZmxvYXRzV2lkdGggKyBsaW5lQ29udGVu
dC5saW5lQm94LmxvZ2ljYWxXaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1heGltdW1MaW5l
V2lkdGg7Cit9CisKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5z
aWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QsIFVzZWRI
b3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQogewogICAgIEFTU0VSVChmb3Jt
YXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwpAQCAtMzExLDYgKzM2
MywxMzUgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRl
bnQoKQogICAgIH0KIH0KIAorTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojppbml0aWFsQ29uc3RyYWludHNGb3JMaW5lKFVzZWRIb3Jpem9udGFsVmFsdWVz
IHVzZWRIb3Jpem9udGFsVmFsdWVzLCBjb25zdCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKQor
eworICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gZ2VvbWV0cnlGb3JCb3gocm9vdCgpKS5jb250
ZW50Qm94TGVmdCgpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZh
bHVlcy5jb25zdHJhaW50cy53aWR0aDsKKyAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCA9IGZhbHNlOworCisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQg
eyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAg
ICAvLyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9h
dmFpbGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KKyAgICBpZiAoIWZsb2F0
aW5nQ29udGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0g
ZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSk7CisgICAgICAg
IC8vIENoZWNrIGlmIHRoZXNlIGNvbnN0cmFpbnRzIGFjdHVhbGx5IHB1dCBsaW1pdGF0aW9uIG9u
IHRoZSBsaW5lLgorICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29u
c3RyYWludHMubGVmdC0+eCA8PSBsaW5lTG9naWNhbExlZnQpCisgICAgICAgICAgICBmbG9hdENv
bnN0cmFpbnRzLmxlZnQgPSB7IH07CisKKyAgICAgICAgYXV0byBsaW5lTG9naWNhbFJpZ2h0ID0g
Z2VvbWV0cnlGb3JCb3gocm9vdCgpKS5jb250ZW50Qm94UmlnaHQoKTsKKyAgICAgICAgaWYgKGZs
b2F0Q29uc3RyYWludHMucmlnaHQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5l
TG9naWNhbFJpZ2h0KQorICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsK
KworICAgICAgICBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmbG9hdENvbnN0cmFpbnRzLmxl
ZnQgfHwgZmxvYXRDb25zdHJhaW50cy5yaWdodDsKKworICAgICAgICBpZiAoZmxvYXRDb25zdHJh
aW50cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKKyAgICAgICAgICAgIEFTU0VS
VChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPD0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCk7
CisgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPngg
LSBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPng7CisgICAgICAgICAgICBsaW5lTG9naWNhbExlZnQg
PSBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPng7CisgICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25z
dHJhaW50cy5sZWZ0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0
LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7CisgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSAo
ZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IC0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAg
IGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAgfSBl
bHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxv
YXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAg
YXZhaWxhYmxlV2lkdGggPSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54IC0gbGluZUxvZ2ljYWxM
ZWZ0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBMaW5lOjpJbml0aWFsQ29uc3RyYWlu
dHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgs
IGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCwgcXVpcmtzKCkubGluZUhlaWdodENvbnN0cmFpbnRz
KHJvb3QoKSkgfTsKK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxh
eUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQs
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQoreworICAgIGF1dG8m
IGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOworCisgICAgaWYgKCFs
aW5lQ29udGVudC5mbG9hdHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmxvYXRpbmdDb250
ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlLmZs
b2F0aW5nU3RhdGUoKSB9OworICAgICAgICAvLyBNb3ZlIGZsb2F0cyB0byB0aGVpciBmaW5hbCBw
b3NpdGlvbi4KKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVu
dC5mbG9hdHMpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gZmxvYXRJdGVtLT5sYXlv
dXRCb3goKTsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUu
ZGlzcGxheUJveChmbG9hdEJveCk7CisgICAgICAgICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9u
IGZpcnN0LgorICAgICAgICAgICAgYXV0byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7
CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lQm94LmxvZ2ljYWxMZWZ0
KCksIGxpbmVCb3gubG9naWNhbFRvcCgpIH0pOworICAgICAgICAgICAgLy8gRmxvYXQgaXQuCisg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9u
Rm9yRmxvYXQoZmxvYXRCb3gpKTsKKyAgICAgICAgICAgIGZsb2F0aW5nQ29udGV4dC5hcHBlbmQo
ZmxvYXRCb3gpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGZpbmFsIGRpc3BsYXkg
cnVucyB0byBzdGF0ZS4KKyAgICBmb3IgKGF1dG8mIGxpbmVSdW4gOiBsaW5lQ29udGVudC5ydW5M
aXN0KSB7CisgICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXJzICg8c3Bhbj4pIGRvbid0
IGdlbmVyYXRlIGlubGluZSBydW5zLgorICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250YWluZXJT
dGFydCgpIHx8IGxpbmVSdW4tPmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihsaW5lUnVuLT5kaXNwbGF5
UnVuKCkpOworICAgIH0KKworICAgIC8vIENvbXB1dGUgYm94IGZpbmFsIGdlb21ldHJ5LgorICAg
IGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVuTGlzdDsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
YXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGluZGV4KTsKKyAgICAgICAgYXV0byYgbG9naWNh
bFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgpOworICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1h
dHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgaWYgKGxpbmVSdW4t
PmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChsb2dp
Y2FsUmVjdC50b3BMZWZ0KCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94
V2lkdGgobG9naWNhbFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hIZWlnaHQobG9naWNhbFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgYm94IChyZXBsYWNlZCBv
ciBpbmxpbmUtYmxvY2spCisgICAgICAgIGlmIChsaW5lUnVuLT5pc0JveCgpKSB7CisgICAgICAg
ICAgICBhdXRvIHRvcExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0KCk7CisgICAgICAgICAgICBp
ZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHRvcExl
ZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94
LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExl
ZnQodG9wTGVmdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIElubGluZSBsZXZlbCBjb250YWluZXIgc3RhcnQgKDxzcGFuPikKKyAgICAgICAgaWYgKGxp
bmVSdW4tPmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+
KQorICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAg
aWYgKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8gaW5mbG93T2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgICAgICAgICAgZGlz
cGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KGluZmxvd09mZnNldC53aWR0aCgpKTsKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5Qm94Lm1vdmVWZXJ0aWNhbGx5KGluZmxvd09mZnNldC5oZWlnaHQoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJveFdpZHRoID0gbG9naWNh
bFJlY3QubGVmdCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7CisgICAgICAgICAgICBhdXRvIGNvbnRl
bnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVl
T3IoMCkpOworICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCisgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOwor
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxpbmVSdW4tPmlzVGV4dCgpKSB7CisgICAgICAgICAgICBjb25zdCBMaW5lOjpSdW4qIHByZXZp
b3VzTGluZVJ1biA9ICFpbmRleCA/IG51bGxwdHIgOiBsaW5lUnVuc1tpbmRleCAtIDFdLmdldCgp
OworICAgICAgICAgICAgLy8gRklYTUUgdGFrZSBjb250ZW50IGJyZWFraW5nIGludG8gYWNjb3Vu
dCB3aGVuIHBhcnQgb2YgdGhlIGxheW91dCBib3ggaXMgb24gdGhlIHByZXZpb3VzIGxpbmUuCisg
ICAgICAgICAgICBhdXRvIGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94ID0gIXByZXZpb3VzTGlu
ZVJ1biB8fCAmcHJldmlvdXNMaW5lUnVuLT5sYXlvdXRCb3goKSAhPSAmbGF5b3V0Qm94OworICAg
ICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBsaW5lUnVuLT5pc1Zpc3VhbGx5RW1wdHkoKSA/
IExheW91dFVuaXQoKSA6IGxvZ2ljYWxSZWN0LndpZHRoKCk7CisgICAgICAgICAgICBpZiAoZmly
c3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3gpIHsKKyAgICAgICAgICAgICAgICAvLyBTZXR1cCBkaXNw
bGF5IGJveCBmb3IgdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveC4KKyAgICAgICAgICAgICAgICBk
aXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgICAg
ICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsV2lkdGgpOworICAgICAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChsb2dpY2FsUmVjdC5oZWln
aHQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FIGZp
eCBpdCBmb3IgbXVsdGlydW4vbXVsdGlsaW5lLgorICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gu
c2V0Q29udGVudEJveFdpZHRoKGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkgKyBsb2dpY2Fs
V2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRMaW5lQm94KGxpbmVDb250ZW50LmxpbmVCb3gpOworfQorCiB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDk5MmYzNzBlYTRmNjE5MDY0M2UwYmU4NmE1NDRi
ZGQzMWYwMmYzNzQuLmM2YzgxMzFkOTRiYWYwZTQwNTQ1YWYyOTVmODQyNjUyNGMzMzMxMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZS5oIgorI2luY2x1ZGUgIklubGluZUxpbmVMYXlvdXQu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUxLDI5ICs1Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBvdmVycmlkZTsKIAot
ICAgIGNsYXNzIElubGluZUxheW91dCB7Ci0gICAgcHVibGljOgotICAgICAgICBJbmxpbmVMYXlv
dXQoSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAg
ICAgIHZvaWQgbGF5b3V0KGNvbnN0IElubGluZUl0ZW1zJik7Ci0gICAgICAgIExheW91dFVuaXQg
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aChjb25zdCBJbmxpbmVJdGVtcyYpIGNvbnN0OwotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzIGluaXRpYWxDb25zdHJh
aW50c0ZvckxpbmUoY29uc3QgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0KLSAgICAgICAg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOyB9Ci0gICAgICAgIElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ7IH0KLSAgICAgICAgY29uc3QgQ29udGFpbmVyJiBmb3JtYXR0aW5nUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9vdCgpOyB9Ci0gICAgICAg
IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgeyByZXR1cm4gbV9pbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKTsgfQotICAgICAgICBMYXlvdXRV
bml0IHdpZHRoQ29uc3RyYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZEhvcml6b250YWxWYWx1
ZXMuY29uc3RyYWludHMud2lkdGg7IH0KLQotICAgICAgICBMaW5lQ29udGVudCBwbGFjZUlubGlu
ZUl0ZW1zKGNvbnN0IExpbmVJbnB1dCYpIGNvbnN0OwotICAgICAgICB2b2lkIHNldHVwRGlzcGxh
eUJveGVzKGNvbnN0IExpbmVDb250ZW50Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICAgICAg
VXNlZEhvcml6b250YWxWYWx1ZXMgbV91c2VkSG9yaXpvbnRhbFZhbHVlczsKLSAgICB9OwotCiAg
ICAgY2xhc3MgUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewogICAg
IHB1YmxpYzoKICAgICAgICAgYm9vbCBsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBM
aW5lOjpSdW5MaXN0JikgY29uc3Q7CkBAIC0xMDIsMjMgKzgwLDI2IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25z
dCB7IHJldHVybiBHZW9tZXRyeSgqdGhpcyk7IH0KIAorICAgIHZvaWQgbGluZUxheW91dChVc2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
Y29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7CiAg
ICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbEFuZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94Jiwg
VXNlZEhvcml6b250YWxWYWx1ZXMsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7CiAKICAgICB2b2lkIGNv
bXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYsIFVzZWRIb3Jp
em9udGFsVmFsdWVzKTsKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2Vk
SW5saW5lQm94KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGljYWxW
YWx1ZXMpOworICAgIExheW91dFVuaXQgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFp
bnQoVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlSG9yaXpv
bnRhbE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgdm9pZCBj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzLCBV
c2VkVmVydGljYWxWYWx1ZXMpOwogICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0
IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAogICAgIHZvaWQgY29sbGVjdElubGluZUNv
bnRlbnQoKTsKKyAgICBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMgaW5pdGlhbENvbnN0cmFpbnRz
Rm9yTGluZShVc2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgTGF5b3V0VW5pdCBsaW5lTG9naWNh
bFRvcCk7CisgICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXQ6
OkxpbmVDb250ZW50JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpOwogCiAgICAgY29uc3QgSW5saW5l
Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3Rh
dGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6
OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBzdHJ1
Y3R1cmUgdGhhdCByZXF1aXJlcyBubyBmcmllbmRpbmcuCiAgICAgZnJpZW5kIGNsYXNzIExpbmU7
Ci0gICAgZnJpZW5kIGNsYXNzIElubGluZUxheW91dDsKIH07CiAKIGlubGluZSBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxh
eW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlYWQ2MzZkNmFkZmRhOGMxNWVlM2RlNzQwMDg1NzhiZTc3OGNhODhiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGbG9hdGluZ0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0
dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZS5oIgotI2luY2x1ZGUgIklubGluZUxp
bmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29u
dGFpbmVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKLSNpbmNsdWRlICJUZXh0VXRpbC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RhdGljIExh
eW91dFVuaXQgaW5saW5lSXRlbVdpZHRoKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0
aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpCi17Ci0gICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0p
KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0
ZW0+KGlubGluZUl0ZW0pOwotICAgICAgICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29s
bGFwc2VkKCkgPyBpbmxpbmVUZXh0SXRlbS5zdGFydCgpICsgMSA6IGlubGluZVRleHRJdGVtLmVu
ZCgpOwotICAgICAgICByZXR1cm4gVGV4dFV0aWw6OndpZHRoKGlubGluZVRleHRJdGVtLmxheW91
dEJveCgpLCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBlbmQsIGNvbnRlbnRMb2dpY2FsTGVmdCk7
Ci0gICAgfQotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsK
LSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveCk7Ci0KLSAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkp
Ci0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hXaWR0aCgpOwotCi0gICAgaWYg
KGxheW91dEJveC5yZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgo
KTsKLQotICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgcmV0
dXJuIGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkg
KyBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0KLSAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2lu
RW5kKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcu
IGlubGluZS1ibG9jaykKLSAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsKLX0KLQotc3Ry
dWN0IEluZGV4QW5kUmFuZ2UgewotICAgIHVuc2lnbmVkIGluZGV4IHsgMCB9OwotICAgIHN0cnVj
dCBSYW5nZSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OwotICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggeyAwIH07Ci0gICAgfTsKLSAgICBPcHRpb25hbDxSYW5nZT4gcGFydGlhbENvbnRl
eHQ7Ci19OwotCi1zdHJ1Y3QgTGluZUlucHV0IHsKLSAgICBMaW5lSW5wdXQoY29uc3QgTGluZTo6
SW5pdGlhbENvbnN0cmFpbnRzJiwgVGV4dEFsaWduTW9kZSwgSW5kZXhBbmRSYW5nZSBmaXJzdFRv
UHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMmKTsKLSAgICBMaW5lSW5wdXQoY29uc3QgTGluZTo6
SW5pdGlhbENvbnN0cmFpbnRzJiwgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3Qg
SW5saW5lSXRlbXMmKTsKLQotICAgIExpbmU6OkluaXRpYWxDb25zdHJhaW50cyBpbml0aWFsQ29u
c3RyYWludHM7Ci0gICAgVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50OwotICAgIC8v
IEZJWE1FIEFsdGVybmF0aXZlbHkgd2UgY291bGQganVzdCBoYXZlIGEgc2Vjb25kIHBhc3Mgd2l0
aCB2ZXJ0aWNhbCBwb3NpdGlvbmluZyAocHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uIG9wdHMg
b3V0KSAKLSAgICBMaW5lOjpTa2lwQWxpZ25tZW50IHNraXBBbGlnbm1lbnQgeyBMaW5lOjpTa2lw
QWxpZ25tZW50OjpObyB9OwotICAgIEluZGV4QW5kUmFuZ2UgZmlyc3RJbmxpbmVJdGVtOwotICAg
IGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtczsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiBmbG9hdE1pbmltdW1Mb2dpY2FsQm90dG9tOwotfTsKLQotTGluZUlucHV0OjpMaW5lSW5wdXQo
Y29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBU
ZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1By
b2Nlc3MsIGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKLSAgICA6IGluaXRpYWxDb25z
dHJhaW50cyhpbml0aWFsTGluZUNvbnN0cmFpbnRzKQotICAgICwgaG9yaXpvbnRhbEFsaWdubWVu
dChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwgZmlyc3RJbmxpbmVJdGVtKGZpcnN0VG9Qcm9j
ZXNzKQotICAgICwgaW5saW5lSXRlbXMoaW5saW5lSXRlbXMpCi17Ci19Ci0KLUxpbmVJbnB1dDo6
TGluZUlucHV0KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYgaW5pdGlhbExpbmVDb25z
dHJhaW50cywgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRlbXMm
IGlubGluZUl0ZW1zKQotICAgIDogaW5pdGlhbENvbnN0cmFpbnRzKGluaXRpYWxMaW5lQ29uc3Ry
YWludHMpCi0gICAgLCBza2lwQWxpZ25tZW50KExpbmU6OlNraXBBbGlnbm1lbnQ6OlllcykKLSAg
ICAsIGZpcnN0SW5saW5lSXRlbShmaXJzdFRvUHJvY2VzcykKLSAgICAsIGlubGluZUl0ZW1zKGlu
bGluZUl0ZW1zKQotewotfQotCi1zdHJ1Y3QgTGluZUNvbnRlbnQgewotICAgIE9wdGlvbmFsPElu
ZGV4QW5kUmFuZ2U+IGxhc3RDb21taXR0ZWQ7Ci0gICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRl
bT4+IGZsb2F0czsKLSAgICBjb25zdCBMaW5lOjpSdW5MaXN0IHJ1bkxpc3Q7Ci0gICAgY29uc3Qg
TGluZUJveCBsaW5lQm94OwotfTsKLQotY2xhc3MgTGluZUxheW91dCB7Ci1wdWJsaWM6Ci0gICAg
TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IExpbmVJbnB1
dCYpOwotCi0gICAgTGluZUNvbnRlbnQgbGF5b3V0KCk7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIGVudW0gY2xhc3MgSXNFbmRPZkxp
bmUgeyBObywgWWVzIH07Ci0gICAgSXNFbmRPZkxpbmUgcGxhY2VJbmxpbmVJdGVtKGNvbnN0IElu
bGluZUl0ZW0mKTsKLSAgICB2b2lkIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7Ci0gICAgTGluZUNv
bnRlbnQgY2xvc2UoKTsKLSAgICAKLSAgICBzdHJ1Y3QgVW5jb21taXR0ZWRDb250ZW50IHsKLSAg
ICAgICAgc3RydWN0IFJ1biB7Ci0gICAgICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGg7Ci0gICAgICAgIH07Ci0g
ICAgICAgIHZvaWQgYWRkKGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLQotICAgICAgICBWZWN0b3I8UnVuPiBydW5zKCkg
eyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnM7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnMuaXNFbXB0eSgpOyB9Ci0gICAgICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkUnVucy5zaXplKCk7IH0KLSAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxSdW4+IG1fdW5jb21taXR0ZWRSdW5zOwotICAgICAg
ICBMYXlvdXRVbml0IG1fd2lkdGg7Ci0gICAgfTsKLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIGNvbnN0IExpbmVJbnB1
dCYgbV9saW5lSW5wdXQ7Ci0gICAgTGluZSBtX2xpbmU7Ci0gICAgTGluZUJyZWFrZXIgbV9saW5l
QnJlYWtlcjsKLSAgICBib29sIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKLSAg
ICBVbmNvbW1pdHRlZENvbnRlbnQgbV91bmNvbW1pdHRlZENvbnRlbnQ7Ci0gICAgdW5zaWduZWQg
bV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgeyAwIH07Ci0gICAgVmVjdG9yPFdlYWtQdHI8SW5s
aW5lSXRlbT4+IG1fZmxvYXRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4g
bV9sZWFkaW5nUGFydGlhbElubGluZVRleHRJdGVtOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxp
bmVUZXh0SXRlbT4gbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbTsKLX07Ci0KLXZvaWQg
TGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQoY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCi17Ci0gICAgbV91bmNvbW1pdHRlZFJ1
bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoIH0pOwotICAgIG1fd2lkdGggKz0g
bG9naWNhbFdpZHRoOwotfQotCi12b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6
cmVzZXQoKQotewotICAgIG1fdW5jb21taXR0ZWRSdW5zLmNsZWFyKCk7Ci0gICAgbV93aWR0aCA9
IDA7Ci19Ci0KLUxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBMaW5lSW5wdXQmIGxpbmVJbnB1
dCkKLSAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQpCi0gICAgLCBtX2xpbmVJbnB1dChsaW5lSW5wdXQpCi0gICAgLCBtX2xpbmUoaW5saW5lRm9y
bWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWludHMsIGxpbmVJbnB1dC5o
b3Jpem9udGFsQWxpZ25tZW50LCBsaW5lSW5wdXQuc2tpcEFsaWdubWVudCkKLSAgICAsIG1fbGlu
ZUhhc0ludHJ1c2l2ZUZsb2F0KGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWludHMubGluZUlzQ29u
c3RyYWluZWRCeUZsb2F0KQotewotfQotCi12b2lkIExpbmVMYXlvdXQ6OmNvbW1pdFBlbmRpbmdD
b250ZW50KCkKLXsKLSAgICBpZiAobV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKz0gbV91bmNvbW1p
dHRlZENvbnRlbnQuc2l6ZSgpOwotICAgIGZvciAoYXV0byYgdW5jb21taXR0ZWRSdW4gOiBtX3Vu
Y29tbWl0dGVkQ29udGVudC5ydW5zKCkpCi0gICAgICAgIG1fbGluZS5hcHBlbmQodW5jb21taXR0
ZWRSdW4uaW5saW5lSXRlbSwgdW5jb21taXR0ZWRSdW4ubG9naWNhbFdpZHRoKTsKLSAgICBtX3Vu
Y29tbWl0dGVkQ29udGVudC5yZXNldCgpOwotfQotCi1MaW5lQ29udGVudCBMaW5lTGF5b3V0Ojpj
bG9zZSgpCi17Ci0gICAgQVNTRVJUKG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHx8IG1fbGlu
ZUhhc0ludHJ1c2l2ZUZsb2F0KTsKLSAgICBpZiAoIW1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50
KQotICAgICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBXVEY6Om51bGxvcHQsIFdURk1vdmUobV9m
bG9hdHMpLCBtX2xpbmUuY2xvc2UoKSwgbV9saW5lLmxpbmVCb3goKSB9OwotCi0gICAgYXV0byBs
YXN0SW5saW5lSXRlbUluZGV4ID0gbV9saW5lSW5wdXQuZmlyc3RJbmxpbmVJdGVtLmluZGV4ICsg
bV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgLSAxOwotICAgIE9wdGlvbmFsPEluZGV4QW5kUmFu
Z2U6OlJhbmdlPiBwYXJ0aWFsQ29udGV4dDsKLSAgICBpZiAobV90cmFpbGluZ1BhcnRpYWxJbmxp
bmVUZXh0SXRlbSkKLSAgICAgICAgcGFydGlhbENvbnRleHQgPSBJbmRleEFuZFJhbmdlOjpSYW5n
ZSB7IG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0tPnN0YXJ0KCksIG1fdHJhaWxpbmdQ
YXJ0aWFsSW5saW5lVGV4dEl0ZW0tPmxlbmd0aCgpIH07Ci0KLSAgICBhdXRvIGxhc3RDb21taXRl
ZEl0ZW0gPSBJbmRleEFuZFJhbmdlIHsgbGFzdElubGluZUl0ZW1JbmRleCwgcGFydGlhbENvbnRl
eHQgfTsKLSAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBsYXN0Q29tbWl0ZWRJdGVtLCBXVEZNb3Zl
KG1fZmxvYXRzKSwgbV9saW5lLmNsb3NlKCksIG1fbGluZS5saW5lQm94KCkgfTsKLX0KLQotTGlu
ZUxheW91dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fbGlu
ZS5hdmFpbGFibGVXaWR0aCgpIC0gbV91bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKTsKLSAgICBh
dXRvIGN1cnJlbnRMb2dpY2FsUmlnaHQgPSBtX2xpbmUubGluZUJveCgpLmxvZ2ljYWxSaWdodCgp
ICsgbV91bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKTsKLSAgICBhdXRvIGl0ZW1Mb2dpY2FsV2lk
dGggPSBpbmxpbmVJdGVtV2lkdGgoZm9ybWF0dGluZ0NvbnRleHQoKSwgaW5saW5lSXRlbSwgY3Vy
cmVudExvZ2ljYWxSaWdodCk7Ci0KLSAgICAvLyBGSVhNRTogRW5zdXJlIExpbmVDb250ZXh0Ojp0
cmltbWFibGVXaWR0aCBpbmNsdWRlcyB1bmNvbW1pdHRlZCBjb250ZW50IGlmIG5lZWRlZC4KLSAg
ICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9ICFtX2xpbmUuaGFzQ29udGVudCgpICYmICFt
X2xpbmVIYXNJbnRydXNpdmVGbG9hdDsKLSAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IG1fbGlu
ZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KGlubGluZUl0ZW0sIGl0ZW1Mb2dpY2FsV2lkdGgsIHsg
YXZhaWxhYmxlV2lkdGgsIGN1cnJlbnRMb2dpY2FsUmlnaHQsIG1fbGluZS50cmFpbGluZ1RyaW1t
YWJsZVdpZHRoKCksIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSB9KTsKLSAgICBpZiAoYnJlYWtpbmdD
b250ZXh0LmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KQotICAgICAgICBjb21taXRQZW5kaW5nQ29u
dGVudCgpOwotCi0gICAgLy8gQ29udGVudCBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgbGluZS4K
LSAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6
OkJyZWFraW5nQmVoYXZpb3I6OldyYXApCi0gICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6WWVz
OwotCi0gICAgLy8gUGFydGlhbCBjb250ZW50IHN0YXlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0g
ICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpC
cmVha2luZ0JlaGF2aW9yOjpTcGxpdCkgewotICAgICAgICBBU1NFUlQoaW5saW5lSXRlbS5pc1Rl
eHQoKSk7Ci0gICAgICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4
dEl0ZW0+KGlubGluZUl0ZW0pOwotICAgICAgICBhdXRvIHNwbGl0RGF0YSA9IFRleHRVdGlsOjpz
cGxpdChpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwg
aW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGl0ZW1Mb2dpY2FsV2lkdGgsIGF2YWlsYWJsZVdpZHRo
LCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKLSAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFydGlhbCB0
cmFpbGluZyBpbmxpbmUgaXRlbS4KLSAgICAgICAgQVNTRVJUKCFtX3RyYWlsaW5nUGFydGlhbElu
bGluZVRleHRJdGVtKTsKLSAgICAgICAgbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSA9
IGlubGluZVRleHRJdGVtLnNwbGl0KHNwbGl0RGF0YS5zdGFydCwgc3BsaXREYXRhLmxlbmd0aCk7
Ci0gICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFkZCgqbV90cmFpbGluZ1BhcnRpYWxJbmxp
bmVUZXh0SXRlbSwgc3BsaXREYXRhLmxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGNvbW1pdFBlbmRp
bmdDb250ZW50KCk7Ci0gICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6WWVzOwotICAgIH0KLQot
ICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtl
cjo6QnJlYWtpbmdCZWhhdmlvcjo6S2VlcCk7Ci0gICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgp
KSB7Ci0gICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAg
ICAgICAgLy8gU2hyaW5rIGF2YWlsYWJsZSBzcGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3Zl
IGV4aXN0aW5nIGlubGluZSBydW5zLgotICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0Qm94KS5tYXJnaW5Cb3hXaWR0aCgp
OwotICAgICAgICBmbG9hdEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IG1fbGluZS5t
b3ZlTG9naWNhbExlZnQoZmxvYXRCb3hXaWR0aCkgOiBtX2xpbmUubW92ZUxvZ2ljYWxSaWdodChm
bG9hdEJveFdpZHRoKTsKLSAgICAgICAgbV9mbG9hdHMuYXBwZW5kKG1ha2VXZWFrUHRyKGlubGlu
ZUl0ZW0pKTsKLSAgICAgICAgKyttX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudDsKLSAgICAgICAg
bV9saW5lSGFzSW50cnVzaXZlRmxvYXQgPSB0cnVlOwotICAgICAgICByZXR1cm4gSXNFbmRPZkxp
bmU6Ok5vOwotICAgIH0KLQotICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFkZChpbmxpbmVJdGVt
LCBpdGVtTG9naWNhbFdpZHRoKTsKLSAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2lu
Z09wcG9ydHVuaXR5KQotICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwotCi0gICAgcmV0
dXJuIGlubGluZUl0ZW0uaXNIYXJkTGluZUJyZWFrKCkgPyBJc0VuZE9mTGluZTo6WWVzIDogSXNF
bmRPZkxpbmU6Ok5vOwotfQotCi1MaW5lQ29udGVudCBMaW5lTGF5b3V0OjpsYXlvdXQoKQotewot
ICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBsYWNlIHRoZSBp
bmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAvLyBTdGFydCB3aXRoIHRoZSBw
YXJ0aWFsIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZS4KLSAgICBhdXRvIGZpcnN0SW5saW5l
SXRlbSA9IG1fbGluZUlucHV0LmZpcnN0SW5saW5lSXRlbTsKLSAgICB1bnNpZ25lZCBmaXJzdE5v
blBhcnRpYWxJbmRleCA9IGZpcnN0SW5saW5lSXRlbS5pbmRleDsKLSAgICBpZiAoZmlyc3RJbmxp
bmVJdGVtLnBhcnRpYWxDb250ZXh0KSB7Ci0gICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGlubGlu
ZSBpdGVtIChzcGxpdCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUpLgotICAgICAgICBhdXRv
JiBvcmlnaW5hbFRleHRJdGVtID0gbV9saW5lSW5wdXQuaW5saW5lSXRlbXNbZmlyc3RJbmxpbmVJ
dGVtLmluZGV4XTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob3JpZ2luYWxUZXh0SXRlbS0+aXNU
ZXh0KCkpOwotCi0gICAgICAgIGF1dG8gdGV4dFJhbmdlID0gKmZpcnN0SW5saW5lSXRlbS5wYXJ0
aWFsQ29udGV4dDsKLSAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFydGlhbCBsZWFkaW5nIGlubGlu
ZSBpdGVtLgotICAgICAgICBBU1NFUlQoIW1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7
Ci0gICAgICAgIG1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGlu
ZVRleHRJdGVtPigqb3JpZ2luYWxUZXh0SXRlbSkuc3BsaXQodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0
UmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYgKHBsYWNlSW5saW5lSXRlbSgqbV9sZWFkaW5nUGFy
dGlhbElubGluZVRleHRJdGVtKSA9PSBJc0VuZE9mTGluZTo6WWVzKQotICAgICAgICAgICAgcmV0
dXJuIGNsb3NlKCk7Ci0gICAgICAgICsrZmlyc3ROb25QYXJ0aWFsSW5kZXg7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvIGlubGluZUl0ZW1JbmRleCA9IGZpcnN0Tm9uUGFydGlhbEluZGV4OyBpbmxp
bmVJdGVtSW5kZXggPCBtX2xpbmVJbnB1dC5pbmxpbmVJdGVtcy5zaXplKCk7ICsraW5saW5lSXRl
bUluZGV4KSB7Ci0gICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0oKm1fbGluZUlucHV0LmlubGlu
ZUl0ZW1zW2lubGluZUl0ZW1JbmRleF0pID09IElzRW5kT2ZMaW5lOjpZZXMpCi0gICAgICAgICAg
ICByZXR1cm4gY2xvc2UoKTsKLSAgICB9Ci0gICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKLSAg
ICByZXR1cm4gY2xvc2UoKTsKLX0KLQotSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxh
eW91dDo6SW5saW5lTGF5b3V0KElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpCi0g
ICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQot
ICAgICwgbV91c2VkSG9yaXpvbnRhbFZhbHVlcyh1c2VkSG9yaXpvbnRhbFZhbHVlcykKLXsKLX0K
LQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpsYXlvdXQoY29u
c3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQotewotICAgIGF1dG8gbGluZUxvZ2ljYWxUb3Ag
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KCkpLmNv
bnRlbnRCb3hUb3AoKTsKLSAgICBJbmRleEFuZFJhbmdlIGN1cnJlbnRJbmxpbmVJdGVtOwotICAg
IHdoaWxlIChjdXJyZW50SW5saW5lSXRlbS5pbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkgewot
ICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVJbnB1dCB7IGluaXRpYWxDb25zdHJhaW50c0Zv
ckxpbmUobGluZUxvZ2ljYWxUb3ApLCBmb3JtYXR0aW5nUm9vdCgpLnN0eWxlKCkudGV4dEFsaWdu
KCksIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVtcyB9OwotICAgICAgICBhdXRvIGxpbmVM
YXlvdXQgPSBMaW5lTGF5b3V0IHsgZm9ybWF0dGluZ0NvbnRleHQoKSwgbGluZUlucHV0IH07Ci0K
LSAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXQubGF5b3V0KCk7Ci0gICAgICAg
IHNldHVwRGlzcGxheUJveGVzKGxpbmVDb250ZW50KTsKLQotICAgICAgICBpZiAobGluZUNvbnRl
bnQubGFzdENvbW1pdHRlZCkgewotICAgICAgICAgICAgY3VycmVudElubGluZUl0ZW0gPSB7IGxp
bmVDb250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4ICsgMSwgV1RGOjpudWxsb3B0IH07Ci0gICAg
ICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbEJvdHRv
bSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1
cyBwbGFjaW5nIGFueSBjb250ZW50IG9uIHRoZSBsaW5lLgotICAgICAgICAgICAgQVNTRVJUKGxp
bmVJbnB1dC5pbml0aWFsQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KTsKLSAg
ICAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0
LgotICAgICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBm
b3JtYXR0aW5nUm9vdCgpLCBmb3JtYXR0aW5nQ29udGV4dCgpLCBmb3JtYXR0aW5nU3RhdGUoKS5m
bG9hdGluZ1N0YXRlKCkgfTsKLSAgICAgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZs
b2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh7IGxpbmVMb2dpY2FsVG9wIH0pOwotICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0
KTsKLSAgICAgICAgICAgIHN0YXRpYyBhdXRvIGluaWZpdGVQb2ludCA9IFBvaW50SW5Db250ZXh0
Um9vdDo6bWF4KCk7Ci0gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxlZnQgYW5kIHJpZ2h0IGNv
bnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhlIG9uZSB0aGF0J3MgY2xvc2VyIHRvIHRoZSBj
dXJyZW50IGxpbmUuCi0gICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IHN0ZDo6bWluKGZsb2F0
Q29uc3RyYWludHMubGVmdC52YWx1ZU9yKGluaWZpdGVQb2ludCkueSwgZmxvYXRDb25zdHJhaW50
cy5yaWdodC52YWx1ZU9yKGluaWZpdGVQb2ludCkueSk7Ci0gICAgICAgICAgICBBU1NFUlQobGlu
ZUxvZ2ljYWxUb3AgPCBpbmlmaXRlUG9pbnQueSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUxp
bmU6OkluaXRpYWxDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5
b3V0Ojppbml0aWFsQ29uc3RyYWludHNGb3JMaW5lKGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2lj
YWxUb3ApCi17Ci0gICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KCkpLmNvbnRlbnRCb3hMZWZ0KCk7Ci0gICAg
YXV0byBhdmFpbGFibGVXaWR0aCA9IHdpZHRoQ29uc3RyYWludCgpOwotICAgIGF1dG8gbGluZUlz
Q29uc3RyYWluZWRCeUZsb2F0ID0gZmFsc2U7Ci0KLSAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9
IEZsb2F0aW5nQ29udGV4dCB7IGZvcm1hdHRpbmdSb290KCksIGZvcm1hdHRpbmdDb250ZXh0KCks
IGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9OwotICAgIC8vIENoZWNrIGZvciBp
bnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0aCBm
b3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgotICAgIGlmICghZmxvYXRpbmdDb250ZXh0LmlzRW1w
dHkoKSkgewotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQu
Y29uc3RyYWludHMoeyBsaW5lTG9naWNhbFRvcCB9KTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhl
c2UgY29uc3RyYWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCi0gICAg
ICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
IDw9IGxpbmVMb2dpY2FsTGVmdCkKLSAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9
IHsgfTsKLQotICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KCkpLmNvbnRlbnRCb3hSaWdodCgpOwot
ICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0LT54ID49IGxpbmVMb2dpY2FsUmlnaHQpCi0gICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0ID0geyB9OwotCi0gICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0
Q29uc3RyYWludHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OwotCi0gICAgICAgIGlm
IChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAg
ICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0LT54KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gZmxvYXRDb25zdHJh
aW50cy5yaWdodC0+eCAtIGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKLSAgICAgICAgICAgIGxp
bmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKLSAgICAgICAgfSBlbHNl
IGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQpIHsKLSAgICAgICAgICAgIEFTU0VSVChmbG9hdENv
bnN0cmFpbnRzLmxlZnQtPnggPj0gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWls
YWJsZVdpZHRoIC09IChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggLSBsaW5lTG9naWNhbExlZnQp
OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
OwotICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7
Ci0gICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPngg
LSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIExpbmU6Oklu
aXRpYWxDb25zdHJhaW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBh
dmFpbGFibGVXaWR0aCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0LCBmb3JtYXR0aW5nQ29udGV4
dCgpLnF1aXJrcygpLmxpbmVIZWlnaHRDb25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCgpKSB9Owot
fQotCi1MYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNv
bXB1dGVkSW50cmluc2ljV2lkdGgoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKSBjb25z
dAotewotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRl
eHQoKTsKLSAgICBMYXlvdXRVbml0IG1heGltdW1MaW5lV2lkdGg7Ci0gICAgSW5kZXhBbmRSYW5n
ZSBjdXJyZW50SW5saW5lSXRlbTsKLSAgICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXgg
PCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKLSAgICAgICAgLy8gT25seSB0aGUgaG9yaXp0b25hbCBh
dmFpbGFibGUgd2lkdGggaXMgY29uc3RyYWluZWQgd2hlbiBjb21wdXRpbmcgaW50cmluc2ljIHdp
ZHRoLgotICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBMaW5lOjpJbml0aWFs
Q29uc3RyYWludHMgeyB7IH0sIHdpZHRoQ29uc3RyYWludCgpLCBmYWxzZSwgeyB9IH07Ci0gICAg
ICAgIGF1dG8gbGluZUlucHV0ID0gTGluZUlucHV0IHsgaW5pdGlhbExpbmVDb25zdHJhaW50cywg
Y3VycmVudElubGluZUl0ZW0sIGlubGluZUl0ZW1zIH07Ci0KLSAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IExpbmVMYXlvdXQoZm9ybWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1dCkubGF5b3V0KCk7
Ci0KLSAgICAgICAgY3VycmVudElubGluZUl0ZW0gPSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0
ZWQtPmluZGV4ICsgMSwgeyB9IH07Ci0gICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7Ci0g
ICAgICAgIGZvciAoYXV0byYgZmxvYXRJdGVtIDogbGluZUNvbnRlbnQuZmxvYXRzKQotICAgICAg
ICAgICAgZmxvYXRzV2lkdGggKz0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goZmxv
YXRJdGVtLT5sYXlvdXRCb3goKSkubWFyZ2luQm94V2lkdGgoKTsKLSAgICAgICAgbWF4aW11bUxp
bmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRoICsgbGluZUNv
bnRlbnQubGluZUJveC5sb2dpY2FsV2lkdGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBtYXhpbXVt
TGluZVdpZHRoOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlv
dXQ6OnNldHVwRGlzcGxheUJveGVzKGNvbnN0IExpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsK
LSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7
Ci0gICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0g
ICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5nUm9v
dCgpLCBmb3JtYXR0aW5nQ29udGV4dCwgZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9
OwotCi0gICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhlaXIgZmluYWwgcG9zaXRpb24uCi0gICAgZm9y
IChjb25zdCBhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5mbG9hdHMpIHsKLSAgICAgICAg
YXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxheW91dEJveCgpOwotICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3goZmxvYXRCb3gpOwotICAgICAg
ICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgotICAgICAgICBhdXRvJiBsaW5lQm94ID0g
bGluZUNvbnRlbnQubGluZUJveDsKLSAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGlu
ZUJveC5sb2dpY2FsTGVmdCgpLCBsaW5lQm94LmxvZ2ljYWxUb3AoKSB9KTsKLSAgICAgICAgLy8g
RmxvYXQgaXQuCi0gICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQu
cG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCkpOwotICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBw
ZW5kKGZsb2F0Qm94KTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRv
IHN0YXRlLgotICAgIGZvciAoYXV0byYgbGluZVJ1biA6IGxpbmVDb250ZW50LnJ1bkxpc3QpIHsK
LSAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lcnMgKDxzcGFuPikgZG9uJ3QgZ2VuZXJh
dGUgaW5saW5lIHJ1bnMuCi0gICAgICAgIGlmIChsaW5lUnVuLT5pc0NvbnRhaW5lclN0YXJ0KCkg
fHwgbGluZVJ1bi0+aXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lUnVuKGxpbmVSdW4tPmRpc3BsYXlSdW4oKSk7
Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCi0gICAgYXV0byBn
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCk7Ci0gICAgYXV0byYgbGluZVJ1
bnMgPSBsaW5lQ29udGVudC5ydW5MaXN0OwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGxpbmVSdW5zLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBsaW5lUnVu
ID0gbGluZVJ1bnMuYXQoaW5kZXgpOwotICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVS
dW4tPmxvZ2ljYWxSZWN0KCk7Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4tPmxh
eW91dEJveCgpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRp
c3BsYXlCb3gobGF5b3V0Qm94KTsKLQotICAgICAgICBpZiAobGluZVJ1bi0+aXNMaW5lQnJlYWso
KSkgewotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExl
ZnQoKSk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2Fs
UmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdo
dChsb2dpY2FsUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIElubGluZSBsZXZlbCBib3ggKHJlcGxhY2VkIG9yIGlubGluZS1ibG9j
aykKLSAgICAgICAgaWYgKGxpbmVSdW4tPmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdG9w
TGVmdCA9IGxvZ2ljYWxSZWN0LnRvcExlZnQoKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgdG9wTGVmdCArPSBnZW9tZXRy
eS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBtX3VzZWRIb3Jpem9u
dGFsVmFsdWVzKTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b3BMZWZ0KTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5saW5lIGxl
dmVsIGNvbnRhaW5lciBzdGFydCAoPHNwYW4+KQotICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250
YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNh
bFJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lciBlbmQgKDwvc3Bhbj4pCi0gICAgICAgIGlm
IChsaW5lUnVuLT5pc0NvbnRhaW5lckVuZCgpKSB7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94
LmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZz
ZXQgPSBnZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBt
X3VzZWRIb3Jpem9udGFsVmFsdWVzKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVI
b3Jpem9udGFsbHkoaW5mbG93T2Zmc2V0LndpZHRoKCkpOwotICAgICAgICAgICAgICAgIGRpc3Bs
YXlCb3gubW92ZVZlcnRpY2FsbHkoaW5mbG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBsb2dpY2FsUmVjdC5sZWZ0KCkg
LSBkaXNwbGF5Qm94LmxlZnQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRoID0g
bWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5i
b3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7Ci0gICAg
ICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KLSAgICAgICAgICAgIGRpc3Bs
YXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRCb3hXaWR0aCk7Ci0gICAgICAgICAgICBk
aXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQobG9naWNhbFJlY3QuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGluZVJ1bi0+aXNU
ZXh0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IExpbmU6OlJ1biogcHJldmlvdXNMaW5lUnVuID0g
IWluZGV4ID8gbnVsbHB0ciA6IGxpbmVSdW5zW2luZGV4IC0gMV0uZ2V0KCk7Ci0gICAgICAgICAg
ICAvLyBGSVhNRSB0YWtlIGNvbnRlbnQgYnJlYWtpbmcgaW50byBhY2NvdW50IHdoZW4gcGFydCBv
ZiB0aGUgbGF5b3V0IGJveCBpcyBvbiB0aGUgcHJldmlvdXMgbGluZS4KLSAgICAgICAgICAgIGF1
dG8gZmlyc3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3ggPSAhcHJldmlvdXNMaW5lUnVuIHx8ICZwcmV2
aW91c0xpbmVSdW4tPmxheW91dEJveCgpICE9ICZsYXlvdXRCb3g7Ci0gICAgICAgICAgICBhdXRv
IGxvZ2ljYWxXaWR0aCA9IGxpbmVSdW4tPmlzVmlzdWFsbHlFbXB0eSgpID8gTGF5b3V0VW5pdCgp
IDogbG9naWNhbFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChmaXJzdElubGluZVJ1bkZv
ckxheW91dEJveCkgewotICAgICAgICAgICAgICAgIC8vIFNldHVwIGRpc3BsYXkgYm94IGZvciB0
aGUgYXNzb2NpYXRlZCBsYXlvdXQgYm94LgotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdChsb2dpY2FsUmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3guc2V0Q29udGVudEJveFdpZHRoKGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICAgICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0
aXJ1bi9tdWx0aWxpbmUuCi0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94
V2lkdGgoZGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKSArIGxvZ2ljYWxXaWR0aCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3go
bGluZUNvbnRlbnQubGluZUJveCk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3Rh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdTdGF0ZS5oCmluZGV4IGU0NTQ4NzY3Y2Q3N2FjNjliNWJjYzZkZDc5ODY1NTE4N2RkMGNm
MWUuLmE0YjA0NmQzNGFlOWE0MmQyNTc5Y2RkNzc5NmRlM2Y4NTUxM2ZjZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdT
dGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JbmxpbmVGb3JtYXR0aW5nU3RhdGUoKTsKIAogICAgIElubGluZUl0ZW1zJiBpbmxpbmVJdGVt
cygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KKyAgICBjb25zdCBJbmxpbmVJdGVtcyYgaW5s
aW5lSXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW1zOyB9CiAgICAgdm9pZCBhZGRJ
bmxpbmVJdGVtKHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPiYmIGlubGluZUl0ZW0pIHsgbV9p
bmxpbmVJdGVtcy5hcHBlbmQoV1RGTW92ZShpbmxpbmVJdGVtKSk7IH0KIAogICAgIElubGluZVJ1
bnMmIGlubGluZVJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTU5OTA0NmNjYzQyNjZmM2YzODM3ZmYyOGU0ZTJiMTg1MDc3ZWU5
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVMYXlvdXQuY3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGluZUxpbmVMYXlvdXQuaCIKKworI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRmxvYXRpbmdD
b250ZXh0LmgiCisjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIlRleHRV
dGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0
aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsTGVmdCkKK3sKKyAgICBpZiAoaW5saW5lSXRlbS5pc0xpbmVCcmVhaygp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5l
SXRlbSkpIHsKKyAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVU
ZXh0SXRlbT4oaW5saW5lSXRlbSk7CisgICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEl0ZW0u
aXNDb2xsYXBzZWQoKSA/IGlubGluZVRleHRJdGVtLnN0YXJ0KCkgKyAxIDogaW5saW5lVGV4dEl0
ZW0uZW5kKCk7CisgICAgICAgIHJldHVybiBUZXh0VXRpbDo6d2lkdGgoaW5saW5lVGV4dEl0ZW0u
bGF5b3V0Qm94KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGVuZCwgY29udGVudExvZ2ljYWxM
ZWZ0KTsKKyAgICB9CisKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJv
eCgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKworICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveFdpZHRoKCk7CisKKyAg
ICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS53
aWR0aCgpOworCisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAg
ICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSArIGJveEdlb21ldHJ5LmJvcmRlckxl
ZnQoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKworICAgIGlmIChp
bmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5t
YXJnaW5FbmQoKSArIGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCkgKyBib3hHZW9tZXRyeS5wYWRk
aW5nUmlnaHQoKS52YWx1ZU9yKDApOworCisgICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3gg
KGUuZy4gaW5saW5lLWJsb2NrKQorICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOworfQor
CitMaW5lTGF5b3V0OjpMaW5lSW5wdXQ6OkxpbmVJbnB1dChjb25zdCBMaW5lOjpJbml0aWFsQ29u
c3RyYWludHMmIGluaXRpYWxMaW5lQ29uc3RyYWludHMsIFRleHRBbGlnbk1vZGUgaG9yaXpvbnRh
bEFsaWdubWVudCwgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUl0ZW1zKQorICAgIDogaW5pdGlhbENvbnN0cmFpbnRzKGluaXRpYWxMaW5lQ29u
c3RyYWludHMpCisgICAgLCBob3Jpem9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQp
CisgICAgLCBmaXJzdElubGluZUl0ZW0oZmlyc3RUb1Byb2Nlc3MpCisgICAgLCBpbmxpbmVJdGVt
cyhpbmxpbmVJdGVtcykKK3sKK30KKworTGluZUxheW91dDo6TGluZUlucHV0OjpMaW5lSW5wdXQo
Y29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBJ
bmRleEFuZFJhbmdlIGZpcnN0VG9Qcm9jZXNzLCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMpCisgICAgOiBpbml0aWFsQ29uc3RyYWludHMoaW5pdGlhbExpbmVDb25zdHJhaW50cykKKyAg
ICAsIHNraXBBbGlnbm1lbnQoTGluZTo6U2tpcEFsaWdubWVudDo6WWVzKQorICAgICwgZmlyc3RJ
bmxpbmVJdGVtKGZpcnN0VG9Qcm9jZXNzKQorICAgICwgaW5saW5lSXRlbXMoaW5saW5lSXRlbXMp
Cit7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCit7CisgICAg
bV91bmNvbW1pdHRlZFJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoIH0pOwor
ICAgIG1fd2lkdGggKz0gbG9naWNhbFdpZHRoOworfQorCit2b2lkIExpbmVMYXlvdXQ6OlVuY29t
bWl0dGVkQ29udGVudDo6cmVzZXQoKQoreworICAgIG1fdW5jb21taXR0ZWRSdW5zLmNsZWFyKCk7
CisgICAgbV93aWR0aCA9IDA7Cit9CisKK0xpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBMaW5l
SW5wdXQmIGxpbmVJbnB1dCkKKyAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2xpbmVJbnB1dChsaW5lSW5wdXQpCisgICAgLCBt
X2xpbmUoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1dC5pbml0aWFsQ29uc3RyYWlu
dHMsIGxpbmVJbnB1dC5ob3Jpem9udGFsQWxpZ25tZW50LCBsaW5lSW5wdXQuc2tpcEFsaWdubWVu
dCkKKyAgICAsIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0KGxpbmVJbnB1dC5pbml0aWFsQ29uc3Ry
YWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KQoreworfQorCitMaW5lTGF5b3V0OjpMaW5l
Q29udGVudCBMaW5lTGF5b3V0OjpsYXlvdXQoKQoreworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0
aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBsYWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJl
bnQgbGluZS4KKyAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJ0aWFsIHRleHQgZnJvbSB0aGUgcHJl
dmlvdXMgbGluZS4KKyAgICBhdXRvIGZpcnN0SW5saW5lSXRlbSA9IG1fbGluZUlucHV0LmZpcnN0
SW5saW5lSXRlbTsKKyAgICB1bnNpZ25lZCBmaXJzdE5vblBhcnRpYWxJbmRleCA9IGZpcnN0SW5s
aW5lSXRlbS5pbmRleDsKKyAgICBpZiAoZmlyc3RJbmxpbmVJdGVtLnBhcnRpYWxDb250ZXh0KSB7
CisgICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGlubGluZSBpdGVtIChzcGxpdCB0ZXh0IGZyb20g
dGhlIHByZXZpb3VzIGxpbmUpLgorICAgICAgICBhdXRvJiBvcmlnaW5hbFRleHRJdGVtID0gbV9s
aW5lSW5wdXQuaW5saW5lSXRlbXNbZmlyc3RJbmxpbmVJdGVtLmluZGV4XTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQob3JpZ2luYWxUZXh0SXRlbS0+aXNUZXh0KCkpOworCisgICAgICAgIGF1dG8g
dGV4dFJhbmdlID0gKmZpcnN0SW5saW5lSXRlbS5wYXJ0aWFsQ29udGV4dDsKKyAgICAgICAgLy8g
Q29uc3RydWN0IGEgcGFydGlhbCBsZWFkaW5nIGlubGluZSBpdGVtLgorICAgICAgICBBU1NFUlQo
IW1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7CisgICAgICAgIG1fbGVhZGluZ1BhcnRp
YWxJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPigqb3JpZ2luYWxUZXh0
SXRlbSkuc3BsaXQodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKTsKKyAgICAgICAg
aWYgKHBsYWNlSW5saW5lSXRlbSgqbV9sZWFkaW5nUGFydGlhbElubGluZVRleHRJdGVtKSA9PSBJ
c0VuZE9mTGluZTo6WWVzKQorICAgICAgICAgICAgcmV0dXJuIGNsb3NlKCk7CisgICAgICAgICsr
Zmlyc3ROb25QYXJ0aWFsSW5kZXg7CisgICAgfQorCisgICAgZm9yIChhdXRvIGlubGluZUl0ZW1J
bmRleCA9IGZpcnN0Tm9uUGFydGlhbEluZGV4OyBpbmxpbmVJdGVtSW5kZXggPCBtX2xpbmVJbnB1
dC5pbmxpbmVJdGVtcy5zaXplKCk7ICsraW5saW5lSXRlbUluZGV4KSB7CisgICAgICAgIGlmIChw
bGFjZUlubGluZUl0ZW0oKm1fbGluZUlucHV0LmlubGluZUl0ZW1zW2lubGluZUl0ZW1JbmRleF0p
ID09IElzRW5kT2ZMaW5lOjpZZXMpCisgICAgICAgICAgICByZXR1cm4gY2xvc2UoKTsKKyAgICB9
CisgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKyAgICByZXR1cm4gY2xvc2UoKTsKK30KKwor
dm9pZCBMaW5lTGF5b3V0Ojpjb21taXRQZW5kaW5nQ29udGVudCgpCit7CisgICAgaWYgKG1fdW5j
b21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tbWl0
dGVkSW5saW5lSXRlbUNvdW50ICs9IG1fdW5jb21taXR0ZWRDb250ZW50LnNpemUoKTsKKyAgICBm
b3IgKGF1dG8mIHVuY29tbWl0dGVkUnVuIDogbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKQor
ICAgICAgICBtX2xpbmUuYXBwZW5kKHVuY29tbWl0dGVkUnVuLmlubGluZUl0ZW0sIHVuY29tbWl0
dGVkUnVuLmxvZ2ljYWxXaWR0aCk7CisgICAgbV91bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsK
K30KKworTGluZUxheW91dDo6TGluZUNvbnRlbnQgTGluZUxheW91dDo6Y2xvc2UoKQoreworICAg
IEFTU0VSVChtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCB8fCBtX2xpbmVIYXNJbnRydXNpdmVG
bG9hdCk7CisgICAgaWYgKCFtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCkKKyAgICAgICAgcmV0
dXJuIExpbmVDb250ZW50IHsgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbV9saW5l
LmNsb3NlKCksIG1fbGluZS5saW5lQm94KCkgfTsKKworICAgIGF1dG8gbGFzdElubGluZUl0ZW1J
bmRleCA9IG1fbGluZUlucHV0LmZpcnN0SW5saW5lSXRlbS5pbmRleCArIG1fY29tbWl0dGVkSW5s
aW5lSXRlbUNvdW50IC0gMTsKKyAgICBPcHRpb25hbDxJbmRleEFuZFJhbmdlOjpSYW5nZT4gcGFy
dGlhbENvbnRleHQ7CisgICAgaWYgKG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0pCisg
ICAgICAgIHBhcnRpYWxDb250ZXh0ID0gSW5kZXhBbmRSYW5nZTo6UmFuZ2UgeyBtX3RyYWlsaW5n
UGFydGlhbElubGluZVRleHRJdGVtLT5zdGFydCgpLCBtX3RyYWlsaW5nUGFydGlhbElubGluZVRl
eHRJdGVtLT5sZW5ndGgoKSB9OworCisgICAgYXV0byBsYXN0Q29tbWl0ZWRJdGVtID0gSW5kZXhB
bmRSYW5nZSB7IGxhc3RJbmxpbmVJdGVtSW5kZXgsIHBhcnRpYWxDb250ZXh0IH07CisgICAgcmV0
dXJuIExpbmVDb250ZW50IHsgbGFzdENvbW1pdGVkSXRlbSwgV1RGTW92ZShtX2Zsb2F0cyksIG1f
bGluZS5jbG9zZSgpLCBtX2xpbmUubGluZUJveCgpIH07Cit9CisKK0xpbmVMYXlvdXQ6OklzRW5k
T2ZMaW5lIExpbmVMYXlvdXQ6OnBsYWNlSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtKQoreworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lk
dGgoKSAtIG1fdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7CisgICAgYXV0byBjdXJyZW50TG9n
aWNhbFJpZ2h0ID0gbV9saW5lLmxpbmVCb3goKS5sb2dpY2FsUmlnaHQoKSArIG1fdW5jb21taXR0
ZWRDb250ZW50LndpZHRoKCk7CisgICAgYXV0byBpdGVtTG9naWNhbFdpZHRoID0gaW5saW5lSXRl
bVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCksIGlubGluZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmln
aHQpOworCisgICAgLy8gRklYTUU6IEVuc3VyZSBMaW5lQ29udGV4dDo6dHJpbW1hYmxlV2lkdGgg
aW5jbHVkZXMgdW5jb21taXR0ZWQgY29udGVudCBpZiBuZWVkZWQuCisgICAgYXV0byBsaW5lSXND
b25zaWRlcmVkRW1wdHkgPSAhbV9saW5lLmhhc0NvbnRlbnQoKSAmJiAhbV9saW5lSGFzSW50cnVz
aXZlRmxvYXQ7CisgICAgYXV0byBicmVha2luZ0NvbnRleHQgPSBtX2xpbmVCcmVha2VyLmJyZWFr
aW5nQ29udGV4dChpbmxpbmVJdGVtLCBpdGVtTG9naWNhbFdpZHRoLCB7IGF2YWlsYWJsZVdpZHRo
LCBjdXJyZW50TG9naWNhbFJpZ2h0LCBtX2xpbmUudHJhaWxpbmdUcmltbWFibGVXaWR0aCgpLCBs
aW5lSXNDb25zaWRlcmVkRW1wdHkgfSk7CisgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJl
YWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKworICAg
IC8vIENvbnRlbnQgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50IGxpbmUuCisgICAgaWYgKGJyZWFr
aW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2
aW9yOjpXcmFwKQorICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6OlllczsKKworICAgIC8vIFBh
cnRpYWwgY29udGVudCBzdGF5cyBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgIGlmIChicmVha2lu
Z0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlv
cjo6U3BsaXQpIHsKKyAgICAgICAgQVNTRVJUKGlubGluZUl0ZW0uaXNUZXh0KCkpOworICAgICAg
ICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJ
dGVtKTsKKyAgICAgICAgYXV0byBzcGxpdERhdGEgPSBUZXh0VXRpbDo6c3BsaXQoaW5saW5lVGV4
dEl0ZW0ubGF5b3V0Qm94KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVt
Lmxlbmd0aCgpLCBpdGVtTG9naWNhbFdpZHRoLCBhdmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2lj
YWxSaWdodCk7CisgICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgdHJhaWxpbmcgaW5saW5l
IGl0ZW0uCisgICAgICAgIEFTU0VSVCghbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7
CisgICAgICAgIG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0gPSBpbmxpbmVUZXh0SXRl
bS5zcGxpdChzcGxpdERhdGEuc3RhcnQsIHNwbGl0RGF0YS5sZW5ndGgpOworICAgICAgICBtX3Vu
Y29tbWl0dGVkQ29udGVudC5hZGQoKm1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0sIHNw
bGl0RGF0YS5sb2dpY2FsV2lkdGgpOworICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwor
ICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6OlllczsKKyAgICB9CisKKyAgICBBU1NFUlQoYnJl
YWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVo
YXZpb3I6OktlZXApOworICAgIGlmIChpbmxpbmVJdGVtLmlzRmxvYXQoKSkgeworICAgICAgICBh
dXRvJiBmbG9hdEJveCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIC8vIFNocmlu
ayBhdmFpbGFibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxp
bmUgcnVucy4KKyAgICAgICAgYXV0byBmbG9hdEJveFdpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChmbG9hdEJveCkubWFyZ2luQm94V2lkdGgoKTsKKyAgICAgICAgZmxv
YXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBtX2xpbmUubW92ZUxvZ2ljYWxMZWZ0
KGZsb2F0Qm94V2lkdGgpIDogbV9saW5lLm1vdmVMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7
CisgICAgICAgIG1fZmxvYXRzLmFwcGVuZChtYWtlV2Vha1B0cihpbmxpbmVJdGVtKSk7CisgICAg
ICAgICsrbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQ7CisgICAgICAgIG1fbGluZUhhc0ludHJ1
c2l2ZUZsb2F0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpObzsKKyAgICB9
CisKKyAgICBtX3VuY29tbWl0dGVkQ29udGVudC5hZGQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxX
aWR0aCk7CisgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkK
KyAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKworICAgIHJldHVybiBpbmxpbmVJdGVt
LmlzSGFyZExpbmVCcmVhaygpID8gSXNFbmRPZkxpbmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsK
K30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWU0MDlh
MzBhODZkM2VjMWZiNjM3YjMwNGFjY2QyN2M4ZjhiMmVlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5oCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUxpbmUuaCIKKyNp
bmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIExpbmVM
YXlvdXQgeworcHVibGljOgorICAgIHN0cnVjdCBMaW5lSW5wdXQ7CisgICAgTGluZUxheW91dChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IExpbmVJbnB1dCYpOworCisgICAg
c3RydWN0IExpbmVDb250ZW50OworICAgIExpbmVDb250ZW50IGxheW91dCgpOworCisgICAgc3Ry
dWN0IEluZGV4QW5kUmFuZ2UgeworICAgICAgICB1bnNpZ25lZCBpbmRleCB7IDAgfTsKKyAgICAg
ICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9OworICAgICAgICB9OworICAgICAgICBPcHRp
b25hbDxSYW5nZT4gcGFydGlhbENvbnRleHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBMaW5lSW5w
dXQgeworICAgICAgICBMaW5lSW5wdXQoY29uc3QgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzJiwg
VGV4dEFsaWduTW9kZSwgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5l
SXRlbXMmKTsKKyAgICAgICAgTGluZUlucHV0KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50
cyYsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1Byb2Nlc3MsIGNvbnN0IElubGluZUl0ZW1zJik7CisK
KyAgICAgICAgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzIGluaXRpYWxDb25zdHJhaW50czsKKyAg
ICAgICAgVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50OworICAgICAgICAvLyBGSVhN
RSBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIGp1c3QgaGF2ZSBhIHNlY29uZCBwYXNzIHdpdGggdmVy
dGljYWwgcG9zaXRpb25pbmcgKHByZWZlcnJlZCB3aWR0aCBjb21wdXRhdGlvbiBvcHRzIG91dCkg
CisgICAgICAgIExpbmU6OlNraXBBbGlnbm1lbnQgc2tpcEFsaWdubWVudCB7IExpbmU6OlNraXBB
bGlnbm1lbnQ6Ok5vIH07CisgICAgICAgIEluZGV4QW5kUmFuZ2UgZmlyc3RJbmxpbmVJdGVtOwor
ICAgICAgICBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXM7CisgICAgICAgIE9wdGlvbmFs
PExheW91dFVuaXQ+IGZsb2F0TWluaW11bUxvZ2ljYWxCb3R0b207CisgICAgfTsKKworICAgIHN0
cnVjdCBMaW5lQ29udGVudCB7CisgICAgICAgIE9wdGlvbmFsPEluZGV4QW5kUmFuZ2U+IGxhc3RD
b21taXR0ZWQ7CisgICAgICAgIFZlY3RvcjxXZWFrUHRyPElubGluZUl0ZW0+PiBmbG9hdHM7Cisg
ICAgICAgIGNvbnN0IExpbmU6OlJ1bkxpc3QgcnVuTGlzdDsKKyAgICAgICAgY29uc3QgTGluZUJv
eCBsaW5lQm94OworICAgIH07CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsgfQorICAgIGVudW0gY2xhc3MgSXNFbmRPZkxpbmUgeyBObywgWWVzIH07
CisgICAgSXNFbmRPZkxpbmUgcGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mKTsKKyAg
ICB2b2lkIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisgICAgTGluZUNvbnRlbnQgY2xvc2UoKTsK
KyAgICAKKyAgICBzdHJ1Y3QgVW5jb21taXR0ZWRDb250ZW50IHsKKyAgICAgICAgc3RydWN0IFJ1
biB7CisgICAgICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGg7CisgICAgICAgIH07CisgICAgICAgIHZvaWQgYWRk
KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIHZv
aWQgcmVzZXQoKTsKKworICAgICAgICBWZWN0b3I8UnVuPiBydW5zKCkgeyByZXR1cm4gbV91bmNv
bW1pdHRlZFJ1bnM7IH0KKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV91
bmNvbW1pdHRlZFJ1bnMuaXNFbXB0eSgpOyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3VuY29tbWl0dGVkUnVucy5zaXplKCk7IH0KKyAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIFZlY3RvcjxSdW4+IG1fdW5jb21taXR0ZWRSdW5zOworICAgICAgICBMYXlvdXRVbml0IG1f
d2lkdGg7CisgICAgfTsKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIGNvbnN0IExpbmVJbnB1dCYgbV9saW5lSW5wdXQ7
CisgICAgTGluZSBtX2xpbmU7CisgICAgTGluZUJyZWFrZXIgbV9saW5lQnJlYWtlcjsKKyAgICBi
b29sIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKKyAgICBVbmNvbW1pdHRlZENv
bnRlbnQgbV91bmNvbW1pdHRlZENvbnRlbnQ7CisgICAgdW5zaWduZWQgbV9jb21taXR0ZWRJbmxp
bmVJdGVtQ291bnQgeyAwIH07CisgICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IG1fZmxv
YXRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV9sZWFkaW5nUGFydGlh
bElubGluZVRleHRJdGVtOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV90
cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbTsKK307CisKK30KK30KKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379802</attachid>
            <date>2019-09-28 21:28:04 -0700</date>
            <delta_ts>2019-09-29 08:08:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202352-20190928212759.patch</filename>
            <type>text/plain</type>
            <size>62478</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVjNzc0MzZkODE2M2Qx
N2Q1ZmQ3OGI2N2MwZjViNDA2ZGRmOGYzMS4uNTQ0MjQ4OWZkYjc3ZjA2YWFjZDhjMzc5YTdlZTJh
NmRhZTU0NzE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA5LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW1vdmUg
SW5saW5lTGF5b3V0IGFic3RyYWN0aW9uIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzNTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1
ODExNTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW5saW5lTGF5b3V0IGZ1bmN0aW9ucyB0byBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC4g
Tm93IGlubGluZSBsYXlvdXQgaGFzCisgICAgICAgIDEuIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IC1oaWdoIGxldmVsIGxheW91dCBhbmQgcHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uLCBjb2xs
ZWN0aW5nIGlubGluZSBjb250ZW50LCBjb25zdHJ1Y3RpbmcgZGlzcGxheSBib3hlcworICAgICAg
ICAyLiBMaW5lTGF5b3V0IC1yZXNwb25zaWJsZSBmb3IgcGxhY2luZyBpbmxpbmUgY29udGVudCBv
biB0aGUgY3VycmVudCBsaW5lIChwYXJ0aWFsIGlubGluZSBjb250ZW50IGhhbmRsaW5nLCBsaW5l
IGJyZWFraW5nIGV0YykKKyAgICAgICAgMy4gTGluZSAtcmVwcmVzZW50cyBhbiBhY3R1YWwgbGlu
ZSwgdHVybnMgaW5saW5lIGNvbnRlbnQgaW50byBydW5zLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dEluRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbENvbnN0cmFpbnRzRm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpz
ZXREaXNwbGF5Qm94ZXNGb3JMaW5lKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpsYXlvdXRTdGF0ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpJbmxpbmVMYXlvdXQ6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxh
eW91dDo6Zm9ybWF0dGluZ1Jvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0Ojpmb3JtYXR0aW5n
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0Ojp3aWR0aENvbnN0cmFpbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lSXRlbXMgY29uc3QpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6aW5saW5lSXRlbVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUxheW91dDo6TGluZUlucHV0OjpMaW5lSW5wdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OmFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6Y29tbWl0UGVuZGluZ0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpjbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OnBsYWNlSW5saW5lSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6
OnJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRl
ZENvbnRlbnQ6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
TGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OndpZHRoIGNvbnN0KToK
KwogMjAxOS0wOS0yOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtMRkNdW0lGQ10gTW92ZSBob3Jpem9udGFsIGFsaWdubWVudCB0byBMaW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDU2MTE2MzZkZGFmZjM3YjczZGZhYjAwODI5ZDUzNDJhMzU1ZjUxMmQuLmY5NTg2ZmEw
NDhjYjdlZWQyODY1OWJhMDYwYjhkZjhhMTBlMmJkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDE5
LDEyICsxNDE5LDEyIEBAIGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAogbGF5b3V0
L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVJbnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNw
cAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCitsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcAogbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1Rl
eHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY5MGJkMmQy
NWMyYzhhNTM3YzU1Mzg4MWJjNTZiMWI1MTQ0MTRjYmEuLmI2ODQ3YWZiYjViMzEwOTdmOWNjYjBl
OTI1Mzc1NTA1NGRmN2JhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwMDMsNiArMjAwMyw3IEBACiAJCTZGMENENjk1MjI5
RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGlu
ZS5oICovOyB9OwogCQk2RjFDQzFERTIyNUY4QjQ5MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMURE
MjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZCQjZDMjMzNDNFNkYwMDJGMkJFQSAv
KiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGMjZFQjQ4MjM0
MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5s
aW5lTGluZUxheW91dC5oICovOyB9OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxv
YXRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
M0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NBM0M2MjA4QzI5NTcwMDJGMjlBQiAv
KiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQ0EyMDhDMkIy
RTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDODIwOEMyQjJFMDAyRjI5QUIgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTE1OSw5ICs5MTYwLDEwIEBACiAJCTZGMUNDMUREMjI1RjhC
NDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0
SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5
NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkYyNUIyMDAyMjBB
ODVBQjAwMDAwMTFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIgLyog
SW5saW5lTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lTGF5b3V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNkJCNjkyMzM0M0U1QTAwMkYy
QkVBIC8qIExheW91dENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Q29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjZCQjZCMjMzNDNFNUIwMDJG
MkJFQSAvKiBMYXlvdXRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dENvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8q
IElubGluZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5s
aW5lTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM1RUZBRjIx
ODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNUYyMTM2
MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Qm94
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNjEyMTM2MTQxNzAwQTY1
QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjQ4Miw3ICsxNjQ4NCw2IEBACiAJCQkJNkY3Q0EzQzkyMDhD
MkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk2RjdD
QTNDODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKIAkJ
CQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAgKi8sCi0JCQkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8sCiAJCQkJNkYxMEIwODYyMkI4NTY4RDAwOTBF
NjlDIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCAqLywKIAkJCQkxMTVDRkE3
RDIwOEI4RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkx
MTVDRkE3QzIwOEI4RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggKi8sCkBA
IC0xNjQ5NCw2ICsxNjQ5NSw4IEBACiAJCQkJNkZCNDdFNjEyMjc3NDI1QTAwQzdCQ0IwIC8qIElu
bGluZUxpbmVCb3guaCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5l
TGluZUJyZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxp
bmVMaW5lQnJlYWtlci5oICovLAorCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxp
bmVMaW5lTGF5b3V0LmNwcCAqLywKKwkJCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5s
aW5lTGluZUxheW91dC5oICovLAogCQkJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxp
bmVUZXh0SXRlbS5jcHAgKi8sCiAJCQkJNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElubGlu
ZVRleHRJdGVtLmggKi8sCiAJCQkpOwpAQCAtMjgzMDYsOSArMjgzMDksOSBAQAogCQkJCUZGQjY5
OENEMTgzM0YxNzYwMDE1OEEzMSAvKiBMaW5lSW5mby5jcHAgKi8sCiAJCQkJRkZCNjk4Q0UxODMz
RjE3NjAwMTU4QTMxIC8qIExpbmVJbmZvLmggKi8sCiAJCQkJRkZFRkFCMkQxODNCQ0I2RjAwNTE0
NTM0IC8qIExpbmVJbmxpbmVIZWFkZXJzLmggKi8sCisJCQkJRkZFRkFCMjkxODM4MERBMDAwNTE0
NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5oICovLAogCQkJCUU0ODRBMzNEMjMwNTUzMDMwMDlBREU2
QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcCAqLywKIAkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5
QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAotCQkJCUZGRUZBQjI5MTgzODBEQTAw
MDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlGRkRCQzA0NjE4M0QyN0I3MDA0
MDcxMDkgLyogTGluZVdpZHRoLmNwcCAqLywKIAkJCQlGRkRCQzA0NTE4M0QyN0I3MDA0MDcxMDkg
LyogTGluZVdpZHRoLmggKi8sCiAJCQkJRkZBQzMwRkQxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWls
aW5nT2JqZWN0cy5jcHAgKi8sCkBAIC0yOTc0OSw2ICsyOTc1Miw3IEBACiAJCQkJNkYwQ0Q2OTUy
MjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3
RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZGMjZFQjQ4MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lTGF5b3V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTRDM0E3NzBCMkIxNjc5MDAyMzM0QTIgLyogSW5saW5l
U3R5bGVTaGVldE93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg1QTA5N0Q5MzAyMDA5
NEM5RTQgLyogSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMwMTA3MDExOTI1
OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDc0NCw4ICszMDc0OCw4IEBACiAJCQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0
U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NTBEMDBCRjIyMDA3MUI3ODIgLyog
TGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjMxQzkxRTEw
QUUxQjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0
ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEgLyogTGluZUxheW91
dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkZEQkMwNDcxODNEMjdCNzAwNDA3MTA5
IC8qIExpbmVXaWR0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0JBOURDMEIxREY0NERGNDAwMDU2
NzVDIC8qIExpbmtIZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDNCMjYzMURERDE1MjAw
MDE0RkFDNiAvKiBMaW5rSWNvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKaW5kZXggZGZhZTMyODliNDc2MzZlMDZjOTc1YzcxMDYyMWEwYzRmMmY2
ZmEyYy4uMjAyNTBmNTJiYjliMGFlNDlkNDlmMDY1OTQwZTAxOThiODEyZTYwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtODgsMTAgKzg4LDQxIEBAIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoKQogICAgIGZvcm1hdHRp
bmdTdGF0ZSgpLmlubGluZVJ1bnMoKS5jbGVhcigpOwogCiAgICAgY29sbGVjdElubGluZUNvbnRl
bnQoKTsKLSAgICBJbmxpbmVMYXlvdXQoKnRoaXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKS5sYXlv
dXQoZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKSk7CisgICAgbGluZUxheW91dCh1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0
TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4g
Zm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwogfQogCit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jp
em9udGFsVmFsdWVzKQoreworICAgIGF1dG8mIGlubGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0YXRl
KCkuaW5saW5lSXRlbXMoKTsKKyAgICBhdXRvIGxpbmVMb2dpY2FsVG9wID0gZ2VvbWV0cnlGb3JC
b3gocm9vdCgpKS5jb250ZW50Qm94VG9wKCk7CisgICAgTGluZUxheW91dDo6SW5kZXhBbmRSYW5n
ZSBjdXJyZW50SW5saW5lSXRlbTsKKyAgICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXgg
PCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byBsaW5lQ29uc3RyYWludHMgPSBp
bml0aWFsQ29uc3RyYWludHNGb3JMaW5lKHVzZWRIb3Jpem9udGFsVmFsdWVzLCBsaW5lTG9naWNh
bFRvcCk7CisgICAgICAgIGF1dG8gbGluZUlucHV0ID0gTGluZUxheW91dDo6TGluZUlucHV0IHsg
bGluZUNvbnN0cmFpbnRzLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgY3VycmVudElubGlu
ZUl0ZW0sIGlubGluZUl0ZW1zIH07CisgICAgICAgIGF1dG8gbGluZUxheW91dCA9IExpbmVMYXlv
dXQgeyAqdGhpcywgbGluZUlucHV0IH07CisKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxp
bmVMYXlvdXQubGF5b3V0KCk7CisgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZUNv
bnRlbnQsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKworICAgICAgICBpZiAobGluZUNvbnRlbnQu
bGFzdENvbW1pdHRlZCkgeworICAgICAgICAgICAgY3VycmVudElubGluZUl0ZW0gPSB7IGxpbmVD
b250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4ICsgMSwgV1RGOjpudWxsb3B0IH07CisgICAgICAg
ICAgICBsaW5lTG9naWNhbFRvcCA9IGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbEJvdHRvbSgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBw
bGFjaW5nIGFueSBjb250ZW50IG9uIHRoZSBsaW5lLgorICAgICAgICAgICAgQVNTRVJUKGxpbmVJ
bnB1dC5pbml0aWFsQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KTsKKyAgICAg
ICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBiZWxvdyB0aGUgaW50cnVzaXZlIGZsb2F0Lgor
ICAgICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290
KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAgICAgICAg
ICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh7
IGxpbmVMb2dpY2FsVG9wIH0pOworICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMu
bGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KTsKKyAgICAgICAgICAgIHN0YXRpYyBhdXRv
IGluaWZpdGVQb2ludCA9IFBvaW50SW5Db250ZXh0Um9vdDo6bWF4KCk7CisgICAgICAgICAgICAv
LyBJbiBjYXNlIG9mIGxlZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sg
dGhlIG9uZSB0aGF0J3MgY2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgICAgICBs
aW5lTG9naWNhbFRvcCA9IHN0ZDo6bWluKGZsb2F0Q29uc3RyYWludHMubGVmdC52YWx1ZU9yKGlu
aWZpdGVQb2ludCkueSwgZmxvYXRDb25zdHJhaW50cy5yaWdodC52YWx1ZU9yKGluaWZpdGVQb2lu
dCkueSk7CisgICAgICAgICAgICBBU1NFUlQobGluZUxvZ2ljYWxUb3AgPCBpbmlmaXRlUG9pbnQu
eSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMsIFVzZWRWZXJ0
aWNhbFZhbHVlcyB1c2VkVmVydGljYWxWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdD
b250ZXh0Um9vdC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc0lubGluZUJsb2NrQm94KCkpOwpAQCAtMTgzLDcgKzIxNCw3IEBAIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlZEluCiAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250
ZW50V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IFVzZWRIb3Jpem9udGFsVmFsdWVzOjpDb25zdHJhaW50
cyB7IHsgfSwgYXZhaWxhYmxlV2lkdGggfSB9OwotICAgICAgICByZXR1cm4gSW5saW5lTGF5b3V0
KCp0aGlzLCB1c2VkSG9yaXpvbnRhbFZhbHVlcykuY29tcHV0ZWRJbnRyaW5zaWNXaWR0aChmb3Jt
YXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVkSW50
cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICB9Owog
CiAgICAgYXV0byBjb25zdHJhaW50cyA9IGdlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0
aChyb290KCksIHsgbWF4aW11bUxpbmVXaWR0aCgwKSwgbWF4aW11bUxpbmVXaWR0aChMYXlvdXRV
bml0OjptYXgoKSkgfSk7CkBAIC0xOTEsNiArMjIyLDI3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZEluCiAgICAgcmV0dXJuIGNvbnN0cmFpbnRzOwogfQogCitMYXlvdXRVbml0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludChVc2VkSG9y
aXpvbnRhbFZhbHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3QKK3sKKyAgICBhdXRvJiBp
bmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CisgICAgTGF5b3V0
VW5pdCBtYXhpbXVtTGluZVdpZHRoOworICAgIExpbmVMYXlvdXQ6OkluZGV4QW5kUmFuZ2UgY3Vy
cmVudElubGluZUl0ZW07CisgICAgd2hpbGUgKGN1cnJlbnRJbmxpbmVJdGVtLmluZGV4IDwgaW5s
aW5lSXRlbXMuc2l6ZSgpKSB7CisgICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxh
YmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4K
KyAgICAgICAgYXV0byBpbml0aWFsTGluZUNvbnN0cmFpbnRzID0gTGluZTo6SW5pdGlhbENvbnN0
cmFpbnRzIHsgeyB9LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cy53aWR0aCwgZmFs
c2UsIHsgfSB9OworICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVMYXlvdXQ6OkxpbmVJbnB1
dCB7IGluaXRpYWxMaW5lQ29uc3RyYWludHMsIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVt
cyB9OworCisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBMaW5lTGF5b3V0KCp0aGlzLCBsaW5l
SW5wdXQpLmxheW91dCgpOworCisgICAgICAgIGN1cnJlbnRJbmxpbmVJdGVtID0geyBsaW5lQ29u
dGVudC5sYXN0Q29tbWl0dGVkLT5pbmRleCArIDEsIHsgfSB9OworICAgICAgICBMYXlvdXRVbml0
IGZsb2F0c1dpZHRoOworICAgICAgICBmb3IgKGF1dG8mIGZsb2F0SXRlbSA6IGxpbmVDb250ZW50
LmZsb2F0cykKKyAgICAgICAgICAgIGZsb2F0c1dpZHRoICs9IGdlb21ldHJ5Rm9yQm94KGZsb2F0
SXRlbS0+bGF5b3V0Qm94KCkpLm1hcmdpbkJveFdpZHRoKCk7CisgICAgICAgIG1heGltdW1MaW5l
V2lkdGggPSBzdGQ6Om1heChtYXhpbXVtTGluZVdpZHRoLCBmbG9hdHNXaWR0aCArIGxpbmVDb250
ZW50LmxpbmVCb3gubG9naWNhbFdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gbWF4aW11bUxp
bmVXaWR0aDsKK30KKwogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJp
bnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JiBmb3JtYXR0aW5nUm9vdCwgVXNl
ZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGZv
cm1hdHRpbmdSb290LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CkBAIC0zMTEsNiAr
MzYzLDEzOCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29u
dGVudCgpCiAgICAgfQogfQogCitMaW5lOjpJbml0aWFsQ29uc3RyYWludHMgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmluaXRpYWxDb25zdHJhaW50c0ZvckxpbmUoVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3Ap
Cit7CisgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBnZW9tZXRyeUZvckJveChyb290KCkpLmNv
bnRlbnRCb3hMZWZ0KCk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHVzZWRIb3Jpem9udGFs
VmFsdWVzLmNvbnN0cmFpbnRzLndpZHRoOworICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0ID0gZmFsc2U7CisKKyAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4
dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9Owor
ICAgIC8vIENoZWNrIGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0
L2F2YWlsYWJsZSB3aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgorICAgIGlmICghZmxv
YXRpbmdDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMg
PSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMoeyBsaW5lTG9naWNhbFRvcCB9KTsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24g
b24gdGhlIGxpbmUuCisgICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRD
b25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKKyAgICAgICAgICAgIGZsb2F0
Q29uc3RyYWludHMubGVmdCA9IHsgfTsKKworICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQg
PSBnZW9tZXRyeUZvckJveChyb290KCkpLmNvbnRlbnRCb3hSaWdodCgpOworICAgICAgICBpZiAo
ZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxp
bmVMb2dpY2FsUmlnaHQpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0geyB9
OworCisgICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0Q29uc3RyYWludHMu
bGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OworCisgICAgICAgIGlmIChmbG9hdENvbnN0
cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgeworICAgICAgICAgICAgQVNT
RVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54
KTsKKyAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+
eCAtIGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsTGVm
dCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAgfSBlbHNlIGlmIChmbG9hdENv
bnN0cmFpbnRzLmxlZnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxl
ZnQtPnggPj0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoIC09
IChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggLSBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAg
ICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54OworICAgICAgICB9
IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChm
bG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7CisgICAgICAgICAg
ICBhdmFpbGFibGVXaWR0aCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggLSBsaW5lTG9naWNh
bExlZnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIExpbmU6OkluaXRpYWxDb25zdHJh
aW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBhdmFpbGFibGVXaWR0
aCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0LCBxdWlya3MoKS5saW5lSGVpZ2h0Q29uc3RyYWlu
dHMocm9vdCgpKSB9OworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVu
dCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpCit7CisgICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7CisKKyAgICBpZiAo
IWxpbmVDb250ZW50LmZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBmbG9hdGluZ0Nv
bnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUu
ZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFs
IHBvc2l0aW9uLgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGZsb2F0SXRlbSA6IGxpbmVDb250
ZW50LmZsb2F0cykgeworICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxh
eW91dEJveCgpOworICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZS5kaXNwbGF5Qm94KGZsb2F0Qm94KTsKKyAgICAgICAgICAgIC8vIFNldCBzdGF0aWMgcG9zaXRp
b24gZmlyc3QuCisgICAgICAgICAgICBhdXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJv
eDsKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVCb3gubG9naWNhbExl
ZnQoKSwgbGluZUJveC5sb2dpY2FsVG9wKCkgfSk7CisgICAgICAgICAgICAvLyBGbG9hdCBpdC4K
KyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRp
b25Gb3JGbG9hdChmbG9hdEJveCkpOworICAgICAgICAgICAgZmxvYXRpbmdDb250ZXh0LmFwcGVu
ZChmbG9hdEJveCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgZmluYWwgZGlzcGxh
eSBydW5zIHRvIHN0YXRlLgorICAgIGZvciAoYXV0byYgbGluZVJ1biA6IGxpbmVDb250ZW50LnJ1
bkxpc3QpIHsKKyAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lcnMgKDxzcGFuPikgZG9u
J3QgZ2VuZXJhdGUgaW5saW5lIHJ1bnMuCisgICAgICAgIGlmIChsaW5lUnVuLT5pc0NvbnRhaW5l
clN0YXJ0KCkgfHwgbGluZVJ1bi0+aXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBDb2xsYXBzZWQgbGluZSBydW5zIGRvbid0IGdlbmVyYXRlIGRpc3Bs
YXkgcnVucy4KKyAgICAgICAgaWYgKGxpbmVSdW4tPmlzVmlzdWFsbHlFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4obGlu
ZVJ1bi0+ZGlzcGxheVJ1bigpKTsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIGJveCBmaW5hbCBn
ZW9tZXRyeS4KKyAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmVDb250ZW50LnJ1bkxpc3Q7CisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgIGF1dG8mIGxpbmVSdW4gPSBsaW5lUnVucy5hdChpbmRleCk7CisgICAgICAg
IGF1dG8mIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi0+bG9naWNhbFJlY3QoKTsKKyAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gbGluZVJ1bi0+bGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChsYXlvdXRCb3gpOworCisgICAgICAg
IGlmIChsaW5lUnVuLT5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNl
dFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgICAgIGRpc3BsYXlCb3gu
c2V0Q29udGVudEJveFdpZHRoKGxvZ2ljYWxSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW5saW5lIGxldmVsIGJv
eCAocmVwbGFjZWQgb3IgaW5saW5lLWJsb2NrKQorICAgICAgICBpZiAobGluZVJ1bi0+aXNCb3go
KSkgeworICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gbG9naWNhbFJlY3QudG9wTGVmdCgpOwor
ICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAg
ICAgICAgICB0b3BMZWZ0ICs9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICAgICAgZGlzcGxh
eUJveC5zZXRUb3BMZWZ0KHRvcExlZnQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVyIHN0YXJ0ICg8c3Bhbj4pCisg
ICAgICAgIGlmIChsaW5lUnVuLT5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgIGRp
c3BsYXlCb3guc2V0VG9wTGVmdChsb2dpY2FsUmVjdC50b3BMZWZ0KCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVy
IGVuZCAoPC9zcGFuPikKKyAgICAgICAgaWYgKGxpbmVSdW4tPmlzQ29udGFpbmVyRW5kKCkpIHsK
KyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25l
ZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAg
ICAgICAgICAgIGRpc3BsYXlCb3gubW92ZUhvcml6b250YWxseShpbmZsb3dPZmZzZXQud2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShpbmZsb3dPZmZz
ZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hX
aWR0aCA9IGxvZ2ljYWxSZWN0LmxlZnQoKSAtIGRpc3BsYXlCb3gubGVmdCgpOworICAgICAgICAg
ICAgYXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1h
cmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGlu
Z0xlZnQoKS52YWx1ZU9yKDApKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGZpeCBpdCBmb3IgbXVs
dGlsaW5lLgorICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVu
dEJveFdpZHRoKTsKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChs
b2dpY2FsUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsaW5lUnVuLT5pc1RleHQoKSkgeworICAgICAgICAgICAgY29uc3QgTGlu
ZTo6UnVuKiBwcmV2aW91c0xpbmVSdW4gPSAhaW5kZXggPyBudWxscHRyIDogbGluZVJ1bnNbaW5k
ZXggLSAxXS5nZXQoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIHRha2UgY29udGVudCBicmVha2lu
ZyBpbnRvIGFjY291bnQgd2hlbiBwYXJ0IG9mIHRoZSBsYXlvdXQgYm94IGlzIG9uIHRoZSBwcmV2
aW91cyBsaW5lLgorICAgICAgICAgICAgYXV0byBmaXJzdElubGluZVJ1bkZvckxheW91dEJveCA9
ICFwcmV2aW91c0xpbmVSdW4gfHwgJnByZXZpb3VzTGluZVJ1bi0+bGF5b3V0Qm94KCkgIT0gJmxh
eW91dEJveDsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFdpZHRoID0gbGluZVJ1bi0+aXNWaXN1
YWxseUVtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsUmVjdC53aWR0aCgpOworICAgICAg
ICAgICAgaWYgKGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94KSB7CisgICAgICAgICAgICAgICAg
Ly8gU2V0dXAgZGlzcGxheSBib3ggZm9yIHRoZSBhc3NvY2lhdGVkIGxheW91dCBib3guCisgICAg
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSk7
CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgobG9naWNhbFdp
ZHRoKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQobG9n
aWNhbFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpcnVuL211bHRpbGluZS4KKyAgICAgICAgICAgICAg
ICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChkaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0
aCgpICsgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBm
b3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveChsaW5lQ29udGVudC5saW5lQm94KTsKK30KKwogfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA5OTJmMzcwZWE0ZjYxOTA2
NDNlMGJlODZhNTQ0YmRkMzFmMDJmMzc0Li5jNmM4MTMxZDk0YmFmMGU0MDU0NWFmMjk1Zjg0MjY1
MjRjMzMzMTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmUuaCIKKyNpbmNsdWRlICJJbmxp
bmVMaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01MSwyOSArNTIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkg
b3ZlcnJpZGU7CiAKLSAgICBjbGFzcyBJbmxpbmVMYXlvdXQgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgSW5saW5lTGF5b3V0KElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgVXNlZEhvcml6b250YWxW
YWx1ZXMpOwotICAgICAgICB2b2lkIGxheW91dChjb25zdCBJbmxpbmVJdGVtcyYpOwotICAgICAg
ICBMYXlvdXRVbml0IGNvbXB1dGVkSW50cmluc2ljV2lkdGgoY29uc3QgSW5saW5lSXRlbXMmKSBj
b25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIExpbmU6OkluaXRpYWxDb25zdHJhaW50cyBp
bml0aWFsQ29uc3RyYWludHNGb3JMaW5lKGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3Ap
OwotCi0gICAgICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lciYgZm9ybWF0
dGluZ1Jvb3QoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0LnJvb3Qo
KTsgfQotICAgICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCk7IH0KLSAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aENvbnN0cmFpbnQoKSBjb25zdCB7IHJldHVybiBtX3VzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLndpZHRoOyB9Ci0KLSAgICAgICAgTGluZUNvbnRl
bnQgcGxhY2VJbmxpbmVJdGVtcyhjb25zdCBMaW5lSW5wdXQmKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXR1cERpc3BsYXlCb3hlcyhjb25zdCBMaW5lQ29udGVudCYpOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ7Ci0gICAgICAgIFVzZWRIb3Jpem9udGFsVmFsdWVzIG1fdXNlZEhvcml6b250YWxWYWx1ZXM7
Ci0gICAgfTsKLQogICAgIGNsYXNzIFF1aXJrcyA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGJvb2wgbGluZURlc2NlbnROZWVkc0NvbGxh
cHNpbmcoY29uc3QgTGluZTo6UnVuTGlzdCYpIGNvbnN0OwpAQCAtMTAyLDIzICs4MCwyNiBAQCBw
cml2YXRlOgogICAgIH07CiAgICAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdl
b21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkoKnRoaXMpOyB9CiAKKyAgICB2b2lkIGxp
bmVMYXlvdXQoVXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRSb290KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGlj
YWxWYWx1ZXMpOwogICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxBbmRWZXJ0aWNhbEdlb21ldHJ5
KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVydGljYWxWYWx1ZXMpOwog
CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChjb25zdCBC
b3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWln
aHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcywg
VXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkSW50cmluc2ljV2lk
dGhGb3JDb25zdHJhaW50KFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKIAogICAgIHZvaWQg
Y29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMp
OwogICAgIHZvaWQgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpv
bnRhbFZhbHVlcywgVXNlZFZlcnRpY2FsVmFsdWVzKTsKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAKICAgICB2b2lkIGNv
bGxlY3RJbmxpbmVDb250ZW50KCk7CisgICAgTGluZTo6SW5pdGlhbENvbnN0cmFpbnRzIGluaXRp
YWxDb25zdHJhaW50c0ZvckxpbmUoVXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IExheW91dFVu
aXQgbGluZUxvZ2ljYWxUb3ApOworICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25z
dCBMaW5lTGF5b3V0OjpMaW5lQ29udGVudCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAogICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1h
dHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KICAgICAvLyBGSVhNRTogQ29tZSB1
cCB3aXRoIGEgc3RydWN0dXJlIHRoYXQgcmVxdWlyZXMgbm8gZnJpZW5kaW5nLgogICAgIGZyaWVu
ZCBjbGFzcyBMaW5lOwotICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVMYXlvdXQ7CiB9OwogCiBpbmxp
bmUgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWFkNjM2ZDZhZGZkYThjMTVlZTNkZTc0MDA4NTc4YmU3NzhjYTg4
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDcxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAi
RmxvYXRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgotI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIklubGluZUxpbmUuaCIKLSNpbmNs
dWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1
ZGUgIkxheW91dENvbnRhaW5lci5oIgotI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCi0jaW5jbHVk
ZSAiVGV4dFV0aWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7
Ci0KLXN0YXRpYyBMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQotewotICAgIGlmIChpbmxpbmVJdGVtLmlzTGlu
ZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGlzPElubGluZVRleHRJdGVt
PihpbmxpbmVJdGVtKSkgewotICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0
PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKLSAgICAgICAgYXV0byBlbmQgPSBpbmxpbmVU
ZXh0SXRlbS5pc0NvbGxhcHNlZCgpID8gaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSArIDEgOiBpbmxp
bmVUZXh0SXRlbS5lbmQoKTsKLSAgICAgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0aChpbmxpbmVU
ZXh0SXRlbS5sYXlvdXRCb3goKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgZW5kLCBjb250ZW50
TG9naWNhbExlZnQpOwotICAgIH0KLQotICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0u
bGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotCi0gICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94V2lkdGgo
KTsKLQotICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdl
b21ldHJ5LndpZHRoKCk7Ci0KLSAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkp
Ci0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0cnku
Ym9yZGVyTGVmdCgpICsgYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwotCi0g
ICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdl
b21ldHJ5Lm1hcmdpbkVuZCgpICsgYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKSArIGJveEdlb21l
dHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQgaW5s
aW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRo
KCk7Ci19Ci0KLXN0cnVjdCBJbmRleEFuZFJhbmdlIHsKLSAgICB1bnNpZ25lZCBpbmRleCB7IDAg
fTsKLSAgICBzdHJ1Y3QgUmFuZ2UgewotICAgICAgICB1bnNpZ25lZCBzdGFydCB7IDAgfTsKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIH07Ci0gICAgT3B0aW9uYWw8UmFuZ2U+
IHBhcnRpYWxDb250ZXh0OwotfTsKLQotc3RydWN0IExpbmVJbnB1dCB7Ci0gICAgTGluZUlucHV0
KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYsIFRleHRBbGlnbk1vZGUsIEluZGV4QW5k
UmFuZ2UgZmlyc3RUb1Byb2Nlc3MsIGNvbnN0IElubGluZUl0ZW1zJik7Ci0gICAgTGluZUlucHV0
KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1By
b2Nlc3MsIGNvbnN0IElubGluZUl0ZW1zJik7Ci0KLSAgICBMaW5lOjpJbml0aWFsQ29uc3RyYWlu
dHMgaW5pdGlhbENvbnN0cmFpbnRzOwotICAgIFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdu
bWVudDsKLSAgICAvLyBGSVhNRSBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIGp1c3QgaGF2ZSBhIHNl
Y29uZCBwYXNzIHdpdGggdmVydGljYWwgcG9zaXRpb25pbmcgKHByZWZlcnJlZCB3aWR0aCBjb21w
dXRhdGlvbiBvcHRzIG91dCkgCi0gICAgTGluZTo6U2tpcEFsaWdubWVudCBza2lwQWxpZ25tZW50
IHsgTGluZTo6U2tpcEFsaWdubWVudDo6Tm8gfTsKLSAgICBJbmRleEFuZFJhbmdlIGZpcnN0SW5s
aW5lSXRlbTsKLSAgICBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXM7Ci0gICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gZmxvYXRNaW5pbXVtTG9naWNhbEJvdHRvbTsKLX07Ci0KLUxpbmVJbnB1
dDo6TGluZUlucHV0KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgVGV4dEFsaWduTW9kZSBob3Jpem9udGFsQWxpZ25tZW50LCBJbmRleEFuZFJh
bmdlIGZpcnN0VG9Qcm9jZXNzLCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCi0gICAg
OiBpbml0aWFsQ29uc3RyYWludHMoaW5pdGlhbExpbmVDb25zdHJhaW50cykKLSAgICAsIGhvcml6
b250YWxBbGlnbm1lbnQoaG9yaXpvbnRhbEFsaWdubWVudCkKLSAgICAsIGZpcnN0SW5saW5lSXRl
bShmaXJzdFRvUHJvY2VzcykKLSAgICAsIGlubGluZUl0ZW1zKGlubGluZUl0ZW1zKQotewotfQot
Ci1MaW5lSW5wdXQ6OkxpbmVJbnB1dChjb25zdCBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMmIGlu
aXRpYWxMaW5lQ29uc3RyYWludHMsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1Byb2Nlc3MsIGNvbnN0
IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKLSAgICA6IGluaXRpYWxDb25zdHJhaW50cyhpbml0
aWFsTGluZUNvbnN0cmFpbnRzKQotICAgICwgc2tpcEFsaWdubWVudChMaW5lOjpTa2lwQWxpZ25t
ZW50OjpZZXMpCi0gICAgLCBmaXJzdElubGluZUl0ZW0oZmlyc3RUb1Byb2Nlc3MpCi0gICAgLCBp
bmxpbmVJdGVtcyhpbmxpbmVJdGVtcykKLXsKLX0KLQotc3RydWN0IExpbmVDb250ZW50IHsKLSAg
ICBPcHRpb25hbDxJbmRleEFuZFJhbmdlPiBsYXN0Q29tbWl0dGVkOwotICAgIFZlY3RvcjxXZWFr
UHRyPElubGluZUl0ZW0+PiBmbG9hdHM7Ci0gICAgY29uc3QgTGluZTo6UnVuTGlzdCBydW5MaXN0
OwotICAgIGNvbnN0IExpbmVCb3ggbGluZUJveDsKLX07Ci0KLWNsYXNzIExpbmVMYXlvdXQgewot
cHVibGljOgotICAgIExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBMaW5lSW5wdXQmKTsKLQotICAgIExpbmVDb250ZW50IGxheW91dCgpOwotCi1wcml2YXRl
OgotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICBlbnVtIGNs
YXNzIElzRW5kT2ZMaW5lIHsgTm8sIFllcyB9OwotICAgIElzRW5kT2ZMaW5lIHBsYWNlSW5saW5l
SXRlbShjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgdm9pZCBjb21taXRQZW5kaW5nQ29udGVudCgp
OwotICAgIExpbmVDb250ZW50IGNsb3NlKCk7Ci0gICAgCi0gICAgc3RydWN0IFVuY29tbWl0dGVk
Q29udGVudCB7Ci0gICAgICAgIHN0cnVjdCBSdW4gewotICAgICAgICAgICAgY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbTsKLSAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoOwot
ICAgICAgICB9OwotICAgICAgICB2b2lkIGFkZChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgpOwotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAgICAgVmVjdG9y
PFJ1bj4gcnVucygpIHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zOyB9Ci0gICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zLmlzRW1wdHkoKTsgfQot
ICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnMu
c2l6ZSgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8UnVuPiBtX3VuY29tbWl0dGVk
UnVuczsKLSAgICAgICAgTGF5b3V0VW5pdCBtX3dpZHRoOwotICAgIH07Ci0KLSAgICBjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBj
b25zdCBMaW5lSW5wdXQmIG1fbGluZUlucHV0OwotICAgIExpbmUgbV9saW5lOwotICAgIExpbmVC
cmVha2VyIG1fbGluZUJyZWFrZXI7Ci0gICAgYm9vbCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdCB7
IGZhbHNlIH07Ci0gICAgVW5jb21taXR0ZWRDb250ZW50IG1fdW5jb21taXR0ZWRDb250ZW50Owot
ICAgIHVuc2lnbmVkIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHsgMCB9OwotICAgIFZlY3Rv
cjxXZWFrUHRyPElubGluZUl0ZW0+PiBtX2Zsb2F0czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lVGV4dEl0ZW0+IG1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW07
Ci19OwotCi12b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6YWRkKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQotewotICAgIG1f
dW5jb21taXR0ZWRSdW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCB9KTsKLSAg
ICBtX3dpZHRoICs9IGxvZ2ljYWxXaWR0aDsKLX0KLQotdm9pZCBMaW5lTGF5b3V0OjpVbmNvbW1p
dHRlZENvbnRlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX3VuY29tbWl0dGVkUnVucy5jbGVhcigpOwot
ICAgIG1fd2lkdGggPSAwOwotfQotCi1MaW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgTGluZUlu
cHV0JiBsaW5lSW5wdXQpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZv
cm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9saW5lSW5wdXQobGluZUlucHV0KQotICAgICwgbV9s
aW5lKGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBsaW5lSW5wdXQuaW5pdGlhbENvbnN0cmFpbnRz
LCBsaW5lSW5wdXQuaG9yaXpvbnRhbEFsaWdubWVudCwgbGluZUlucHV0LnNraXBBbGlnbm1lbnQp
Ci0gICAgLCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdChsaW5lSW5wdXQuaW5pdGlhbENvbnN0cmFp
bnRzLmxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCkKLXsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojpj
b21taXRQZW5kaW5nQ29udGVudCgpCi17Ci0gICAgaWYgKG1fdW5jb21taXR0ZWRDb250ZW50Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50
ICs9IG1fdW5jb21taXR0ZWRDb250ZW50LnNpemUoKTsKLSAgICBmb3IgKGF1dG8mIHVuY29tbWl0
dGVkUnVuIDogbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKQotICAgICAgICBtX2xpbmUuYXBw
ZW5kKHVuY29tbWl0dGVkUnVuLmlubGluZUl0ZW0sIHVuY29tbWl0dGVkUnVuLmxvZ2ljYWxXaWR0
aCk7Ci0gICAgbV91bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKLX0KLQotTGluZUNvbnRlbnQg
TGluZUxheW91dDo6Y2xvc2UoKQotewotICAgIEFTU0VSVChtX2NvbW1pdHRlZElubGluZUl0ZW1D
b3VudCB8fCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdCk7Ci0gICAgaWYgKCFtX2NvbW1pdHRlZElu
bGluZUl0ZW1Db3VudCkKLSAgICAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgV1RGOjpudWxsb3B0
LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbV9saW5lLmNsb3NlKCksIG1fbGluZS5saW5lQm94KCkgfTsK
LQotICAgIGF1dG8gbGFzdElubGluZUl0ZW1JbmRleCA9IG1fbGluZUlucHV0LmZpcnN0SW5saW5l
SXRlbS5pbmRleCArIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IC0gMTsKLSAgICBPcHRpb25h
bDxJbmRleEFuZFJhbmdlOjpSYW5nZT4gcGFydGlhbENvbnRleHQ7Ci0gICAgaWYgKG1fdHJhaWxp
bmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0pCi0gICAgICAgIHBhcnRpYWxDb250ZXh0ID0gSW5kZXhB
bmRSYW5nZTo6UmFuZ2UgeyBtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtLT5zdGFydCgp
LCBtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtLT5sZW5ndGgoKSB9OwotCi0gICAgYXV0
byBsYXN0Q29tbWl0ZWRJdGVtID0gSW5kZXhBbmRSYW5nZSB7IGxhc3RJbmxpbmVJdGVtSW5kZXgs
IHBhcnRpYWxDb250ZXh0IH07Ci0gICAgcmV0dXJuIExpbmVDb250ZW50IHsgbGFzdENvbW1pdGVk
SXRlbSwgV1RGTW92ZShtX2Zsb2F0cyksIG1fbGluZS5jbG9zZSgpLCBtX2xpbmUubGluZUJveCgp
IH07Ci19Ci0KLUxpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXQ6OnBsYWNlSW5saW5l
SXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIGF1dG8gYXZhaWxhYmxl
V2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIG1fdW5jb21taXR0ZWRDb250ZW50Lndp
ZHRoKCk7Ci0gICAgYXV0byBjdXJyZW50TG9naWNhbFJpZ2h0ID0gbV9saW5lLmxpbmVCb3goKS5s
b2dpY2FsUmlnaHQoKSArIG1fdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7Ci0gICAgYXV0byBp
dGVtTG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCksIGlu
bGluZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmlnaHQpOwotCi0gICAgLy8gRklYTUU6IEVuc3VyZSBM
aW5lQ29udGV4dDo6dHJpbW1hYmxlV2lkdGggaW5jbHVkZXMgdW5jb21taXR0ZWQgY29udGVudCBp
ZiBuZWVkZWQuCi0gICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSAhbV9saW5lLmhhc0Nv
bnRlbnQoKSAmJiAhbV9saW5lSGFzSW50cnVzaXZlRmxvYXQ7Ci0gICAgYXV0byBicmVha2luZ0Nv
bnRleHQgPSBtX2xpbmVCcmVha2VyLmJyZWFraW5nQ29udGV4dChpbmxpbmVJdGVtLCBpdGVtTG9n
aWNhbFdpZHRoLCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBtX2xpbmUu
dHJhaWxpbmdUcmltbWFibGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkgfSk7Ci0gICAg
aWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKLSAgICAgICAgY29t
bWl0UGVuZGluZ0NvbnRlbnQoKTsKLQotICAgIC8vIENvbnRlbnQgZG9lcyBub3QgZml0IHRoZSBj
dXJyZW50IGxpbmUuCi0gICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09
IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQotICAgICAgICByZXR1cm4gSXNF
bmRPZkxpbmU6OlllczsKLQotICAgIC8vIFBhcnRpYWwgY29udGVudCBzdGF5cyBvbiB0aGUgY3Vy
cmVudCBsaW5lLgotICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBM
aW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6U3BsaXQpIHsKLSAgICAgICAgQVNTRVJUKGlu
bGluZUl0ZW0uaXNUZXh0KCkpOwotICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25j
YXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKLSAgICAgICAgYXV0byBzcGxpdERhdGEg
PSBUZXh0VXRpbDo6c3BsaXQoaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCksIGlubGluZVRleHRJ
dGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmxlbmd0aCgpLCBpdGVtTG9naWNhbFdpZHRoLCBh
dmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2ljYWxSaWdodCk7Ci0gICAgICAgIC8vIENvbnN0cnVj
dCBhIHBhcnRpYWwgdHJhaWxpbmcgaW5saW5lIGl0ZW0uCi0gICAgICAgIEFTU0VSVCghbV90cmFp
bGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSk7Ci0gICAgICAgIG1fdHJhaWxpbmdQYXJ0aWFsSW5s
aW5lVGV4dEl0ZW0gPSBpbmxpbmVUZXh0SXRlbS5zcGxpdChzcGxpdERhdGEuc3RhcnQsIHNwbGl0
RGF0YS5sZW5ndGgpOwotICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5hZGQoKm1fdHJhaWxp
bmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0sIHNwbGl0RGF0YS5sb2dpY2FsV2lkdGgpOwotICAgICAg
ICBjb21taXRQZW5kaW5nQ29udGVudCgpOwotICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6Olll
czsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3Ig
PT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OktlZXApOwotICAgIGlmIChpbmxpbmVJ
dGVtLmlzRmxvYXQoKSkgewotICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGlubGluZUl0ZW0ubGF5
b3V0Qm94KCk7Ci0gICAgICAgIC8vIFNocmluayBhdmFpbGFibGUgc3BhY2UgZm9yIGN1cnJlbnQg
bGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KLSAgICAgICAgYXV0byBmbG9hdEJv
eFdpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmbG9hdEJveCkubWFy
Z2luQm94V2lkdGgoKTsKLSAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVk
KCkgPyBtX2xpbmUubW92ZUxvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbV9saW5lLm1vdmVM
b2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7Ci0gICAgICAgIG1fZmxvYXRzLmFwcGVuZChtYWtl
V2Vha1B0cihpbmxpbmVJdGVtKSk7Ci0gICAgICAgICsrbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQ7Ci0gICAgICAgIG1fbGluZUhhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIElzRW5kT2ZMaW5lOjpObzsKLSAgICB9Ci0KLSAgICBtX3VuY29tbWl0dGVkQ29udGVudC5h
ZGQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7Ci0gICAgaWYgKGJyZWFraW5nQ29udGV4
dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKLSAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQo
KTsKLQotICAgIHJldHVybiBpbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpID8gSXNFbmRPZkxp
bmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsKLX0KLQotTGluZUNvbnRlbnQgTGluZUxheW91dDo6
bGF5b3V0KCkKLXsKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGlubGluZSBjb250ZW50IGFu
ZCBwbGFjZSB0aGUgaW5saW5lIGJveGVzIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgLy8gU3Rh
cnQgd2l0aCB0aGUgcGFydGlhbCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgYXV0
byBmaXJzdElubGluZUl0ZW0gPSBtX2xpbmVJbnB1dC5maXJzdElubGluZUl0ZW07Ci0gICAgdW5z
aWduZWQgZmlyc3ROb25QYXJ0aWFsSW5kZXggPSBmaXJzdElubGluZUl0ZW0uaW5kZXg7Ci0gICAg
aWYgKGZpcnN0SW5saW5lSXRlbS5wYXJ0aWFsQ29udGV4dCkgewotICAgICAgICAvLyBIYW5kbGUg
cGFydGlhbCBpbmxpbmUgaXRlbSAoc3BsaXQgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKS4K
LSAgICAgICAgYXV0byYgb3JpZ2luYWxUZXh0SXRlbSA9IG1fbGluZUlucHV0LmlubGluZUl0ZW1z
W2ZpcnN0SW5saW5lSXRlbS5pbmRleF07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9yaWdpbmFs
VGV4dEl0ZW0tPmlzVGV4dCgpKTsKLQotICAgICAgICBhdXRvIHRleHRSYW5nZSA9ICpmaXJzdElu
bGluZUl0ZW0ucGFydGlhbENvbnRleHQ7Ci0gICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwg
bGVhZGluZyBpbmxpbmUgaXRlbS4KLSAgICAgICAgQVNTRVJUKCFtX2xlYWRpbmdQYXJ0aWFsSW5s
aW5lVGV4dEl0ZW0pOwotICAgICAgICBtX2xlYWRpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0gPSBk
b3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oKm9yaWdpbmFsVGV4dEl0ZW0pLnNwbGl0KHRleHRSYW5n
ZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0o
Km1fbGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbSkgPT0gSXNFbmRPZkxpbmU6OlllcykKLSAg
ICAgICAgICAgIHJldHVybiBjbG9zZSgpOwotICAgICAgICArK2ZpcnN0Tm9uUGFydGlhbEluZGV4
OwotICAgIH0KLQotICAgIGZvciAoYXV0byBpbmxpbmVJdGVtSW5kZXggPSBmaXJzdE5vblBhcnRp
YWxJbmRleDsgaW5saW5lSXRlbUluZGV4IDwgbV9saW5lSW5wdXQuaW5saW5lSXRlbXMuc2l6ZSgp
OyArK2lubGluZUl0ZW1JbmRleCkgewotICAgICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKCptX2xp
bmVJbnB1dC5pbmxpbmVJdGVtc1tpbmxpbmVJdGVtSW5kZXhdKSA9PSBJc0VuZE9mTGluZTo6WWVz
KQotICAgICAgICAgICAgcmV0dXJuIGNsb3NlKCk7Ci0gICAgfQotICAgIGNvbW1pdFBlbmRpbmdD
b250ZW50KCk7Ci0gICAgcmV0dXJuIGNsb3NlKCk7Ci19Ci0KLUlubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpJbmxpbmVMYXlvdXQ6OklubGluZUxheW91dChJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9u
dGFsVmFsdWVzKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKLSAgICAsIG1fdXNlZEhvcml6b250YWxWYWx1ZXModXNlZEhvcml6b250YWxW
YWx1ZXMpCi17Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91
dDo6bGF5b3V0KGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKLXsKLSAgICBhdXRvIGxp
bmVMb2dpY2FsVG9wID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmb3JtYXR0
aW5nUm9vdCgpKS5jb250ZW50Qm94VG9wKCk7Ci0gICAgSW5kZXhBbmRSYW5nZSBjdXJyZW50SW5s
aW5lSXRlbTsKLSAgICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXggPCBpbmxpbmVJdGVt
cy5zaXplKCkpIHsKLSAgICAgICAgYXV0byBsaW5lSW5wdXQgPSBMaW5lSW5wdXQgeyBpbml0aWFs
Q29uc3RyYWludHNGb3JMaW5lKGxpbmVMb2dpY2FsVG9wKSwgZm9ybWF0dGluZ1Jvb3QoKS5zdHls
ZSgpLnRleHRBbGlnbigpLCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMgfTsKLSAgICAg
ICAgYXV0byBsaW5lTGF5b3V0ID0gTGluZUxheW91dCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxp
bmVJbnB1dCB9OwotCi0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0LmxheW91
dCgpOwotICAgICAgICBzZXR1cERpc3BsYXlCb3hlcyhsaW5lQ29udGVudCk7Ci0KLSAgICAgICAg
aWYgKGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQpIHsKLSAgICAgICAgICAgIGN1cnJlbnRJbmxp
bmVJdGVtID0geyBsaW5lQ29udGVudC5sYXN0Q29tbWl0dGVkLT5pbmRleCArIDEsIFdURjo6bnVs
bG9wdCB9OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBsaW5lQ29udGVudC5saW5lQm94
LmxvZ2ljYWxCb3R0b20oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZsb2F0
cyBwcmV2ZW50ZWQgdXMgcGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KLSAgICAgICAg
ICAgIEFTU0VSVChsaW5lSW5wdXQuaW5pdGlhbENvbnN0cmFpbnRzLmxpbmVJc0NvbnN0cmFpbmVk
QnlGbG9hdCk7Ci0gICAgICAgICAgICAvLyBNb3ZlIHRoZSBuZXh0IGxpbmUgYmVsb3cgdGhlIGlu
dHJ1c2l2ZSBmbG9hdC4KLSAgICAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRp
bmdDb250ZXh0IHsgZm9ybWF0dGluZ1Jvb3QoKSwgZm9ybWF0dGluZ0NvbnRleHQoKSwgZm9ybWF0
dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07Ci0gICAgICAgICAgICBhdXRvIGZsb2F0Q29u
c3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMoeyBsaW5lTG9naWNhbFRvcCB9
KTsKLSAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQgfHwgZmxvYXRDb25z
dHJhaW50cy5yaWdodCk7Ci0gICAgICAgICAgICBzdGF0aWMgYXV0byBpbmlmaXRlUG9pbnQgPSBQ
b2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwotICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsZWZ0
IGFuZCByaWdodCBjb25zdHJhaW50cywgd2UgbmVlZCB0byBwaWNrIHRoZSBvbmUgdGhhdCdzIGNs
b3NlciB0byB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBz
dGQ6Om1pbihmbG9hdENvbnN0cmFpbnRzLmxlZnQudmFsdWVPcihpbmlmaXRlUG9pbnQpLnksIGZs
b2F0Q29uc3RyYWludHMucmlnaHQudmFsdWVPcihpbmlmaXRlUG9pbnQpLnkpOwotICAgICAgICAg
ICAgQVNTRVJUKGxpbmVMb2dpY2FsVG9wIDwgaW5pZml0ZVBvaW50LnkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1MaW5lOjpJbml0aWFsQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OklubGluZUxheW91dDo6aW5pdGlhbENvbnN0cmFpbnRzRm9yTGluZShjb25zdCBMYXlvdXRV
bml0IGxpbmVMb2dpY2FsVG9wKQotewotICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCgpKS5jb250ZW50Qm94
TGVmdCgpOwotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSB3aWR0aENvbnN0cmFpbnQoKTsKLSAg
ICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZhbHNlOwotCi0gICAgYXV0byBmbG9h
dGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5nUm9vdCgpLCBmb3JtYXR0
aW5nQ29udGV4dCgpLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKLSAgICAv
LyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFp
bGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KLSAgICBpZiAoIWZsb2F0aW5n
Q29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxv
YXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSk7Ci0gICAgICAgIC8v
IENoZWNrIGlmIHRoZXNlIGNvbnN0cmFpbnRzIGFjdHVhbGx5IHB1dCBsaW1pdGF0aW9uIG9uIHRo
ZSBsaW5lLgotICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3Ry
YWludHMubGVmdC0+eCA8PSBsaW5lTG9naWNhbExlZnQpCi0gICAgICAgICAgICBmbG9hdENvbnN0
cmFpbnRzLmxlZnQgPSB7IH07Ci0KLSAgICAgICAgYXV0byBsaW5lTG9naWNhbFJpZ2h0ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCgpKS5jb250ZW50
Qm94UmlnaHQoKTsKLSAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQgJiYgZmxvYXRD
b25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbFJpZ2h0KQotICAgICAgICAgICAgZmxv
YXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsKLQotICAgICAgICBsaW5lSXNDb25zdHJhaW5lZEJ5
RmxvYXQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQgfHwgZmxvYXRDb25zdHJhaW50cy5yaWdodDsK
LQotICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMu
cmlnaHQpIHsKLSAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPD0g
ZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9
IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggLSBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPng7Ci0g
ICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPng7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAg
ICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSAoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IC0gbGlu
ZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3Ry
YWludHMubGVmdC0+eDsKLSAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5l
TG9naWNhbExlZnQpOwotICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0LT54IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBMaW5lOjpJbml0aWFsQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxv
Z2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCwgZm9y
bWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5lSGVpZ2h0Q29uc3RyYWludHMoZm9ybWF0dGlu
Z1Jvb3QoKSkgfTsKLX0KLQotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5s
aW5lTGF5b3V0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtcykgY29uc3QKLXsKLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZv
cm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgTGF5b3V0VW5pdCBtYXhpbXVtTGluZVdpZHRoOwotICAg
IEluZGV4QW5kUmFuZ2UgY3VycmVudElubGluZUl0ZW07Ci0gICAgd2hpbGUgKGN1cnJlbnRJbmxp
bmVJdGVtLmluZGV4IDwgaW5saW5lSXRlbXMuc2l6ZSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdGhl
IGhvcml6dG9uYWwgYXZhaWxhYmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5n
IGludHJpbnNpYyB3aWR0aC4KLSAgICAgICAgYXV0byBpbml0aWFsTGluZUNvbnN0cmFpbnRzID0g
TGluZTo6SW5pdGlhbENvbnN0cmFpbnRzIHsgeyB9LCB3aWR0aENvbnN0cmFpbnQoKSwgZmFsc2Us
IHsgfSB9OwotICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVJbnB1dCB7IGluaXRpYWxMaW5l
Q29uc3RyYWludHMsIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVtcyB9OwotCi0gICAgICAg
IGF1dG8gbGluZUNvbnRlbnQgPSBMaW5lTGF5b3V0KGZvcm1hdHRpbmdDb250ZXh0LCBsaW5lSW5w
dXQpLmxheW91dCgpOwotCi0gICAgICAgIGN1cnJlbnRJbmxpbmVJdGVtID0geyBsaW5lQ29udGVu
dC5sYXN0Q29tbWl0dGVkLT5pbmRleCArIDEsIHsgfSB9OwotICAgICAgICBMYXlvdXRVbml0IGZs
b2F0c1dpZHRoOwotICAgICAgICBmb3IgKGF1dG8mIGZsb2F0SXRlbSA6IGxpbmVDb250ZW50LmZs
b2F0cykKLSAgICAgICAgICAgIGZsb2F0c1dpZHRoICs9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21l
dHJ5Rm9yQm94KGZsb2F0SXRlbS0+bGF5b3V0Qm94KCkpLm1hcmdpbkJveFdpZHRoKCk7Ci0gICAg
ICAgIG1heGltdW1MaW5lV2lkdGggPSBzdGQ6Om1heChtYXhpbXVtTGluZVdpZHRoLCBmbG9hdHNX
aWR0aCArIGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbFdpZHRoKCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbWF4aW11bUxpbmVXaWR0aDsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6SW5saW5lTGF5b3V0OjpzZXR1cERpc3BsYXlCb3hlcyhjb25zdCBMaW5lQ29udGVudCYgbGlu
ZUNvbnRlbnQpCi17Ci0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0
aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRp
bmdTdGF0ZSgpOwotICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsg
Zm9ybWF0dGluZ1Jvb3QoKSwgZm9ybWF0dGluZ0NvbnRleHQsIGZvcm1hdHRpbmdTdGF0ZS5mbG9h
dGluZ1N0YXRlKCkgfTsKLQotICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0
aW9uLgotICAgIGZvciAoY29uc3QgYXV0byYgZmxvYXRJdGVtIDogbGluZUNvbnRlbnQuZmxvYXRz
KSB7Ci0gICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gZmxvYXRJdGVtLT5sYXlvdXRCb3goKTsKLSAg
ICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGZsb2F0
Qm94KTsKLSAgICAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KLSAgICAgICAgYXV0
byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdCh7IGxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5sb2dpY2FsVG9wKCkgfSk7
Ci0gICAgICAgIC8vIEZsb2F0IGl0LgotICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxv
YXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxvYXRCb3gpKTsKLSAgICAgICAgZmxvYXRp
bmdDb250ZXh0LmFwcGVuZChmbG9hdEJveCk7Ci0gICAgfQotCi0gICAgLy8gQWRkIGZpbmFsIGRp
c3BsYXkgcnVucyB0byBzdGF0ZS4KLSAgICBmb3IgKGF1dG8mIGxpbmVSdW4gOiBsaW5lQ29udGVu
dC5ydW5MaXN0KSB7Ci0gICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXJzICg8c3Bhbj4p
IGRvbid0IGdlbmVyYXRlIGlubGluZSBydW5zLgotICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250
YWluZXJTdGFydCgpIHx8IGxpbmVSdW4tPmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihsaW5lUnVuLT5k
aXNwbGF5UnVuKCkpOwotICAgIH0KLQotICAgIC8vIENvbXB1dGUgYm94IGZpbmFsIGdlb21ldHJ5
LgotICAgIGF1dG8gZ2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeSgpOwotICAg
IGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVuTGlzdDsKLSAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAg
YXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGluZGV4KTsKLSAgICAgICAgYXV0byYgbG9naWNh
bFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgpOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1h
dHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0KLSAgICAgICAgaWYgKGxpbmVSdW4t
PmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChsb2dp
Y2FsUmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94
V2lkdGgobG9naWNhbFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hIZWlnaHQobG9naWNhbFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgYm94IChyZXBsYWNlZCBv
ciBpbmxpbmUtYmxvY2spCi0gICAgICAgIGlmIChsaW5lUnVuLT5pc0JveCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIHRvcExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0KCk7Ci0gICAgICAgICAgICBp
ZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIHRvcExl
ZnQgKz0gZ2VvbWV0cnkuaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwg
bV91c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExl
ZnQodG9wTGVmdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElubGluZSBsZXZlbCBjb250YWluZXIgc3RhcnQgKDxzcGFuPikKLSAgICAgICAgaWYgKGxp
bmVSdW4tPmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+
KQotICAgICAgICBpZiAobGluZVJ1bi0+aXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
aWYgKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gaW5mbG93T2Zmc2V0ID0gZ2VvbWV0cnkuaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0
KGxheW91dEJveCwgbV91c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgZGlz
cGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KGluZmxvd09mZnNldC53aWR0aCgpKTsKLSAgICAgICAg
ICAgICAgICBkaXNwbGF5Qm94Lm1vdmVWZXJ0aWNhbGx5KGluZmxvd09mZnNldC5oZWlnaHQoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkJveFdpZHRoID0gbG9naWNh
bFJlY3QubGVmdCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRl
bnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCi0gICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOwot
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0Lmhl
aWdodCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGxpbmVSdW4tPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBMaW5lOjpSdW4qIHByZXZp
b3VzTGluZVJ1biA9ICFpbmRleCA/IG51bGxwdHIgOiBsaW5lUnVuc1tpbmRleCAtIDFdLmdldCgp
OwotICAgICAgICAgICAgLy8gRklYTUUgdGFrZSBjb250ZW50IGJyZWFraW5nIGludG8gYWNjb3Vu
dCB3aGVuIHBhcnQgb2YgdGhlIGxheW91dCBib3ggaXMgb24gdGhlIHByZXZpb3VzIGxpbmUuCi0g
ICAgICAgICAgICBhdXRvIGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94ID0gIXByZXZpb3VzTGlu
ZVJ1biB8fCAmcHJldmlvdXNMaW5lUnVuLT5sYXlvdXRCb3goKSAhPSAmbGF5b3V0Qm94OwotICAg
ICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBsaW5lUnVuLT5pc1Zpc3VhbGx5RW1wdHkoKSA/
IExheW91dFVuaXQoKSA6IGxvZ2ljYWxSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZmly
c3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3gpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXR1cCBkaXNw
bGF5IGJveCBmb3IgdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveC4KLSAgICAgICAgICAgICAgICBk
aXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAg
ICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsV2lkdGgpOwotICAgICAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChsb2dpY2FsUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGZp
eCBpdCBmb3IgbXVsdGlydW4vbXVsdGlsaW5lLgotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gu
c2V0Q29udGVudEJveFdpZHRoKGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkgKyBsb2dpY2Fs
V2lkdGgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRMaW5lQm94KGxpbmVDb250ZW50LmxpbmVCb3gpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRleCBlNDU0ODc2N2NkNzdhYzY5YjViY2M2ZGQ3
OTg2NTUxODdkZDBjZjFlLi5hNGIwNDZkMzRhZTlhNDJkMjU3OWNkZDc3OTZkZTNmODU1MTNmY2Vk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7CiAKICAgICBJbmxpbmVJdGVt
cyYgaW5saW5lSXRlbXMoKSB7IHJldHVybiBtX2lubGluZUl0ZW1zOyB9CisgICAgY29uc3QgSW5s
aW5lSXRlbXMmIGlubGluZUl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtczsgfQog
ICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4mJiBpbmxp
bmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYXBwZW5kKFdURk1vdmUoaW5saW5lSXRlbSkpOyB9CiAK
ICAgICBJbmxpbmVSdW5zJiBpbmxpbmVSdW5zKCkgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmVMYXlvdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1OTkwNDZjY2M0MjY2ZjNmMzgzN2ZmMjhl
NGUyYjE4NTA3N2VlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcApAQCAtMCwwICsxLDIxMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lTGF5
b3V0LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1
ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKKyNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3guaCIKKyNp
bmNsdWRlICJUZXh0VXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5
b3V0IHsKKworc3RhdGljIExheW91dFVuaXQgaW5saW5lSXRlbVdpZHRoKGNvbnN0IEZvcm1hdHRp
bmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCit7CisgICAgaWYgKGlubGluZUl0ZW0u
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaXM8SW5saW5lVGV4
dEl0ZW0+KGlubGluZUl0ZW0pKSB7CisgICAgICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93
bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAgICAgICBhdXRvIGVuZCA9IGlu
bGluZVRleHRJdGVtLmlzQ29sbGFwc2VkKCkgPyBpbmxpbmVUZXh0SXRlbS5zdGFydCgpICsgMSA6
IGlubGluZVRleHRJdGVtLmVuZCgpOworICAgICAgICByZXR1cm4gVGV4dFV0aWw6OndpZHRoKGlu
bGluZVRleHRJdGVtLmxheW91dEJveCgpLCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBlbmQsIGNv
bnRlbnRMb2dpY2FsTGVmdCk7CisgICAgfQorCisgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5l
SXRlbS5sYXlvdXRCb3goKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisKKyAgICBpZiAobGF5b3V0Qm94LmlzRmxv
YXRpbmdQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hX
aWR0aCgpOworCisgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkud2lkdGgoKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBib3hHZW9t
ZXRyeS5ib3JkZXJMZWZ0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7
CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luRW5kKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpICsgYm94
R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKworICAgIC8vIE5vbi1yZXBsYWNl
ZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykKKyAgICByZXR1cm4gYm94R2VvbWV0cnku
d2lkdGgoKTsKK30KKworTGluZUxheW91dDo6TGluZUlucHV0OjpMaW5lSW5wdXQoY29uc3QgTGlu
ZTo6SW5pdGlhbENvbnN0cmFpbnRzJiBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBUZXh0QWxpZ25N
b2RlIGhvcml6b250YWxBbGlnbm1lbnQsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1Byb2Nlc3MsIGNv
bnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKKyAgICA6IGluaXRpYWxDb25zdHJhaW50cyhp
bml0aWFsTGluZUNvbnN0cmFpbnRzKQorICAgICwgaG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9u
dGFsQWxpZ25tZW50KQorICAgICwgZmlyc3RJbmxpbmVJdGVtKGZpcnN0VG9Qcm9jZXNzKQorICAg
ICwgaW5saW5lSXRlbXMoaW5saW5lSXRlbXMpCit7Cit9CisKK0xpbmVMYXlvdXQ6OkxpbmVJbnB1
dDo6TGluZUlucHV0KGNvbnN0IExpbmU6OkluaXRpYWxDb25zdHJhaW50cyYgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgSW5kZXhBbmRSYW5nZSBmaXJzdFRvUHJvY2VzcywgY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUl0ZW1zKQorICAgIDogaW5pdGlhbENvbnN0cmFpbnRzKGluaXRpYWxMaW5lQ29u
c3RyYWludHMpCisgICAgLCBza2lwQWxpZ25tZW50KExpbmU6OlNraXBBbGlnbm1lbnQ6OlllcykK
KyAgICAsIGZpcnN0SW5saW5lSXRlbShmaXJzdFRvUHJvY2VzcykKKyAgICAsIGlubGluZUl0ZW1z
KGlubGluZUl0ZW1zKQoreworfQorCit2b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVu
dDo6YWRkKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdp
ZHRoKQoreworICAgIG1fdW5jb21taXR0ZWRSdW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2lj
YWxXaWR0aCB9KTsKKyAgICBtX3dpZHRoICs9IGxvZ2ljYWxXaWR0aDsKK30KKwordm9pZCBMaW5l
TGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX3VuY29tbWl0dGVk
UnVucy5jbGVhcigpOworICAgIG1fd2lkdGggPSAwOworfQorCitMaW5lTGF5b3V0OjpMaW5lTGF5
b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgTGluZUlucHV0JiBsaW5lSW5wdXQpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdD
b250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9saW5lSW5wdXQobGluZUlu
cHV0KQorICAgICwgbV9saW5lKGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBsaW5lSW5wdXQuaW5p
dGlhbENvbnN0cmFpbnRzLCBsaW5lSW5wdXQuaG9yaXpvbnRhbEFsaWdubWVudCwgbGluZUlucHV0
LnNraXBBbGlnbm1lbnQpCisgICAgLCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdChsaW5lSW5wdXQu
aW5pdGlhbENvbnN0cmFpbnRzLmxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCkKK3sKK30KKworTGlu
ZUxheW91dDo6TGluZUNvbnRlbnQgTGluZUxheW91dDo6bGF5b3V0KCkKK3sKKyAgICAvLyBJdGVy
YXRlIHRocm91Z2ggdGhlIGlubGluZSBjb250ZW50IGFuZCBwbGFjZSB0aGUgaW5saW5lIGJveGVz
IG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFydGlhbCB0ZXh0
IGZyb20gdGhlIHByZXZpb3VzIGxpbmUuCisgICAgYXV0byBmaXJzdElubGluZUl0ZW0gPSBtX2xp
bmVJbnB1dC5maXJzdElubGluZUl0ZW07CisgICAgdW5zaWduZWQgZmlyc3ROb25QYXJ0aWFsSW5k
ZXggPSBmaXJzdElubGluZUl0ZW0uaW5kZXg7CisgICAgaWYgKGZpcnN0SW5saW5lSXRlbS5wYXJ0
aWFsQ29udGV4dCkgeworICAgICAgICAvLyBIYW5kbGUgcGFydGlhbCBpbmxpbmUgaXRlbSAoc3Bs
aXQgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKS4KKyAgICAgICAgYXV0byYgb3JpZ2luYWxU
ZXh0SXRlbSA9IG1fbGluZUlucHV0LmlubGluZUl0ZW1zW2ZpcnN0SW5saW5lSXRlbS5pbmRleF07
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9yaWdpbmFsVGV4dEl0ZW0tPmlzVGV4dCgpKTsKKwor
ICAgICAgICBhdXRvIHRleHRSYW5nZSA9ICpmaXJzdElubGluZUl0ZW0ucGFydGlhbENvbnRleHQ7
CisgICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgbGVhZGluZyBpbmxpbmUgaXRlbS4KKyAg
ICAgICAgQVNTRVJUKCFtX2xlYWRpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0pOworICAgICAgICBt
X2xlYWRpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4o
Km9yaWdpbmFsVGV4dEl0ZW0pLnNwbGl0KHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0
aCk7CisgICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0oKm1fbGVhZGluZ1BhcnRpYWxJbmxpbmVU
ZXh0SXRlbSkgPT0gSXNFbmRPZkxpbmU6OlllcykKKyAgICAgICAgICAgIHJldHVybiBjbG9zZSgp
OworICAgICAgICArK2ZpcnN0Tm9uUGFydGlhbEluZGV4OworICAgIH0KKworICAgIGZvciAoYXV0
byBpbmxpbmVJdGVtSW5kZXggPSBmaXJzdE5vblBhcnRpYWxJbmRleDsgaW5saW5lSXRlbUluZGV4
IDwgbV9saW5lSW5wdXQuaW5saW5lSXRlbXMuc2l6ZSgpOyArK2lubGluZUl0ZW1JbmRleCkgewor
ICAgICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKCptX2xpbmVJbnB1dC5pbmxpbmVJdGVtc1tpbmxp
bmVJdGVtSW5kZXhdKSA9PSBJc0VuZE9mTGluZTo6WWVzKQorICAgICAgICAgICAgcmV0dXJuIGNs
b3NlKCk7CisgICAgfQorICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisgICAgcmV0dXJuIGNs
b3NlKCk7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6Y29tbWl0UGVuZGluZ0NvbnRlbnQoKQorewor
ICAgIGlmIChtX3VuY29tbWl0dGVkQ29udGVudC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCArPSBtX3VuY29tbWl0dGVkQ29udGVudC5z
aXplKCk7CisgICAgZm9yIChhdXRvJiB1bmNvbW1pdHRlZFJ1biA6IG1fdW5jb21taXR0ZWRDb250
ZW50LnJ1bnMoKSkKKyAgICAgICAgbV9saW5lLmFwcGVuZCh1bmNvbW1pdHRlZFJ1bi5pbmxpbmVJ
dGVtLCB1bmNvbW1pdHRlZFJ1bi5sb2dpY2FsV2lkdGgpOworICAgIG1fdW5jb21taXR0ZWRDb250
ZW50LnJlc2V0KCk7Cit9CisKK0xpbmVMYXlvdXQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXQ6OmNs
b3NlKCkKK3sKKyAgICBBU1NFUlQobV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgbV9saW5l
SGFzSW50cnVzaXZlRmxvYXQpOworICAgIGlmICghbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQp
CisgICAgICAgIHJldHVybiBMaW5lQ29udGVudCB7IFdURjo6bnVsbG9wdCwgV1RGTW92ZShtX2Zs
b2F0cyksIG1fbGluZS5jbG9zZSgpLCBtX2xpbmUubGluZUJveCgpIH07CisKKyAgICBhdXRvIGxh
c3RJbmxpbmVJdGVtSW5kZXggPSBtX2xpbmVJbnB1dC5maXJzdElubGluZUl0ZW0uaW5kZXggKyBt
X2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCAtIDE7CisgICAgT3B0aW9uYWw8SW5kZXhBbmRSYW5n
ZTo6UmFuZ2U+IHBhcnRpYWxDb250ZXh0OworICAgIGlmIChtX3RyYWlsaW5nUGFydGlhbElubGlu
ZVRleHRJdGVtKQorICAgICAgICBwYXJ0aWFsQ29udGV4dCA9IEluZGV4QW5kUmFuZ2U6OlJhbmdl
IHsgbV90cmFpbGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbS0+c3RhcnQoKSwgbV90cmFpbGluZ1Bh
cnRpYWxJbmxpbmVUZXh0SXRlbS0+bGVuZ3RoKCkgfTsKKworICAgIGF1dG8gbGFzdENvbW1pdGVk
SXRlbSA9IEluZGV4QW5kUmFuZ2UgeyBsYXN0SW5saW5lSXRlbUluZGV4LCBwYXJ0aWFsQ29udGV4
dCB9OworICAgIHJldHVybiBMaW5lQ29udGVudCB7IGxhc3RDb21taXRlZEl0ZW0sIFdURk1vdmUo
bV9mbG9hdHMpLCBtX2xpbmUuY2xvc2UoKSwgbV9saW5lLmxpbmVCb3goKSB9OworfQorCitMaW5l
TGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbV9saW5l
LmF2YWlsYWJsZVdpZHRoKCkgLSBtX3VuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOworICAgIGF1
dG8gY3VycmVudExvZ2ljYWxSaWdodCA9IG1fbGluZS5saW5lQm94KCkubG9naWNhbFJpZ2h0KCkg
KyBtX3VuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOworICAgIGF1dG8gaXRlbUxvZ2ljYWxXaWR0
aCA9IGlubGluZUl0ZW1XaWR0aChmb3JtYXR0aW5nQ29udGV4dCgpLCBpbmxpbmVJdGVtLCBjdXJy
ZW50TG9naWNhbFJpZ2h0KTsKKworICAgIC8vIEZJWE1FOiBFbnN1cmUgTGluZUNvbnRleHQ6OnRy
aW1tYWJsZVdpZHRoIGluY2x1ZGVzIHVuY29tbWl0dGVkIGNvbnRlbnQgaWYgbmVlZGVkLgorICAg
IGF1dG8gbGluZUlzQ29uc2lkZXJlZEVtcHR5ID0gIW1fbGluZS5oYXNDb250ZW50KCkgJiYgIW1f
bGluZUhhc0ludHJ1c2l2ZUZsb2F0OworICAgIGF1dG8gYnJlYWtpbmdDb250ZXh0ID0gbV9saW5l
QnJlYWtlci5icmVha2luZ0NvbnRleHQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCwgeyBh
dmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2ljYWxSaWdodCwgbV9saW5lLnRyYWlsaW5nVHJpbW1h
YmxlV2lkdGgoKSwgbGluZUlzQ29uc2lkZXJlZEVtcHR5IH0pOworICAgIGlmIChicmVha2luZ0Nv
bnRleHQuaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkpCisgICAgICAgIGNvbW1pdFBlbmRpbmdDb250
ZW50KCk7CisKKyAgICAvLyBDb250ZW50IGRvZXMgbm90IGZpdCB0aGUgY3VycmVudCBsaW5lLgor
ICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6
QnJlYWtpbmdCZWhhdmlvcjo6V3JhcCkKKyAgICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpZZXM7
CisKKyAgICAvLyBQYXJ0aWFsIGNvbnRlbnQgc3RheXMgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAg
ICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJy
ZWFraW5nQmVoYXZpb3I6OlNwbGl0KSB7CisgICAgICAgIEFTU0VSVChpbmxpbmVJdGVtLmlzVGV4
dCgpKTsKKyAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0
SXRlbT4oaW5saW5lSXRlbSk7CisgICAgICAgIGF1dG8gc3BsaXREYXRhID0gVGV4dFV0aWw6OnNw
bGl0KGlubGluZVRleHRJdGVtLmxheW91dEJveCgpLCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBp
bmxpbmVUZXh0SXRlbS5sZW5ndGgoKSwgaXRlbUxvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlV2lkdGgs
IGN1cnJlbnRMb2dpY2FsUmlnaHQpOworICAgICAgICAvLyBDb25zdHJ1Y3QgYSBwYXJ0aWFsIHRy
YWlsaW5nIGlubGluZSBpdGVtLgorICAgICAgICBBU1NFUlQoIW1fdHJhaWxpbmdQYXJ0aWFsSW5s
aW5lVGV4dEl0ZW0pOworICAgICAgICBtX3RyYWlsaW5nUGFydGlhbElubGluZVRleHRJdGVtID0g
aW5saW5lVGV4dEl0ZW0uc3BsaXQoc3BsaXREYXRhLnN0YXJ0LCBzcGxpdERhdGEubGVuZ3RoKTsK
KyAgICAgICAgbV91bmNvbW1pdHRlZENvbnRlbnQuYWRkKCptX3RyYWlsaW5nUGFydGlhbElubGlu
ZVRleHRJdGVtLCBzcGxpdERhdGEubG9naWNhbFdpZHRoKTsKKyAgICAgICAgY29tbWl0UGVuZGlu
Z0NvbnRlbnQoKTsKKyAgICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpZZXM7CisgICAgfQorCisg
ICAgQVNTRVJUKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2Vy
OjpCcmVha2luZ0JlaGF2aW9yOjpLZWVwKTsKKyAgICBpZiAoaW5saW5lSXRlbS5pc0Zsb2F0KCkp
IHsKKyAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOworICAg
ICAgICAvLyBTaHJpbmsgYXZhaWxhYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUg
ZXhpc3RpbmcgaW5saW5lIHJ1bnMuCisgICAgICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goZmxvYXRCb3gpLm1hcmdpbkJveFdpZHRoKCk7
CisgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbV9saW5lLm1v
dmVMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6IG1fbGluZS5tb3ZlTG9naWNhbFJpZ2h0KGZs
b2F0Qm94V2lkdGgpOworICAgICAgICBtX2Zsb2F0cy5hcHBlbmQobWFrZVdlYWtQdHIoaW5saW5l
SXRlbSkpOworICAgICAgICArK21fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50OworICAgICAgICBt
X2xpbmVIYXNJbnRydXNpdmVGbG9hdCA9IHRydWU7CisgICAgICAgIHJldHVybiBJc0VuZE9mTGlu
ZTo6Tm87CisgICAgfQorCisgICAgbV91bmNvbW1pdHRlZENvbnRlbnQuYWRkKGlubGluZUl0ZW0s
IGl0ZW1Mb2dpY2FsV2lkdGgpOworICAgIGlmIChicmVha2luZ0NvbnRleHQuaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkpCisgICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisKKyAgICByZXR1
cm4gaW5saW5lSXRlbS5pc0hhcmRMaW5lQnJlYWsoKSA/IElzRW5kT2ZMaW5lOjpZZXMgOiBJc0Vu
ZE9mTGluZTo6Tm87Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWVlNDA5YTMwYTg2ZDNlYzFmYjYzN2IzMDRhY2NkMjdjOGY4YjJlZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVMYXlvdXQuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbmxp
bmVMaW5lLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgewor
CitjbGFzcyBMaW5lTGF5b3V0IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTGluZUlucHV0OworICAg
IExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBMaW5lSW5w
dXQmKTsKKworICAgIHN0cnVjdCBMaW5lQ29udGVudDsKKyAgICBMaW5lQ29udGVudCBsYXlvdXQo
KTsKKworICAgIHN0cnVjdCBJbmRleEFuZFJhbmdlIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
eyAwIH07CisgICAgICAgIHN0cnVjdCBSYW5nZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFy
dCB7IDAgfTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKKyAgICAgICAgfTsK
KyAgICAgICAgT3B0aW9uYWw8UmFuZ2U+IHBhcnRpYWxDb250ZXh0OworICAgIH07CisKKyAgICBz
dHJ1Y3QgTGluZUlucHV0IHsKKyAgICAgICAgTGluZUlucHV0KGNvbnN0IExpbmU6OkluaXRpYWxD
b25zdHJhaW50cyYsIFRleHRBbGlnbk1vZGUsIEluZGV4QW5kUmFuZ2UgZmlyc3RUb1Byb2Nlc3Ms
IGNvbnN0IElubGluZUl0ZW1zJik7CisgICAgICAgIExpbmVJbnB1dChjb25zdCBMaW5lOjpJbml0
aWFsQ29uc3RyYWludHMmLCBJbmRleEFuZFJhbmdlIGZpcnN0VG9Qcm9jZXNzLCBjb25zdCBJbmxp
bmVJdGVtcyYpOworCisgICAgICAgIExpbmU6OkluaXRpYWxDb25zdHJhaW50cyBpbml0aWFsQ29u
c3RyYWludHM7CisgICAgICAgIFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudDsKKyAg
ICAgICAgLy8gRklYTUUgQWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCBqdXN0IGhhdmUgYSBzZWNvbmQg
cGFzcyB3aXRoIHZlcnRpY2FsIHBvc2l0aW9uaW5nIChwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRp
b24gb3B0cyBvdXQpIAorICAgICAgICBMaW5lOjpTa2lwQWxpZ25tZW50IHNraXBBbGlnbm1lbnQg
eyBMaW5lOjpTa2lwQWxpZ25tZW50OjpObyB9OworICAgICAgICBJbmRleEFuZFJhbmdlIGZpcnN0
SW5saW5lSXRlbTsKKyAgICAgICAgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zOworICAg
ICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBmbG9hdE1pbmltdW1Mb2dpY2FsQm90dG9tOworICAg
IH07CisKKyAgICBzdHJ1Y3QgTGluZUNvbnRlbnQgeworICAgICAgICBPcHRpb25hbDxJbmRleEFu
ZFJhbmdlPiBsYXN0Q29tbWl0dGVkOworICAgICAgICBWZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVt
Pj4gZmxvYXRzOworICAgICAgICBjb25zdCBMaW5lOjpSdW5MaXN0IHJ1bkxpc3Q7CisgICAgICAg
IGNvbnN0IExpbmVCb3ggbGluZUJveDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBlbnVtIGNsYXNzIElzRW5kT2ZMaW5l
IHsgTm8sIFllcyB9OworICAgIElzRW5kT2ZMaW5lIHBsYWNlSW5saW5lSXRlbShjb25zdCBJbmxp
bmVJdGVtJik7CisgICAgdm9pZCBjb21taXRQZW5kaW5nQ29udGVudCgpOworICAgIExpbmVDb250
ZW50IGNsb3NlKCk7CisgICAgCisgICAgc3RydWN0IFVuY29tbWl0dGVkQ29udGVudCB7CisgICAg
ICAgIHN0cnVjdCBSdW4geworICAgICAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoOworICAgICAgICB9OworICAg
ICAgICB2b2lkIGFkZChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
OworICAgICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAgICAgVmVjdG9yPFJ1bj4gcnVucygpIHsg
cmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zLmlzRW1wdHkoKTsgfQorICAgICAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnMuc2l6ZSgpOyB9CisgICAg
ICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBWZWN0b3I8UnVuPiBtX3VuY29tbWl0dGVkUnVuczsKKyAgICAgICAg
TGF5b3V0VW5pdCBtX3dpZHRoOworICAgIH07CisKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKKyAgICBjb25zdCBMaW5lSW5wdXQm
IG1fbGluZUlucHV0OworICAgIExpbmUgbV9saW5lOworICAgIExpbmVCcmVha2VyIG1fbGluZUJy
ZWFrZXI7CisgICAgYm9vbCBtX2xpbmVIYXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07CisgICAg
VW5jb21taXR0ZWRDb250ZW50IG1fdW5jb21taXR0ZWRDb250ZW50OworICAgIHVuc2lnbmVkIG1f
Y29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHsgMCB9OworICAgIFZlY3RvcjxXZWFrUHRyPElubGlu
ZUl0ZW0+PiBtX2Zsb2F0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IG1f
bGVhZGluZ1BhcnRpYWxJbmxpbmVUZXh0SXRlbTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
VGV4dEl0ZW0+IG1fdHJhaWxpbmdQYXJ0aWFsSW5saW5lVGV4dEl0ZW07Cit9OworCit9Cit9Cisj
ZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>