<?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>216200</bug_id>
          
          <creation_ts>2020-09-04 16:41:03 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move Line handing to LineBuilder</short_desc>
          <delta_ts>2020-09-06 09:00:26 -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>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>1685919</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 16:41:03 -0700</bug_when>
    <thetext>from InlineFormattingContext::lineLayout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685921</commentid>
    <comment_count>1</comment_count>
      <attachid>408043</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 16:42:25 -0700</bug_when>
    <thetext>Created attachment 408043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685979</commentid>
    <comment_count>2</comment_count>
      <attachid>408062</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 19:18:23 -0700</bug_when>
    <thetext>Created attachment 408062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686057</commentid>
    <comment_count>3</comment_count>
      <attachid>408083</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-05 06:38:39 -0700</bug_when>
    <thetext>Created attachment 408083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686063</commentid>
    <comment_count>4</comment_count>
      <attachid>408085</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-05 07:44:31 -0700</bug_when>
    <thetext>Created attachment 408085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686188</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-06 08:59:40 -0700</bug_when>
    <thetext>Committed r266680: &lt;https://trac.webkit.org/changeset/266680&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408085.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686189</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-06 09:00:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/68427922&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408043</attachid>
            <date>2020-09-04 16:42:25 -0700</date>
            <delta_ts>2020-09-04 19:18:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216200-20200904164224.patch</filename>
            <type>text/plain</type>
            <size>43870</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhMDY2YzQ3NzcyYWUz
YjI1OTNlNGIwMmY2ZmYyNzk4MzQzMzcxNi4uODM4Yzk2ZjJjZTI1Yzg3YmRjYWM4OTA2ZGQ1N2Q0
YjI5NzZiZDY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTA5LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmUgaGFuZGluZyB0byBMaW5lQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmlu
c2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNG
b3JMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVGV4dElu
ZGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmZv
cm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxheW91
dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbnRlbnRMb2dp
Y2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpmb3Jt
YXR0aW5nQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OnJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OmNvbnN0cmFpbnRzRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpjb21taXRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpyZWJ1aWxkTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKwogMjAy
MC0wOS0wMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNd
W0lGQ10gUmVuYW1lIExpbmVMYXlvdXRDb250ZXh0IHRvIExpbmVCdWlsZGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMzA3ZWZiNTUzMTk1M2YyY2NiNmIzNmNmZDNi
NWZkNWFmNDFjOTMzNC4uY2ZkY2RmNGNjYjMzOThiZWJjYzIyZTcyZjNkNjU2NDZiNzg0NmZlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMTQwLDQyICsxNDAsMjEg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG92
ZXJmbG93Q29udGVudExlbmd0aDsKICAgICB9OwogICAgIE9wdGlvbmFsPFByZXZpb3VzTGluZT4g
cHJldmlvdXNMaW5lOwotICAgIGF1dG8gbGluZSA9IExpbmUgeyAqdGhpcyB9OwotICAgIGF1dG8g
bGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07
CisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0
aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAgICBhdXRvIGlzRmly
c3RMaW5lID0gIWZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlJbmxpbmVDb250ZW50KCkgfHwgZm9y
bWF0dGluZ1N0YXRlKCkuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmlzRW1wdHko
KTsKIAorICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCBmbG9hdGlu
Z0NvbnRleHQsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKICAgICB3aGlsZSAoIW5lZWRzTGF5b3V0
UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gbGluZUNvbnN0cmFpbnRzID0gY29uc3Ry
YWludHNGb3JMaW5lKGNvbnN0cmFpbnRzLmhvcml6b250YWwsIGxpbmVMb2dpY2FsVG9wKTsKLSAg
ICAgICAgbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5hdmFpbGFibGVMb2dpY2FsV2lkdGgpOwot
ICAgICAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KGxpbmVDb25zdHJhaW50cy5saW5lSXND
b25zdHJhaW5lZEJ5RmxvYXQpOwogICAgICAgICAvLyBUdXJuIHByZXZpb3VzIGxpbmUncyBvdmVy
ZmxvdyBjb250ZW50IGxlbmd0aCBpbnRvIHRoZSBuZXh0IGxpbmUncyBsZWFkaW5nIGNvbnRlbnQg
cGFydGlhbCBsZW5ndGguCiAgICAgICAgIC8vICJzcFs8LWxpbmUgYnJlYWstPl1saXRfY29udGVu
dCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBsZWFkaW5nIHBhcnRpYWwgY29udGVudCBsZW5n
dGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZp
b3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxs
b3B0OwotICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5l
Q29udGVudChsaW5lLCBuZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5n
dGgpOworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5l
Q29udGVudChuZWVkc0xheW91dFJhbmdlLCBpc0ZpcnN0TGluZSwgY29uc3RyYWludHMuaG9yaXpv
bnRhbCwgbGluZUxvZ2ljYWxUb3AsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CiAgICAg
ICAgIGF1dG8gbGluZUNvbnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsK
LSAgICAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAg
ICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsaW5lQ29udGVudFJhbmdlLmVuZCA9PSBuZWVk
c0xheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBp
bmxpbmUgY29udGVudC4KLSAgICAgICAgICAgIGZvciAoYXV0byBpID0gbmVlZHNMYXlvdXRSYW5n
ZS5lbmQ7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxv
YXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5l
bmQgLSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0
IGxlYXN0IG9uZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KCk7Ci0gICAgICAgIGxp
bmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLQotICAgICAgICBhdXRvIGxp
bmVJc1Zpc3VhbGx5RW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNM
aW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm87
Ci0gICAgICAgIGF1dG8gbGFzdExpbmUgPSBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPyBM
aW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAgICAgIGF1dG8gbGluZUJveCA9IExpbmVC
b3ggeyAqdGhpcywgbGluZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmxpbmVMb2dp
Y2FsV2lkdGgoKSwgbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCksIGxpbmVDb250ZW50LnJ1bnMs
IGxpbmVJc1Zpc3VhbGx5RW1wdHksIGxhc3RMaW5lfTsKLSAgICAgICAgc2V0RGlzcGxheUJveGVz
Rm9yTGluZShsaW5lQ29udGVudCwgbGluZUJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7Ci0K
KyAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lQ29udGVudCwgY29uc3RyYWludHMu
aG9yaXpvbnRhbCk7CiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRS
YW5nZS5lbmQpOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBsaW5lQm94LmxvZ2ljYWxC
b3R0b20oKTsKKyAgICAgICAgICAgIGlzRmlyc3RMaW5lID0gZmFsc2U7CisgICAgICAgICAgICBs
aW5lTG9naWNhbFRvcCA9IGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbEJvdHRvbSgpOwogICAg
ICAgICAgICAgLy8gV2hlbiB0aGUgdHJhaWxpbmcgY29udGVudCBpcyBwYXJ0aWFsLCB3ZSBuZWVk
IHRvIHJldXNlIHRoZSBsYXN0IElubGluZVRleHRJdGVtLgogICAgICAgICAgICAgYXV0byBsYXN0
SW5saW5lSXRlbU5lZWRzUGFydGlhbExheW91dCA9IGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50
Lmhhc1ZhbHVlKCk7CiAgICAgICAgICAgICBpZiAobGFzdElubGluZUl0ZW1OZWVkc1BhcnRpYWxM
YXlvdXQpIHsKQEAgLTE5NiwxMCArMTc1LDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAg
ICAgICAgfQogICAgICAgICAvLyBGbG9hdHMgcHJldmVudGVkIHVzIHBsYWNpbmcgYW55IGNvbnRl
bnQgb24gdGhlIGxpbmUuCiAgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHko
KSk7Ci0gICAgICAgIEFTU0VSVChsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOworICAgICAgICBB
U1NFUlQobGluZUNvbnRlbnQuaGFzSW50cnVzaXZlRmxvYXQpOwogICAgICAgICAvLyBNb3ZlIHRo
ZSBuZXh0IGxpbmUgYmVsb3cgdGhlIGludHJ1c2l2ZSBmbG9hdC4KLSAgICAgICAgYXV0byBmbG9h
dGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5n
U3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRz
ID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKGxpbmVMb2dpY2FsVG9wLCB0b0xheW91dFVu
aXQobGluZUJveC5sb2dpY2FsQm90dG9tKCkpKTsKKyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFp
bnRzID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKGxpbmVMb2dpY2FsVG9wLCB0b0xheW91
dFVuaXQobGluZUNvbnRlbnQubGluZUJveC5sb2dpY2FsQm90dG9tKCkpKTsKICAgICAgICAgQVNT
RVJUKGZsb2F0Q29uc3RyYWludHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KTsKICAg
ICAgICAgc3RhdGljIGF1dG8gaW5pZml0ZVBvaW50ID0gUG9pbnRJbkNvbnRleHRSb290OjptYXgo
KTsKICAgICAgICAgLy8gSW4gY2FzZSBvZiBsZWZ0IGFuZCByaWdodCBjb25zdHJhaW50cywgd2Ug
bmVlZCB0byBwaWNrIHRoZSBvbmUgdGhhdCdzIGNsb3NlciB0byB0aGUgY3VycmVudCBsaW5lLgpA
QCAtMjcwLDE4ICsyNDgsMTUgQEAgSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW4KIHsKICAgICBhdXRv
JiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CiAgICAgYXV0
byBtYXhpbXVtTGluZVdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgYXV0byBsaW5l
ID0gTGluZSB7ICp0aGlzIH07Ci0gICAgYXV0byBsaW5lQnVpbGRlciA9IExpbmVCdWlsZGVyIHsg
KnRoaXMsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKKyAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9
IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0
aW5nU3RhdGUoKSB9OworICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlz
LCBmbG9hdGluZ0NvbnRleHQsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKICAgICBhdXRvIGxheW91
dFJhbmdlID0gTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZSB7IDAgLCBpbmxpbmVJdGVtcy5z
aXplKCkgfTsKICAgICB3aGlsZSAoIWxheW91dFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBPbmx5IHRoZSBob3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVu
IGNvbXB1dGluZyBpbnRyaW5zaWMgd2lkdGguCi0gICAgICAgIGxpbmUub3BlbihhdmFpbGFibGVX
aWR0aCk7Ci0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxp
bmVDb250ZW50KGxpbmUsIGxheW91dFJhbmdlLCB7IH0pOwotICAgICAgICAvLyBGSVhNRTogRmlu
ZCBvdXQgaWYgbWluL21heCBuZWVkcyB0byBzZXQgdGhlIGlzTGFzdExpbmUgYml0LgotICAgICAg
ICBsaW5lLmNsb3NlKGZhbHNlKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWls
ZGVyLmxheW91dElubGluZUNvbnRlbnQobGF5b3V0UmFuZ2UsIGZhbHNlLCB7IHsgfSwgdG9MYXlv
dXRVbml0KGF2YWlsYWJsZVdpZHRoKSB9LCB7IH0sIHsgfSk7CiAgICAgICAgIGxheW91dFJhbmdl
LnN0YXJ0ID0gbGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlLmVuZDsKICAgICAgICAgLy8gRklY
TUU6IFVzZSBsaW5lIGxvZ2ljYWwgbGVmdCBhbmQgcmlnaHQgdG8gdGFrZSBmbG9hdHMgaW50byBh
Y2NvdW50LgotICAgICAgICBtYXhpbXVtTGluZVdpZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVX
aWR0aCwgbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCkpOworICAgICAgICBtYXhpbXVtTGluZVdp
ZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVXaWR0aCwgbGluZUNvbnRlbnQubGluZUJveC5sb2dp
Y2FsV2lkdGgoKSk7CiAgICAgfQogICAgIHJldHVybiBtYXhpbXVtTGluZVdpZHRoOwogfQpAQCAt
NDE1LDc4ICszOTAsMTAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElu
bGluZUNvbnRlbnRJZk5lZWRlZCgpCiAgICAgfQogfQogCi1JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJhaW50c0Zv
ckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMs
IElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCi17Ci0gICAgYXV0byBsaW5lTG9naWNh
bExlZnQgPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7Ci0gICAgYXV0byBsaW5l
TG9naWNhbFJpZ2h0ID0gbGluZUxvZ2ljYWxMZWZ0ICsgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxv
Z2ljYWxXaWR0aDsKLSAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZhbHNlOwot
Ci0gICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0
aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKLSAgICAvLyBDaGVjayBm
b3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUgd2lk
dGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KLSAgICBpZiAoIWZsb2F0aW5nQ29udGV4dC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB2YXJpYWJsZSBs
aW5lIGhlaWdodCwgd2hlcmUgdGhlIGludHJ1c2l2ZSBmbG9hdHMgc2hvdWxkIGJlIHByb2JlZCBh
cyB0aGUgbGluZSBoZWlnaHQgZ3Jvd3MuCi0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9
IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3Ap
LCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyBxdWlya3MoKS5pbml0aWFsTGluZUhlaWdo
dCgpKSk7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXNlIGNvbnN0cmFpbnRzIGFjdHVhbGx5IHB1
dCBsaW1pdGF0aW9uIG9uIHRoZSBsaW5lLgotICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5s
ZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBsaW5lTG9naWNhbExlZnQpCi0gICAg
ICAgICAgICBmbG9hdENvbnN0cmFpbnRzLmxlZnQgPSB7IH07Ci0KLSAgICAgICAgaWYgKGZsb2F0
Q29uc3RyYWludHMucmlnaHQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9n
aWNhbFJpZ2h0KQotICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsKLQot
ICAgICAgICBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQg
fHwgZmxvYXRDb25zdHJhaW50cy5yaWdodDsKLQotICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50
cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAgICAgIEFTU0VSVChm
bG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPD0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCk7Ci0g
ICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eDsK
LSAgICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsK
LSAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQpIHsKLSAgICAgICAgICAg
IEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPj0gbGluZUxvZ2ljYWxMZWZ0KTsKLSAg
ICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKLSAg
ICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQoZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbExlZnQpOwotICAg
ICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPng7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGNvbXB1dGVkVGV4dEluZGVudCA9IFsmXSB7Ci0g
ICAgICAgIC8vIHRleHQtaW5kZW50IHByb3BlcnR5IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24g
YXBwbGllZCB0byBsaW5lcyBvZiBpbmxpbmUgY29udGVudCBpbiBhIGJsb2NrLgotICAgICAgICAv
LyBUaGUgaW5kZW50IGlzIHRyZWF0ZWQgYXMgYSBtYXJnaW4gYXBwbGllZCB0byB0aGUgc3RhcnQg
ZWRnZSBvZiB0aGUgbGluZSBib3guCi0gICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lm
aWVkLCBvbmx5IGxpbmVzIHRoYXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZSBvZiBhbiBl
bGVtZW50IGFyZSBhZmZlY3RlZC4KLSAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBs
aW5lIG9mIGFuIGFub255bW91cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBpdCBpcyB0
aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBlbGVtZW50LgotICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGVhY2gtbGluZS4KLSAgICAgICAgLy8gW0ludGVncmF0aW9uXSByb290
KCktPnBhcmVudCgpIHdvdWxkIG5vcm1hbGx5IHByb2R1Y2UgYSB2YWxpZCBsYXlvdXQgYm94Lgot
ICAgICAgICBhdXRvJiByb290ID0gdGhpcy0+cm9vdCgpOwotICAgICAgICBhdXRvIGlzRm9ybWF0
dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9UZXh0SW5kZW50ID0gIXJvb3QuaXNBbm9ueW1vdXMo
KTsKLSAgICAgICAgaWYgKHJvb3QuaXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgLy8gVW5s
ZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGhlIGVhY2gtbGluZSBhbmQvb3IgaGFuZ2luZyBr
ZXl3b3Jkcywgb25seSBsaW5lcyB0aGF0IGFyZSB0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUKLSAg
ICAgICAgICAgIC8vIG9mIGFuIGVsZW1lbnQgYXJlIGFmZmVjdGVkLgotICAgICAgICAgICAgLy8g
Rm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIGFuIGFub255bW91cyBibG9jayBib3ggaXMg
b25seSBhZmZlY3RlZCBpZiBpdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBlbGVt
ZW50LgotICAgICAgICAgICAgaXNGb3JtYXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJ
bmRlbnQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZv
cm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkKLSAgICAgICAgICAgICAgICA/IGxh
eW91dFN0YXRlKCkuaXNJbnRlZ3JhdGVkUm9vdEJveEZpcnN0Q2hpbGQoKQotICAgICAgICAgICAg
ICAgIDogcm9vdC5wYXJlbnQoKS5maXJzdEluRmxvd0NoaWxkKCkgPT0gJnJvb3Q7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dElu
ZGVudCkKLSAgICAgICAgICAgIHJldHVybiBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAg
YXV0byBpbnZlcnRMaW5lUmFuZ2UgPSBmYWxzZTsKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAg
ICAgICBpbnZlcnRMaW5lUmFuZ2UgPSByb290LnN0eWxlKCkudGV4dEluZGVudFR5cGUoKSA9PSBU
ZXh0SW5kZW50VHlwZTo6SGFuZ2luZzsKLSNlbmRpZgotICAgICAgICBhdXRvIGlzRmlyc3RMaW5l
ID0gZm9ybWF0dGluZ1N0YXRlKCkuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQoKS5saW5lQm94
ZXMuaXNFbXB0eSgpOwotICAgICAgICAvLyB0ZXh0LWluZGVudDogaGFuZ2luZyBpbnZlcnRzIHdo
aWNoIGxpbmVzIGFyZSBhZmZlY3RlZC4KLSAgICAgICAgLy8gaW52ZXJ0ZWQgbGluZSByYW5nZSAt
PiBhbGwgdGhlIGxpbmVzIGV4Y2VwdCB0aGUgZmlyc3Qgb25lLgotICAgICAgICAvLyAhaW52ZXJ0
ZWQgbGluZSByYW5nZSAtPiBmaXJzdCBsaW5lIGdldHMgdGhlIGluZGVudC4KLSAgICAgICAgYXV0
byBzaG91bGRJbmRlbnQgPSBpbnZlcnRMaW5lUmFuZ2UgIT0gaXNGaXJzdExpbmU7Ci0gICAgICAg
IGlmICghc2hvdWxkSW5kZW50KQotICAgICAgICAgICAgcmV0dXJuIElubGluZUxheW91dFVuaXQg
eyB9OwotICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5jb21wdXRlZFRleHRJbmRlbnQocm9vdCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzKS52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KTsKLSAg
ICB9OwotICAgIGxpbmVMb2dpY2FsTGVmdCArPSBjb21wdXRlZFRleHRJbmRlbnQoKTsKLSAgICBy
ZXR1cm4gTGluZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9w
IH0sIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGxpbmVJc0NvbnN0cmFpbmVk
QnlGbG9hdCB9OwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5
Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQs
IGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKQordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlz
cGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250
ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykK
IHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsK
KyAgICBhdXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJveDsKICAgICBpZiAoIWxpbmVD
b250ZW50LmZsb2F0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQg
PSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUuZmxvYXRp
bmdTdGF0ZSgpIH07CiAgICAgICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0
aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggZGM0ZjNjNTE5MDJmNDgw
ZDYxMWFiODY3Nzc0NWRlYTA1NDEzOTU4NC4uNDBlNTMwMGQ0Yjk3NThjMDYzNGQ5NDVmYTg0M2Q0
NzVjYTVkMmMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC02Nyw3ICs2
Nyw2IEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFy
Z2luIGlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRlVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKICAg
ICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4oY29u
c3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGVIb3Jp
em9udGFsVmFsdWVzJik7Ci0gICAgICAgIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGNvbXB1
dGVkVGV4dEluZGVudChjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CkBAIC04OCwxMyArODcs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogCiAgICAgdm9pZCBjb2xsZWN0SW5saW5l
Q29udGVudElmTmVlZGVkKCk7Ci0gICAgc3RydWN0IExpbmVDb25zdHJhaW50cyB7Ci0gICAgICAg
IElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0OwotICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCB7IDAgfTsKLSAgICAgICAgYm9vbCBsaW5lSXNDb25z
dHJhaW5lZEJ5RmxvYXQgeyBmYWxzZSB9OwotICAgIH07Ci0gICAgTGluZUNvbnN0cmFpbnRzIGNv
bnN0cmFpbnRzRm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlv
dXRVbml0IGxpbmVMb2dpY2FsVG9wKTsKLSAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgY29uc3QgTGluZUJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYpOworICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShj
b25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmKTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0
aW9uU3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGlu
Z1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihG
b3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGQ3YzI2ZmQ3N2ZmNDVlMDMw
MGYxYmIyNDc4OTI1NmM4MTY2NmM1ZmUuLjcwN2I2ZTAyNTNjMzMyNjI2NTM4OWNkMmM0NmVjZDIy
NTA5Mjk3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwCkBAIC03NSwxNCArNzUsNiBAQCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYQogICAgIHJl
dHVybiBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBv
dmVycmlkZVZlcnRpY2FsVmFsdWVzKTsKIH0KIAotT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4g
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFRleHRJbmRlbnQoY29u
c3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIGF1dG8gdGV4
dEluZGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgpLnRleHRJbmRlbnQoKTsKLSAg
ICBpZiAodGV4dEluZGVudCA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5pdCB7IG1pbmltdW1W
YWx1ZUZvckxlbmd0aCh0ZXh0SW5kZW50LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdp
ZHRoKSB9OwotfQotCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKaW5kZXggZGE3MTg3ZTJlMmRkYWZi
NWZjNjk5NDU0YmExZmYyZDZmMmMxZGU5Zi4uNTNiNTUxZjQwOWVhZGJiODVmYjYwNzE4Njg3MTc1
MmFjNDMxZjExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTQxMSw2ICs0MTEsMjEgQEAgdm9pZCBM
aW5lQm94OjphbGlnbklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0
KElzTGluZVZpc3VhbGx5RW0KICAgICB9CiB9CiAKK2NvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiBMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Cit9CisKK2NvbnN0IEJveCYgTGluZUJveDo6cm9vdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOworfQorCitM
YXlvdXRTdGF0ZSYgTGluZUJveDo6bGF5b3V0U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBm
b3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5o
CmluZGV4IDAzZTM0NDJhMGZhMTgyYjgzMzU3Zjk1Y2E0ZmZmY2NhMDMyZGZjNGYuLjA2ZDgxZDAz
YWE5OTBiYTI1ZjUzY2M5YmNhZmU4ZWU5ZjNkNGE3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTkxLDYg
KzkxLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNh
bFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBEaXNwbGF5OjpJbmxp
bmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVP
dmVyZmxvdzsgfQorICAgIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQogCiAgICAgY29uc3QgSW5saW5l
Qm94JiBpbmxpbmVCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsg
cmV0dXJuICptX2lubGluZUJveFJlY3RNYXAuZ2V0KCZsYXlvdXRCb3gpOyB9CiAgICAgRGlzcGxh
eTo6SW5saW5lUmVjdCBpbmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lOjpSdW4mKSBjb25z
dDsKQEAgLTExOSwxMSArMTIwLDkgQEAgcHJpdmF0ZToKIAogICAgIElubGluZUJveCYgaW5saW5l
Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSB7IHJldHVybiAqbV9pbmxpbmVC
b3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsgfQogCi0gICAgSW5saW5lTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TG9naWNhbFdpZHRoOyB9
Ci0KLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29uc3Qg
Qm94JiByb290KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0K
LSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKKyAgICBjb25zdCBCb3gmIHJvb3QoKSBj
b25zdDsKKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApp
bmRleCA5YzcyY2RhOWNkODkxODExNmUwNzNjNTlkZTdjY2I3NzA3YzhkMTg5Li40ODNjZDQ1Y2Ey
Nzc2Zjc1NzMwNjUxM2MzZGVlMmYyMmUwZDk3NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CiAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJMYXlvdXRC
b3guaCIKICNpbmNsdWRlICJUZXh0VXRpbC5oIgpAQCAtMjgwLDMwICsyODEsMzIgQEAgSW5saW5l
TGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6aW5saW5lSXRlbVdpZHRoKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIElubGkKICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsKIH0KIAot
TGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29u
dGV4dFJvb3QsIGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKK0xpbmVCdWlsZGVyOjpM
aW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBD
b250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSW5saW5lSXRlbXMmIGlu
bGluZUl0ZW1zKQogICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICAsIG1fZmxvYXRpbmdDb250ZXh0KGZsb2F0aW5nQ29udGV4dCkKICAg
ICAsIG1fZm9ybWF0dGluZ0NvbnRleHRSb290KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkKKyAgICAs
IG1fbGluZShpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAsIG1faW5saW5lSXRlbXMoaW5s
aW5lSXRlbXMpCiB7CiB9CiAKLUxpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVpbGRlcjo6
bGF5b3V0SW5saW5lQ29udGVudChMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3Ro
KQorTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250
ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIGJvb2wgaXNGaXJzdExpbmUs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBJbmxp
bmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExl
YWRpbmdDb250ZW50TGVuZ3RoKQogewotICAgIEFTU0VSVChtX2Zsb2F0cy5pc0VtcHR5KCkpOwot
ICAgIG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSA9IHsgfTsKLSAgICBtX2xhc3RXcmFwT3Bwb3J0
dW5pdHlJdGVtID0geyB9OworICAgIGF1dG8gbGluZUNhbmRpZGF0ZSA9IExpbmVDYW5kaWRhdGUg
eyB9OwogICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07CisgICAgYXV0byBs
aW5lQ29uc3RyYWludHMgPSBjb25zdHJhaW50c0ZvckxpbmUoaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBsaW5lTG9naWNhbFRvcCwgaXNGaXJzdExpbmUpOworICAgIGluaXRpYWxpemUobGluZUNvbnN0
cmFpbnRzKTsKKwogICAgIGF1dG8gY3VycmVudEl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0
OwogICAgIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCA9IDA7Ci0gICAgYXV0byBs
aW5lQ2FuZGlkYXRlID0gTGluZUNhbmRpZGF0ZSB7IH07CiAgICAgd2hpbGUgKGN1cnJlbnRJdGVt
SW5kZXggPCBsYXlvdXRSYW5nZS5lbmQpIHsKICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgc2V0
IG9mIHJ1bnMgdGhhdCB3ZSBjYW4gY29tbWl0IHRvIHRoZSBsaW5lIGFzIG9uZSBlbnRpdHkgZS5n
LiA8c3Bhbj50ZXh0X2FuZF9zcGFuX3N0YXJ0X3NwYW5fZW5kPC9zcGFuPi4KICAgICAgICAgLy8g
Mi4gQXBwbHkgZmxvYXRzIGFuZCBzaHJpbmsgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIHNwYWNl
IGUuZy4gPHNwYW4+aW50cnVfPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PnNpdmVfZmxv
YXQ8L3NwYW4+LgogICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgY29udGVudCBmaXRzIHRoZSBs
aW5lIGFuZCBjb21taXQgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkgKGZ1bGwsIHBhcnRpYWwgb3Ig
bm90IGNvbW1pdCBhdCBhbGwpLgogICAgICAgICAvLyA0LiBSZXR1cm4gaWYgd2UgYXJlIGF0IHRo
ZSBlbmQgb2YgdGhlIGxpbmUgZWl0aGVyIGJ5IG5vdCBiZWluZyBhYmxlIHRvIGZpdCBtb3JlIGNv
bnRlbnQgb3IgYmVjYXVzZSBvZiBhbiBleHBsaWNpdCBsaW5lIGJyZWFrLgotICAgICAgICBuZXh0
Q29udGVudEZvckxpbmUobGluZUNhbmRpZGF0ZSwgY3VycmVudEl0ZW1JbmRleCwgbGF5b3V0UmFu
Z2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGluZS5hdmFpbGFibGVXaWR0aCgpICsg
bGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgp
KTsKLSAgICAgICAgLy8gTm93IGNoZWNrIGlmIHdlIGNhbiBwdXQgdGhpcyBjb250ZW50IG9uIHRo
ZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gaGFuZGxlRmxvYXRzQW5kSW5s
aW5lQ29udGVudChsaW5lQnJlYWtlciwgbGluZSwgbGF5b3V0UmFuZ2UsIGxpbmVDYW5kaWRhdGUp
OworICAgICAgICBuZXh0Q29udGVudEZvckxpbmUobGluZUNhbmRpZGF0ZSwgY3VycmVudEl0ZW1J
bmRleCwgbGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbV9saW5lLmF2
YWlsYWJsZVdpZHRoKCkgKyBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUu
Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHdlIGNhbiBw
dXQgdGhpcyBjb250ZW50IG9uIHRoZSBjdXJyZW50IG1fbGluZS4KKyAgICAgICAgYXV0byByZXN1
bHQgPSBoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KGxpbmVCcmVha2VyLCBsYXlvdXRSYW5n
ZSwgbGluZUNhbmRpZGF0ZSk7CiAgICAgICAgIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCA9IHJl
c3VsdC5jb21taXR0ZWRDb3VudC5pc1JldmVydCA/IHJlc3VsdC5jb21taXR0ZWRDb3VudC52YWx1
ZSA6IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCArIHJlc3VsdC5jb21taXR0ZWRDb3VudC52YWx1
ZTsKICAgICAgICAgYXV0byYgaW5saW5lQ29udGVudCA9IGxpbmVDYW5kaWRhdGUuaW5saW5lQ29u
dGVudDsKICAgICAgICAgYXV0byBpbmxpbmVDb250ZW50SXNGdWxseUNvbW1pdHRlZCA9IGlubGlu
ZUNvbnRlbnQucnVucygpLnNpemUoKSA9PSByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUgJiYg
IXJlc3VsdC5wYXJ0aWFsQ29udGVudDsKQEAgLTMxMSwzMSArMzE0LDEzMCBAQCBMaW5lQnVpbGRl
cjo6TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQoTGluZSYgbGlu
ZSwgY29uc3QgSW5saQogCiAgICAgICAgIGlmIChpbmxpbmVDb250ZW50SXNGdWxseUNvbW1pdHRl
ZCAmJiBpbmxpbmVDb250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgIC8v
IEZ1bGx5IGNvbW1pdGVkIChvciBlbXB0eSkgY29udGVudCBmb2xsb3dlZCBieSBhIGxpbmUgYnJl
YWsgbWVhbnMgImVuZCBvZiBsaW5lIi4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKCppbmxpbmVD
b250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCksIHsgfSk7CisgICAgICAgICAgICBtX2xpbmUuYXBw
ZW5kKCppbmxpbmVDb250ZW50LnRyYWlsaW5nTGluZUJyZWFrKCksIHsgfSk7CiAgICAgICAgICAg
ICArK2NvbW1pdHRlZElubGluZUl0ZW1Db3VudDsKICAgICAgICAgICAgIGlzRW5kT2ZMaW5lID0g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNFbmRPZkxpbmUpIHsKLSAgICAgICAgICAg
IC8vIFdlIGNhbid0IHBsYWNlIGFueSBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0g
ICAgICAgICAgICByZXR1cm4gY2xvc2UobGluZSwgbGF5b3V0UmFuZ2UsIGNvbW1pdHRlZElubGlu
ZUl0ZW1Db3VudCwgcmVzdWx0LnBhcnRpYWxDb250ZW50KTsKKyAgICAgICAgICAgIC8vIFdlIGNh
bid0IHBsYWNlIGFueSBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IG1fbGluZS4KKyAgICAgICAg
ICAgIHJldHVybiBjbG9zZShsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxheW91dFJh
bmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCk7CiAg
ICAgICAgIH0KICAgICAgICAgY3VycmVudEl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0ICsg
Y29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICsgbV9mbG9hdHMuc2l6ZSgpOwogICAgICAgICBwYXJ0
aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGggPSB7IH07CiAgICAgfQogICAgIC8vIExvb2tzIGxpa2Ug
d2UndmUgcnVuIG91dCBvZiBydW5zLgotICAgIHJldHVybiBjbG9zZShsaW5lLCBsYXlvdXRSYW5n
ZSwgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0pOworICAgIHJldHVybiBjbG9zZShsaW5l
Q29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIHsgfSk7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OmluaXRpYWxpemUoY29uc3Qg
TGluZUNvbnN0cmFpbnRzJiBsaW5lQ29uc3RyYWludHMpCit7CisgICAgbV9mbG9hdHMuY2xlYXIo
KTsKKyAgICBtX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0gPSB7IH07CisgICAgbV9sYXN0V3JhcE9w
cG9ydHVuaXR5SXRlbSA9IHsgfTsKKworICAgIG1fbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5h
dmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgIG1fbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChs
aW5lQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0KTsKIH0KIAotTGluZUJ1aWxk
ZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpjbG9zZShjb25zdCBMaW5lJiBsaW5lLCBjb25z
dCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENv
bnRlbnQpCitMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmNsb3NlKElubGlu
ZUxheW91dFBvaW50IGxpbmVMb2dpY2FsVG9wTGVmdCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBs
YXlvdXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxM
aW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50KQogewotICAgIEFTU0VS
VF9VTlVTRUQobGluZSwgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50IHx8ICFtX2Zsb2F0cy5pc0Vt
cHR5KCkgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBBU1NFUlQoY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50IHx8ICFtX2Zsb2F0cy5pc0VtcHR5KCkgfHwgbV9saW5lLmhhc0ludHJ1
c2l2ZUZsb2F0KCkpOwogICAgIGF1dG8gbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyA9IGNvbW1pdHRl
ZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKICAgICBhdXRvIHRyYWlsaW5nSW5s
aW5lSXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBudW1iZXJPZkNvbW1pdHRlZEl0ZW1z
IC0gMTsKICAgICBhdXRvIGxpbmVSYW5nZSA9IElubGluZUl0ZW1SYW5nZSB7IGxheW91dFJhbmdl
LnN0YXJ0LCB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDEgfTsKICAgICBBU1NFUlQobGluZVJh
bmdlLmVuZCA8PSBsYXlvdXRSYW5nZS5lbmQpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxp
bmUgY291bnQuCiAgICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxD
b250ZW50ICYmIHBhcnRpYWxDb250ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1
Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ICsgMSA6IDA7Ci0gICAgcmV0dXJuIExpbmVDb250
ZW50IHsgcGFydGlhbENvbnRlbnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUu
cnVucygpIH07CisKKyAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7
CisgICAgICAgIGlmIChwYXJ0aWFsQ29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKGxpbmVSYW5nZS5lbmQgPT0gbGF5b3V0UmFuZ2UuZW5kKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlz
IHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KKyAgICAgICAgZm9yIChhdXRvIGkg
PSBsYXlvdXRSYW5nZS5lbmQ7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVJdGVt
c1tpXS5pc0Zsb2F0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZVJhbmdlLmVu
ZCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9u
ZSBub24tZmxvYXQgaXRlbS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9KCk7CisgICAgbV9saW5lLmNsb3NlKGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCk7CisgICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0gbV9saW5lLmlz
VmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGlu
ZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm87CisgICAgYXV0byBpc0xhc3RMaW5lID0gaXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID8gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwor
ICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIG1fZmxv
YXRzLCBtX2xpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSwgTGluZUJveCB7IGZvcm1hdHRpbmdDb250
ZXh0KCksIGxpbmVMb2dpY2FsVG9wTGVmdCwgbV9saW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbV9s
aW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1bnMoKSwgbGluZUlzVmlzdWFsbHlF
bXB0eSwgaXNMYXN0TGluZX0gLCBtX2xpbmUucnVucygpIH07Cit9CisKK0xpbmVCdWlsZGVyOjpM
aW5lQ29uc3RyYWludHMgTGluZUJ1aWxkZXI6OmNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgSW5saW5lTGF5b3V0VW5p
dCBsaW5lTG9naWNhbFRvcCwgYm9vbCBpc0ZpcnN0TGluZSkKK3sKKyAgICBhdXRvIGxpbmVMb2dp
Y2FsTGVmdCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICBhdXRvIGxp
bmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNhbExlZnQgKyBob3Jpem9udGFsQ29uc3RyYWludHMu
bG9naWNhbFdpZHRoOworICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmFsc2U7
CisKKyAgICAvLyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwg
bGVmdC9hdmFpbGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KKyAgICBpZiAo
IW1fZmxvYXRpbmdDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIHZhcmlhYmxlIGxpbmUgaGVpZ2h0LCB3aGVyZSB0aGUgaW50cnVzaXZlIGZsb2F0
cyBzaG91bGQgYmUgcHJvYmVkIGFzIHRoZSBsaW5lIGhlaWdodCBncm93cy4KKyAgICAgICAgYXV0
byBmbG9hdENvbnN0cmFpbnRzID0gbV9mbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHModG9MYXlv
dXRVbml0KGxpbmVMb2dpY2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wLyogKyBx
dWlya3MoKS5pbml0aWFsTGluZUhlaWdodCgpKi8pKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhl
c2UgY29uc3RyYWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIG1fbGluZS4KKyAg
ICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxlZnQt
PnggPD0gbGluZUxvZ2ljYWxMZWZ0KQorICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5sZWZ0
ID0geyB9OworCisgICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmIGZsb2F0Q29u
c3RyYWludHMucmlnaHQtPnggPj0gbGluZUxvZ2ljYWxSaWdodCkKKyAgICAgICAgICAgIGZsb2F0
Q29uc3RyYWludHMucmlnaHQgPSB7IH07CisKKyAgICAgICAgbGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0IHx8IGZsb2F0Q29uc3RyYWludHMucmlnaHQ7CisK
KyAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGZs
b2F0Q29uc3RyYWludHMucmlnaHQtPngpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9
IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPng7CisgICAgICAgICAgICBsaW5lTG9naWNhbExlZnQg
PSBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPng7CisgICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25z
dHJhaW50cy5sZWZ0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0
LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBm
bG9hdENvbnN0cmFpbnRzLmxlZnQtPng7CisgICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJh
aW50cy5yaWdodCkgeworICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMucmlnaHQt
PnggPj0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBm
bG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBj
b21wdXRlZFRleHRJbmRlbnQgPSBbJl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0IHsKKyAgICAgICAg
Ly8gdGV4dC1pbmRlbnQgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVk
IHRvIGxpbmVzIG9mIGlubGluZSBjb250ZW50IGluIGEgYmxvY2suCisgICAgICAgIC8vIFRoZSBp
bmRlbnQgaXMgdHJlYXRlZCBhcyBhIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBzdGFydCBlZGdlIG9m
IHRoZSBsaW5lIGJveC4KKyAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIG9u
bHkgbGluZXMgdGhhdCBhcmUgdGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lIG9mIGFuIGVsZW1lbnQg
YXJlIGFmZmVjdGVkLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2Yg
YW4gYW5vbnltb3VzIGJsb2NrIGJveCBpcyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlzIHRoZSBmaXJz
dCBjaGlsZCBvZiBpdHMgcGFyZW50IGVsZW1lbnQuCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgZWFjaC1saW5lLgorICAgICAgICAvLyBbSW50ZWdyYXRpb25dIHJvb3QoKS0+cGFy
ZW50KCkgd291bGQgbm9ybWFsbHkgcHJvZHVjZSBhIHZhbGlkIGxheW91dCBib3guCisgICAgICAg
IGF1dG8mIHJvb3QgPSB0aGlzLT5yb290KCk7CisgICAgICAgIGF1dG8gaXNGb3JtYXR0aW5nQ29u
dGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSAhcm9vdC5pc0Fub255bW91cygpOworICAg
ICAgICBpZiAocm9vdC5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICAvLyBVbmxlc3Mgb3Ro
ZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgZWFjaC1saW5lIGFuZC9vciBoYW5naW5nIGtleXdvcmRz
LCBvbmx5IGxpbmVzIHRoYXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZQorICAgICAgICAg
ICAgLy8gb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCisgICAgICAgICAgICAvLyBGb3IgZXhh
bXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIGJveCBpcyBvbmx5IGFm
ZmVjdGVkIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50IGVsZW1lbnQuCisg
ICAgICAgICAgICBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dEluZGVudCA9
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgICAgID8gbGF5b3V0U3Rh
dGUoKS5pc0ludGVncmF0ZWRSb290Qm94Rmlyc3RDaGlsZCgpCisgICAgICAgICAgICAgICAgOiBy
b290LnBhcmVudCgpLmZpcnN0SW5GbG93Q2hpbGQoKSA9PSAmcm9vdDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9UZXh0SW5kZW50KQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byBpbnZlcnRMaW5lUmFuZ2UgPSBm
YWxzZTsKKyNpZiBFTkFCTEUoQ1NTM19URVhUKQorICAgICAgICBpbnZlcnRMaW5lUmFuZ2UgPSBy
b290LnN0eWxlKCkudGV4dEluZGVudFR5cGUoKSA9PSBUZXh0SW5kZW50VHlwZTo6SGFuZ2luZzsK
KyNlbmRpZgorICAgICAgICAvLyB0ZXh0LWluZGVudDogaGFuZ2luZyBpbnZlcnRzIHdoaWNoIGxp
bmVzIGFyZSBhZmZlY3RlZC4KKyAgICAgICAgLy8gaW52ZXJ0ZWQgbGluZSByYW5nZSAtPiBhbGwg
dGhlIGxpbmVzIGV4Y2VwdCB0aGUgZmlyc3Qgb25lLgorICAgICAgICAvLyAhaW52ZXJ0ZWQgbGlu
ZSByYW5nZSAtPiBmaXJzdCBsaW5lIGdldHMgdGhlIGluZGVudC4KKyAgICAgICAgYXV0byBzaG91
bGRJbmRlbnQgPSBpbnZlcnRMaW5lUmFuZ2UgIT0gaXNGaXJzdExpbmU7CisgICAgICAgIGlmICgh
c2hvdWxkSW5kZW50KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICAgICAgYXV0
byB0ZXh0SW5kZW50ID0gcm9vdC5zdHlsZSgpLnRleHRJbmRlbnQoKTsKKyAgICAgICAgaWYgKHRl
eHRJbmRlbnQgPT0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4geyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4
dEluZGVudCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkgfTsKKyAgICB9Owor
ICAgIGxpbmVMb2dpY2FsTGVmdCArPSBjb21wdXRlZFRleHRJbmRlbnQoKTsKKyAgICByZXR1cm4g
TGluZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxp
bmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCB9OwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRp
ZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRp
YWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lk
dGgsIElubGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCkKQEAgLTM4NCw3ICs0ODYs
NyBAQCB2b2lkIExpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYg
bGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycgogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRl
cjo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5k
aWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgY29tbWl0SW50cnVzaXZlT25seSkKK3Zv
aWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2Fu
ZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5IGNvbW1pdEludHJ1c2l2ZU9ubHkpCiB7
CiAgICAgYXV0byYgZmxvYXRDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQ7CiAg
ICAgYXV0byBsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
QEAgLTM5NywyOSArNDk5LDI5IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhMaW5l
JiBsaW5lLCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlLCBDCiAgICAgICAgIG1f
ZmxvYXRzLmFwcGVuZCh7IGZsb2F0Q2FuZGlkYXRlLmlzSW50cnVzaXZlLCBmbG9hdENhbmRpZGF0
ZS5pdGVtIH0pOwogICAgICAgICBpZiAoZmxvYXRDYW5kaWRhdGUuaXNJbnRydXNpdmUpIHsKICAg
ICAgICAgICAgIGhhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFRoaXMg
ZmxvYXQgaXMgaW50cnVzaXZlIGFuZCBpdCBzaHJpbmtzIHRoZSBjdXJyZW50IGxpbmUuCi0gICAg
ICAgICAgICAvLyBTaHJpbmsgYXZhaWxhYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUuCisgICAg
ICAgICAgICAvLyBUaGlzIGZsb2F0IGlzIGludHJ1c2l2ZSBhbmQgaXQgc2hyaW5rcyB0aGUgY3Vy
cmVudCBtX2xpbmUuCisgICAgICAgICAgICAvLyBTaHJpbmsgYXZhaWxhYmxlIHNwYWNlIGZvciBj
dXJyZW50IG1fbGluZS4KICAgICAgICAgICAgIGlmIChmbG9hdENhbmRpZGF0ZS5pdGVtLT5sYXlv
dXRCb3goKS5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBsZWZ0
SW50cnVzaXZlRmxvYXRzV2lkdGggKz0gZmxvYXRDYW5kaWRhdGUubG9naWNhbFdpZHRoOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgg
Kz0gZmxvYXRDYW5kaWRhdGUubG9naWNhbFdpZHRoOwogICAgICAgICB9CiAgICAgfQotICAgIGxp
bmUuc2V0SGFzSW50cnVzaXZlRmxvYXQoaGFzSW50cnVzaXZlRmxvYXQpOworICAgIG1fbGluZS5z
ZXRIYXNJbnRydXNpdmVGbG9hdChoYXNJbnRydXNpdmVGbG9hdCk7CiAgICAgaWYgKGxlZnRJbnRy
dXNpdmVGbG9hdHNXaWR0aCB8fCByaWdodEludHJ1c2l2ZUZsb2F0c1dpZHRoKSB7CiAgICAgICAg
IGlmIChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGgpCi0gICAgICAgICAgICBsaW5lLm1vdmVMb2dp
Y2FsTGVmdChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGgpOworICAgICAgICAgICAgbV9saW5lLm1v
dmVMb2dpY2FsTGVmdChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGgpOwogICAgICAgICBpZiAocmln
aHRJbnRydXNpdmVGbG9hdHNXaWR0aCkKLSAgICAgICAgICAgIGxpbmUubW92ZUxvZ2ljYWxSaWdo
dChyaWdodEludHJ1c2l2ZUZsb2F0c1dpZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5tb3ZlTG9n
aWNhbFJpZ2h0KHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpOwogICAgIH0KIH0KIAotTGluZUJ1
aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChM
aW5lQnJlYWtlciYgbGluZUJyZWFrZXIsIExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5n
ZSYgbGF5b3V0UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUpCitMaW5l
QnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50
KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRS
YW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkKIHsKICAgICBhdXRvJiBp
bmxpbmVDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5pbmxpbmVDb250ZW50OwogICAgIGF1dG8mIGNh
bmRpZGF0ZVJ1bnMgPSBpbmxpbmVDb250ZW50LnJ1bnMoKTsKICAgICBpZiAoY2FuZGlkYXRlUnVu
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tbWl0RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUp
OworICAgICAgICBjb21taXRGbG9hdHMobGluZUNhbmRpZGF0ZSk7CiAgICAgICAgIHJldHVybiB7
IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKICAgICB9CiAKQEAgLTQzMywzNiArNTM1
LDM2IEBAIExpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElu
bGluZUNvbnRlbnQoTGluZUJyZWFrZXImIGxpbmVCCiAKICAgICBhdXRvJiBmbG9hdENvbnRlbnQg
PSBsaW5lQ2FuZGlkYXRlLmZsb2F0Q29udGVudDsKICAgICAvLyBDaGVjayBpZiB0aGlzIG5ldyBj
b250ZW50IGZpdHMuCi0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxhYmxlV2lk
dGgoKSAtIGZsb2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOwotICAgIGF1dG8gaXNMaW5lQ29u
c2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJbnRydXNp
dmVGbG9hdCgpOwotICAgIGF1dG8gbGluZVN0YXR1cyA9IExpbmVCcmVha2VyOjpMaW5lU3RhdHVz
IHsgYXZhaWxhYmxlV2lkdGgsIGxpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBsaW5lLmlz
VHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpLCBpc0xpbmVDb25zaWRlcmVkRW1wdHkgfTsKKyAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbV9saW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBmbG9hdENv
bnRlbnQuaW50cnVzaXZlV2lkdGgoKTsKKyAgICBhdXRvIGlzTGluZUNvbnNpZGVyZWRFbXB0eSA9
IG1fbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAhbV9saW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCk7
CisgICAgYXV0byBsaW5lU3RhdHVzID0gTGluZUJyZWFrZXI6OkxpbmVTdGF0dXMgeyBhdmFpbGFi
bGVXaWR0aCwgbV9saW5lLnRyaW1tYWJsZVRyYWlsaW5nV2lkdGgoKSwgbV9saW5lLmlzVHJhaWxp
bmdSdW5GdWxseVRyaW1tYWJsZSgpLCBpc0xpbmVDb25zaWRlcmVkRW1wdHkgfTsKICAgICBhdXRv
IHJlc3VsdCA9IGxpbmVCcmVha2VyLnNob3VsZFdyYXBJbmxpbmVDb250ZW50KGNhbmRpZGF0ZVJ1
bnMsIGlubGluZUNvbnRlbnQubG9naWNhbFdpZHRoKCksIGxpbmVTdGF0dXMpOwogICAgIGlmIChy
ZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCiAgICAgICAgIG1fbGFzdFdyYXBPcHBvcnR1
bml0eUl0ZW0gPSByZXN1bHQubGFzdFdyYXBPcHBvcnR1bml0eUl0ZW07CiAgICAgaWYgKHJlc3Vs
dC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpLZWVwKSB7CiAgICAgICAg
IC8vIFRoaXMgY29udGludW91cyBjb250ZW50IGNhbiBiZSBmdWxseSBwbGFjZWQgb24gdGhlIGN1
cnJlbnQgbGluZSBpbmNsdWRpbmcgbm9uLWludHJ1c2l2ZSBmbG9hdHMuCiAgICAgICAgIGZvciAo
YXV0byYgcnVuIDogY2FuZGlkYXRlUnVucykKLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5p
bmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKLSAgICAgICAgY29tbWl0RmxvYXRzKGxpbmUs
IGxpbmVDYW5kaWRhdGUpOworICAgICAgICAgICAgbV9saW5lLmFwcGVuZChydW4uaW5saW5lSXRl
bSwgcnVuLmxvZ2ljYWxXaWR0aCk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRl
KTsKICAgICAgICAgcmV0dXJuIHsgcmVzdWx0LmlzRW5kT2ZMaW5lLCB7IGNhbmRpZGF0ZVJ1bnMu
c2l6ZSgpLCBmYWxzZSB9IH07CiAgICAgfQogICAgIGlmIChyZXN1bHQuYWN0aW9uID09IExpbmVC
cmVha2VyOjpSZXN1bHQ6OkFjdGlvbjo6UHVzaCkgewogICAgICAgICBBU1NFUlQocmVzdWx0Lmlz
RW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKLSAgICAgICAgLy8g
VGhpcyBjb250aW51b3VzIGNvbnRlbnQgY2FuJ3QgYmUgcGxhY2VkIG9uIHRoZSBjdXJyZW50IGxp
bmUuIE5vdGhpbmcgdG8gY29tbWl0IGF0IHRoaXMgdGltZS4KKyAgICAgICAgLy8gVGhpcyBjb250
aW51b3VzIGNvbnRlbnQgY2FuJ3QgYmUgcGxhY2VkIG9uIHRoZSBjdXJyZW50IG1fbGluZS4gTm90
aGluZyB0byBjb21taXQgYXQgdGhpcyB0aW1lLgogICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtl
cjo6SXNFbmRPZkxpbmU6OlllcyB9OwogICAgIH0KICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PSBM
aW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OlJldmVydFRvTGFzdFdyYXBPcHBvcnR1bml0eSkg
ewogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0Vu
ZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gTm90IG9ubHkgdGhpcyBjb250ZW50IGNhbid0IGJl
IHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lLCBidXQgd2UgZXZlbiBuZWVkIHRvIHJldmVydCB0
aGUgbGluZSBiYWNrIHRvIGFuIGVhcmxpZXIgcG9zaXRpb24uCiAgICAgICAgIEFTU0VSVChtX2xh
c3RXcmFwT3Bwb3J0dW5pdHlJdGVtKTsKLSAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6Oklz
RW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGluZSwgbGF5b3V0UmFuZ2UpLCB0cnVlIH0g
fTsKKyAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVi
dWlsZExpbmUobGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKICAgICB9CiAgICAgaWYgKHJlc3VsdC5h
Y3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpTcGxpdCkgewogICAgICAgICBB
U1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVz
KTsKLSAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5hdGlvbiBvZiBmdWxsIGFuZCBwYXJ0aWFs
IGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgY29tbWl0RmxvYXRzKGxpbmUs
IGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6Olllcyk7CisgICAgICAg
IC8vIENvbW1pdCB0aGUgY29tYmluYXRpb24gb2YgZnVsbCBhbmQgcGFydGlhbCBjb250ZW50IG9u
IHRoZSBjdXJyZW50IG1fbGluZS4KKyAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVDYW5kaWRhdGUs
IENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6Olllcyk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQu
cGFydGlhbFRyYWlsaW5nQ29udGVudCk7Ci0gICAgICAgIGNvbW1pdFBhcnRpYWxDb250ZW50KGxp
bmUsIGNhbmRpZGF0ZVJ1bnMsICpyZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudCk7CisgICAg
ICAgIGNvbW1pdFBhcnRpYWxDb250ZW50KGNhbmRpZGF0ZVJ1bnMsICpyZXN1bHQucGFydGlhbFRy
YWlsaW5nQ29udGVudCk7CiAgICAgICAgIC8vIFdoZW4gc3BsaXR0aW5nIG11bHRpcGxlIHJ1bnMg
PHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLWFsbCI+dGV4dDwvc3Bhbj48c3Bhbj5jb250
ZW50PC9zcGFuPiwgd2UgbWlnaHQgZW5kIHVwIHNwbGl0dGluZyB0aGVtIGF0IHJ1biBib3VuZGFy
eS4KICAgICAgICAgLy8gSXQgc2ltcGx5IG1lYW5zIHdlIGRvbid0IHJlYWxseSBoYXZlIGEgcGFy
dGlhbCBydW4uIFBhcnRpYWwgY29udGVudCB5ZXMsIGJ1dCBub3QgcGFydGlhbCBydW4uCiAgICAg
ICAgIGF1dG8gdHJhaWxpbmdSdW5JbmRleCA9IHJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50
LT50cmFpbGluZ1J1bkluZGV4OwpAQCAtNDgwLDcgKzU4Miw3IEBAIExpbmVCdWlsZGVyOjpSZXN1
bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXIm
IGxpbmVCCiAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogfQog
Ci12b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChMaW5lJiBsaW5lLCBjb25z
dCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucywgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6
UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWlsaW5nQ29udGVudCkKK3ZvaWQgTGlu
ZUJ1aWxkZXI6OmNvbW1pdFBhcnRpYWxDb250ZW50KGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0
JiBydW5zLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50
JiBwYXJ0aWFsVHJhaWxpbmdDb250ZW50KQogewogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBydW5zLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBhdXRvJiBydW4gPSBydW5z
W2luZGV4XTsKQEAgLTQ5MCwyNiArNTkyLDI2IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdFBh
cnRpYWxDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiByCiAg
ICAgICAgICAgICBpZiAoYXV0byBwYXJ0aWFsUnVuID0gcGFydGlhbFRyYWlsaW5nQ29udGVudC5w
YXJ0aWFsUnVuKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgdHJhaWxpbmdJbmxpbmVUZXh0SXRl
bSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihydW5zW3BhcnRpYWxUcmFpbGluZ0NvbnRlbnQu
dHJhaWxpbmdSdW5JbmRleF0uaW5saW5lSXRlbSk7CiAgICAgICAgICAgICAgICAgYXV0byBwYXJ0
aWFsVHJhaWxpbmdUZXh0SXRlbSA9IHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0ubGVmdChwYXJ0aWFs
UnVuLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kUGFydGlhbFRyYWlsaW5n
VGV4dEl0ZW0ocGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxXaWR0
aCwgcGFydGlhbFJ1bi0+bmVlZHNIeXBoZW4pOworICAgICAgICAgICAgICAgIG1fbGluZS5hcHBl
bmRQYXJ0aWFsVHJhaWxpbmdUZXh0SXRlbShwYXJ0aWFsVHJhaWxpbmdUZXh0SXRlbSwgcGFydGlh
bFJ1bi0+bG9naWNhbFdpZHRoLCBwYXJ0aWFsUnVuLT5uZWVkc0h5cGhlbik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhlIHBhcnRpYWwg
cnVuIGlzIHRoZSBsYXN0IGNvbnRlbnQgdG8gY29tbWl0LgotICAgICAgICAgICAgbGluZS5hcHBl
bmQocnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgbV9saW5l
LmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbGluZS5hcHBlbmQocnVuLmlubGluZUl0ZW0sIHJ1
bi5sb2dpY2FsV2lkdGgpOworICAgICAgICBtX2xpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBy
dW4ubG9naWNhbFdpZHRoKTsKICAgICB9CiB9CiAKLXNpemVfdCBMaW5lQnVpbGRlcjo6cmVidWls
ZExpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSkKK3Np
emVfdCBMaW5lQnVpbGRlcjo6cmVidWlsZExpbmUoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSkKIHsKICAgICAvLyBDbGVhciB0aGUgbGluZSBhbmQgc3RhcnQgYXBwZW5kaW5nIHRo
ZSBpbmxpbmUgaXRlbXMgY2xvc2luZyB3aXRoIHRoZSBsYXN0IHdyYXAgb3Bwb3J0dW5pdHkgcnVu
LgotICAgIGxpbmUuY2xlYXJDb250ZW50KCk7CisgICAgbV9saW5lLmNsZWFyQ29udGVudCgpOwog
ICAgIGF1dG8gY3VycmVudEl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0OwogICAgIGF1dG8g
bG9naWNhbFJpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgaWYgKG1fcGFydGlhbExl
YWRpbmdUZXh0SXRlbSkgewogICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1X
aWR0aCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsUmlnaHQpOwotICAgICAgICBs
aW5lLmFwcGVuZCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOworICAg
ICAgICBtX2xpbmUuYXBwZW5kKCptX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0sIGxvZ2ljYWxXaWR0
aCk7CiAgICAgICAgIGxvZ2ljYWxSaWdodCArPSBsb2dpY2FsV2lkdGg7CiAgICAgICAgIGlmICgm
bV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLnZhbHVlKCkgPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5
SXRlbSkKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtNTE4LDcgKzYyMCw3IEBAIHNpemVfdCBM
aW5lQnVpbGRlcjo6cmVidWlsZExpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdl
JiBsYXlvdXRSYW5nZSkKICAgICBmb3IgKDsgY3VycmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdl
LmVuZDsgKytjdXJyZW50SXRlbUluZGV4KSB7CiAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBt
X2lubGluZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXhdOwogICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0
aCA9IGlubGluZUl0ZW1XaWR0aChpbmxpbmVJdGVtLCBsb2dpY2FsUmlnaHQpOwotICAgICAgICBs
aW5lLmFwcGVuZChpbmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOworICAgICAgICBtX2xpbmUuYXBw
ZW5kKGlubGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGxvZ2ljYWxSaWdodCArPSBs
b2dpY2FsV2lkdGg7CiAgICAgICAgIGlmICgmaW5saW5lSXRlbSA9PSBtX2xhc3RXcmFwT3Bwb3J0
dW5pdHlJdGVtKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtSW5kZXggLSBsYXlvdXRS
YW5nZS5zdGFydCArIDE7CkBAIC01MjYsNiArNjI4LDExIEBAIHNpemVfdCBMaW5lQnVpbGRlcjo6
cmVidWlsZExpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5n
ZSkKICAgICByZXR1cm4gbGF5b3V0UmFuZ2Uuc2l6ZSgpOwogfQogCitjb25zdCBMYXlvdXRTdGF0
ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0
dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRl
ci5oCmluZGV4IDg4ODA3OTIxY2IxYTVhMjc2ZmMzYzY4MTc1Y2EwZTIzZTM4NmE4ZWIuLjY0MzU2
NmM4ZDVmODYxNmU5ZTkzZDg0NDIzZGU4ZDhjYTZmZjA1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIu
aApAQCAtMjgsMTYgKzI4LDE4IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5o
IgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBGbG9hdGluZ0NvbnRleHQ7CiBzdHJ1Y3QgTGlu
ZUNhbmRpZGF0ZTsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewogcHVibGljOgotICAgIExpbmVCdWls
ZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgQ29udGFpbmVyQm94JiBm
b3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0ZW1zJik7CisgICAgTGluZUJ1aWxk
ZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdGluZ0NvbnRleHQm
LCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSW5saW5l
SXRlbXMmKTsKIAogICAgIHN0cnVjdCBJbmxpbmVJdGVtUmFuZ2UgewogICAgICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7IH0KQEAgLTU3LDEwICs1OSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBpdGVtIHsgbnVsbHB0ciB9
OwogICAgICAgICB9OwogICAgICAgICB1c2luZyBGbG9hdExpc3QgPSBWZWN0b3I8RmxvYXQ+Owot
ICAgICAgICBGbG9hdExpc3QgZmxvYXRzOworICAgICAgICBjb25zdCBGbG9hdExpc3QmIGZsb2F0
czsKKyAgICAgICAgYm9vbCBoYXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07CisgICAgICAgIGNv
bnN0IExpbmVCb3ggbGluZUJveDsKICAgICAgICAgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVuczsK
ICAgICB9OwotICAgIExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoTGluZSYsIGNvbnN0
IElubGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRl
bnRMZW5ndGgpOworICAgIExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoY29uc3QgSW5s
aW5lSXRlbVJhbmdlJiwgYm9vbCBpc0ZpcnN0TGluZSwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCwgT3B0aW9uYWw8dW5zaWduZWQ+
IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBuZXh0
Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYsIHVuc2lnbmVkIGlubGluZUl0ZW1JbmRleCwg
Y29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IG92
ZXJmbG93TGVuZ3RoLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZUxpbmVXaWR0aCwgSW5saW5l
TGF5b3V0VW5pdCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKQEAgLTc0LDE5ICs3OCwyOSBAQCBwcml2
YXRlOgogICAgICAgICBPcHRpb25hbCA8TGluZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50PiBwYXJ0
aWFsQ29udGVudCB7IH07CiAgICAgfTsKICAgICBlbnVtIGNsYXNzIENvbW1pdEludHJ1c2l2ZUZs
b2F0c09ubHkgeyBObywgWWVzIH07Ci0gICAgdm9pZCBjb21taXRGbG9hdHMoTGluZSYsIGNvbnN0
IExpbmVDYW5kaWRhdGUmLCBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5ID0gQ29tbWl0SW50cnVz
aXZlRmxvYXRzT25seTo6Tm8pOwotICAgIFJlc3VsdCBoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250
ZW50KExpbmVCcmVha2VyJiwgTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmKTsKLSAgICBzaXplX3QgcmVidWlsZExpbmUoTGluZSYs
IGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpOwotICAgIHZvaWQgY29tbWl0UGFy
dGlhbENvbnRlbnQoTGluZSYsIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiwgY29uc3QgTGlu
ZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYpOwotICAgIExpbmVDb250
ZW50IGNsb3NlKGNvbnN0IExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdl
LCB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50
OjpQYXJ0aWFsQ29udGVudD4pOworICAgIHN0cnVjdCBMaW5lQ29uc3RyYWludHMgeworICAgICAg
ICBJbmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKKyAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07CisgICAgICAgIGJvb2wgbGluZUlzQ29u
c3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKKyAgICB9OworICAgIExpbmVDb25zdHJhaW50cyBj
b25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgSW5saW5lTGF5
b3V0VW5pdCBsaW5lTG9naWNhbFRvcCwgYm9vbCBpc0ZpcnN0TGluZSk7CisgICAgdm9pZCBjb21t
aXRGbG9hdHMoY29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkg
PSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpObyk7CisgICAgUmVzdWx0IGhhbmRsZUZsb2F0
c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJik7CisgICAgc2l6ZV90IHJlYnVpbGRMaW5l
KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpOworICAgIHZvaWQgY29tbWl0UGFy
dGlhbENvbnRlbnQoY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtl
cjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7CisgICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IExpbmVDb25zdHJhaW50cyYpOworICAgIExpbmVDb250ZW50IGNsb3NlKElubGluZUxh
eW91dFBvaW50IGxpbmVMb2dpY2FsVG9wTGVmdCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5l
Q29udGVudDo6UGFydGlhbENvbnRlbnQ+KTsKIAogICAgIElubGluZUxheW91dFVuaXQgaW5saW5l
SXRlbVdpZHRoKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCkgY29uc3Q7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
OyB9CiAgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gbV9mb3Jt
YXR0aW5nQ29udGV4dFJvb3Q7IH0KKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUo
KSBjb25zdDsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZv
cm1hdHRpbmdDb250ZXh0OworICAgIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgbV9mbG9hdGluZ0Nv
bnRleHQ7CiAgICAgY29uc3QgQ29udGFpbmVyQm94JiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsK
KyAgICBMaW5lIG1fbGluZTsKICAgICBjb25zdCBJbmxpbmVJdGVtcyYgbV9pbmxpbmVJdGVtczsK
ICAgICBMaW5lQ29udGVudDo6RmxvYXRMaXN0IG1fZmxvYXRzOwogICAgIE9wdGlvbmFsPElubGlu
ZVRleHRJdGVtPiBtX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408062</attachid>
            <date>2020-09-04 19:18:23 -0700</date>
            <delta_ts>2020-09-05 06:38:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216200-20200904191823.patch</filename>
            <type>text/plain</type>
            <size>44327</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhMDY2YzQ3NzcyYWUz
YjI1OTNlNGIwMmY2ZmYyNzk4MzQzMzcxNi4uODM4Yzk2ZjJjZTI1Yzg3YmRjYWM4OTA2ZGQ1N2Q0
YjI5NzZiZDY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTA5LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmUgaGFuZGluZyB0byBMaW5lQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmlu
c2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNG
b3JMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVGV4dElu
ZGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmZv
cm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxheW91
dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbnRlbnRMb2dp
Y2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpmb3Jt
YXR0aW5nQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OnJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJ1aWxkZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OmNvbnN0cmFpbnRzRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpjb21taXRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpyZWJ1aWxkTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKwogMjAy
MC0wOS0wMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNd
W0lGQ10gUmVuYW1lIExpbmVMYXlvdXRDb250ZXh0IHRvIExpbmVCdWlsZGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMzA3ZWZiNTUzMTk1M2YyY2NiNmIzNmNmZDNi
NWZkNWFmNDFjOTMzNC4uOTdjMjZiM2I4YzBjODgxNGY4NTU2MjMwNGU0Y2QzNGFjYzEyOGFmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMTQwLDQyICsxNDAsMjIg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYg
aW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG92
ZXJmbG93Q29udGVudExlbmd0aDsKICAgICB9OwogICAgIE9wdGlvbmFsPFByZXZpb3VzTGluZT4g
cHJldmlvdXNMaW5lOwotICAgIGF1dG8gbGluZSA9IExpbmUgeyAqdGhpcyB9OwotICAgIGF1dG8g
bGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07
CisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCksICp0
aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAgICBhdXRvIGlzRmly
c3RMaW5lID0gIWZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlJbmxpbmVDb250ZW50KCkgfHwgZm9y
bWF0dGluZ1N0YXRlKCkuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmlzRW1wdHko
KTsKIAorICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCBmbG9hdGlu
Z0NvbnRleHQsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKICAgICB3aGlsZSAoIW5lZWRzTGF5b3V0
UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gbGluZUNvbnN0cmFpbnRzID0gY29uc3Ry
YWludHNGb3JMaW5lKGNvbnN0cmFpbnRzLmhvcml6b250YWwsIGxpbmVMb2dpY2FsVG9wKTsKLSAg
ICAgICAgbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5hdmFpbGFibGVMb2dpY2FsV2lkdGgpOwot
ICAgICAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KGxpbmVDb25zdHJhaW50cy5saW5lSXND
b25zdHJhaW5lZEJ5RmxvYXQpOwogICAgICAgICAvLyBUdXJuIHByZXZpb3VzIGxpbmUncyBvdmVy
ZmxvdyBjb250ZW50IGxlbmd0aCBpbnRvIHRoZSBuZXh0IGxpbmUncyBsZWFkaW5nIGNvbnRlbnQg
cGFydGlhbCBsZW5ndGguCiAgICAgICAgIC8vICJzcFs8LWxpbmUgYnJlYWstPl1saXRfY29udGVu
dCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBsZWFkaW5nIHBhcnRpYWwgY29udGVudCBsZW5n
dGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZp
b3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxs
b3B0OwotICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5l
Q29udGVudChsaW5lLCBuZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5n
dGgpOworICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBDb25zdHJhaW50c0Zv
ckluRmxvd0NvbnRlbnQgeyBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IGxpbmVMb2dpY2FsVG9w
LCBtYWtlT3B0aW9uYWwodG9MYXlvdXRVbml0KHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkp
KSB9IH07CisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxp
bmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwg
aW5pdGlhbExpbmVDb25zdHJhaW50cywgaXNGaXJzdExpbmUpOwogICAgICAgICBhdXRvIGxpbmVD
b250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7Ci0gICAgICAgIGF1dG8g
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGlmIChsaW5l
Q29udGVudC5wYXJ0aWFsQ29udGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVlZHNMYXlvdXRSYW5nZS5l
bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBPbWl0IGZs
b2F0cyB0byBzZWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQu
Ci0gICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVJdGVtc1tpXS5pc0Zsb2F0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpID09IGxpbmVDb250ZW50UmFuZ2UuZW5kIC0gMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9u
LWZsb2F0IGl0ZW0uCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSgpOwotICAgICAgICBsaW5lLmNsb3NlKGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0KLSAgICAgICAgYXV0byBsaW5lSXNWaXN1YWxseUVt
cHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1w
dHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOwotICAgICAgICBhdXRv
IGxhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID8gTGluZUJveDo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQ6Ok5vOwotICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgKnRoaXMsIGxp
bmVDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdpZHRoKCksIGxp
bmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29udGVudC5ydW5zLCBsaW5lSXNWaXN1YWxs
eUVtcHR5LCBsYXN0TGluZX07Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZUNv
bnRlbnQsIGxpbmVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwotCisgICAgICAgIHNldERp
c3BsYXlCb3hlc0ZvckxpbmUobGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwog
ICAgICAgICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBB
U1NFUlQobmVlZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKLSAg
ICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUJveC5sb2dpY2FsQm90dG9tKCk7CisgICAg
ICAgICAgICBpc0ZpcnN0TGluZSA9IGZhbHNlOworICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lQ29udGVudC5saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIC8vIFdo
ZW4gdGhlIHRyYWlsaW5nIGNvbnRlbnQgaXMgcGFydGlhbCwgd2UgbmVlZCB0byByZXVzZSB0aGUg
bGFzdCBJbmxpbmVUZXh0SXRlbS4KICAgICAgICAgICAgIGF1dG8gbGFzdElubGluZUl0ZW1OZWVk
c1BhcnRpYWxMYXlvdXQgPSBsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudC5oYXNWYWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0KSB7CkBAIC0x
OTYsMTAgKzE3Niw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQo
SW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAgICAgICAgIH0KICAgICAg
ICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBjb250ZW50IG9uIHRoZSBsaW5l
LgogICAgICAgICBBU1NFUlQobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkpOwotICAgICAgICBB
U1NFUlQobGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICAgICAgQVNTRVJUKGxpbmVDb250
ZW50Lmhhc0ludHJ1c2l2ZUZsb2F0KTsKICAgICAgICAgLy8gTW92ZSB0aGUgbmV4dCBsaW5lIGJl
bG93IHRoZSBpbnRydXNpdmUgZmxvYXQuCi0gICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0g
RmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRp
bmdTdGF0ZSgpIH07Ci0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29u
dGV4dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVCb3gubG9n
aWNhbEJvdHRvbSgpKSk7CisgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5n
Q29udGV4dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVDb250
ZW50LmxpbmVCb3gubG9naWNhbEJvdHRvbSgpKSk7CiAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0
cmFpbnRzLmxlZnQgfHwgZmxvYXRDb25zdHJhaW50cy5yaWdodCk7CiAgICAgICAgIHN0YXRpYyBh
dXRvIGluaWZpdGVQb2ludCA9IFBvaW50SW5Db250ZXh0Um9vdDo6bWF4KCk7CiAgICAgICAgIC8v
IEluIGNhc2Ugb2YgbGVmdCBhbmQgcmlnaHQgY29uc3RyYWludHMsIHdlIG5lZWQgdG8gcGljayB0
aGUgb25lIHRoYXQncyBjbG9zZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KQEAgLTI3MCwxOCArMjQ5
LDE2IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVk
SW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KEluCiB7CiAgICAgYXV0byYgaW5saW5lSXRlbXMg
PSBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOwogICAgIGF1dG8gbWF4aW11bUxpbmVX
aWR0aCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGF1dG8gbGluZSA9IExpbmUgeyAqdGhp
cyB9OwotICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCks
IGlubGluZUl0ZW1zIH07CisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRl
eHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsK
KyAgICBhdXRvIGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgZmxvYXRpbmdDb250
ZXh0LCByb290KCksIGlubGluZUl0ZW1zIH07CiAgICAgYXV0byBsYXlvdXRSYW5nZSA9IExpbmVC
dWlsZGVyOjpJbmxpbmVJdGVtUmFuZ2UgeyAwICwgaW5saW5lSXRlbXMuc2l6ZSgpIH07CisgICAg
Ly8gT25seSB0aGUgaG9yaXp0b25hbCBhdmFpbGFibGUgd2lkdGggaXMgY29uc3RyYWluZWQgd2hl
biBjb21wdXRpbmcgaW50cmluc2ljIHdpZHRoLgorICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJh
aW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgeyB7
IHsgfSwgdG9MYXlvdXRVbml0KGF2YWlsYWJsZVdpZHRoKSB9LCB7IHsgfSwgeyB9IH0gfTsKICAg
ICB3aGlsZSAoIWxheW91dFJhbmdlLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBPbmx5IHRoZSBo
b3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGluZyBp
bnRyaW5zaWMgd2lkdGguCi0gICAgICAgIGxpbmUub3BlbihhdmFpbGFibGVXaWR0aCk7Ci0gICAg
ICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KGxp
bmUsIGxheW91dFJhbmdlLCB7IH0pOwotICAgICAgICAvLyBGSVhNRTogRmluZCBvdXQgaWYgbWlu
L21heCBuZWVkcyB0byBzZXQgdGhlIGlzTGFzdExpbmUgYml0LgotICAgICAgICBsaW5lLmNsb3Nl
KGZhbHNlKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElu
bGluZUNvbnRlbnQobGF5b3V0UmFuZ2UsIHsgfSwgaW5pdGlhbExpbmVDb25zdHJhaW50cywgZmFs
c2UpOwogICAgICAgICBsYXlvdXRSYW5nZS5zdGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1S
YW5nZS5lbmQ7CiAgICAgICAgIC8vIEZJWE1FOiBVc2UgbGluZSBsb2dpY2FsIGxlZnQgYW5kIHJp
Z2h0IHRvIHRha2UgZmxvYXRzIGludG8gYWNjb3VudC4KLSAgICAgICAgbWF4aW11bUxpbmVXaWR0
aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgp
KTsKKyAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgs
IGxpbmVDb250ZW50LmxpbmVCb3gubG9naWNhbFdpZHRoKCkpOwogICAgIH0KICAgICByZXR1cm4g
bWF4aW11bUxpbmVXaWR0aDsKIH0KQEAgLTQxNSw3OCArMzkyLDEwIEBAIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKQogICAgIH0KIH0K
IAotSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9w
KQotewotICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxv
Z2ljYWxMZWZ0OwotICAgIGF1dG8gbGluZUxvZ2ljYWxSaWdodCA9IGxpbmVMb2dpY2FsTGVmdCAr
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBsaW5lSXNDb25z
dHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKLQotICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxv
YXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdT
dGF0ZSgpIH07Ci0gICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBs
b2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKCFmbG9hdGluZ0NvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUgbGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUg
ZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQgYXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgotICAgICAg
ICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHModG9M
YXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wICsg
cXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkpOwotICAgICAgICAvLyBDaGVjayBpZiB0aGVz
ZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4KLSAgICAg
ICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPngg
PD0gbGluZUxvZ2ljYWxMZWZ0KQotICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5sZWZ0ID0g
eyB9OwotCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmIGZsb2F0Q29uc3Ry
YWludHMucmlnaHQtPnggPj0gbGluZUxvZ2ljYWxSaWdodCkKLSAgICAgICAgICAgIGZsb2F0Q29u
c3RyYWludHMucmlnaHQgPSB7IH07Ci0KLSAgICAgICAgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0
ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0IHx8IGZsb2F0Q29uc3RyYWludHMucmlnaHQ7Ci0KLSAg
ICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGZsb2F0
Q29uc3RyYWludHMucmlnaHQtPngpOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IGZs
b2F0Q29uc3RyYWludHMucmlnaHQtPng7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBm
bG9hdENvbnN0cmFpbnRzLmxlZnQtPng7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJh
aW50cy5sZWZ0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
ID49IGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBmbG9h
dENvbnN0cmFpbnRzLmxlZnQtPng7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50
cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMucmlnaHQtPngg
Pj0gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9h
dENvbnN0cmFpbnRzLnJpZ2h0LT54OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBjb21w
dXRlZFRleHRJbmRlbnQgPSBbJl0gewotICAgICAgICAvLyB0ZXh0LWluZGVudCBwcm9wZXJ0eSBz
cGVjaWZpZXMgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gbGluZXMgb2YgaW5saW5lIGNvbnRl
bnQgaW4gYSBibG9jay4KLSAgICAgICAgLy8gVGhlIGluZGVudCBpcyB0cmVhdGVkIGFzIGEgbWFy
Z2luIGFwcGxpZWQgdG8gdGhlIHN0YXJ0IGVkZ2Ugb2YgdGhlIGxpbmUgYm94LgotICAgICAgICAv
LyBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgb25seSBsaW5lcyB0aGF0IGFyZSB0aGUgZmly
c3QgZm9ybWF0dGVkIGxpbmUgb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCi0gICAgICAgIC8v
IEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiBhbiBhbm9ueW1vdXMgYmxvY2sgYm94IGlz
IG9ubHkgYWZmZWN0ZWQgaWYgaXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgZWxl
bWVudC4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlYWNoLWxpbmUuCi0gICAg
ICAgIC8vIFtJbnRlZ3JhdGlvbl0gcm9vdCgpLT5wYXJlbnQoKSB3b3VsZCBub3JtYWxseSBwcm9k
dWNlIGEgdmFsaWQgbGF5b3V0IGJveC4KLSAgICAgICAgYXV0byYgcm9vdCA9IHRoaXMtPnJvb3Qo
KTsKLSAgICAgICAgYXV0byBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dElu
ZGVudCA9ICFyb290LmlzQW5vbnltb3VzKCk7Ci0gICAgICAgIGlmIChyb290LmlzQW5vbnltb3Vz
KCkpIHsKLSAgICAgICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoZSBl
YWNoLWxpbmUgYW5kL29yIGhhbmdpbmcga2V5d29yZHMsIG9ubHkgbGluZXMgdGhhdCBhcmUgdGhl
IGZpcnN0IGZvcm1hdHRlZCBsaW5lCi0gICAgICAgICAgICAvLyBvZiBhbiBlbGVtZW50IGFyZSBh
ZmZlY3RlZC4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiBh
biBhbm9ueW1vdXMgYmxvY2sgYm94IGlzIG9ubHkgYWZmZWN0ZWQgaWYgaXQgaXMgdGhlIGZpcnN0
IGNoaWxkIG9mIGl0cyBwYXJlbnQgZWxlbWVudC4KLSAgICAgICAgICAgIGlzRm9ybWF0dGluZ0Nv
bnRleHRSb290Q2FuZGlkYXRlVG9UZXh0SW5kZW50ID0gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCgpCi0gICAgICAgICAgICAgICAgPyBsYXlvdXRTdGF0ZSgpLmlzSW50ZWdyYXRlZFJvb3RCb3hG
aXJzdENoaWxkKCkKLSAgICAgICAgICAgICAgICA6IHJvb3QucGFyZW50KCkuZmlyc3RJbkZsb3dD
aGlsZCgpID09ICZyb290OwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXNGb3JtYXR0aW5nQ29u
dGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQpCi0gICAgICAgICAgICByZXR1cm4gSW5saW5l
TGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGF1dG8gaW52ZXJ0TGluZVJhbmdlID0gZmFsc2U7Ci0j
aWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAgaW52ZXJ0TGluZVJhbmdlID0gcm9vdC5zdHls
ZSgpLnRleHRJbmRlbnRUeXBlKCkgPT0gVGV4dEluZGVudFR5cGU6Okhhbmdpbmc7Ci0jZW5kaWYK
LSAgICAgICAgYXV0byBpc0ZpcnN0TGluZSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmVuc3VyZURpc3Bs
YXlJbmxpbmVDb250ZW50KCkubGluZUJveGVzLmlzRW1wdHkoKTsKLSAgICAgICAgLy8gdGV4dC1p
bmRlbnQ6IGhhbmdpbmcgaW52ZXJ0cyB3aGljaCBsaW5lcyBhcmUgYWZmZWN0ZWQuCi0gICAgICAg
IC8vIGludmVydGVkIGxpbmUgcmFuZ2UgLT4gYWxsIHRoZSBsaW5lcyBleGNlcHQgdGhlIGZpcnN0
IG9uZS4KLSAgICAgICAgLy8gIWludmVydGVkIGxpbmUgcmFuZ2UgLT4gZmlyc3QgbGluZSBnZXRz
IHRoZSBpbmRlbnQuCi0gICAgICAgIGF1dG8gc2hvdWxkSW5kZW50ID0gaW52ZXJ0TGluZVJhbmdl
ICE9IGlzRmlyc3RMaW5lOwotICAgICAgICBpZiAoIXNob3VsZEluZGVudCkKLSAgICAgICAgICAg
IHJldHVybiBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCku
Y29tcHV0ZWRUZXh0SW5kZW50KHJvb3QsIGhvcml6b250YWxDb25zdHJhaW50cykudmFsdWVPcihJ
bmxpbmVMYXlvdXRVbml0IHsgfSk7Ci0gICAgfTsKLSAgICBsaW5lTG9naWNhbExlZnQgKz0gY29t
cHV0ZWRUZXh0SW5kZW50KCk7Ci0gICAgcmV0dXJuIExpbmVDb25zdHJhaW50cyB7IHsgbGluZUxv
Z2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKLX0KLQotdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6
TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKK3ZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxk
ZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0g
dGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7CisgICAgYXV0byYgbGluZUJveCA9IGxpbmVDb250ZW50
LmxpbmVCb3g7CiAgICAgaWYgKCFsaW5lQ29udGVudC5mbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhp
cywgZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9OwogICAgICAgICAvLyBNb3ZlIGZs
b2F0cyB0byB0aGVpciBmaW5hbCBwb3NpdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oCmluZGV4IGRjNGYzYzUxOTAyZjQ4MGQ2MTFhYjg2Nzc3NDVkZWEwNTQxMzk1ODQuLjQwZTUz
MDBkNGI5NzU4YzA2MzRkOTQ1ZmE4NDNkNDc1Y2E1ZDJjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtNjcsNyArNjcsNiBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoKICAg
ICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZVZl
cnRpY2FsVmFsdWVzJikgY29uc3Q7CiAgICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbmxp
bmVCbG9ja1dpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IE92ZXJyaWRlSG9yaXpvbnRhbFZhbHVlcyYpOwotICAgICAgICBPcHRpb25h
bDxJbmxpbmVMYXlvdXRVbml0PiBjb21wdXRlZFRleHRJbmRlbnQoY29uc3QgQ29udGFpbmVyQm94
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OwpAQCAtODgsMTMgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVX
aWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsK
IAogICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpOwotICAgIHN0cnVjdCBM
aW5lQ29uc3RyYWludHMgewotICAgICAgICBJbmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVm
dDsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07
Ci0gICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKLSAgICB9
OwotICAgIExpbmVDb25zdHJhaW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgdm9p
ZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYs
IGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKKyAgICB2b2lk
IHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0
dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0
ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cAppbmRleCBkN2MyNmZkNzdmZjQ1ZTAzMDBmMWJiMjQ3ODkyNTZjODE2NjZjNWZlLi43MDdiNmUw
MjUzYzMzMjYyNjUzODljZDJjNDZlY2QyMjUwOTI5NzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNzUsMTQgKzc1LDYgQEAgQ29udGVu
dEhlaWdodEFuZE1hcmdpbiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGlu
ZUJsb2NrSGVpZ2h0QW5kTWEKICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGVWZXJ0aWNhbFZhbHVlcyk7CiB9CiAKLU9w
dGlvbmFsPElubGluZUxheW91dFVuaXQ+IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRUZXh0SW5kZW50KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRl
eHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cykgY29uc3QKLXsKLSAgICBhdXRvIHRleHRJbmRlbnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3Qu
c3R5bGUoKS50ZXh0SW5kZW50KCk7Ci0gICAgaWYgKHRleHRJbmRlbnQgPT0gUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0SW5kZW50KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIElu
bGluZUxheW91dFVuaXQgeyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4dEluZGVudCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkgfTsKLX0KLQogfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
Y3BwCmluZGV4IGRhNzE4N2UyZTJkZGFmYjVmYzY5OTQ1NGJhMWZmMmQ2ZjJjMWRlOWYuLjUzYjU1
MWY0MDllYWRiYjg1ZmI2MDcxODY4NzE3NTJhYzQzMWYxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCkBA
IC00MTEsNiArNDExLDIxIEBAIHZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2Fs
bHlBbmRDb21wdXRlTGluZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtCiAgICAgfQogfQogCitj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfQorCitj
b25zdCBCb3gmIExpbmVCb3g6OnJvb3QoKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLnJvb3QoKTsKK30KKworTGF5b3V0U3RhdGUmIExpbmVCb3g6OmxheW91dFN0YXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgp
OworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAppbmRleCAwM2UzNDQyYTBmYTE4MmI4MzM1N2Y5NWNh
NGZmZmNjYTAzMmRmYzRmLi4wNmQ4MWQwM2FhOTkwYmEyNWY1M2NjOWJjYWZlOGVlOWYzZDRhNzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5oCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IERp
c3BsYXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgc2Nyb2xsYWJsZU92ZXJmbG93KCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlT3ZlcmZsb3c7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lk
dGg7IH0KIAogICAgIGNvbnN0IElubGluZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0
IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJldHVybiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgm
bGF5b3V0Qm94KTsgfQogICAgIERpc3BsYXk6OklubGluZVJlY3QgaW5saW5lUmVjdEZvclRleHRS
dW4oY29uc3QgTGluZTo6UnVuJikgY29uc3Q7CkBAIC0xMTksMTEgKzEyMCw5IEBAIHByaXZhdGU6
CiAKICAgICBJbmxpbmVCb3gmIGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91
dEJveCkgeyByZXR1cm4gKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KIAot
ICAgIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDsgfQotICAgIGNvbnN0IEJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkucm9vdCgpOyB9Ci0gICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOyB9CisgICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Q7
CisgICAgY29uc3QgQm94JiByb290KCkgY29uc3Q7CisgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX3JlY3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggOWM3MmNkYTljZDg5MTgxMTZlMDczYzU5ZGU3
Y2NiNzcwN2M4ZDE4OS4uNTZiZGY2YmVlNjJhNTU3MDM3NjhlZjk0YTZiNzc3ZjgyYTFmMjYyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorI2lu
Y2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKQEAg
LTI4MCwzMCArMjgxLDMyIEBAIElubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OmlubGluZUl0
ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpCiAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5LndpZHRoKCk7CiB9CiAKLUxpbmVCdWlsZGVyOjpMaW5lQnVpbGRlcihjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IENv
bnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5s
aW5lSXRlbXMpCitMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBGbG9hdGluZ0NvbnRleHQm
IGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKICAgICA6IG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2Zsb2F0aW5nQ29u
dGV4dChmbG9hdGluZ0NvbnRleHQpCiAgICAgLCBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdChmb3Jt
YXR0aW5nQ29udGV4dFJvb3QpCisgICAgLCBtX2xpbmUoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQp
CiAgICAgLCBtX2lubGluZUl0ZW1zKGlubGluZUl0ZW1zKQogewogfQogCi1MaW5lQnVpbGRlcjo6
TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQoTGluZSYgbGluZSwg
Y29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCkKK0xpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5l
QnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91
dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBj
b25zdCBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBpbml0
aWFsQ29uc3RyYWludHMsIGJvb2wgaXNGaXJzdExpbmUpCiB7Ci0gICAgQVNTRVJUKG1fZmxvYXRz
LmlzRW1wdHkoKSk7Ci0gICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0geyB9OwotICAgIG1f
bGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0gPSB7IH07CisgICAgYXV0byBsaW5lQ2FuZGlkYXRlID0g
TGluZUNhbmRpZGF0ZSB7IH07CiAgICAgYXV0byBsaW5lQnJlYWtlciA9IExpbmVCcmVha2VyIHsg
fTsKKyAgICBhdXRvIGxpbmVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRm9yTGluZShpbml0aWFs
Q29uc3RyYWludHMsIGlzRmlyc3RMaW5lKTsKKyAgICBpbml0aWFsaXplKGxpbmVDb25zdHJhaW50
cyk7CisKICAgICBhdXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKICAg
ICB1bnNpZ25lZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSAwOwotICAgIGF1dG8gbGluZUNh
bmRpZGF0ZSA9IExpbmVDYW5kaWRhdGUgeyB9OwogICAgIHdoaWxlIChjdXJyZW50SXRlbUluZGV4
IDwgbGF5b3V0UmFuZ2UuZW5kKSB7CiAgICAgICAgIC8vIDEuIENvbGxlY3QgdGhlIHNldCBvZiBy
dW5zIHRoYXQgd2UgY2FuIGNvbW1pdCB0byB0aGUgbGluZSBhcyBvbmUgZW50aXR5IGUuZy4gPHNw
YW4+dGV4dF9hbmRfc3Bhbl9zdGFydF9zcGFuX2VuZDwvc3Bhbj4uCiAgICAgICAgIC8vIDIuIEFw
cGx5IGZsb2F0cyBhbmQgc2hyaW5rIHRoZSBhdmFpbGFibGUgaG9yaXpvbnRhbCBzcGFjZSBlLmcu
IDxzcGFuPmludHJ1XzxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj5zaXZlX2Zsb2F0PC9z
cGFuPi4KICAgICAgICAgLy8gMy4gQ2hlY2sgaWYgdGhlIGNvbnRlbnQgZml0cyB0aGUgbGluZSBh
bmQgY29tbWl0IHRoZSBjb250ZW50IGFjY29yZGluZ2x5IChmdWxsLCBwYXJ0aWFsIG9yIG5vdCBj
b21taXQgYXQgYWxsKS4KICAgICAgICAgLy8gNC4gUmV0dXJuIGlmIHdlIGFyZSBhdCB0aGUgZW5k
IG9mIHRoZSBsaW5lIGVpdGhlciBieSBub3QgYmVpbmcgYWJsZSB0byBmaXQgbW9yZSBjb250ZW50
IG9yIGJlY2F1c2Ugb2YgYW4gZXhwbGljaXQgbGluZSBicmVhay4KLSAgICAgICAgbmV4dENvbnRl
bnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJdGVtSW5kZXgsIGxheW91dFJhbmdlLCBw
YXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUu
dHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7Ci0g
ICAgICAgIC8vIE5vdyBjaGVjayBpZiB3ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3Vy
cmVudCBsaW5lLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNv
bnRlbnQobGluZUJyZWFrZXIsIGxpbmUsIGxheW91dFJhbmdlLCBsaW5lQ2FuZGlkYXRlKTsKKyAg
ICAgICAgbmV4dENvbnRlbnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJdGVtSW5kZXgs
IGxheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIG1fbGluZS5hdmFpbGFi
bGVXaWR0aCgpICsgbV9saW5lLnRyaW1tYWJsZVRyYWlsaW5nV2lkdGgoKSwgbV9saW5lLmNvbnRl
bnRMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB3ZSBjYW4gcHV0IHRo
aXMgY29udGVudCBvbiB0aGUgY3VycmVudCBtX2xpbmUuCisgICAgICAgIGF1dG8gcmVzdWx0ID0g
aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChsaW5lQnJlYWtlciwgbGF5b3V0UmFuZ2UsIGxp
bmVDYW5kaWRhdGUpOwogICAgICAgICBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSByZXN1bHQu
Y29tbWl0dGVkQ291bnQuaXNSZXZlcnQgPyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUgOiBj
b21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWU7CiAg
ICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7
CiAgICAgICAgIGF1dG8gaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgPSBpbmxpbmVDb250
ZW50LnJ1bnMoKS5zaXplKCkgPT0gcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlICYmICFyZXN1
bHQucGFydGlhbENvbnRlbnQ7CkBAIC0zMTEsMzEgKzMxNCwxMzEgQEAgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNv
bnN0IElubGkKIAogICAgICAgICBpZiAoaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgJiYg
aW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAvLyBGdWxs
eSBjb21taXRlZCAob3IgZW1wdHkpIGNvbnRlbnQgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrIG1l
YW5zICJlbmQgb2YgbGluZSIuCi0gICAgICAgICAgICBsaW5lLmFwcGVuZCgqaW5saW5lQ29udGVu
dC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOworICAgICAgICAgICAgbV9saW5lLmFwcGVuZCgq
aW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOwogICAgICAgICAgICAgKytj
b21taXR0ZWRJbmxpbmVJdGVtQ291bnQ7CiAgICAgICAgICAgICBpc0VuZE9mTGluZSA9IHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzRW5kT2ZMaW5lKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBjYW4ndCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAg
ICAgICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVt
Q291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCk7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBw
bGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBtX2xpbmUuCisgICAgICAgICAgICBy
ZXR1cm4gY2xvc2UobGluZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsYXlvdXRSYW5nZSwg
Y29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCByZXN1bHQucGFydGlhbENvbnRlbnQpOwogICAgICAg
ICB9CiAgICAgICAgIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIGNvbW1p
dHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKICAgICAgICAgcGFydGlhbExl
YWRpbmdDb250ZW50TGVuZ3RoID0geyB9OwogICAgIH0KICAgICAvLyBMb29rcyBsaWtlIHdlJ3Zl
IHJ1biBvdXQgb2YgcnVucy4KLSAgICByZXR1cm4gY2xvc2UobGluZSwgbGF5b3V0UmFuZ2UsIGNv
bW1pdHRlZElubGluZUl0ZW1Db3VudCwgeyB9KTsKKyAgICByZXR1cm4gY2xvc2UobGluZUNvbnN0
cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsYXlvdXRSYW5nZSwgY29tbWl0dGVkSW5saW5lSXRlbUNv
dW50LCB7IH0pOworfQorCit2b2lkIExpbmVCdWlsZGVyOjppbml0aWFsaXplKGNvbnN0IFVzZWRD
b25zdHJhaW50cyYgbGluZUNvbnN0cmFpbnRzKQoreworICAgIG1fZmxvYXRzLmNsZWFyKCk7Cisg
ICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0geyB9OworICAgIG1fbGFzdFdyYXBPcHBvcnR1
bml0eUl0ZW0gPSB7IH07CisKKyAgICBtX2xpbmUub3BlbihsaW5lQ29uc3RyYWludHMuYXZhaWxh
YmxlTG9naWNhbFdpZHRoKTsKKyAgICBtX2xpbmUuc2V0SGFzSW50cnVzaXZlRmxvYXQobGluZUNv
bnN0cmFpbnRzLmxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCk7CiB9CiAKLUxpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCBMaW5lQnVpbGRlcjo6Y2xvc2UoY29uc3QgTGluZSYgbGluZSwgY29uc3QgSW5s
aW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNv
dW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50
KQorTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpjbG9zZShJbmxpbmVMYXlv
dXRQb2ludCBsaW5lTG9naWNhbFRvcExlZnQsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0
UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNv
bnRlbnQ6OlBhcnRpYWxDb250ZW50PiBwYXJ0aWFsQ29udGVudCkKIHsKLSAgICBBU1NFUlRfVU5V
U0VEKGxpbmUsIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0eSgp
IHx8IGxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKSk7CisgICAgQVNTRVJUKGNvbW1pdHRlZElubGlu
ZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0eSgpIHx8IG1fbGluZS5oYXNJbnRydXNpdmVG
bG9hdCgpKTsKICAgICBhdXRvIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgPSBjb21taXR0ZWRJbmxp
bmVJdGVtQ291bnQgKyBtX2Zsb2F0cy5zaXplKCk7CiAgICAgYXV0byB0cmFpbGluZ0lubGluZUl0
ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0YXJ0ICsgbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyAtIDE7
CiAgICAgYXV0byBsaW5lUmFuZ2UgPSBJbmxpbmVJdGVtUmFuZ2UgeyBsYXlvdXRSYW5nZS5zdGFy
dCwgdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggKyAxIH07CiAgICAgQVNTRVJUKGxpbmVSYW5nZS5l
bmQgPD0gbGF5b3V0UmFuZ2UuZW5kKTsKICAgICAvLyBBZGp1c3QgaHlwaGVuYXRlZCBsaW5lIGNv
dW50LgogICAgIG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQgPSBwYXJ0aWFsQ29udGVu
dCAmJiBwYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50SGFzSHlwaGVuID8gbV9zdWNjZXNz
aXZlSHlwaGVuYXRlZExpbmVDb3VudCArIDEgOiAwOwotICAgIHJldHVybiBMaW5lQ29udGVudCB7
IHBhcnRpYWxDb250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpLCBsaW5lLnJ1bnMo
KSB9OworCisgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0geworICAg
ICAgICBpZiAocGFydGlhbENvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChsaW5lUmFuZ2UuZW5kID09IGxheW91dFJhbmdlLmVuZCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAvLyBPbWl0IGZsb2F0cyB0byBzZWUgaWYgdGhpcyBpcyB0aGUg
bGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCisgICAgICAgIGZvciAoYXV0byBpID0gbGF5
b3V0UmFuZ2UuZW5kOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lSXRlbXNbaV0u
aXNGbG9hdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpID09IGxpbmVSYW5nZS5lbmQgLSAx
OworICAgICAgICB9CisgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9u
LWZsb2F0IGl0ZW0uCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSgpOworICAgIG1fbGluZS5jbG9zZShpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQpOworICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0eSA9IG1fbGluZS5pc1Zpc3Vh
bGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6
OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOworICAgIGF1dG8gaXNMYXN0TGluZSA9IGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICBy
ZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29udGVudCwgbGluZVJhbmdlLCBtX2Zsb2F0cywg
bV9saW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCksIExpbmVCb3ggeyBmb3JtYXR0aW5nQ29udGV4dCgp
LCBsaW5lTG9naWNhbFRvcExlZnQsIG1fbGluZS5saW5lTG9naWNhbFdpZHRoKCksIG1fbGluZS5j
b250ZW50TG9naWNhbFdpZHRoKCksIG1fbGluZS5ydW5zKCksIGxpbmVJc1Zpc3VhbGx5RW1wdHks
IGlzTGFzdExpbmV9ICwgbV9saW5lLnJ1bnMoKSB9OworfQorCitMaW5lQnVpbGRlcjo6VXNlZENv
bnN0cmFpbnRzIExpbmVCdWlsZGVyOjpjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgRm9ybWF0dGlu
Z0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbENvbnN0cmFpbnRz
LCBib29sIGlzRmlyc3RMaW5lKQoreworICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gaW5pdGlh
bENvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQ7CisgICAgYXV0byBsaW5lTG9naWNh
bFRvcCA9IGluaXRpYWxDb25zdHJhaW50cy52ZXJ0aWNhbC5sb2dpY2FsVG9wOworICAgIGF1dG8g
bGluZUxvZ2ljYWxSaWdodCA9IGxpbmVMb2dpY2FsTGVmdCArIGluaXRpYWxDb25zdHJhaW50cy5o
b3Jpem9udGFsLmxvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCA9IGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVz
dCBsb2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHku
CisgICAgaWYgKCFtX2Zsb2F0aW5nQ29udGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciB2YXJpYWJsZSBsaW5lIGhlaWdodCwgd2hlcmUgdGhlIGludHJ1
c2l2ZSBmbG9hdHMgc2hvdWxkIGJlIHByb2JlZCBhcyB0aGUgbGluZSBoZWlnaHQgZ3Jvd3MuCisg
ICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IG1fZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFp
bnRzKHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCksIHRvTGF5b3V0VW5pdChsaW5lTG9naWNh
bFRvcCArICppbml0aWFsQ29uc3RyYWludHMudmVydGljYWwubG9naWNhbEhlaWdodCkpOworICAg
ICAgICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlv
biBvbiB0aGUgbV9saW5lLgorICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmIGZs
b2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBsaW5lTG9naWNhbExlZnQpCisgICAgICAgICAgICBm
bG9hdENvbnN0cmFpbnRzLmxlZnQgPSB7IH07CisKKyAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWlu
dHMucmlnaHQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbFJpZ2h0
KQorICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsKKworICAgICAgICBs
aW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQgfHwgZmxvYXRD
b25zdHJhaW50cy5yaWdodDsKKworICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYm
IGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0
cmFpbnRzLmxlZnQtPnggPD0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCk7CisgICAgICAgICAg
ICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eDsKKyAgICAgICAg
ICAgIGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAg
fSBlbHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChm
bG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPj0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAg
IGxpbmVMb2dpY2FsTGVmdCA9IGZsb2F0Q29uc3RyYWludHMubGVmdC0+eDsKKyAgICAgICAgfSBl
bHNlIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxv
YXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAg
bGluZUxvZ2ljYWxSaWdodCA9IGZsb2F0Q29uc3RyYWludHMucmlnaHQtPng7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBhdXRvIGNvbXB1dGVkVGV4dEluZGVudCA9IFsmXSgpIC0+IElubGluZUxh
eW91dFVuaXQgeworICAgICAgICAvLyB0ZXh0LWluZGVudCBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhl
IGluZGVudGF0aW9uIGFwcGxpZWQgdG8gbGluZXMgb2YgaW5saW5lIGNvbnRlbnQgaW4gYSBibG9j
ay4KKyAgICAgICAgLy8gVGhlIGluZGVudCBpcyB0cmVhdGVkIGFzIGEgbWFyZ2luIGFwcGxpZWQg
dG8gdGhlIHN0YXJ0IGVkZ2Ugb2YgdGhlIGxpbmUgYm94LgorICAgICAgICAvLyBVbmxlc3Mgb3Ro
ZXJ3aXNlIHNwZWNpZmllZCwgb25seSBsaW5lcyB0aGF0IGFyZSB0aGUgZmlyc3QgZm9ybWF0dGVk
IGxpbmUgb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCisgICAgICAgIC8vIEZvciBleGFtcGxl
LCB0aGUgZmlyc3QgbGluZSBvZiBhbiBhbm9ueW1vdXMgYmxvY2sgYm94IGlzIG9ubHkgYWZmZWN0
ZWQgaWYgaXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgZWxlbWVudC4KKyAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlYWNoLWxpbmUuCisgICAgICAgIC8vIFtJbnRl
Z3JhdGlvbl0gcm9vdCgpLT5wYXJlbnQoKSB3b3VsZCBub3JtYWxseSBwcm9kdWNlIGEgdmFsaWQg
bGF5b3V0IGJveC4KKyAgICAgICAgYXV0byYgcm9vdCA9IHRoaXMtPnJvb3QoKTsKKyAgICAgICAg
YXV0byBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dEluZGVudCA9ICFyb290
LmlzQW5vbnltb3VzKCk7CisgICAgICAgIGlmIChyb290LmlzQW5vbnltb3VzKCkpIHsKKyAgICAg
ICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoZSBlYWNoLWxpbmUgYW5k
L29yIGhhbmdpbmcga2V5d29yZHMsIG9ubHkgbGluZXMgdGhhdCBhcmUgdGhlIGZpcnN0IGZvcm1h
dHRlZCBsaW5lCisgICAgICAgICAgICAvLyBvZiBhbiBlbGVtZW50IGFyZSBhZmZlY3RlZC4KKyAg
ICAgICAgICAgIC8vIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiBhbiBhbm9ueW1vdXMg
YmxvY2sgYm94IGlzIG9ubHkgYWZmZWN0ZWQgaWYgaXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGl0
cyBwYXJlbnQgZWxlbWVudC4KKyAgICAgICAgICAgIGlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2Fu
ZGlkYXRlVG9UZXh0SW5kZW50ID0gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpCisgICAgICAg
ICAgICAgICAgPyBsYXlvdXRTdGF0ZSgpLmlzSW50ZWdyYXRlZFJvb3RCb3hGaXJzdENoaWxkKCkK
KyAgICAgICAgICAgICAgICA6IHJvb3QucGFyZW50KCkuZmlyc3RJbkZsb3dDaGlsZCgpID09ICZy
b290OworICAgICAgICB9CisgICAgICAgIGlmICghaXNGb3JtYXR0aW5nQ29udGV4dFJvb3RDYW5k
aWRhdGVUb1RleHRJbmRlbnQpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBhdXRv
IGludmVydExpbmVSYW5nZSA9IGZhbHNlOworI2lmIEVOQUJMRShDU1MzX1RFWFQpCisgICAgICAg
IGludmVydExpbmVSYW5nZSA9IHJvb3Quc3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpID09IFRleHRJ
bmRlbnRUeXBlOjpIYW5naW5nOworI2VuZGlmCisgICAgICAgIC8vIHRleHQtaW5kZW50OiBoYW5n
aW5nIGludmVydHMgd2hpY2ggbGluZXMgYXJlIGFmZmVjdGVkLgorICAgICAgICAvLyBpbnZlcnRl
ZCBsaW5lIHJhbmdlIC0+IGFsbCB0aGUgbGluZXMgZXhjZXB0IHRoZSBmaXJzdCBvbmUuCisgICAg
ICAgIC8vICFpbnZlcnRlZCBsaW5lIHJhbmdlIC0+IGZpcnN0IGxpbmUgZ2V0cyB0aGUgaW5kZW50
LgorICAgICAgICBhdXRvIHNob3VsZEluZGVudCA9IGludmVydExpbmVSYW5nZSAhPSBpc0ZpcnN0
TGluZTsKKyAgICAgICAgaWYgKCFzaG91bGRJbmRlbnQpCisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgIAorICAgICAgICBhdXRvIHRleHRJbmRlbnQgPSByb290LnN0eWxlKCkudGV4dEluZGVu
dCgpOworICAgICAgICBpZiAodGV4dEluZGVudCA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJ
bmRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiB7IG1pbmlt
dW1WYWx1ZUZvckxlbmd0aCh0ZXh0SW5kZW50LCBpbml0aWFsQ29uc3RyYWludHMuaG9yaXpvbnRh
bC5sb2dpY2FsV2lkdGgpIH07CisgICAgfTsKKyAgICBsaW5lTG9naWNhbExlZnQgKz0gY29tcHV0
ZWRUZXh0SW5kZW50KCk7CisgICAgcmV0dXJuIFVzZWRDb25zdHJhaW50cyB7IHsgbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxM
ZWZ0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6
bmV4dENvbnRlbnRGb3JMaW5lKExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIHVuc2lnbmVk
IGN1cnJlbnRJbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlTGluZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRM
b2dpY2FsUmlnaHQpCkBAIC0zODQsNyArNDg3LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6bmV4dENv
bnRlbnRGb3JMaW5lKExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIHVuc2lnbmVkIGN1cnIK
ICAgICB9CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhMaW5lJiBsaW5lLCBj
b25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9hdHNP
bmx5IGNvbW1pdEludHJ1c2l2ZU9ubHkpCit2b2lkIExpbmVCdWlsZGVyOjpjb21taXRGbG9hdHMo
Y29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgQ29tbWl0SW50cnVzaXZlRmxvYXRz
T25seSBjb21taXRJbnRydXNpdmVPbmx5KQogewogICAgIGF1dG8mIGZsb2F0Q29udGVudCA9IGxp
bmVDYW5kaWRhdGUuZmxvYXRDb250ZW50OwogICAgIGF1dG8gbGVmdEludHJ1c2l2ZUZsb2F0c1dp
ZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CkBAIC0zOTcsMjkgKzUwMCwyOSBAQCB2b2lkIExp
bmVCdWlsZGVyOjpjb21taXRGbG9hdHMoTGluZSYgbGluZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYg
bGluZUNhbmRpZGF0ZSwgQwogICAgICAgICBtX2Zsb2F0cy5hcHBlbmQoeyBmbG9hdENhbmRpZGF0
ZS5pc0ludHJ1c2l2ZSwgZmxvYXRDYW5kaWRhdGUuaXRlbSB9KTsKICAgICAgICAgaWYgKGZsb2F0
Q2FuZGlkYXRlLmlzSW50cnVzaXZlKSB7CiAgICAgICAgICAgICBoYXNJbnRydXNpdmVGbG9hdCA9
IHRydWU7Ci0gICAgICAgICAgICAvLyBUaGlzIGZsb2F0IGlzIGludHJ1c2l2ZSBhbmQgaXQgc2hy
aW5rcyB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAgICAgLy8gU2hyaW5rIGF2YWlsYWJsZSBz
cGFjZSBmb3IgY3VycmVudCBsaW5lLgorICAgICAgICAgICAgLy8gVGhpcyBmbG9hdCBpcyBpbnRy
dXNpdmUgYW5kIGl0IHNocmlua3MgdGhlIGN1cnJlbnQgbV9saW5lLgorICAgICAgICAgICAgLy8g
U2hyaW5rIGF2YWlsYWJsZSBzcGFjZSBmb3IgY3VycmVudCBtX2xpbmUuCiAgICAgICAgICAgICBp
ZiAoZmxvYXRDYW5kaWRhdGUuaXRlbS0+bGF5b3V0Qm94KCkuaXNMZWZ0RmxvYXRpbmdQb3NpdGlv
bmVkKCkpCiAgICAgICAgICAgICAgICAgbGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRoICs9IGZsb2F0
Q2FuZGlkYXRlLmxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICByaWdodEludHJ1c2l2ZUZsb2F0c1dpZHRoICs9IGZsb2F0Q2FuZGlkYXRlLmxvZ2ljYWxXaWR0
aDsKICAgICAgICAgfQogICAgIH0KLSAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KGhhc0lu
dHJ1c2l2ZUZsb2F0KTsKKyAgICBtX2xpbmUuc2V0SGFzSW50cnVzaXZlRmxvYXQoaGFzSW50cnVz
aXZlRmxvYXQpOwogICAgIGlmIChsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggfHwgcmlnaHRJbnRy
dXNpdmVGbG9hdHNXaWR0aCkgewogICAgICAgICBpZiAobGVmdEludHJ1c2l2ZUZsb2F0c1dpZHRo
KQotICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNhbExlZnQobGVmdEludHJ1c2l2ZUZsb2F0c1dp
ZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5tb3ZlTG9naWNhbExlZnQobGVmdEludHJ1c2l2ZUZs
b2F0c1dpZHRoKTsKICAgICAgICAgaWYgKHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpCi0gICAg
ICAgICAgICBsaW5lLm1vdmVMb2dpY2FsUmlnaHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7
CisgICAgICAgICAgICBtX2xpbmUubW92ZUxvZ2ljYWxSaWdodChyaWdodEludHJ1c2l2ZUZsb2F0
c1dpZHRoKTsKICAgICB9CiB9CiAKLUxpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6Omhh
bmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImIGxpbmVCcmVha2VyLCBMaW5l
JiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBjb25zdCBMaW5lQ2Fu
ZGlkYXRlJiBsaW5lQ2FuZGlkYXRlKQorTGluZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6
aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYgbGluZUJyZWFrZXIsIGNv
bnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxp
bmVDYW5kaWRhdGUpCiB7CiAgICAgYXV0byYgaW5saW5lQ29udGVudCA9IGxpbmVDYW5kaWRhdGUu
aW5saW5lQ29udGVudDsKICAgICBhdXRvJiBjYW5kaWRhdGVSdW5zID0gaW5saW5lQ29udGVudC5y
dW5zKCk7CiAgICAgaWYgKGNhbmRpZGF0ZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbW1p
dEZsb2F0cyhsaW5lLCBsaW5lQ2FuZGlkYXRlKTsKKyAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVD
YW5kaWRhdGUpOwogICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Ok5v
IH07CiAgICAgfQogCkBAIC00MzMsMzYgKzUzNiwzNiBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExp
bmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5l
QgogCiAgICAgYXV0byYgZmxvYXRDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQ7
CiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBuZXcgY29udGVudCBmaXRzLgotICAgIGF1dG8gYXZhaWxh
YmxlV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBmbG9hdENvbnRlbnQuaW50cnVzaXZl
V2lkdGgoKTsKLSAgICBhdXRvIGlzTGluZUNvbnNpZGVyZWRFbXB0eSA9IGxpbmUuaXNWaXN1YWxs
eUVtcHR5KCkgJiYgIWxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKTsKLSAgICBhdXRvIGxpbmVTdGF0
dXMgPSBMaW5lQnJlYWtlcjo6TGluZVN0YXR1cyB7IGF2YWlsYWJsZVdpZHRoLCBsaW5lLnRyaW1t
YWJsZVRyYWlsaW5nV2lkdGgoKSwgbGluZS5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSwg
aXNMaW5lQ29uc2lkZXJlZEVtcHR5IH07CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fbGlu
ZS5hdmFpbGFibGVXaWR0aCgpIC0gZmxvYXRDb250ZW50LmludHJ1c2l2ZVdpZHRoKCk7CisgICAg
YXV0byBpc0xpbmVDb25zaWRlcmVkRW1wdHkgPSBtX2xpbmUuaXNWaXN1YWxseUVtcHR5KCkgJiYg
IW1fbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpOworICAgIGF1dG8gbGluZVN0YXR1cyA9IExpbmVC
cmVha2VyOjpMaW5lU3RhdHVzIHsgYXZhaWxhYmxlV2lkdGgsIG1fbGluZS50cmltbWFibGVUcmFp
bGluZ1dpZHRoKCksIG1fbGluZS5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSwgaXNMaW5l
Q29uc2lkZXJlZEVtcHR5IH07CiAgICAgYXV0byByZXN1bHQgPSBsaW5lQnJlYWtlci5zaG91bGRX
cmFwSW5saW5lQ29udGVudChjYW5kaWRhdGVSdW5zLCBpbmxpbmVDb250ZW50LmxvZ2ljYWxXaWR0
aCgpLCBsaW5lU3RhdHVzKTsKICAgICBpZiAocmVzdWx0Lmxhc3RXcmFwT3Bwb3J0dW5pdHlJdGVt
KQogICAgICAgICBtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0gcmVzdWx0Lmxhc3RXcmFwT3Bw
b3J0dW5pdHlJdGVtOwogICAgIGlmIChyZXN1bHQuYWN0aW9uID09IExpbmVCcmVha2VyOjpSZXN1
bHQ6OkFjdGlvbjo6S2VlcCkgewogICAgICAgICAvLyBUaGlzIGNvbnRpbnVvdXMgY29udGVudCBj
YW4gYmUgZnVsbHkgcGxhY2VkIG9uIHRoZSBjdXJyZW50IGxpbmUgaW5jbHVkaW5nIG5vbi1pbnRy
dXNpdmUgZmxvYXRzLgogICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IGNhbmRpZGF0ZVJ1bnMpCi0g
ICAgICAgICAgICBsaW5lLmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0aCk7
Ci0gICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lLCBsaW5lQ2FuZGlkYXRlKTsKKyAgICAgICAgICAg
IG1fbGluZS5hcHBlbmQocnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOworICAgICAg
ICBjb21taXRGbG9hdHMobGluZUNhbmRpZGF0ZSk7CiAgICAgICAgIHJldHVybiB7IHJlc3VsdC5p
c0VuZE9mTGluZSwgeyBjYW5kaWRhdGVSdW5zLnNpemUoKSwgZmFsc2UgfSB9OwogICAgIH0KICAg
ICBpZiAocmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OlB1c2gp
IHsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBMaW5lQnJlYWtlcjo6SXNF
bmRPZkxpbmU6Olllcyk7Ci0gICAgICAgIC8vIFRoaXMgY29udGludW91cyBjb250ZW50IGNhbid0
IGJlIHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lLiBOb3RoaW5nIHRvIGNvbW1pdCBhdCB0aGlz
IHRpbWUuCisgICAgICAgIC8vIFRoaXMgY29udGludW91cyBjb250ZW50IGNhbid0IGJlIHBsYWNl
ZCBvbiB0aGUgY3VycmVudCBtX2xpbmUuIE5vdGhpbmcgdG8gY29tbWl0IGF0IHRoaXMgdGltZS4K
ICAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMgfTsKICAgICB9
CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpS
ZXZlcnRUb0xhc3RXcmFwT3Bwb3J0dW5pdHkpIHsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0Vu
ZE9mTGluZSA9PSBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Olllcyk7CiAgICAgICAgIC8vIE5v
dCBvbmx5IHRoaXMgY29udGVudCBjYW4ndCBiZSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZSwg
YnV0IHdlIGV2ZW4gbmVlZCB0byByZXZlcnQgdGhlIGxpbmUgYmFjayB0byBhbiBlYXJsaWVyIHBv
c2l0aW9uLgogICAgICAgICBBU1NFUlQobV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSk7Ci0gICAg
ICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzLCB7IHJlYnVpbGRMaW5l
KGxpbmUsIGxheW91dFJhbmdlKSwgdHJ1ZSB9IH07CisgICAgICAgIHJldHVybiB7IExpbmVCcmVh
a2VyOjpJc0VuZE9mTGluZTo6WWVzLCB7IHJlYnVpbGRMaW5lKGxheW91dFJhbmdlKSwgdHJ1ZSB9
IH07CiAgICAgfQogICAgIGlmIChyZXN1bHQuYWN0aW9uID09IExpbmVCcmVha2VyOjpSZXN1bHQ6
OkFjdGlvbjo6U3BsaXQpIHsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBM
aW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Olllcyk7Ci0gICAgICAgIC8vIENvbW1pdCB0aGUgY29t
YmluYXRpb24gb2YgZnVsbCBhbmQgcGFydGlhbCBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUu
Ci0gICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lLCBsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNp
dmVGbG9hdHNPbmx5OjpZZXMpOworICAgICAgICAvLyBDb21taXQgdGhlIGNvbWJpbmF0aW9uIG9m
IGZ1bGwgYW5kIHBhcnRpYWwgY29udGVudCBvbiB0aGUgY3VycmVudCBtX2xpbmUuCisgICAgICAg
IGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpZ
ZXMpOwogICAgICAgICBBU1NFUlQocmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOwotICAg
ICAgICBjb21taXRQYXJ0aWFsQ29udGVudChsaW5lLCBjYW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBjb21taXRQYXJ0aWFsQ29udGVudChjYW5k
aWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOwogICAgICAgICAvLyBX
aGVuIHNwbGl0dGluZyBtdWx0aXBsZSBydW5zIDxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVh
ay1hbGwiPnRleHQ8L3NwYW4+PHNwYW4+Y29udGVudDwvc3Bhbj4sIHdlIG1pZ2h0IGVuZCB1cCBz
cGxpdHRpbmcgdGhlbSBhdCBydW4gYm91bmRhcnkuCiAgICAgICAgIC8vIEl0IHNpbXBseSBtZWFu
cyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhIHBhcnRpYWwgcnVuLiBQYXJ0aWFsIGNvbnRlbnQgeWVz
LCBidXQgbm90IHBhcnRpYWwgcnVuLgogICAgICAgICBhdXRvIHRyYWlsaW5nUnVuSW5kZXggPSBy
ZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+dHJhaWxpbmdSdW5JbmRleDsKQEAgLTQ4MCw3
ICs1ODMsNyBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNB
bmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5lQgogICAgIHJldHVybiB7IExpbmVCcmVh
a2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0UGFy
dGlhbENvbnRlbnQoTGluZSYgbGluZSwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMs
IGNvbnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmIHBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQpCit2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVu
dChjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucywgY29uc3QgTGluZUJyZWFrZXI6OlJl
c3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWlsaW5nQ29udGVudCkKIHsK
ICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXplKCk7ICsraW5kZXgp
IHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07CkBAIC00OTAsMjYgKzU5MywyNiBA
QCB2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChMaW5lJiBsaW5lLCBjb25z
dCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcgogICAgICAgICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1
biA9IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQucGFydGlhbFJ1bikgewogICAgICAgICAgICAgICAg
IGF1dG8mIHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4o
cnVuc1twYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWlsaW5nUnVuSW5kZXhdLmlubGluZUl0ZW0p
OwogICAgICAgICAgICAgICAgIGF1dG8gcGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0gPSB0cmFpbGlu
Z0lubGluZVRleHRJdGVtLmxlZnQocGFydGlhbFJ1bi0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICBsaW5lLmFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKHBhcnRpYWxUcmFpbGluZ1RleHRJ
dGVtLCBwYXJ0aWFsUnVuLT5sb2dpY2FsV2lkdGgsIHBhcnRpYWxSdW4tPm5lZWRzSHlwaGVuKTsK
KyAgICAgICAgICAgICAgICBtX2xpbmUuYXBwZW5kUGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0ocGFy
dGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxXaWR0aCwgcGFydGlhbFJ1
bi0+bmVlZHNIeXBoZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBpcyB0aGUgbGFzdCBjb250ZW50IHRvIGNv
bW1pdC4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9naWNh
bFdpZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5hcHBlbmQocnVuLmlubGluZUl0ZW0sIHJ1bi5s
b2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGxp
bmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9s
aW5lLmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0aCk7CiAgICAgfQogfQog
Ci1zaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGlu
ZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCitzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5l
KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiB7CiAgICAgLy8gQ2xlYXIgdGhl
IGxpbmUgYW5kIHN0YXJ0IGFwcGVuZGluZyB0aGUgaW5saW5lIGl0ZW1zIGNsb3Npbmcgd2l0aCB0
aGUgbGFzdCB3cmFwIG9wcG9ydHVuaXR5IHJ1bi4KLSAgICBsaW5lLmNsZWFyQ29udGVudCgpOwor
ICAgIG1fbGluZS5jbGVhckNvbnRlbnQoKTsKICAgICBhdXRvIGN1cnJlbnRJdGVtSW5kZXggPSBs
YXlvdXRSYW5nZS5zdGFydDsKICAgICBhdXRvIGxvZ2ljYWxSaWdodCA9IElubGluZUxheW91dFVu
aXQgeyB9OwogICAgIGlmIChtX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0pIHsKICAgICAgICAgYXV0
byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoKm1fcGFydGlhbExlYWRpbmdUZXh0SXRl
bSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5hcHBlbmQoKm1fcGFydGlhbExlYWRpbmdU
ZXh0SXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZCgqbV9wYXJ0aWFs
TGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHQgKz0g
bG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoJm1fcGFydGlhbExlYWRpbmdUZXh0SXRlbS52YWx1
ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCiAgICAgICAgICAgICByZXR1cm4gMTsK
QEAgLTUxOCw3ICs2MjEsNyBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUm
IGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiAgICAgZm9yICg7IGN1
cnJlbnRJdGVtSW5kZXggPCBsYXlvdXRSYW5nZS5lbmQ7ICsrY3VycmVudEl0ZW1JbmRleCkgewog
ICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gbV9pbmxpbmVJdGVtc1tjdXJyZW50SXRlbUluZGV4
XTsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoaW5saW5lSXRl
bSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5hcHBlbmQoaW5saW5lSXRlbSwgbG9naWNh
bFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChpbmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgp
OwogICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoJmlu
bGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyAxOwpAQCAtNTI2LDYgKzYy
OSwxMSBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0
IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiAgICAgcmV0dXJuIGxheW91dFJhbmdlLnNp
emUoKTsKIH0KIAorY29uc3QgTGF5b3V0U3RhdGUmIExpbmVCdWlsZGVyOjpsYXlvdXRTdGF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsK
K30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA4ODgwNzkyMWNiMWE1YTI3NmZj
M2M2ODE3NWNhMGUyM2UzODZhOGViLi42YWMzYzc0ZWVhYmQ0Mzc1OTI2NTJkZjkzMWY5MGU5YmVi
YzkwZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTI4LDE2ICsyOCwxOCBAQAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiSW5saW5lTGluZS5o
IgorI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xhc3Mg
RmxvYXRpbmdDb250ZXh0Owogc3RydWN0IExpbmVDYW5kaWRhdGU7CiAKIGNsYXNzIExpbmVCdWls
ZGVyIHsKIHB1YmxpYzoKLSAgICBMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYsIGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBJ
bmxpbmVJdGVtcyYpOworICAgIExpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0
aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0ZW1zJik7CiAKICAgICBzdHJ1Y3QgSW5saW5l
SXRlbVJhbmdlIHsKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc3RhcnQg
PT0gZW5kOyB9CkBAIC01NywxMCArNTksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY29uc3Qg
SW5saW5lSXRlbSogaXRlbSB7IG51bGxwdHIgfTsKICAgICAgICAgfTsKICAgICAgICAgdXNpbmcg
RmxvYXRMaXN0ID0gVmVjdG9yPEZsb2F0PjsKLSAgICAgICAgRmxvYXRMaXN0IGZsb2F0czsKKyAg
ICAgICAgY29uc3QgRmxvYXRMaXN0JiBmbG9hdHM7CisgICAgICAgIGJvb2wgaGFzSW50cnVzaXZl
RmxvYXQgeyBmYWxzZSB9OworICAgICAgICBjb25zdCBMaW5lQm94IGxpbmVCb3g7CiAgICAgICAg
IGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnM7CiAgICAgfTsKLSAgICBMaW5lQ29udGVudCBsYXlv
dXRJbmxpbmVDb250ZW50KExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBPcHRpb25hbDx1
bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICBMaW5lQ29udGVudCBs
YXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2ln
bmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0
OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGluaXRpYWxMaW5lQ29uc3RyYWludHMsIGJv
b2wgaXNGaXJzdExpbmUpOwogCiBwcml2YXRlOgogICAgIHZvaWQgbmV4dENvbnRlbnRGb3JMaW5l
KExpbmVDYW5kaWRhdGUmLCB1bnNpZ25lZCBpbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGluZUl0
ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0xlbmd0aCwg
SW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3Vy
cmVudExvZ2ljYWxSaWdodCk7CkBAIC03NCwxOSArNzgsMjkgQEAgcHJpdmF0ZToKICAgICAgICAg
T3B0aW9uYWwgPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENvbnRlbnQgeyB9
OwogICAgIH07CiAgICAgZW51bSBjbGFzcyBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5IHsgTm8s
IFllcyB9OwotICAgIHZvaWQgY29tbWl0RmxvYXRzKExpbmUmLCBjb25zdCBMaW5lQ2FuZGlkYXRl
JiwgQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seSA9IENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6
Ok5vKTsKLSAgICBSZXN1bHQgaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtl
ciYsIExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBjb25zdCBMaW5l
Q2FuZGlkYXRlJik7Ci0gICAgc2l6ZV90IHJlYnVpbGRMaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJ
dGVtUmFuZ2UmIGxheW91dFJhbmdlKTsKLSAgICB2b2lkIGNvbW1pdFBhcnRpYWxDb250ZW50KExp
bmUmLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYsIGNvbnN0IExpbmVCcmVha2VyOjpSZXN1
bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmKTsKLSAgICBMaW5lQ29udGVudCBjbG9zZShjb25z
dCBMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5zaWduZWQgY29t
bWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRl
bnQ+KTsKKyAgICBzdHJ1Y3QgVXNlZENvbnN0cmFpbnRzIHsKKyAgICAgICAgSW5saW5lTGF5b3V0
UG9pbnQgbG9naWNhbFRvcExlZnQ7CisgICAgICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoIHsgMCB9OworICAgICAgICBib29sIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCB7IGZhbHNlIH07CisgICAgfTsKKyAgICBVc2VkQ29uc3RyYWludHMgY29uc3RyYWludHNGb3JM
aW5lKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGluaXRpYWxMaW5lQ29uc3RyYWludHMsIGJvb2wgaXNGaXJzdExpbmUpOworICAgIHZvaWQgY29t
bWl0RmxvYXRzKGNvbnN0IExpbmVDYW5kaWRhdGUmLCBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5
ID0gQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seTo6Tm8pOworICAgIFJlc3VsdCBoYW5kbGVGbG9h
dHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBs
YXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOworICAgIHNpemVfdCByZWJ1aWxkTGlu
ZShjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlKTsKKyAgICB2b2lkIGNvbW1pdFBh
cnRpYWxDb250ZW50KGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiwgY29uc3QgTGluZUJyZWFr
ZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYpOworICAgIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBVc2VkQ29uc3RyYWludHMmKTsKKyAgICBMaW5lQ29udGVudCBjbG9zZShJbmxpbmVM
YXlvdXRQb2ludCBsaW5lTG9naWNhbFRvcExlZnQsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5
b3V0UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGlu
ZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50Pik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGlubGlu
ZUl0ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpIGNvbnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDsgfQogICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0dGluZ0NvbnRleHRSb290OyB9CisgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
KCkgY29uc3Q7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKKyAgICBjb25zdCBGbG9hdGluZ0NvbnRleHQmIG1fZmxvYXRpbmdD
b250ZXh0OwogICAgIGNvbnN0IENvbnRhaW5lckJveCYgbV9mb3JtYXR0aW5nQ29udGV4dFJvb3Q7
CisgICAgTGluZSBtX2xpbmU7CiAgICAgY29uc3QgSW5saW5lSXRlbXMmIG1faW5saW5lSXRlbXM7
CiAgICAgTGluZUNvbnRlbnQ6OkZsb2F0TGlzdCBtX2Zsb2F0czsKICAgICBPcHRpb25hbDxJbmxp
bmVUZXh0SXRlbT4gbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408083</attachid>
            <date>2020-09-05 06:38:39 -0700</date>
            <delta_ts>2020-09-05 07:40:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216200-20200905063838.patch</filename>
            <type>text/plain</type>
            <size>45471</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhMDY2YzQ3NzcyYWUz
YjI1OTNlNGIwMmY2ZmYyNzk4MzQzMzcxNi4uMzQ5M2ZhOTlhM2EyNzZhZGE5Nzc4NzI1MGRmMmU1
ZDQxNzRhZjljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIwLTA5LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmUgaGFuZGluZyB0byBMaW5lQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgMS4gTGluZUJ1aWxkZXIgb3ducyBMaW5lIG5vdy4KKyAgICAgICAg
Mi4gTGluZUJ1aWxkZXIgY2FuIGJ1aWxkIGxpbmUgZm9yIGJvdGggbGF5b3V0IGFuZCBpbnRyaW5z
aWMgd2lkdGggY29tcHV0YXRpb24gKG5vdyB0aGVzZSBhcmUgdHdvIGRpc3RpbmN0IGNvZGUgcGF0
aHMpLgorICAgICAgICAzLiBMaW5lQnVpbGRlciBhbHNvIGNvbnN0cnVjdHMgdGhlIExpbmVCb3gg
d2hlbiBuZWVkZWQgKFRoaXMgd2FzIHByZXZpb3VzbHkgaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmxpbmVMYXlvdXQpLgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yTGluZSk6IERlbGV0
ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFRleHRJbmRlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJvb3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpyb290
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bGF5
b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpj
b25zdHJhaW50c0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6Y29tbWl0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVidWlsZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisKIDIwMjAtMDktMDMgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIFJlbmFtZSBM
aW5lTGF5b3V0Q29udGV4dCB0byBMaW5lQnVpbGRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCmluZGV4IDMwN2VmYjU1MzE5NTNmMmNjYjZiMzZjZmQzYjVmZDVhZjQxYzkzMzQu
LjA3NWRjNzJkOTBmMDZlNzAxMjNjNzJmNTBlZGIzODhiZDg3ODdjNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTE0MCw0MiArMTQwLDIyIEBAIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBM
aW5lQnVpbGRlcjo6CiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0NvbnRlbnRM
ZW5ndGg7CiAgICAgfTsKICAgICBPcHRpb25hbDxQcmV2aW91c0xpbmU+IHByZXZpb3VzTGluZTsK
LSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRvIGxpbmVCdWlsZGVyID0g
TGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OworICAgIGF1dG8gZmxv
YXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGlu
Z1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgYXV0byBpc0ZpcnN0TGluZSA9ICFmb3Jt
YXR0aW5nU3RhdGUoKS5kaXNwbGF5SW5saW5lQ29udGVudCgpIHx8IGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5pc0VtcHR5KCk7CiAKKyAgICBhdXRv
IGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgZmxvYXRpbmdDb250ZXh0LCByb290
KCksIGlubGluZUl0ZW1zIH07CiAgICAgd2hpbGUgKCFuZWVkc0xheW91dFJhbmdlLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvIGxpbmVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRm9yTGluZShj
b25zdHJhaW50cy5ob3Jpem9udGFsLCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgICAgIGxpbmUub3Bl
bihsaW5lQ29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKLSAgICAgICAgbGluZS5z
ZXRIYXNJbnRydXNpdmVGbG9hdChsaW5lQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0KTsKICAgICAgICAgLy8gVHVybiBwcmV2aW91cyBsaW5lJ3Mgb3ZlcmZsb3cgY29udGVudCBs
ZW5ndGggaW50byB0aGUgbmV4dCBsaW5lJ3MgbGVhZGluZyBjb250ZW50IHBhcnRpYWwgbGVuZ3Ro
LgogICAgICAgICAvLyAic3BbPC1saW5lIGJyZWFrLT5dbGl0X2NvbnRlbnQiIC0+IG92ZXJmbG93
IGxlbmd0aDogMTEgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVuZ3RoOiAxMS4KICAgICAg
ICAgYXV0byBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2
aW91c0xpbmUtPm92ZXJmbG93Q29udGVudExlbmd0aCA6IFdURjo6bnVsbG9wdDsKLSAgICAgICAg
YXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQobGluZSwg
bmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAg
YXV0byBpbml0aWFsTGluZUNvbnN0cmFpbnRzID0gQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50
IHsgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyBsaW5lTG9naWNhbFRvcCwgbWFrZU9wdGlvbmFs
KHRvTGF5b3V0VW5pdChxdWlya3MoKS5pbml0aWFsTGluZUhlaWdodCgpKSkgfSB9OworICAgICAg
ICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5lQ29udGVudChuZWVk
c0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGluaXRpYWxMaW5lQ29u
c3RyYWludHMsIGlzRmlyc3RMaW5lKTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJhbmdlID0g
bGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlOwotICAgICAgICBhdXRvIGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCA9IFsmXSB7Ci0gICAgICAgICAgICBpZiAobGluZUNvbnRlbnQucGFydGlh
bENvbnRlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KGxpbmVDb250ZW50UmFuZ2UuZW5kID09IG5lZWRzTGF5b3V0UmFuZ2UuZW5kKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlm
IHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgotICAgICAgICAgICAg
Zm9yIChhdXRvIGkgPSBuZWVkc0xheW91dFJhbmdlLmVuZDsgaS0tOykgewotICAgICAgICAgICAg
ICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA9PSBsaW5lQ29udGVudFJhbmdlLmVuZCAtIDE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIG5vbi1mbG9hdCBpdGVtLgot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgbGluZS5jbG9zZShpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQpOwotCi0gICAgICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0eSA9IGxpbmUuaXNW
aXN1YWxseUVtcHR5KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5l
Qm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpObzsKLSAgICAgICAgYXV0byBsYXN0TGluZSA9IGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsK
LSAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7ICp0aGlzLCBsaW5lQ29uc3RyYWludHMu
bG9naWNhbFRvcExlZnQsIGxpbmUubGluZUxvZ2ljYWxXaWR0aCgpLCBsaW5lLmNvbnRlbnRMb2dp
Y2FsV2lkdGgoKSwgbGluZUNvbnRlbnQucnVucywgbGluZUlzVmlzdWFsbHlFbXB0eSwgbGFzdExp
bmV9OwotICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmVDb250ZW50LCBsaW5lQm94
LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKLQorICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JM
aW5lKGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgaWYgKCFs
aW5lQ29udGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0UmFuZ2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBsaW5l
TG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgaXNGaXJz
dExpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUNvbnRlbnQu
bGluZUJveC5sb2dpY2FsQm90dG9tKCk7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSB0cmFpbGlu
ZyBjb250ZW50IGlzIHBhcnRpYWwsIHdlIG5lZWQgdG8gcmV1c2UgdGhlIGxhc3QgSW5saW5lVGV4
dEl0ZW0uCiAgICAgICAgICAgICBhdXRvIGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0
ID0gbGluZUNvbnRlbnQucGFydGlhbENvbnRlbnQuaGFzVmFsdWUoKTsKICAgICAgICAgICAgIGlm
IChsYXN0SW5saW5lSXRlbU5lZWRzUGFydGlhbExheW91dCkgewpAQCAtMTk2LDEwICsxNzYsOSBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBp
bmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAgICAgICB9CiAgICAgICAgIC8vIEZsb2F0cyBw
cmV2ZW50ZWQgdXMgcGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KICAgICAgICAgQVNT
RVJUKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGxpbmUuaGFz
SW50cnVzaXZlRmxvYXQoKSk7CisgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5oYXNJbnRydXNp
dmVGbG9hdCk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBiZWxvdyB0aGUgaW50cnVz
aXZlIGZsb2F0LgotICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4
dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9Owot
ICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWlu
dHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lQm94LmxvZ2ljYWxCb3R0b20oKSkp
OworICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3Ry
YWludHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lQ29udGVudC5saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSkpOwogICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0IHx8
IGZsb2F0Q29uc3RyYWludHMucmlnaHQpOwogICAgICAgICBzdGF0aWMgYXV0byBpbmlmaXRlUG9p
bnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwogICAgICAgICAvLyBJbiBjYXNlIG9mIGxl
ZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhlIG9uZSB0aGF0J3Mg
Y2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCkBAIC0yNzAsMTggKzI0OSwxNCBAQCBJbmxpbmVM
YXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRo
Rm9yQ29uc3RyYWludChJbgogewogICAgIGF1dG8mIGlubGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0
YXRlKCkuaW5saW5lSXRlbXMoKTsKICAgICBhdXRvIG1heGltdW1MaW5lV2lkdGggPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKLSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRv
IGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9
OworICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAq
dGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgYXV0byBsaW5l
QnVpbGRlciA9IExpbmVCdWlsZGVyIHsgKnRoaXMsIGZsb2F0aW5nQ29udGV4dCwgcm9vdCgpLCBp
bmxpbmVJdGVtcyB9OwogICAgIGF1dG8gbGF5b3V0UmFuZ2UgPSBMaW5lQnVpbGRlcjo6SW5saW5l
SXRlbVJhbmdlIHsgMCAsIGlubGluZUl0ZW1zLnNpemUoKSB9OwogICAgIHdoaWxlICghbGF5b3V0
UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxh
YmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4K
LSAgICAgICAgbGluZS5vcGVuKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQobGluZSwgbGF5b3V0UmFuZ2Us
IHsgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBGaW5kIG91dCBpZiBtaW4vbWF4IG5lZWRzIHRvIHNl
dCB0aGUgaXNMYXN0TGluZSBiaXQuCi0gICAgICAgIGxpbmUuY2xvc2UoZmFsc2UpOwotICAgICAg
ICBsYXlvdXRSYW5nZS5zdGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7Cisg
ICAgICAgIGF1dG8gaW50cmluc2ljQ29udGVudCA9IGxpbmVCdWlsZGVyLmNvbXB1dGVkSW50cmlu
c2ljV2lkdGgobGF5b3V0UmFuZ2UsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgbGF5b3V0UmFu
Z2Uuc3RhcnQgPSBpbnRyaW5zaWNDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7CiAgICAgICAg
IC8vIEZJWE1FOiBVc2UgbGluZSBsb2dpY2FsIGxlZnQgYW5kIHJpZ2h0IHRvIHRha2UgZmxvYXRz
IGludG8gYWNjb3VudC4KLSAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1MaW5lV2lkdGgsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgbWF4aW11
bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGludHJpbnNpY0NvbnRlbnQu
bG9naWNhbFdpZHRoKTsKICAgICB9CiAgICAgcmV0dXJuIG1heGltdW1MaW5lV2lkdGg7CiB9CkBA
IC00MTUsNzggKzM5MCwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0
SW5saW5lQ29udGVudElmTmVlZGVkKCkKICAgICB9CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRz
Rm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCkKLXsKLSAgICBhdXRvIGxpbmVMb2dp
Y2FsTGVmdCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICBhdXRvIGxp
bmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNhbExlZnQgKyBob3Jpem9udGFsQ29uc3RyYWludHMu
bG9naWNhbFdpZHRoOwotICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmFsc2U7
Ci0KLSAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwg
KnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9OwotICAgIC8vIENoZWNr
IGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3
aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgotICAgIGlmICghZmxvYXRpbmdDb250ZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxl
IGxpbmUgaGVpZ2h0LCB3aGVyZSB0aGUgaW50cnVzaXZlIGZsb2F0cyBzaG91bGQgYmUgcHJvYmVk
IGFzIHRoZSBsaW5lIGhlaWdodCBncm93cy4KLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRz
ID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRv
cCksIHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCArIHF1aXJrcygpLmluaXRpYWxMaW5lSGVp
Z2h0KCkpKTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkg
cHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRz
LmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKLSAg
ICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKLQotICAgICAgICBpZiAoZmxv
YXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVM
b2dpY2FsUmlnaHQpCi0gICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0geyB9Owot
Ci0gICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0Q29uc3RyYWludHMubGVm
dCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OwotCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFp
bnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJU
KGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54KTsK
LSAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54
OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
OwotICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCkgewotICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA+PSBsaW5lTG9naWNhbExlZnQpOwot
ICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54Owot
ICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAgICAg
IEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7Ci0g
ICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gY29tcHV0ZWRUZXh0SW5kZW50ID0gWyZdIHsK
LSAgICAgICAgLy8gdGV4dC1pbmRlbnQgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlv
biBhcHBsaWVkIHRvIGxpbmVzIG9mIGlubGluZSBjb250ZW50IGluIGEgYmxvY2suCi0gICAgICAg
IC8vIFRoZSBpbmRlbnQgaXMgdHJlYXRlZCBhcyBhIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBzdGFy
dCBlZGdlIG9mIHRoZSBsaW5lIGJveC4KLSAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVj
aWZpZWQsIG9ubHkgbGluZXMgdGhhdCBhcmUgdGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lIG9mIGFu
IGVsZW1lbnQgYXJlIGFmZmVjdGVkLgotICAgICAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0
IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIGJveCBpcyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlz
IHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgZWFjaC1saW5lLgotICAgICAgICAvLyBbSW50ZWdyYXRpb25dIHJv
b3QoKS0+cGFyZW50KCkgd291bGQgbm9ybWFsbHkgcHJvZHVjZSBhIHZhbGlkIGxheW91dCBib3gu
Ci0gICAgICAgIGF1dG8mIHJvb3QgPSB0aGlzLT5yb290KCk7Ci0gICAgICAgIGF1dG8gaXNGb3Jt
YXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSAhcm9vdC5pc0Fub255bW91
cygpOwotICAgICAgICBpZiAocm9vdC5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAvLyBV
bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgZWFjaC1saW5lIGFuZC9vciBoYW5naW5n
IGtleXdvcmRzLCBvbmx5IGxpbmVzIHRoYXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZQot
ICAgICAgICAgICAgLy8gb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCi0gICAgICAgICAgICAv
LyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIGJveCBp
cyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50IGVs
ZW1lbnQuCi0gICAgICAgICAgICBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4
dEluZGVudCA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKQotICAgICAgICAgICAgICAgID8g
bGF5b3V0U3RhdGUoKS5pc0ludGVncmF0ZWRSb290Qm94Rmlyc3RDaGlsZCgpCi0gICAgICAgICAg
ICAgICAgOiByb290LnBhcmVudCgpLmZpcnN0SW5GbG93Q2hpbGQoKSA9PSAmcm9vdDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9UZXh0
SW5kZW50KQotICAgICAgICAgICAgcmV0dXJuIElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICBhdXRvIGludmVydExpbmVSYW5nZSA9IGZhbHNlOwotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0g
ICAgICAgIGludmVydExpbmVSYW5nZSA9IHJvb3Quc3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpID09
IFRleHRJbmRlbnRUeXBlOjpIYW5naW5nOwotI2VuZGlmCi0gICAgICAgIGF1dG8gaXNGaXJzdExp
bmUgPSBmb3JtYXR0aW5nU3RhdGUoKS5lbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpLmxpbmVC
b3hlcy5pc0VtcHR5KCk7Ci0gICAgICAgIC8vIHRleHQtaW5kZW50OiBoYW5naW5nIGludmVydHMg
d2hpY2ggbGluZXMgYXJlIGFmZmVjdGVkLgotICAgICAgICAvLyBpbnZlcnRlZCBsaW5lIHJhbmdl
IC0+IGFsbCB0aGUgbGluZXMgZXhjZXB0IHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIC8vICFpbnZl
cnRlZCBsaW5lIHJhbmdlIC0+IGZpcnN0IGxpbmUgZ2V0cyB0aGUgaW5kZW50LgotICAgICAgICBh
dXRvIHNob3VsZEluZGVudCA9IGludmVydExpbmVSYW5nZSAhPSBpc0ZpcnN0TGluZTsKLSAgICAg
ICAgaWYgKCFzaG91bGRJbmRlbnQpCi0gICAgICAgICAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5p
dCB7IH07Ci0gICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290
LCBob3Jpem9udGFsQ29uc3RyYWludHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwot
ICAgIH07Ci0gICAgbGluZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwotICAg
IHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxU
b3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgbGluZUlzQ29uc3RyYWlu
ZWRCeUZsb2F0IH07Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3Bs
YXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVu
dCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNv
bnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgp
OworICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OwogICAgIGlmICghbGlu
ZUNvbnRlbnQuZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4
dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZS5mbG9h
dGluZ1N0YXRlKCkgfTsKICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhlaXIgZmluYWwgcG9z
aXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBkYzRmM2M1MTkwMmY0
ODBkNjExYWI4Njc3NzQ1ZGVhMDU0MTM5NTg0Li40MGU1MzAwZDRiOTc1OGMwNjM0ZDk0NWZhODQz
ZDQ3NWNhNWQyYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTY3LDcg
KzY3LDYgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGVWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0Owog
ICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZUhv
cml6b250YWxWYWx1ZXMmKTsKLSAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gY29t
cHV0ZWRUZXh0SW5kZW50KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKQEAgLTg4LDEzICs4
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAKICAgICB2b2lkIGNvbGxlY3RJbmxp
bmVDb250ZW50SWZOZWVkZWQoKTsKLSAgICBzdHJ1Y3QgTGluZUNvbnN0cmFpbnRzIHsKLSAgICAg
ICAgSW5saW5lTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQ7Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoIHsgMCB9OwotICAgICAgICBib29sIGxpbmVJc0Nv
bnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICBMaW5lQ29uc3RyYWludHMg
Y29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIElubGluZUxh
eW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGlu
ZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBMaW5lQm94JiwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5l
KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlk
YXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+
KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZDdjMjZmZDc3ZmY0NWUw
MzAwZjFiYjI0Nzg5MjU2YzgxNjY2YzVmZS4uNzA3YjZlMDI1M2MzMzI2MjY1Mzg5Y2QyYzQ2ZWNk
MjI1MDkyOTczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTc1LDE0ICs3NSw2IEBAIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFuZE1hCiAgICAg
cmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMs
IG92ZXJyaWRlVmVydGljYWxWYWx1ZXMpOwogfQogCi1PcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVGV4dEluZGVudChj
b25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgYXV0byB0
ZXh0SW5kZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkudGV4dEluZGVudCgpOwot
ICAgIGlmICh0ZXh0SW5kZW50ID09IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgpKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBJbmxpbmVMYXlvdXRVbml0IHsgbWluaW11
bVZhbHVlRm9yTGVuZ3RoKHRleHRJbmRlbnQsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2Fs
V2lkdGgpIH07Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCBkYTcxODdlMmUyZGRh
ZmI1ZmM2OTk0NTRiYTFmZjJkNmYyYzFkZTlmLi41M2I1NTFmNDA5ZWFkYmI4NWZiNjA3MTg2ODcx
NzUyYWM0MzFmMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtNDExLDYgKzQxMSwyMSBAQCB2b2lk
IExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWln
aHQoSXNMaW5lVmlzdWFsbHlFbQogICAgIH0KIH0KIAorY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIExpbmVCb3g6OmZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK30KKworY29uc3QgQm94JiBMaW5lQm94Ojpyb290
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7Cit9CisK
K0xheW91dFN0YXRlJiBMaW5lQm94OjpsYXlvdXRTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKK30KKwogfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94
LmgKaW5kZXggMDNlMzQ0MmEwZmExODJiODMzNTdmOTVjYTRmZmZjY2EwMzJkZmM0Zi4uYWFiNGE3
MzM4MmQ1ZTBkYzM3MzZiNDMxNmFmMzAyNWUzZTZiODk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApAQCAtMTIx
LDkgKzEyMSw5IEBAIHByaXZhdGU6CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KIAotICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICBjb25zdCBCb3gmIHJv
b3QoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsgfQotICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBm
b3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OworICAgIGNvbnN0IEJveCYgcm9vdCgpIGNvbnN0Owor
ICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIERp
c3BsYXk6OklubGluZVJlY3QgbV9yZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDlj
NzJjZGE5Y2Q4OTE4MTE2ZTA3M2M1OWRlN2NjYjc3MDdjOGQxODkuLjlhNzNjZTE3OTY1OTEzNjJl
YTY1MzcwNmRlNTkxZGU1YjAwMmYzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2lu
Y2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgog
I2luY2x1ZGUgIlRleHRVdGlsLmgiCkBAIC0yODAsMzAgKzI4MSw2NSBAQCBJbmxpbmVMYXlvdXRV
bml0IExpbmVCdWlsZGVyOjppbmxpbmVJdGVtV2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgSW5saQogICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOwogfQogCi1MaW5lQnVp
bGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZv
cm1hdHRpbmdDb250ZXh0LCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCwgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQorTGluZUJ1aWxkZXI6OkxpbmVCdWls
ZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMpCiAgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250
ZXh0KQorICAgICwgbV9mbG9hdGluZ0NvbnRleHQoZmxvYXRpbmdDb250ZXh0KQogICAgICwgbV9m
b3JtYXR0aW5nQ29udGV4dFJvb3QoZm9ybWF0dGluZ0NvbnRleHRSb290KQorICAgICwgbV9saW5l
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgICwgbV9pbmxpbmVJdGVtcyhpbmxpbmVJdGVt
cykKIHsKIH0KIAotTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJ
bmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpCitMaW5l
QnVpbGRlcjo6TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQoY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4g
cGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBjb25zdCBGb3JtYXR0aW5nQ29udGV4dDo6Q29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBpbml0aWFsQ29uc3RyYWludHMsIGJvb2wgaXNGaXJz
dExpbmUpCiB7Ci0gICAgQVNTRVJUKG1fZmxvYXRzLmlzRW1wdHkoKSk7CisgICAgYXV0byB1c2Vk
Q29uc3RyYWludHMgPSBjb25zdHJhaW50c0ZvckxpbmUoaW5pdGlhbENvbnN0cmFpbnRzLCBpc0Zp
cnN0TGluZSk7CisgICAgaW5pdGlhbGl6ZSh1c2VkQ29uc3RyYWludHMpOworCisgICAgYXV0byBj
b21taXR0ZWRDb250ZW50ID0gcGxhY2VJbmxpbmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CisgICAgYXV0byBjb21taXR0ZWRSYW5nZSA9IGNs
b3NlKG5lZWRzTGF5b3V0UmFuZ2UsIGNvbW1pdHRlZENvbnRlbnQpOworCisgICAgYXV0byBsaW5l
TG9naWNhbFRvcExlZnQgPSBJbmxpbmVMYXlvdXRQb2ludCB7IHVzZWRDb25zdHJhaW50cy5sb2dp
Y2FsTGVmdCwgaW5pdGlhbENvbnN0cmFpbnRzLnZlcnRpY2FsLmxvZ2ljYWxUb3AgfTsKKyAgICBh
dXRvIGlzTGFzdExpbmUgPSBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoY29tbWl0dGVkUmFu
Z2UsIG5lZWRzTGF5b3V0UmFuZ2UuZW5kLCBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0gbV9s
aW5lLmlzVmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVz
IDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm87CisgICAgcmV0dXJuIExpbmVDb250
ZW50IHsgY29tbWl0dGVkQ29udGVudC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LCBjb21taXR0ZWRS
YW5nZSwgbV9mbG9hdHMsIG1fbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpCisgICAgICAgICwgTGlu
ZUJveCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxpbmVMb2dpY2FsVG9wTGVmdCwgbV9saW5lLmxp
bmVMb2dpY2FsV2lkdGgoKSwgbV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1
bnMoKSwgbGluZUlzVmlzdWFsbHlFbXB0eQorICAgICAgICAsIGlzTGFzdExpbmUgPyBMaW5lQm94
OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6Tm8gfQorICAgICAgICAsIG1fbGluZS5ydW5zKCkgfTsKK30KKwor
TGluZUJ1aWxkZXI6OkludHJpbnNpY0NvbnRlbnQgTGluZUJ1aWxkZXI6OmNvbXB1dGVkSW50cmlu
c2ljV2lkdGgoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIGluaXRpYWxpemUoeyB7IH0sIGF2YWls
YWJsZVdpZHRoLCBmYWxzZSB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZENvbnRlbnQgPSBwbGFjZUlu
bGluZUNvbnRlbnQobmVlZHNMYXlvdXRSYW5nZSwgeyB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZFJh
bmdlID0gY2xvc2UobmVlZHNMYXlvdXRSYW5nZSwgY29tbWl0dGVkQ29udGVudCk7CisgICAgcmV0
dXJuIHsgY29tbWl0dGVkUmFuZ2UsIG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCkgfTsKK30K
Kwordm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBVc2VkQ29uc3RyYWludHMmIGxp
bmVDb25zdHJhaW50cykKK3sKKyAgICBtX2Zsb2F0cy5jbGVhcigpOwogICAgIG1fcGFydGlhbExl
YWRpbmdUZXh0SXRlbSA9IHsgfTsKICAgICBtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0geyB9
OwotICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07Ci0gICAgYXV0byBjdXJy
ZW50SXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQ7Ci0gICAgdW5zaWduZWQgY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50ID0gMDsKKworICAgIG1fbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5h
dmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgIG1fbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChs
aW5lQ29uc3RyYWludHMuaXNDb25zdHJhaW5lZEJ5RmxvYXQpOworfQorCitMaW5lQnVpbGRlcjo6
Q29tbWl0dGVkQ29udGVudCBMaW5lQnVpbGRlcjo6cGxhY2VJbmxpbmVDb250ZW50KGNvbnN0IElu
bGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRp
YWxMZWFkaW5nQ29udGVudExlbmd0aCkKK3sKICAgICBhdXRvIGxpbmVDYW5kaWRhdGUgPSBMaW5l
Q2FuZGlkYXRlIHsgfTsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdl
LmVuZCkgeworICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07CisKKyAgICBh
dXRvIGN1cnJlbnRJdGVtSW5kZXggPSBuZWVkc0xheW91dFJhbmdlLnN0YXJ0OworICAgIHNpemVf
dCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSAwOworICAgIHdoaWxlIChjdXJyZW50SXRlbUlu
ZGV4IDwgbmVlZHNMYXlvdXRSYW5nZS5lbmQpIHsKICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUg
c2V0IG9mIHJ1bnMgdGhhdCB3ZSBjYW4gY29tbWl0IHRvIHRoZSBsaW5lIGFzIG9uZSBlbnRpdHkg
ZS5nLiA8c3Bhbj50ZXh0X2FuZF9zcGFuX3N0YXJ0X3NwYW5fZW5kPC9zcGFuPi4KICAgICAgICAg
Ly8gMi4gQXBwbHkgZmxvYXRzIGFuZCBzaHJpbmsgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIHNw
YWNlIGUuZy4gPHNwYW4+aW50cnVfPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PnNpdmVf
ZmxvYXQ8L3NwYW4+LgogICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgY29udGVudCBmaXRzIHRo
ZSBsaW5lIGFuZCBjb21taXQgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkgKGZ1bGwsIHBhcnRpYWwg
b3Igbm90IGNvbW1pdCBhdCBhbGwpLgogICAgICAgICAvLyA0LiBSZXR1cm4gaWYgd2UgYXJlIGF0
IHRoZSBlbmQgb2YgdGhlIGxpbmUgZWl0aGVyIGJ5IG5vdCBiZWluZyBhYmxlIHRvIGZpdCBtb3Jl
IGNvbnRlbnQgb3IgYmVjYXVzZSBvZiBhbiBleHBsaWNpdCBsaW5lIGJyZWFrLgotICAgICAgICBu
ZXh0Q29udGVudEZvckxpbmUobGluZUNhbmRpZGF0ZSwgY3VycmVudEl0ZW1JbmRleCwgbGF5b3V0
UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGluZS5hdmFpbGFibGVXaWR0aCgp
ICsgbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0
aCgpKTsKKyAgICAgICAgbmV4dENvbnRlbnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJ
dGVtSW5kZXgsIG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwg
bV9saW5lLmF2YWlsYWJsZVdpZHRoKCkgKyBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgp
LCBtX2xpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgLy8gTm93IGNoZWNrIGlm
IHdlIGNhbiBwdXQgdGhpcyBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChsaW5lQnJlYWtlciwgbGlu
ZSwgbGF5b3V0UmFuZ2UsIGxpbmVDYW5kaWRhdGUpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGhh
bmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQobGluZUJyZWFrZXIsIG5lZWRzTGF5b3V0UmFuZ2Us
IGxpbmVDYW5kaWRhdGUpOwogICAgICAgICBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSByZXN1
bHQuY29tbWl0dGVkQ291bnQuaXNSZXZlcnQgPyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUg
OiBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWU7
CiAgICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRl
bnQ7CiAgICAgICAgIGF1dG8gaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgPSBpbmxpbmVD
b250ZW50LnJ1bnMoKS5zaXplKCkgPT0gcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlICYmICFy
ZXN1bHQucGFydGlhbENvbnRlbnQ7CkBAIC0zMTEsMzEgKzM0NywxMDQgQEAgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUs
IGNvbnN0IElubGkKIAogICAgICAgICBpZiAoaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQg
JiYgaW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAvLyBG
dWxseSBjb21taXRlZCAob3IgZW1wdHkpIGNvbnRlbnQgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFr
IG1lYW5zICJlbmQgb2YgbGluZSIuCi0gICAgICAgICAgICBsaW5lLmFwcGVuZCgqaW5saW5lQ29u
dGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOworICAgICAgICAgICAgbV9saW5lLmFwcGVu
ZCgqaW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOwogICAgICAgICAgICAg
Kytjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQ7CiAgICAgICAgICAgICBpc0VuZE9mTGluZSA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzRW5kT2ZMaW5lKSB7CiAgICAgICAgICAgICAv
LyBXZSBjYW4ndCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsaW5lLgotICAg
ICAgICAgICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCk7CisgICAgICAgICAgICByZXR1cm4geyBj
b21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCB9OwogICAgICAg
ICB9Ci0gICAgICAgIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIGNvbW1p
dHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKKyAgICAgICAgY3VycmVudEl0
ZW1JbmRleCA9IG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgKyBtX2Zsb2F0cy5zaXplKCk7CiAgICAgICAgIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0
aCA9IHsgfTsKICAgICB9CiAgICAgLy8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMu
Ci0gICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVt
Q291bnQsIHsgfSk7CisgICAgcmV0dXJuIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0g
fTsKIH0KIAotTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpjbG9zZShjb25z
dCBMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25l
ZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFs
Q29udGVudD4gcGFydGlhbENvbnRlbnQpCitMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlIExp
bmVCdWlsZGVyOjpjbG9zZShjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2Us
IGNvbnN0IENvbW1pdHRlZENvbnRlbnQmIGNvbW1pdHRlZENvbnRlbnQpCiB7Ci0gICAgQVNTRVJU
X1VOVVNFRChsaW5lLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgIW1fZmxvYXRzLmlzRW1w
dHkoKSB8fCBsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwotICAgIGF1dG8gbnVtYmVyT2ZDb21t
aXR0ZWRJdGVtcyA9IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsK
LSAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBu
dW1iZXJPZkNvbW1pdHRlZEl0ZW1zIC0gMTsKLSAgICBhdXRvIGxpbmVSYW5nZSA9IElubGluZUl0
ZW1SYW5nZSB7IGxheW91dFJhbmdlLnN0YXJ0LCB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDEg
fTsKLSAgICBBU1NFUlQobGluZVJhbmdlLmVuZCA8PSBsYXlvdXRSYW5nZS5lbmQpOworICAgIEFT
U0VSVChjb21taXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0
eSgpIHx8IG1fbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBhdXRvIG51bWJlck9mQ29t
bWl0dGVkSXRlbXMgPSBjb21taXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCArIG1fZmxvYXRz
LnNpemUoKTsKKyAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbmVlZHNMYXlvdXRS
YW5nZS5zdGFydCArIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgLSAxOworICAgIGF1dG8gbGluZVJh
bmdlID0gSW5saW5lSXRlbVJhbmdlIHsgbmVlZHNMYXlvdXRSYW5nZS5zdGFydCwgdHJhaWxpbmdJ
bmxpbmVJdGVtSW5kZXggKyAxIH07CisgICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQgPD0gbmVlZHNM
YXlvdXRSYW5nZS5lbmQpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCi0g
ICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxDb250ZW50ICYmIHBh
cnRpYWxDb250ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1Y2Nlc3NpdmVIeXBo
ZW5hdGVkTGluZUNvdW50ICsgMSA6IDA7Ci0gICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlh
bENvbnRlbnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUucnVucygpIH07Cisg
ICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IGNvbW1pdHRlZENvbnRlbnQucGFy
dGlhbFRyYWlsaW5nQ29udGVudCAmJiBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGluZ0Nv
bnRlbnQtPnRyYWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRM
aW5lQ291bnQgKyAxIDogMDsKKyAgICBtX2xpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KGxpbmVSYW5nZSwgbmVlZHNMYXlvdXRSYW5nZS5lbmQsIGNvbW1pdHRlZENvbnRlbnQu
cGFydGlhbFRyYWlsaW5nQ29udGVudC5oYXNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGxpbmVSYW5n
ZTsKK30KKworTGluZUJ1aWxkZXI6OlVzZWRDb25zdHJhaW50cyBMaW5lQnVpbGRlcjo6Y29uc3Ry
YWludHNGb3JMaW5lKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQmIGluaXRpYWxDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSkKK3sKKyAgICBh
dXRvIGxpbmVMb2dpY2FsTGVmdCA9IGluaXRpYWxDb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2lj
YWxMZWZ0OworICAgIGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBpbml0aWFsQ29uc3RyYWludHMudmVy
dGljYWwubG9naWNhbFRvcDsKKyAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNh
bExlZnQgKyBpbml0aWFsQ29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dpY2FsV2lkdGg7CisgICAg
YXV0byBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIGZv
ciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0
aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgorICAgIGlmICghbV9mbG9hdGluZ0NvbnRleHQu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUg
bGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUgZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQg
YXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgorICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMg
PSBtX2Zsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxU
b3ApLCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyAqaW5pdGlhbENvbnN0cmFpbnRzLnZl
cnRpY2FsLmxvZ2ljYWxIZWlnaHQpKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3Ry
YWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCisgICAgICAgIGlmIChm
bG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVM
b2dpY2FsTGVmdCkKKyAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKKwor
ICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0LT54ID49IGxpbmVMb2dpY2FsUmlnaHQpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0ID0geyB9OworCisgICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0
Q29uc3RyYWludHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OworCisgICAgICAgIGlm
IChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgeworICAg
ICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0LT54KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0
cmFpbnRzLnJpZ2h0LT54OworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25z
dHJhaW50cy5sZWZ0LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMubGVm
dCkgeworICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA+PSBsaW5l
TG9naWNhbExlZnQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJh
aW50cy5sZWZ0LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQp
IHsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVM
b2dpY2FsTGVmdCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJh
aW50cy5yaWdodC0+eDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gY29tcHV0ZWRUZXh0
SW5kZW50ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgIC8vIHRleHQtaW5k
ZW50IHByb3BlcnR5IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBsaW5lcyBv
ZiBpbmxpbmUgY29udGVudCBpbiBhIGJsb2NrLgorICAgICAgICAvLyBUaGUgaW5kZW50IGlzIHRy
ZWF0ZWQgYXMgYSBtYXJnaW4gYXBwbGllZCB0byB0aGUgc3RhcnQgZWRnZSBvZiB0aGUgbGluZSBi
b3guCisgICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBvbmx5IGxpbmVzIHRo
YXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZSBvZiBhbiBlbGVtZW50IGFyZSBhZmZlY3Rl
ZC4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIGFuIGFub255bW91
cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBpdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2Yg
aXRzIHBhcmVudCBlbGVtZW50LgorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVh
Y2gtbGluZS4KKyAgICAgICAgLy8gW0ludGVncmF0aW9uXSByb290KCktPnBhcmVudCgpIHdvdWxk
IG5vcm1hbGx5IHByb2R1Y2UgYSB2YWxpZCBsYXlvdXQgYm94LgorICAgICAgICBhdXRvJiByb290
ID0gdGhpcy0+cm9vdCgpOworICAgICAgICBhdXRvIGlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2Fu
ZGlkYXRlVG9UZXh0SW5kZW50ID0gIXJvb3QuaXNBbm9ueW1vdXMoKTsKKyAgICAgICAgaWYgKHJv
b3QuaXNBbm9ueW1vdXMoKSkgeworICAgICAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVj
aWZpZWQgYnkgdGhlIGVhY2gtbGluZSBhbmQvb3IgaGFuZ2luZyBrZXl3b3Jkcywgb25seSBsaW5l
cyB0aGF0IGFyZSB0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUKKyAgICAgICAgICAgIC8vIG9mIGFu
IGVsZW1lbnQgYXJlIGFmZmVjdGVkLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBm
aXJzdCBsaW5lIG9mIGFuIGFub255bW91cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBp
dCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBlbGVtZW50LgorICAgICAgICAgICAg
aXNGb3JtYXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50
ZWdyYXRpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICA/IGxheW91dFN0YXRlKCkuaXNJbnRl
Z3JhdGVkUm9vdEJveEZpcnN0Q2hpbGQoKQorICAgICAgICAgICAgICAgIDogcm9vdC5wYXJlbnQo
KS5maXJzdEluRmxvd0NoaWxkKCkgPT0gJnJvb3Q7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFp
c0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dEluZGVudCkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIGF1dG8gaW52ZXJ0TGluZVJhbmdlID0gZmFsc2U7CisjaWYg
RU5BQkxFKENTUzNfVEVYVCkKKyAgICAgICAgaW52ZXJ0TGluZVJhbmdlID0gcm9vdC5zdHlsZSgp
LnRleHRJbmRlbnRUeXBlKCkgPT0gVGV4dEluZGVudFR5cGU6Okhhbmdpbmc7CisjZW5kaWYKKyAg
ICAgICAgLy8gdGV4dC1pbmRlbnQ6IGhhbmdpbmcgaW52ZXJ0cyB3aGljaCBsaW5lcyBhcmUgYWZm
ZWN0ZWQuCisgICAgICAgIC8vIGludmVydGVkIGxpbmUgcmFuZ2UgLT4gYWxsIHRoZSBsaW5lcyBl
eGNlcHQgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgLy8gIWludmVydGVkIGxpbmUgcmFuZ2UgLT4g
Zmlyc3QgbGluZSBnZXRzIHRoZSBpbmRlbnQuCisgICAgICAgIGF1dG8gc2hvdWxkSW5kZW50ID0g
aW52ZXJ0TGluZVJhbmdlICE9IGlzRmlyc3RMaW5lOworICAgICAgICBpZiAoIXNob3VsZEluZGVu
dCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byB0ZXh0SW5kZW50ID0g
cm9vdC5zdHlsZSgpLnRleHRJbmRlbnQoKTsKKyAgICAgICAgaWYgKHRleHRJbmRlbnQgPT0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICByZXR1cm4geyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4dEluZGVudCwgaW5pdGlh
bENvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoKSB9OworICAgIH07CisgICAgbGlu
ZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOworICAgIHJldHVybiBVc2VkQ29u
c3RyYWludHMgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNh
bExlZnQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCiB2b2lkIExpbmVCdWlsZGVy
OjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWdu
ZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRS
YW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVu
dExvZ2ljYWxSaWdodCkKQEAgLTM4NCw3ICs0OTMsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpuZXh0
Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3Vy
cgogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUs
IGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0
c09ubHkgY29tbWl0SW50cnVzaXZlT25seSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0
cyhjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9h
dHNPbmx5IGNvbW1pdEludHJ1c2l2ZU9ubHkpCiB7CiAgICAgYXV0byYgZmxvYXRDb250ZW50ID0g
bGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQ7CiAgICAgYXV0byBsZWZ0SW50cnVzaXZlRmxvYXRz
V2lkdGggPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKQEAgLTQwNSwyMSArNTE0LDIxIEBAIHZvaWQg
TGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhMaW5lJiBsaW5lLCBjb25zdCBMaW5lQ2FuZGlkYXRl
JiBsaW5lQ2FuZGlkYXRlLCBDCiAgICAgICAgICAgICAgICAgcmlnaHRJbnRydXNpdmVGbG9hdHNX
aWR0aCArPSBmbG9hdENhbmRpZGF0ZS5sb2dpY2FsV2lkdGg7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChoYXNJbnRydXNpdmVGbG9hdCk7CisgICAgbV9s
aW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KGhhc0ludHJ1c2l2ZUZsb2F0KTsKICAgICBpZiAobGVm
dEludHJ1c2l2ZUZsb2F0c1dpZHRoIHx8IHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpIHsKICAg
ICAgICAgaWYgKGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCkKLSAgICAgICAgICAgIGxpbmUubW92
ZUxvZ2ljYWxMZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CisgICAgICAgICAgICBtX2xp
bmUubW92ZUxvZ2ljYWxMZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgICAgIGlm
IChyaWdodEludHJ1c2l2ZUZsb2F0c1dpZHRoKQotICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNh
bFJpZ2h0KHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpOworICAgICAgICAgICAgbV9saW5lLm1v
dmVMb2dpY2FsUmlnaHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgfQogfQogCi1M
aW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250
ZW50KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRl
bVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkK
K0xpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNv
bnRlbnQoTGluZUJyZWFrZXImIGxpbmVCcmVha2VyLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlKQogewogICAgIGF1
dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7CiAgICAgYXV0
byYgY2FuZGlkYXRlUnVucyA9IGlubGluZUNvbnRlbnQucnVucygpOwogICAgIGlmIChjYW5kaWRh
dGVSdW5zLmlzRW1wdHkoKSkgewotICAgICAgICBjb21taXRGbG9hdHMobGluZSwgbGluZUNhbmRp
ZGF0ZSk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogICAgIH0KIApAQCAtNDMzLDE3
ICs1NDIsMTcgQEAgTGluZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRz
QW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYgbGluZUIKIAogICAgIGF1dG8mIGZsb2F0Q29u
dGVudCA9IGxpbmVDYW5kaWRhdGUuZmxvYXRDb250ZW50OwogICAgIC8vIENoZWNrIGlmIHRoaXMg
bmV3IGNvbnRlbnQgZml0cy4KLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFi
bGVXaWR0aCgpIC0gZmxvYXRDb250ZW50LmludHJ1c2l2ZVdpZHRoKCk7Ci0gICAgYXV0byBpc0xp
bmVDb25zaWRlcmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0lu
dHJ1c2l2ZUZsb2F0KCk7Ci0gICAgYXV0byBsaW5lU3RhdHVzID0gTGluZUJyZWFrZXI6OkxpbmVT
dGF0dXMgeyBhdmFpbGFibGVXaWR0aCwgbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxp
bmUuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9
OworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGZs
b2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOworICAgIGF1dG8gaXNMaW5lQ29uc2lkZXJlZEVt
cHR5ID0gbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFtX2xpbmUuaGFzSW50cnVzaXZlRmxv
YXQoKTsKKyAgICBhdXRvIGxpbmVTdGF0dXMgPSBMaW5lQnJlYWtlcjo6TGluZVN0YXR1cyB7IGF2
YWlsYWJsZVdpZHRoLCBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUuaXNU
cmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9OwogICAg
IGF1dG8gcmVzdWx0ID0gbGluZUJyZWFrZXIuc2hvdWxkV3JhcElubGluZUNvbnRlbnQoY2FuZGlk
YXRlUnVucywgaW5saW5lQ29udGVudC5sb2dpY2FsV2lkdGgoKSwgbGluZVN0YXR1cyk7CiAgICAg
aWYgKHJlc3VsdC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKICAgICAgICAgbV9sYXN0V3JhcE9w
cG9ydHVuaXR5SXRlbSA9IHJlc3VsdC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbTsKICAgICBpZiAo
cmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OktlZXApIHsKICAg
ICAgICAgLy8gVGhpcyBjb250aW51b3VzIGNvbnRlbnQgY2FuIGJlIGZ1bGx5IHBsYWNlZCBvbiB0
aGUgY3VycmVudCBsaW5lIGluY2x1ZGluZyBub24taW50cnVzaXZlIGZsb2F0cy4KICAgICAgICAg
Zm9yIChhdXRvJiBydW4gOiBjYW5kaWRhdGVSdW5zKQotICAgICAgICAgICAgbGluZS5hcHBlbmQo
cnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwotICAgICAgICBjb21taXRGbG9hdHMo
bGluZSwgbGluZUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBtX2xpbmUuYXBwZW5kKHJ1bi5pbmxp
bmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVDYW5k
aWRhdGUpOwogICAgICAgICByZXR1cm4geyByZXN1bHQuaXNFbmRPZkxpbmUsIHsgY2FuZGlkYXRl
UnVucy5zaXplKCksIGZhbHNlIH0gfTsKICAgICB9CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0g
TGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpQdXNoKSB7CkBAIC00NTUsMTQgKzU2NCwxNCBA
QCBMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVD
b250ZW50KExpbmVCcmVha2VyJiBsaW5lQgogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZM
aW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gTm90IG9u
bHkgdGhpcyBjb250ZW50IGNhbid0IGJlIHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lLCBidXQg
d2UgZXZlbiBuZWVkIHRvIHJldmVydCB0aGUgbGluZSBiYWNrIHRvIGFuIGVhcmxpZXIgcG9zaXRp
b24uCiAgICAgICAgIEFTU0VSVChtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtKTsKLSAgICAgICAg
cmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGlu
ZSwgbGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6
OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsK
ICAgICB9CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0
aW9uOjpTcGxpdCkgewogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVC
cmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5h
dGlvbiBvZiBmdWxsIGFuZCBwYXJ0aWFsIGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAg
ICAgICAgY29tbWl0RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZs
b2F0c09ubHk6Olllcyk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlLCBDb21t
aXRJbnRydXNpdmVGbG9hdHNPbmx5OjpZZXMpOwogICAgICAgICBBU1NFUlQocmVzdWx0LnBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQpOwotICAgICAgICBjb21taXRQYXJ0aWFsQ29udGVudChsaW5lLCBj
YW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBj
b21taXRQYXJ0aWFsQ29udGVudChjYW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQpOwogICAgICAgICAvLyBXaGVuIHNwbGl0dGluZyBtdWx0aXBsZSBydW5zIDxzcGFu
IHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay1hbGwiPnRleHQ8L3NwYW4+PHNwYW4+Y29udGVudDwv
c3Bhbj4sIHdlIG1pZ2h0IGVuZCB1cCBzcGxpdHRpbmcgdGhlbSBhdCBydW4gYm91bmRhcnkuCiAg
ICAgICAgIC8vIEl0IHNpbXBseSBtZWFucyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhIHBhcnRpYWwg
cnVuLiBQYXJ0aWFsIGNvbnRlbnQgeWVzLCBidXQgbm90IHBhcnRpYWwgcnVuLgogICAgICAgICBh
dXRvIHRyYWlsaW5nUnVuSW5kZXggPSByZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+dHJh
aWxpbmdSdW5JbmRleDsKQEAgLTQ4MCw3ICs1ODksNyBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExp
bmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5l
QgogICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKIH0KIAotdm9p
ZCBMaW5lQnVpbGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQoTGluZSYgbGluZSwgY29uc3QgTGlu
ZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMsIGNvbnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQmIHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpCit2b2lkIExpbmVCdWls
ZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVu
cywgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFy
dGlhbFRyYWlsaW5nQ29udGVudCkKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRl
eF07CkBAIC00OTAsMjYgKzU5OSwyNiBAQCB2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFs
Q29udGVudChMaW5lJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcgogICAgICAg
ICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1biA9IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQucGFydGlh
bFJ1bikgewogICAgICAgICAgICAgICAgIGF1dG8mIHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0gPSBk
b3duY2FzdDxJbmxpbmVUZXh0SXRlbT4ocnVuc1twYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWls
aW5nUnVuSW5kZXhdLmlubGluZUl0ZW0pOwogICAgICAgICAgICAgICAgIGF1dG8gcGFydGlhbFRy
YWlsaW5nVGV4dEl0ZW0gPSB0cmFpbGluZ0lubGluZVRleHRJdGVtLmxlZnQocGFydGlhbFJ1bi0+
bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJ
dGVtKHBhcnRpYWxUcmFpbGluZ1RleHRJdGVtLCBwYXJ0aWFsUnVuLT5sb2dpY2FsV2lkdGgsIHBh
cnRpYWxSdW4tPm5lZWRzSHlwaGVuKTsKKyAgICAgICAgICAgICAgICBtX2xpbmUuYXBwZW5kUGFy
dGlhbFRyYWlsaW5nVGV4dEl0ZW0ocGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4t
PmxvZ2ljYWxXaWR0aCwgcGFydGlhbFJ1bi0+bmVlZHNIeXBoZW4pOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBp
cyB0aGUgbGFzdCBjb250ZW50IHRvIGNvbW1pdC4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1
bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5hcHBl
bmQocnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9n
aWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxv
Z2ljYWxXaWR0aCk7CiAgICAgfQogfQogCi1zaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5l
KExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCitzaXplX3Qg
TGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UpCiB7CiAgICAgLy8gQ2xlYXIgdGhlIGxpbmUgYW5kIHN0YXJ0IGFwcGVuZGluZyB0aGUgaW5s
aW5lIGl0ZW1zIGNsb3Npbmcgd2l0aCB0aGUgbGFzdCB3cmFwIG9wcG9ydHVuaXR5IHJ1bi4KLSAg
ICBsaW5lLmNsZWFyQ29udGVudCgpOworICAgIG1fbGluZS5jbGVhckNvbnRlbnQoKTsKICAgICBh
dXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKICAgICBhdXRvIGxvZ2lj
YWxSaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgIGlmIChtX3BhcnRpYWxMZWFkaW5n
VGV4dEl0ZW0pIHsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgo
Km1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5h
cHBlbmQoKm1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAg
bV9saW5lLmFwcGVuZCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOwog
ICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoJm1fcGFy
dGlhbExlYWRpbmdUZXh0SXRlbS52YWx1ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0p
CiAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTUxOCw3ICs2MjcsNyBAQCBzaXplX3QgTGluZUJ1
aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5
b3V0UmFuZ2UpCiAgICAgZm9yICg7IGN1cnJlbnRJdGVtSW5kZXggPCBsYXlvdXRSYW5nZS5lbmQ7
ICsrY3VycmVudEl0ZW1JbmRleCkgewogICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gbV9pbmxp
bmVJdGVtc1tjdXJyZW50SXRlbUluZGV4XTsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBp
bmxpbmVJdGVtV2lkdGgoaW5saW5lSXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5h
cHBlbmQoaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChp
bmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNh
bFdpZHRoOwogICAgICAgICBpZiAoJmlubGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5
SXRlbSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uu
c3RhcnQgKyAxOwpAQCAtNTI2LDYgKzYzNSwyNyBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVp
bGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiAg
ICAgcmV0dXJuIGxheW91dFJhbmdlLnNpemUoKTsKIH0KIAorYm9vbCBMaW5lQnVpbGRlcjo6aXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGluZVJhbmdl
LCBzaXplX3QgbGFzdElubGluZUl0ZW1JbmRleCwgYm9vbCBoYXNQYXJ0aWFsVHJhaWxpbmdDb250
ZW50KSBjb25zdAoreworICAgIGlmIChoYXNQYXJ0aWFsVHJhaWxpbmdDb250ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxpbmVSYW5nZS5lbmQgPT0gbGFzdElubGluZUl0ZW1J
bmRleCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlm
IHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgorICAgIGZvciAoYXV0
byBpID0gbGFzdElubGluZUl0ZW1JbmRleDsgaS0tOykgeworICAgICAgICBpZiAoIW1faW5saW5l
SXRlbXNbaV0uaXNGbG9hdCgpKQorICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZVJhbmdlLmVu
ZCAtIDE7CisgICAgfQorICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZs
b2F0IGl0ZW0uCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitjb25zdCBMYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOworfQorCiB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDg4ODA3OTIxY2IxYTVhMjc2ZmMzYzY4MTc1
Y2EwZTIzZTM4NmE4ZWIuLmU0ODBkZjA5MTI1Y2ExN2Q2NGM2N2U5YTI4MjZiZjZkYWRiMDFhZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMjgsMTYgKzI4LDE4IEBACiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5j
bHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBGbG9hdGlu
Z0NvbnRleHQ7CiBzdHJ1Y3QgTGluZUNhbmRpZGF0ZTsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewog
cHVibGljOgotICAgIExpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jiwg
Y29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0
ZW1zJik7CisgICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBGbG9hdGluZ0NvbnRleHQmLCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250
ZXh0Um9vdCwgY29uc3QgSW5saW5lSXRlbXMmKTsKIAogICAgIHN0cnVjdCBJbmxpbmVJdGVtUmFu
Z2UgewogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7
IH0KQEAgLTU3LDEzICs1OSwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb25zdCBJbmxpbmVJ
dGVtKiBpdGVtIHsgbnVsbHB0ciB9OwogICAgICAgICB9OwogICAgICAgICB1c2luZyBGbG9hdExp
c3QgPSBWZWN0b3I8RmxvYXQ+OwotICAgICAgICBGbG9hdExpc3QgZmxvYXRzOworICAgICAgICBj
b25zdCBGbG9hdExpc3QmIGZsb2F0czsKKyAgICAgICAgYm9vbCBoYXNJbnRydXNpdmVGbG9hdCB7
IGZhbHNlIH07CisgICAgICAgIGNvbnN0IExpbmVCb3ggbGluZUJveDsKICAgICAgICAgY29uc3Qg
TGluZTo6UnVuTGlzdCYgcnVuczsKICAgICB9OwotICAgIExpbmVDb250ZW50IGxheW91dElubGlu
ZUNvbnRlbnQoTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2lnbmVk
PiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAgIExpbmVDb250ZW50IGxheW91dElu
bGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhbmdlJiwgT3B0aW9uYWw8dW5zaWduZWQ+IHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0
cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExpbmVDb25zdHJhaW50cywgYm9vbCBpc0Zp
cnN0TGluZSk7CisKKyAgICBzdHJ1Y3QgSW50cmluc2ljQ29udGVudCB7CisgICAgICAgIElubGlu
ZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoIHsgMCB9OworICAgIH07CisgICAgSW50cmluc2ljQ29udGVudCBjb21wdXRlZElu
dHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgbmV4dENvbnRlbnRGb3JMaW5lKExp
bmVDYW5kaWRhdGUmLCB1bnNpZ25lZCBpbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0xlbmd0aCwgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVu
dExvZ2ljYWxSaWdodCk7CisgICAgdm9pZCBuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0
ZSYsIHVuc2lnbmVkIGlubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVk
c0xheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcmZsb3dMZW5ndGgsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlTGluZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRMb2dp
Y2FsUmlnaHQpOwogICAgIHN0cnVjdCBSZXN1bHQgewogICAgICAgICBMaW5lQnJlYWtlcjo6SXNF
bmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Ok5vIH07CiAg
ICAgICAgIHN0cnVjdCBDb21taXR0ZWRDb250ZW50Q291bnQgewpAQCAtNzEsMjIgKzgxLDM4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBib29sIGlzUmV2ZXJ0IHsgZmFsc2UgfTsKICAgICAgICAg
fTsKICAgICAgICAgQ29tbWl0dGVkQ29udGVudENvdW50IGNvbW1pdHRlZENvdW50IHsgfTsKLSAg
ICAgICAgT3B0aW9uYWwgPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gcGFydGlhbENvbnRl
bnQgeyB9OworICAgICAgICBPcHRpb25hbCA8TGluZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50PiBw
YXJ0aWFsQ29udGVudDsKICAgICB9OwogICAgIGVudW0gY2xhc3MgQ29tbWl0SW50cnVzaXZlRmxv
YXRzT25seSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGNvbW1pdEZsb2F0cyhMaW5lJiwgY29uc3Qg
TGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNp
dmVGbG9hdHNPbmx5OjpObyk7Ci0gICAgUmVzdWx0IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRl
bnQoTGluZUJyZWFrZXImLCBMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5n
ZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOwotICAgIHNpemVfdCByZWJ1aWxkTGluZShMaW5lJiwg
Y29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSk7Ci0gICAgdm9pZCBjb21taXRQYXJ0
aWFsQ29udGVudChMaW5lJiwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmLCBjb25zdCBMaW5l
QnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7Ci0gICAgTGluZUNvbnRl
bnQgY2xvc2UoY29uc3QgTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2Us
IHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6
OlBhcnRpYWxDb250ZW50Pik7CisgICAgc3RydWN0IFVzZWRDb25zdHJhaW50cyB7CisgICAgICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQgeyAwIH07CisgICAgICAgIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoIHsgMCB9OworICAgICAgICBib29sIGlzQ29uc3Ry
YWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKKyAgICB9OworICAgIFVzZWRDb25zdHJhaW50cyBjb25z
dHJhaW50c0ZvckxpbmUoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5G
bG93Q29udGVudCYgaW5pdGlhbExpbmVDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSk7Cisg
ICAgdm9pZCBjb21taXRGbG9hdHMoY29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2
ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpObyk7CisgICAgUmVzdWx0
IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImLCBjb25zdCBJbmxpbmVJ
dGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmKTsKKyAgICBz
aXplX3QgcmVidWlsZExpbmUoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdl
KTsKKyAgICB2b2lkIGNvbW1pdFBhcnRpYWxDb250ZW50KGNvbnN0IExpbmVCcmVha2VyOjpSdW5M
aXN0JiwgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYp
OworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVc2VkQ29uc3RyYWludHMmKTsKKyAgICBzdHJ1
Y3QgQ29tbWl0dGVkQ29udGVudCB7CisgICAgICAgIHNpemVfdCBpbmxpbmVJdGVtQ291bnQgeyAw
IH07CisgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQ7CisgICAgfTsKKyAgICBDb21taXR0ZWRDb250ZW50IHBsYWNlSW5s
aW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFy
dGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICBJbmxpbmVJdGVtUmFuZ2UgY2xvc2UoY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBjb25zdCBDb21taXR0ZWRDb250
ZW50Jik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25zdCBJbmxp
bmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAg
IGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYg
bGluZVJhbmdlLCBzaXplX3QgbGFzdElubGluZUl0ZW1JbmRleCwgYm9vbCBoYXNQYXJ0aWFsVHJh
aWxpbmdDb250ZW50KSBjb25zdDsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ7IH0KICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsgfQorICAgIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSgpIGNvbnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29uc3QgRmxvYXRpbmdDb250ZXh0JiBtX2Zsb2F0
aW5nQ29udGV4dDsKICAgICBjb25zdCBDb250YWluZXJCb3gmIG1fZm9ybWF0dGluZ0NvbnRleHRS
b290OworICAgIExpbmUgbV9saW5lOwogICAgIGNvbnN0IElubGluZUl0ZW1zJiBtX2lubGluZUl0
ZW1zOwogICAgIExpbmVDb250ZW50OjpGbG9hdExpc3QgbV9mbG9hdHM7CiAgICAgT3B0aW9uYWw8
SW5saW5lVGV4dEl0ZW0+IG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408085</attachid>
            <date>2020-09-05 07:44:31 -0700</date>
            <delta_ts>2020-09-06 08:59:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216200-20200905074431.patch</filename>
            <type>text/plain</type>
            <size>45306</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhMDY2YzQ3NzcyYWUz
YjI1OTNlNGIwMmY2ZmYyNzk4MzQzMzcxNi4uMzQ5M2ZhOTlhM2EyNzZhZGE5Nzc4NzI1MGRmMmU1
ZDQxNzRhZjljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIwLTA5LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmUgaGFuZGluZyB0byBMaW5lQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgMS4gTGluZUJ1aWxkZXIgb3ducyBMaW5lIG5vdy4KKyAgICAgICAg
Mi4gTGluZUJ1aWxkZXIgY2FuIGJ1aWxkIGxpbmUgZm9yIGJvdGggbGF5b3V0IGFuZCBpbnRyaW5z
aWMgd2lkdGggY29tcHV0YXRpb24gKG5vdyB0aGVzZSBhcmUgdHdvIGRpc3RpbmN0IGNvZGUgcGF0
aHMpLgorICAgICAgICAzLiBMaW5lQnVpbGRlciBhbHNvIGNvbnN0cnVjdHMgdGhlIExpbmVCb3gg
d2hlbiBuZWVkZWQgKFRoaXMgd2FzIHByZXZpb3VzbHkgaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmxpbmVMYXlvdXQpLgorCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yTGluZSk6IERlbGV0
ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFRleHRJbmRlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJvb3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpyb290
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bGF5
b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpj
b25zdHJhaW50c0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6Y29tbWl0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVidWlsZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisKIDIwMjAtMDktMDMgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIFJlbmFtZSBM
aW5lTGF5b3V0Q29udGV4dCB0byBMaW5lQnVpbGRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCmluZGV4IDMwN2VmYjU1MzE5NTNmMmNjYjZiMzZjZmQzYjVmZDVhZjQxYzkzMzQu
LjAwYmFiMzAxOTQ3MzEwMGY5NTcwNzlmNWNmYTY1ODk2YTA0NDEzNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTE0MCw0MiArMTQwLDIyIEBAIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBM
aW5lQnVpbGRlcjo6CiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0NvbnRlbnRM
ZW5ndGg7CiAgICAgfTsKICAgICBPcHRpb25hbDxQcmV2aW91c0xpbmU+IHByZXZpb3VzTGluZTsK
LSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRvIGxpbmVCdWlsZGVyID0g
TGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OworICAgIGF1dG8gZmxv
YXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGlu
Z1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgYXV0byBpc0ZpcnN0TGluZSA9ICFmb3Jt
YXR0aW5nU3RhdGUoKS5kaXNwbGF5SW5saW5lQ29udGVudCgpIHx8IGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5pc0VtcHR5KCk7CiAKKyAgICBhdXRv
IGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgZmxvYXRpbmdDb250ZXh0LCByb290
KCksIGlubGluZUl0ZW1zIH07CiAgICAgd2hpbGUgKCFuZWVkc0xheW91dFJhbmdlLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvIGxpbmVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRm9yTGluZShj
b25zdHJhaW50cy5ob3Jpem9udGFsLCBsaW5lTG9naWNhbFRvcCk7Ci0gICAgICAgIGxpbmUub3Bl
bihsaW5lQ29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKLSAgICAgICAgbGluZS5z
ZXRIYXNJbnRydXNpdmVGbG9hdChsaW5lQ29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0KTsKICAgICAgICAgLy8gVHVybiBwcmV2aW91cyBsaW5lJ3Mgb3ZlcmZsb3cgY29udGVudCBs
ZW5ndGggaW50byB0aGUgbmV4dCBsaW5lJ3MgbGVhZGluZyBjb250ZW50IHBhcnRpYWwgbGVuZ3Ro
LgogICAgICAgICAvLyAic3BbPC1saW5lIGJyZWFrLT5dbGl0X2NvbnRlbnQiIC0+IG92ZXJmbG93
IGxlbmd0aDogMTEgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVuZ3RoOiAxMS4KICAgICAg
ICAgYXV0byBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2
aW91c0xpbmUtPm92ZXJmbG93Q29udGVudExlbmd0aCA6IFdURjo6bnVsbG9wdDsKLSAgICAgICAg
YXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQobGluZSwg
bmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAg
YXV0byBpbml0aWFsTGluZUNvbnN0cmFpbnRzID0gQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50
IHsgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyBsaW5lTG9naWNhbFRvcCwgbWFrZU9wdGlvbmFs
KHRvTGF5b3V0VW5pdChxdWlya3MoKS5pbml0aWFsTGluZUhlaWdodCgpKSkgfSB9OworICAgICAg
ICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5lQ29udGVudChuZWVk
c0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGluaXRpYWxMaW5lQ29u
c3RyYWludHMsIGlzRmlyc3RMaW5lKTsKKyAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShs
aW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7CiAgICAgICAgIGF1dG8gbGluZUNv
bnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZTsKLSAgICAgICAgYXV0byBp
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAgICAgICAgaWYgKGxpbmVD
b250ZW50LnBhcnRpYWxDb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChsaW5lQ29udGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVu
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIC8vIE9taXQgZmxv
YXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4K
LSAgICAgICAgICAgIGZvciAoYXV0byBpID0gbmVlZHNMYXlvdXRSYW5nZS5lbmQ7IGktLTspIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQgLSAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBub24t
ZmxvYXQgaXRlbS4KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KCk7Ci0gICAgICAgIGxpbmUuY2xvc2UoaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLQotICAgICAgICBhdXRvIGxpbmVJc1Zpc3VhbGx5RW1w
dHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0
eTo6WWVzIDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm87Ci0gICAgICAgIGF1dG8g
bGFzdExpbmUgPSBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPyBMaW5lQm94OjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6Tm87Ci0gICAgICAgIGF1dG8gbGluZUJveCA9IExpbmVCb3ggeyAqdGhpcywgbGlu
ZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbGlu
ZS5jb250ZW50TG9naWNhbFdpZHRoKCksIGxpbmVDb250ZW50LnJ1bnMsIGxpbmVJc1Zpc3VhbGx5
RW1wdHksIGxhc3RMaW5lfTsKLSAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lQ29u
dGVudCwgbGluZUJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7Ci0KICAgICAgICAgaWYgKCFs
aW5lQ29udGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0UmFuZ2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7Ci0gICAgICAgICAgICBsaW5l
TG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgaXNGaXJz
dExpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUNvbnRlbnQu
bGluZUJveC5sb2dpY2FsQm90dG9tKCk7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSB0cmFpbGlu
ZyBjb250ZW50IGlzIHBhcnRpYWwsIHdlIG5lZWQgdG8gcmV1c2UgdGhlIGxhc3QgSW5saW5lVGV4
dEl0ZW0uCiAgICAgICAgICAgICBhdXRvIGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0
ID0gbGluZUNvbnRlbnQucGFydGlhbENvbnRlbnQuaGFzVmFsdWUoKTsKICAgICAgICAgICAgIGlm
IChsYXN0SW5saW5lSXRlbU5lZWRzUGFydGlhbExheW91dCkgewpAQCAtMTk2LDEwICsxNzYsOSBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBp
bmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAgICAgICB9CiAgICAgICAgIC8vIEZsb2F0cyBw
cmV2ZW50ZWQgdXMgcGxhY2luZyBhbnkgY29udGVudCBvbiB0aGUgbGluZS4KICAgICAgICAgQVNT
RVJUKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGxpbmUuaGFz
SW50cnVzaXZlRmxvYXQoKSk7CisgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5oYXNJbnRydXNp
dmVGbG9hdCk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBiZWxvdyB0aGUgaW50cnVz
aXZlIGZsb2F0LgotICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4
dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9Owot
ICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWlu
dHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lQm94LmxvZ2ljYWxCb3R0b20oKSkp
OworICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3Ry
YWludHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lQ29udGVudC5saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSkpOwogICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0IHx8
IGZsb2F0Q29uc3RyYWludHMucmlnaHQpOwogICAgICAgICBzdGF0aWMgYXV0byBpbmlmaXRlUG9p
bnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwogICAgICAgICAvLyBJbiBjYXNlIG9mIGxl
ZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhlIG9uZSB0aGF0J3Mg
Y2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCkBAIC0yNzAsMTggKzI0OSwxNCBAQCBJbmxpbmVM
YXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRo
Rm9yQ29uc3RyYWludChJbgogewogICAgIGF1dG8mIGlubGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0
YXRlKCkuaW5saW5lSXRlbXMoKTsKICAgICBhdXRvIG1heGltdW1MaW5lV2lkdGggPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKLSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRv
IGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9
OworICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAq
dGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgYXV0byBsaW5l
QnVpbGRlciA9IExpbmVCdWlsZGVyIHsgKnRoaXMsIGZsb2F0aW5nQ29udGV4dCwgcm9vdCgpLCBp
bmxpbmVJdGVtcyB9OwogICAgIGF1dG8gbGF5b3V0UmFuZ2UgPSBMaW5lQnVpbGRlcjo6SW5saW5l
SXRlbVJhbmdlIHsgMCAsIGlubGluZUl0ZW1zLnNpemUoKSB9OwogICAgIHdoaWxlICghbGF5b3V0
UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxh
YmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4K
LSAgICAgICAgbGluZS5vcGVuKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQobGluZSwgbGF5b3V0UmFuZ2Us
IHsgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBGaW5kIG91dCBpZiBtaW4vbWF4IG5lZWRzIHRvIHNl
dCB0aGUgaXNMYXN0TGluZSBiaXQuCi0gICAgICAgIGxpbmUuY2xvc2UoZmFsc2UpOwotICAgICAg
ICBsYXlvdXRSYW5nZS5zdGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7Cisg
ICAgICAgIGF1dG8gaW50cmluc2ljQ29udGVudCA9IGxpbmVCdWlsZGVyLmNvbXB1dGVkSW50cmlu
c2ljV2lkdGgobGF5b3V0UmFuZ2UsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgbGF5b3V0UmFu
Z2Uuc3RhcnQgPSBpbnRyaW5zaWNDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7CiAgICAgICAg
IC8vIEZJWE1FOiBVc2UgbGluZSBsb2dpY2FsIGxlZnQgYW5kIHJpZ2h0IHRvIHRha2UgZmxvYXRz
IGludG8gYWNjb3VudC4KLSAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1MaW5lV2lkdGgsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgbWF4aW11
bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGludHJpbnNpY0NvbnRlbnQu
bG9naWNhbFdpZHRoKTsKICAgICB9CiAgICAgcmV0dXJuIG1heGltdW1MaW5lV2lkdGg7CiB9CkBA
IC00MTUsNzggKzM5MCwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0
SW5saW5lQ29udGVudElmTmVlZGVkKCkKICAgICB9CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRz
Rm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCkKLXsKLSAgICBhdXRvIGxpbmVMb2dp
Y2FsTGVmdCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICBhdXRvIGxp
bmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNhbExlZnQgKyBob3Jpem9udGFsQ29uc3RyYWludHMu
bG9naWNhbFdpZHRoOwotICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmFsc2U7
Ci0KLSAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwg
KnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9OwotICAgIC8vIENoZWNr
IGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3
aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgotICAgIGlmICghZmxvYXRpbmdDb250ZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxl
IGxpbmUgaGVpZ2h0LCB3aGVyZSB0aGUgaW50cnVzaXZlIGZsb2F0cyBzaG91bGQgYmUgcHJvYmVk
IGFzIHRoZSBsaW5lIGhlaWdodCBncm93cy4KLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRz
ID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRv
cCksIHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCArIHF1aXJrcygpLmluaXRpYWxMaW5lSGVp
Z2h0KCkpKTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkg
cHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRz
LmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKLSAg
ICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKLQotICAgICAgICBpZiAoZmxv
YXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVM
b2dpY2FsUmlnaHQpCi0gICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0geyB9Owot
Ci0gICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0Q29uc3RyYWludHMubGVm
dCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OwotCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFp
bnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJU
KGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54KTsK
LSAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54
OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
OwotICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCkgewotICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA+PSBsaW5lTG9naWNhbExlZnQpOwot
ICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54Owot
ICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAgICAg
IEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVmdCk7Ci0g
ICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gY29tcHV0ZWRUZXh0SW5kZW50ID0gWyZdIHsK
LSAgICAgICAgLy8gdGV4dC1pbmRlbnQgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlv
biBhcHBsaWVkIHRvIGxpbmVzIG9mIGlubGluZSBjb250ZW50IGluIGEgYmxvY2suCi0gICAgICAg
IC8vIFRoZSBpbmRlbnQgaXMgdHJlYXRlZCBhcyBhIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBzdGFy
dCBlZGdlIG9mIHRoZSBsaW5lIGJveC4KLSAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVj
aWZpZWQsIG9ubHkgbGluZXMgdGhhdCBhcmUgdGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lIG9mIGFu
IGVsZW1lbnQgYXJlIGFmZmVjdGVkLgotICAgICAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0
IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIGJveCBpcyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlz
IHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgZWFjaC1saW5lLgotICAgICAgICAvLyBbSW50ZWdyYXRpb25dIHJv
b3QoKS0+cGFyZW50KCkgd291bGQgbm9ybWFsbHkgcHJvZHVjZSBhIHZhbGlkIGxheW91dCBib3gu
Ci0gICAgICAgIGF1dG8mIHJvb3QgPSB0aGlzLT5yb290KCk7Ci0gICAgICAgIGF1dG8gaXNGb3Jt
YXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSAhcm9vdC5pc0Fub255bW91
cygpOwotICAgICAgICBpZiAocm9vdC5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAvLyBV
bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgZWFjaC1saW5lIGFuZC9vciBoYW5naW5n
IGtleXdvcmRzLCBvbmx5IGxpbmVzIHRoYXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZQot
ICAgICAgICAgICAgLy8gb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCi0gICAgICAgICAgICAv
LyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIGJveCBp
cyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50IGVs
ZW1lbnQuCi0gICAgICAgICAgICBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4
dEluZGVudCA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKQotICAgICAgICAgICAgICAgID8g
bGF5b3V0U3RhdGUoKS5pc0ludGVncmF0ZWRSb290Qm94Rmlyc3RDaGlsZCgpCi0gICAgICAgICAg
ICAgICAgOiByb290LnBhcmVudCgpLmZpcnN0SW5GbG93Q2hpbGQoKSA9PSAmcm9vdDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9UZXh0
SW5kZW50KQotICAgICAgICAgICAgcmV0dXJuIElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICBhdXRvIGludmVydExpbmVSYW5nZSA9IGZhbHNlOwotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0g
ICAgICAgIGludmVydExpbmVSYW5nZSA9IHJvb3Quc3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpID09
IFRleHRJbmRlbnRUeXBlOjpIYW5naW5nOwotI2VuZGlmCi0gICAgICAgIGF1dG8gaXNGaXJzdExp
bmUgPSBmb3JtYXR0aW5nU3RhdGUoKS5lbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpLmxpbmVC
b3hlcy5pc0VtcHR5KCk7Ci0gICAgICAgIC8vIHRleHQtaW5kZW50OiBoYW5naW5nIGludmVydHMg
d2hpY2ggbGluZXMgYXJlIGFmZmVjdGVkLgotICAgICAgICAvLyBpbnZlcnRlZCBsaW5lIHJhbmdl
IC0+IGFsbCB0aGUgbGluZXMgZXhjZXB0IHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIC8vICFpbnZl
cnRlZCBsaW5lIHJhbmdlIC0+IGZpcnN0IGxpbmUgZ2V0cyB0aGUgaW5kZW50LgotICAgICAgICBh
dXRvIHNob3VsZEluZGVudCA9IGludmVydExpbmVSYW5nZSAhPSBpc0ZpcnN0TGluZTsKLSAgICAg
ICAgaWYgKCFzaG91bGRJbmRlbnQpCi0gICAgICAgICAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5p
dCB7IH07Ci0gICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290
LCBob3Jpem9udGFsQ29uc3RyYWludHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwot
ICAgIH07Ci0gICAgbGluZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwotICAg
IHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxU
b3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgbGluZUlzQ29uc3RyYWlu
ZWRCeUZsb2F0IH07Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3Bs
YXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVu
dCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNv
bnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgp
OworICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OwogICAgIGlmICghbGlu
ZUNvbnRlbnQuZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4
dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZS5mbG9h
dGluZ1N0YXRlKCkgfTsKICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhlaXIgZmluYWwgcG9z
aXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBkYzRmM2M1MTkwMmY0
ODBkNjExYWI4Njc3NzQ1ZGVhMDU0MTM5NTg0Li40MGU1MzAwZDRiOTc1OGMwNjM0ZDk0NWZhODQz
ZDQ3NWNhNWQyYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTY3LDcg
KzY3LDYgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGVWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0Owog
ICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZUhv
cml6b250YWxWYWx1ZXMmKTsKLSAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gY29t
cHV0ZWRUZXh0SW5kZW50KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKQEAgLTg4LDEzICs4
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAKICAgICB2b2lkIGNvbGxlY3RJbmxp
bmVDb250ZW50SWZOZWVkZWQoKTsKLSAgICBzdHJ1Y3QgTGluZUNvbnN0cmFpbnRzIHsKLSAgICAg
ICAgSW5saW5lTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQ7Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoIHsgMCB9OwotICAgICAgICBib29sIGxpbmVJc0Nv
bnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICBMaW5lQ29uc3RyYWludHMg
Y29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIElubGluZUxh
eW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwotICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGlu
ZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBMaW5lQm94JiwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5l
KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlk
YXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+
KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZDdjMjZmZDc3ZmY0NWUw
MzAwZjFiYjI0Nzg5MjU2YzgxNjY2YzVmZS4uNzA3YjZlMDI1M2MzMzI2MjY1Mzg5Y2QyYzQ2ZWNk
MjI1MDkyOTczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTc1LDE0ICs3NSw2IEBAIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFuZE1hCiAgICAg
cmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMs
IG92ZXJyaWRlVmVydGljYWxWYWx1ZXMpOwogfQogCi1PcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVGV4dEluZGVudChj
b25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgYXV0byB0
ZXh0SW5kZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkudGV4dEluZGVudCgpOwot
ICAgIGlmICh0ZXh0SW5kZW50ID09IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgpKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBJbmxpbmVMYXlvdXRVbml0IHsgbWluaW11
bVZhbHVlRm9yTGVuZ3RoKHRleHRJbmRlbnQsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2Fs
V2lkdGgpIH07Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCBkYTcxODdlMmUyZGRh
ZmI1ZmM2OTk0NTRiYTFmZjJkNmYyYzFkZTlmLi41M2I1NTFmNDA5ZWFkYmI4NWZiNjA3MTg2ODcx
NzUyYWM0MzFmMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtNDExLDYgKzQxMSwyMSBAQCB2b2lk
IExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWln
aHQoSXNMaW5lVmlzdWFsbHlFbQogICAgIH0KIH0KIAorY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIExpbmVCb3g6OmZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK30KKworY29uc3QgQm94JiBMaW5lQm94Ojpyb290
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7Cit9CisK
K0xheW91dFN0YXRlJiBMaW5lQm94OjpsYXlvdXRTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKK30KKwogfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94
LmgKaW5kZXggMDNlMzQ0MmEwZmExODJiODMzNTdmOTVjYTRmZmZjY2EwMzJkZmM0Zi4uYWFiNGE3
MzM4MmQ1ZTBkYzM3MzZiNDMxNmFmMzAyNWUzZTZiODk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApAQCAtMTIx
LDkgKzEyMSw5IEBAIHByaXZhdGU6CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KIAotICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICBjb25zdCBCb3gmIHJv
b3QoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsgfQotICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsgfQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBm
b3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OworICAgIGNvbnN0IEJveCYgcm9vdCgpIGNvbnN0Owor
ICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIERp
c3BsYXk6OklubGluZVJlY3QgbV9yZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDlj
NzJjZGE5Y2Q4OTE4MTE2ZTA3M2M1OWRlN2NjYjc3MDdjOGQxODkuLjlhNzNjZTE3OTY1OTEzNjJl
YTY1MzcwNmRlNTkxZGU1YjAwMmYzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2lu
Y2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgog
I2luY2x1ZGUgIlRleHRVdGlsLmgiCkBAIC0yODAsMzAgKzI4MSw2NSBAQCBJbmxpbmVMYXlvdXRV
bml0IExpbmVCdWlsZGVyOjppbmxpbmVJdGVtV2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgSW5saQogICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOwogfQogCi1MaW5lQnVp
bGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZv
cm1hdHRpbmdDb250ZXh0LCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCwgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQorTGluZUJ1aWxkZXI6OkxpbmVCdWls
ZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMpCiAgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250
ZXh0KQorICAgICwgbV9mbG9hdGluZ0NvbnRleHQoZmxvYXRpbmdDb250ZXh0KQogICAgICwgbV9m
b3JtYXR0aW5nQ29udGV4dFJvb3QoZm9ybWF0dGluZ0NvbnRleHRSb290KQorICAgICwgbV9saW5l
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgICwgbV9pbmxpbmVJdGVtcyhpbmxpbmVJdGVt
cykKIHsKIH0KIAotTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJ
bmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpCitMaW5l
QnVpbGRlcjo6TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQoY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4g
cGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBjb25zdCBGb3JtYXR0aW5nQ29udGV4dDo6Q29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBpbml0aWFsQ29uc3RyYWludHMsIGJvb2wgaXNGaXJz
dExpbmUpCiB7Ci0gICAgQVNTRVJUKG1fZmxvYXRzLmlzRW1wdHkoKSk7CisgICAgYXV0byB1c2Vk
Q29uc3RyYWludHMgPSBjb25zdHJhaW50c0ZvckxpbmUoaW5pdGlhbENvbnN0cmFpbnRzLCBpc0Zp
cnN0TGluZSk7CisgICAgaW5pdGlhbGl6ZSh1c2VkQ29uc3RyYWludHMpOworCisgICAgYXV0byBj
b21taXR0ZWRDb250ZW50ID0gcGxhY2VJbmxpbmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CisgICAgYXV0byBjb21taXR0ZWRSYW5nZSA9IGNs
b3NlKG5lZWRzTGF5b3V0UmFuZ2UsIGNvbW1pdHRlZENvbnRlbnQpOworCisgICAgYXV0byBsaW5l
TG9naWNhbFRvcExlZnQgPSBJbmxpbmVMYXlvdXRQb2ludCB7IHVzZWRDb25zdHJhaW50cy5sb2dp
Y2FsTGVmdCwgaW5pdGlhbENvbnN0cmFpbnRzLnZlcnRpY2FsLmxvZ2ljYWxUb3AgfTsKKyAgICBh
dXRvIGlzTGFzdExpbmUgPSBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoY29tbWl0dGVkUmFu
Z2UsIG5lZWRzTGF5b3V0UmFuZ2UuZW5kLCBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0gbV9s
aW5lLmlzVmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVz
IDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm87CisgICAgcmV0dXJuIExpbmVDb250
ZW50IHsgY29tbWl0dGVkQ29udGVudC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LCBjb21taXR0ZWRS
YW5nZSwgbV9mbG9hdHMsIG1fbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpCisgICAgICAgICwgTGlu
ZUJveCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxpbmVMb2dpY2FsVG9wTGVmdCwgbV9saW5lLmxp
bmVMb2dpY2FsV2lkdGgoKSwgbV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1
bnMoKSwgbGluZUlzVmlzdWFsbHlFbXB0eQorICAgICAgICAsIGlzTGFzdExpbmUgPyBMaW5lQm94
OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6Tm8gfQorICAgICAgICAsIG1fbGluZS5ydW5zKCkgfTsKK30KKwor
TGluZUJ1aWxkZXI6OkludHJpbnNpY0NvbnRlbnQgTGluZUJ1aWxkZXI6OmNvbXB1dGVkSW50cmlu
c2ljV2lkdGgoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIGluaXRpYWxpemUoeyB7IH0sIGF2YWls
YWJsZVdpZHRoLCBmYWxzZSB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZENvbnRlbnQgPSBwbGFjZUlu
bGluZUNvbnRlbnQobmVlZHNMYXlvdXRSYW5nZSwgeyB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZFJh
bmdlID0gY2xvc2UobmVlZHNMYXlvdXRSYW5nZSwgY29tbWl0dGVkQ29udGVudCk7CisgICAgcmV0
dXJuIHsgY29tbWl0dGVkUmFuZ2UsIG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCkgfTsKK30K
Kwordm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBVc2VkQ29uc3RyYWludHMmIGxp
bmVDb25zdHJhaW50cykKK3sKKyAgICBtX2Zsb2F0cy5jbGVhcigpOwogICAgIG1fcGFydGlhbExl
YWRpbmdUZXh0SXRlbSA9IHsgfTsKICAgICBtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0geyB9
OwotICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07Ci0gICAgYXV0byBjdXJy
ZW50SXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQ7Ci0gICAgdW5zaWduZWQgY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50ID0gMDsKKworICAgIG1fbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5h
dmFpbGFibGVMb2dpY2FsV2lkdGgpOworICAgIG1fbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChs
aW5lQ29uc3RyYWludHMuaXNDb25zdHJhaW5lZEJ5RmxvYXQpOworfQorCitMaW5lQnVpbGRlcjo6
Q29tbWl0dGVkQ29udGVudCBMaW5lQnVpbGRlcjo6cGxhY2VJbmxpbmVDb250ZW50KGNvbnN0IElu
bGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRp
YWxMZWFkaW5nQ29udGVudExlbmd0aCkKK3sKICAgICBhdXRvIGxpbmVDYW5kaWRhdGUgPSBMaW5l
Q2FuZGlkYXRlIHsgfTsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdl
LmVuZCkgeworICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07CisKKyAgICBh
dXRvIGN1cnJlbnRJdGVtSW5kZXggPSBuZWVkc0xheW91dFJhbmdlLnN0YXJ0OworICAgIHNpemVf
dCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSAwOworICAgIHdoaWxlIChjdXJyZW50SXRlbUlu
ZGV4IDwgbmVlZHNMYXlvdXRSYW5nZS5lbmQpIHsKICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUg
c2V0IG9mIHJ1bnMgdGhhdCB3ZSBjYW4gY29tbWl0IHRvIHRoZSBsaW5lIGFzIG9uZSBlbnRpdHkg
ZS5nLiA8c3Bhbj50ZXh0X2FuZF9zcGFuX3N0YXJ0X3NwYW5fZW5kPC9zcGFuPi4KICAgICAgICAg
Ly8gMi4gQXBwbHkgZmxvYXRzIGFuZCBzaHJpbmsgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIHNw
YWNlIGUuZy4gPHNwYW4+aW50cnVfPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PnNpdmVf
ZmxvYXQ8L3NwYW4+LgogICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgY29udGVudCBmaXRzIHRo
ZSBsaW5lIGFuZCBjb21taXQgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkgKGZ1bGwsIHBhcnRpYWwg
b3Igbm90IGNvbW1pdCBhdCBhbGwpLgogICAgICAgICAvLyA0LiBSZXR1cm4gaWYgd2UgYXJlIGF0
IHRoZSBlbmQgb2YgdGhlIGxpbmUgZWl0aGVyIGJ5IG5vdCBiZWluZyBhYmxlIHRvIGZpdCBtb3Jl
IGNvbnRlbnQgb3IgYmVjYXVzZSBvZiBhbiBleHBsaWNpdCBsaW5lIGJyZWFrLgotICAgICAgICBu
ZXh0Q29udGVudEZvckxpbmUobGluZUNhbmRpZGF0ZSwgY3VycmVudEl0ZW1JbmRleCwgbGF5b3V0
UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGluZS5hdmFpbGFibGVXaWR0aCgp
ICsgbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0
aCgpKTsKKyAgICAgICAgbmV4dENvbnRlbnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJ
dGVtSW5kZXgsIG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwg
bV9saW5lLmF2YWlsYWJsZVdpZHRoKCkgKyBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgp
LCBtX2xpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgLy8gTm93IGNoZWNrIGlm
IHdlIGNhbiBwdXQgdGhpcyBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChsaW5lQnJlYWtlciwgbGlu
ZSwgbGF5b3V0UmFuZ2UsIGxpbmVDYW5kaWRhdGUpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGhh
bmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQobGluZUJyZWFrZXIsIG5lZWRzTGF5b3V0UmFuZ2Us
IGxpbmVDYW5kaWRhdGUpOwogICAgICAgICBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSByZXN1
bHQuY29tbWl0dGVkQ291bnQuaXNSZXZlcnQgPyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUg
OiBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWU7
CiAgICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRl
bnQ7CiAgICAgICAgIGF1dG8gaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgPSBpbmxpbmVD
b250ZW50LnJ1bnMoKS5zaXplKCkgPT0gcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlICYmICFy
ZXN1bHQucGFydGlhbENvbnRlbnQ7CkBAIC0zMTEsMzEgKzM0NywxMDQgQEAgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUs
IGNvbnN0IElubGkKIAogICAgICAgICBpZiAoaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQg
JiYgaW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAvLyBG
dWxseSBjb21taXRlZCAob3IgZW1wdHkpIGNvbnRlbnQgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFr
IG1lYW5zICJlbmQgb2YgbGluZSIuCi0gICAgICAgICAgICBsaW5lLmFwcGVuZCgqaW5saW5lQ29u
dGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOworICAgICAgICAgICAgbV9saW5lLmFwcGVu
ZCgqaW5saW5lQ29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOwogICAgICAgICAgICAg
Kytjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQ7CiAgICAgICAgICAgICBpc0VuZE9mTGluZSA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzRW5kT2ZMaW5lKSB7CiAgICAgICAgICAgICAv
LyBXZSBjYW4ndCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsaW5lLgotICAg
ICAgICAgICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCk7CisgICAgICAgICAgICByZXR1cm4geyBj
b21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCB9OwogICAgICAg
ICB9Ci0gICAgICAgIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIGNvbW1p
dHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKKyAgICAgICAgY3VycmVudEl0
ZW1JbmRleCA9IG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgKyBtX2Zsb2F0cy5zaXplKCk7CiAgICAgICAgIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0
aCA9IHsgfTsKICAgICB9CiAgICAgLy8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMu
Ci0gICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVt
Q291bnQsIHsgfSk7CisgICAgcmV0dXJuIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0g
fTsKIH0KIAotTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpjbG9zZShjb25z
dCBMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25l
ZCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFs
Q29udGVudD4gcGFydGlhbENvbnRlbnQpCitMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlIExp
bmVCdWlsZGVyOjpjbG9zZShjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2Us
IGNvbnN0IENvbW1pdHRlZENvbnRlbnQmIGNvbW1pdHRlZENvbnRlbnQpCiB7Ci0gICAgQVNTRVJU
X1VOVVNFRChsaW5lLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgIW1fZmxvYXRzLmlzRW1w
dHkoKSB8fCBsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwotICAgIGF1dG8gbnVtYmVyT2ZDb21t
aXR0ZWRJdGVtcyA9IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsK
LSAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBu
dW1iZXJPZkNvbW1pdHRlZEl0ZW1zIC0gMTsKLSAgICBhdXRvIGxpbmVSYW5nZSA9IElubGluZUl0
ZW1SYW5nZSB7IGxheW91dFJhbmdlLnN0YXJ0LCB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDEg
fTsKLSAgICBBU1NFUlQobGluZVJhbmdlLmVuZCA8PSBsYXlvdXRSYW5nZS5lbmQpOworICAgIEFT
U0VSVChjb21taXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0
eSgpIHx8IG1fbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBhdXRvIG51bWJlck9mQ29t
bWl0dGVkSXRlbXMgPSBjb21taXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCArIG1fZmxvYXRz
LnNpemUoKTsKKyAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbmVlZHNMYXlvdXRS
YW5nZS5zdGFydCArIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgLSAxOworICAgIGF1dG8gbGluZVJh
bmdlID0gSW5saW5lSXRlbVJhbmdlIHsgbmVlZHNMYXlvdXRSYW5nZS5zdGFydCwgdHJhaWxpbmdJ
bmxpbmVJdGVtSW5kZXggKyAxIH07CisgICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQgPD0gbmVlZHNM
YXlvdXRSYW5nZS5lbmQpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCi0g
ICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxDb250ZW50ICYmIHBh
cnRpYWxDb250ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1Y2Nlc3NpdmVIeXBo
ZW5hdGVkTGluZUNvdW50ICsgMSA6IDA7Ci0gICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlh
bENvbnRlbnQsIGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUucnVucygpIH07Cisg
ICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IGNvbW1pdHRlZENvbnRlbnQucGFy
dGlhbFRyYWlsaW5nQ29udGVudCAmJiBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGluZ0Nv
bnRlbnQtPnRyYWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRM
aW5lQ291bnQgKyAxIDogMDsKKyAgICBtX2xpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KGxpbmVSYW5nZSwgbmVlZHNMYXlvdXRSYW5nZS5lbmQsIGNvbW1pdHRlZENvbnRlbnQu
cGFydGlhbFRyYWlsaW5nQ29udGVudC5oYXNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGxpbmVSYW5n
ZTsKK30KKworTGluZUJ1aWxkZXI6OlVzZWRDb25zdHJhaW50cyBMaW5lQnVpbGRlcjo6Y29uc3Ry
YWludHNGb3JMaW5lKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQmIGluaXRpYWxDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSkKK3sKKyAgICBh
dXRvIGxpbmVMb2dpY2FsTGVmdCA9IGluaXRpYWxDb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2lj
YWxMZWZ0OworICAgIGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBpbml0aWFsQ29uc3RyYWludHMudmVy
dGljYWwubG9naWNhbFRvcDsKKyAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNh
bExlZnQgKyBpbml0aWFsQ29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dpY2FsV2lkdGg7CisgICAg
YXV0byBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIGZv
ciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0
aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgorICAgIGlmICghbV9mbG9hdGluZ0NvbnRleHQu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUg
bGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUgZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQg
YXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgorICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMg
PSBtX2Zsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxU
b3ApLCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyAqaW5pdGlhbENvbnN0cmFpbnRzLnZl
cnRpY2FsLmxvZ2ljYWxIZWlnaHQpKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3Ry
YWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCisgICAgICAgIGlmIChm
bG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVM
b2dpY2FsTGVmdCkKKyAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKKwor
ICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0LT54ID49IGxpbmVMb2dpY2FsUmlnaHQpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0ID0geyB9OworCisgICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0
Q29uc3RyYWludHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OworCisgICAgICAgIGlm
IChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgeworICAg
ICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0LT54KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0
cmFpbnRzLnJpZ2h0LT54OworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25z
dHJhaW50cy5sZWZ0LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMubGVm
dCkgeworICAgICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA+PSBsaW5l
TG9naWNhbExlZnQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJh
aW50cy5sZWZ0LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQp
IHsKKyAgICAgICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVM
b2dpY2FsTGVmdCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJh
aW50cy5yaWdodC0+eDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gY29tcHV0ZWRUZXh0
SW5kZW50ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgIC8vIHRleHQtaW5k
ZW50IHByb3BlcnR5IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBsaW5lcyBv
ZiBpbmxpbmUgY29udGVudCBpbiBhIGJsb2NrLgorICAgICAgICAvLyBUaGUgaW5kZW50IGlzIHRy
ZWF0ZWQgYXMgYSBtYXJnaW4gYXBwbGllZCB0byB0aGUgc3RhcnQgZWRnZSBvZiB0aGUgbGluZSBi
b3guCisgICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBvbmx5IGxpbmVzIHRo
YXQgYXJlIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZSBvZiBhbiBlbGVtZW50IGFyZSBhZmZlY3Rl
ZC4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIGFuIGFub255bW91
cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBpdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2Yg
aXRzIHBhcmVudCBlbGVtZW50LgorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVh
Y2gtbGluZS4KKyAgICAgICAgLy8gW0ludGVncmF0aW9uXSByb290KCktPnBhcmVudCgpIHdvdWxk
IG5vcm1hbGx5IHByb2R1Y2UgYSB2YWxpZCBsYXlvdXQgYm94LgorICAgICAgICBhdXRvJiByb290
ID0gdGhpcy0+cm9vdCgpOworICAgICAgICBhdXRvIGlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2Fu
ZGlkYXRlVG9UZXh0SW5kZW50ID0gIXJvb3QuaXNBbm9ueW1vdXMoKTsKKyAgICAgICAgaWYgKHJv
b3QuaXNBbm9ueW1vdXMoKSkgeworICAgICAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVj
aWZpZWQgYnkgdGhlIGVhY2gtbGluZSBhbmQvb3IgaGFuZ2luZyBrZXl3b3Jkcywgb25seSBsaW5l
cyB0aGF0IGFyZSB0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUKKyAgICAgICAgICAgIC8vIG9mIGFu
IGVsZW1lbnQgYXJlIGFmZmVjdGVkLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBm
aXJzdCBsaW5lIG9mIGFuIGFub255bW91cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBp
dCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBlbGVtZW50LgorICAgICAgICAgICAg
aXNGb3JtYXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50
ZWdyYXRpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICA/IGxheW91dFN0YXRlKCkuaXNJbnRl
Z3JhdGVkUm9vdEJveEZpcnN0Q2hpbGQoKQorICAgICAgICAgICAgICAgIDogcm9vdC5wYXJlbnQo
KS5maXJzdEluRmxvd0NoaWxkKCkgPT0gJnJvb3Q7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFp
c0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dEluZGVudCkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIGF1dG8gaW52ZXJ0TGluZVJhbmdlID0gZmFsc2U7CisjaWYg
RU5BQkxFKENTUzNfVEVYVCkKKyAgICAgICAgaW52ZXJ0TGluZVJhbmdlID0gcm9vdC5zdHlsZSgp
LnRleHRJbmRlbnRUeXBlKCkgPT0gVGV4dEluZGVudFR5cGU6Okhhbmdpbmc7CisjZW5kaWYKKyAg
ICAgICAgLy8gdGV4dC1pbmRlbnQ6IGhhbmdpbmcgaW52ZXJ0cyB3aGljaCBsaW5lcyBhcmUgYWZm
ZWN0ZWQuCisgICAgICAgIC8vIGludmVydGVkIGxpbmUgcmFuZ2UgLT4gYWxsIHRoZSBsaW5lcyBl
eGNlcHQgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgLy8gIWludmVydGVkIGxpbmUgcmFuZ2UgLT4g
Zmlyc3QgbGluZSBnZXRzIHRoZSBpbmRlbnQuCisgICAgICAgIGF1dG8gc2hvdWxkSW5kZW50ID0g
aW52ZXJ0TGluZVJhbmdlICE9IGlzRmlyc3RMaW5lOworICAgICAgICBpZiAoIXNob3VsZEluZGVu
dCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byB0ZXh0SW5kZW50ID0g
cm9vdC5zdHlsZSgpLnRleHRJbmRlbnQoKTsKKyAgICAgICAgaWYgKHRleHRJbmRlbnQgPT0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICByZXR1cm4geyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4dEluZGVudCwgaW5pdGlh
bENvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoKSB9OworICAgIH07CisgICAgbGlu
ZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOworICAgIHJldHVybiBVc2VkQ29u
c3RyYWludHMgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNh
bExlZnQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCiB2b2lkIExpbmVCdWlsZGVy
OjpuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWdu
ZWQgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRS
YW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVu
dExvZ2ljYWxSaWdodCkKQEAgLTM4NCw3ICs0OTMsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpuZXh0
Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3Vy
cgogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUs
IGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0
c09ubHkgY29tbWl0SW50cnVzaXZlT25seSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0
cyhjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9h
dHNPbmx5IGNvbW1pdEludHJ1c2l2ZU9ubHkpCiB7CiAgICAgYXV0byYgZmxvYXRDb250ZW50ID0g
bGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQ7CiAgICAgYXV0byBsZWZ0SW50cnVzaXZlRmxvYXRz
V2lkdGggPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKQEAgLTQwNSwyMSArNTE0LDIxIEBAIHZvaWQg
TGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhMaW5lJiBsaW5lLCBjb25zdCBMaW5lQ2FuZGlkYXRl
JiBsaW5lQ2FuZGlkYXRlLCBDCiAgICAgICAgICAgICAgICAgcmlnaHRJbnRydXNpdmVGbG9hdHNX
aWR0aCArPSBmbG9hdENhbmRpZGF0ZS5sb2dpY2FsV2lkdGg7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChoYXNJbnRydXNpdmVGbG9hdCk7CisgICAgbV9s
aW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KGhhc0ludHJ1c2l2ZUZsb2F0KTsKICAgICBpZiAobGVm
dEludHJ1c2l2ZUZsb2F0c1dpZHRoIHx8IHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpIHsKICAg
ICAgICAgaWYgKGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCkKLSAgICAgICAgICAgIGxpbmUubW92
ZUxvZ2ljYWxMZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CisgICAgICAgICAgICBtX2xp
bmUubW92ZUxvZ2ljYWxMZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgICAgIGlm
IChyaWdodEludHJ1c2l2ZUZsb2F0c1dpZHRoKQotICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNh
bFJpZ2h0KHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpOworICAgICAgICAgICAgbV9saW5lLm1v
dmVMb2dpY2FsUmlnaHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgfQogfQogCi1M
aW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250
ZW50KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRl
bVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkK
K0xpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNv
bnRlbnQoTGluZUJyZWFrZXImIGxpbmVCcmVha2VyLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlKQogewogICAgIGF1
dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7CiAgICAgYXV0
byYgY2FuZGlkYXRlUnVucyA9IGlubGluZUNvbnRlbnQucnVucygpOwogICAgIGlmIChjYW5kaWRh
dGVSdW5zLmlzRW1wdHkoKSkgewotICAgICAgICBjb21taXRGbG9hdHMobGluZSwgbGluZUNhbmRp
ZGF0ZSk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0
dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogICAgIH0KIApAQCAtNDMzLDE3
ICs1NDIsMTcgQEAgTGluZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRz
QW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYgbGluZUIKIAogICAgIGF1dG8mIGZsb2F0Q29u
dGVudCA9IGxpbmVDYW5kaWRhdGUuZmxvYXRDb250ZW50OwogICAgIC8vIENoZWNrIGlmIHRoaXMg
bmV3IGNvbnRlbnQgZml0cy4KLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFi
bGVXaWR0aCgpIC0gZmxvYXRDb250ZW50LmludHJ1c2l2ZVdpZHRoKCk7Ci0gICAgYXV0byBpc0xp
bmVDb25zaWRlcmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0lu
dHJ1c2l2ZUZsb2F0KCk7Ci0gICAgYXV0byBsaW5lU3RhdHVzID0gTGluZUJyZWFrZXI6OkxpbmVT
dGF0dXMgeyBhdmFpbGFibGVXaWR0aCwgbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxp
bmUuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9
OworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGZs
b2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOworICAgIGF1dG8gaXNMaW5lQ29uc2lkZXJlZEVt
cHR5ID0gbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFtX2xpbmUuaGFzSW50cnVzaXZlRmxv
YXQoKTsKKyAgICBhdXRvIGxpbmVTdGF0dXMgPSBMaW5lQnJlYWtlcjo6TGluZVN0YXR1cyB7IGF2
YWlsYWJsZVdpZHRoLCBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUuaXNU
cmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9OwogICAg
IGF1dG8gcmVzdWx0ID0gbGluZUJyZWFrZXIuc2hvdWxkV3JhcElubGluZUNvbnRlbnQoY2FuZGlk
YXRlUnVucywgaW5saW5lQ29udGVudC5sb2dpY2FsV2lkdGgoKSwgbGluZVN0YXR1cyk7CiAgICAg
aWYgKHJlc3VsdC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKICAgICAgICAgbV9sYXN0V3JhcE9w
cG9ydHVuaXR5SXRlbSA9IHJlc3VsdC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbTsKICAgICBpZiAo
cmVzdWx0LmFjdGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OktlZXApIHsKICAg
ICAgICAgLy8gVGhpcyBjb250aW51b3VzIGNvbnRlbnQgY2FuIGJlIGZ1bGx5IHBsYWNlZCBvbiB0
aGUgY3VycmVudCBsaW5lIGluY2x1ZGluZyBub24taW50cnVzaXZlIGZsb2F0cy4KICAgICAgICAg
Zm9yIChhdXRvJiBydW4gOiBjYW5kaWRhdGVSdW5zKQotICAgICAgICAgICAgbGluZS5hcHBlbmQo
cnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwotICAgICAgICBjb21taXRGbG9hdHMo
bGluZSwgbGluZUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBtX2xpbmUuYXBwZW5kKHJ1bi5pbmxp
bmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVDYW5k
aWRhdGUpOwogICAgICAgICByZXR1cm4geyByZXN1bHQuaXNFbmRPZkxpbmUsIHsgY2FuZGlkYXRl
UnVucy5zaXplKCksIGZhbHNlIH0gfTsKICAgICB9CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0g
TGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpQdXNoKSB7CkBAIC00NTUsMTQgKzU2NCwxNCBA
QCBMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVD
b250ZW50KExpbmVCcmVha2VyJiBsaW5lQgogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZM
aW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gTm90IG9u
bHkgdGhpcyBjb250ZW50IGNhbid0IGJlIHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lLCBidXQg
d2UgZXZlbiBuZWVkIHRvIHJldmVydCB0aGUgbGluZSBiYWNrIHRvIGFuIGVhcmxpZXIgcG9zaXRp
b24uCiAgICAgICAgIEFTU0VSVChtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtKTsKLSAgICAgICAg
cmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGlu
ZSwgbGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6
OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsK
ICAgICB9CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0
aW9uOjpTcGxpdCkgewogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVC
cmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5h
dGlvbiBvZiBmdWxsIGFuZCBwYXJ0aWFsIGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAg
ICAgICAgY29tbWl0RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZs
b2F0c09ubHk6Olllcyk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlLCBDb21t
aXRJbnRydXNpdmVGbG9hdHNPbmx5OjpZZXMpOwogICAgICAgICBBU1NFUlQocmVzdWx0LnBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQpOwotICAgICAgICBjb21taXRQYXJ0aWFsQ29udGVudChsaW5lLCBj
YW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBj
b21taXRQYXJ0aWFsQ29udGVudChjYW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQpOwogICAgICAgICAvLyBXaGVuIHNwbGl0dGluZyBtdWx0aXBsZSBydW5zIDxzcGFu
IHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay1hbGwiPnRleHQ8L3NwYW4+PHNwYW4+Y29udGVudDwv
c3Bhbj4sIHdlIG1pZ2h0IGVuZCB1cCBzcGxpdHRpbmcgdGhlbSBhdCBydW4gYm91bmRhcnkuCiAg
ICAgICAgIC8vIEl0IHNpbXBseSBtZWFucyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhIHBhcnRpYWwg
cnVuLiBQYXJ0aWFsIGNvbnRlbnQgeWVzLCBidXQgbm90IHBhcnRpYWwgcnVuLgogICAgICAgICBh
dXRvIHRyYWlsaW5nUnVuSW5kZXggPSByZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+dHJh
aWxpbmdSdW5JbmRleDsKQEAgLTQ4MCw3ICs1ODksNyBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExp
bmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5l
QgogICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKIH0KIAotdm9p
ZCBMaW5lQnVpbGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQoTGluZSYgbGluZSwgY29uc3QgTGlu
ZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMsIGNvbnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQmIHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpCit2b2lkIExpbmVCdWls
ZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVu
cywgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFy
dGlhbFRyYWlsaW5nQ29udGVudCkKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRl
eF07CkBAIC00OTAsMjYgKzU5OSwyNiBAQCB2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFs
Q29udGVudChMaW5lJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcgogICAgICAg
ICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1biA9IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQucGFydGlh
bFJ1bikgewogICAgICAgICAgICAgICAgIGF1dG8mIHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0gPSBk
b3duY2FzdDxJbmxpbmVUZXh0SXRlbT4ocnVuc1twYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWls
aW5nUnVuSW5kZXhdLmlubGluZUl0ZW0pOwogICAgICAgICAgICAgICAgIGF1dG8gcGFydGlhbFRy
YWlsaW5nVGV4dEl0ZW0gPSB0cmFpbGluZ0lubGluZVRleHRJdGVtLmxlZnQocGFydGlhbFJ1bi0+
bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJ
dGVtKHBhcnRpYWxUcmFpbGluZ1RleHRJdGVtLCBwYXJ0aWFsUnVuLT5sb2dpY2FsV2lkdGgsIHBh
cnRpYWxSdW4tPm5lZWRzSHlwaGVuKTsKKyAgICAgICAgICAgICAgICBtX2xpbmUuYXBwZW5kUGFy
dGlhbFRyYWlsaW5nVGV4dEl0ZW0ocGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4t
PmxvZ2ljYWxXaWR0aCwgcGFydGlhbFJ1bi0+bmVlZHNIeXBoZW4pOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBp
cyB0aGUgbGFzdCBjb250ZW50IHRvIGNvbW1pdC4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1
bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5hcHBl
bmQocnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9n
aWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxv
Z2ljYWxXaWR0aCk7CiAgICAgfQogfQogCi1zaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5l
KExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCitzaXplX3Qg
TGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UpCiB7CiAgICAgLy8gQ2xlYXIgdGhlIGxpbmUgYW5kIHN0YXJ0IGFwcGVuZGluZyB0aGUgaW5s
aW5lIGl0ZW1zIGNsb3Npbmcgd2l0aCB0aGUgbGFzdCB3cmFwIG9wcG9ydHVuaXR5IHJ1bi4KLSAg
ICBsaW5lLmNsZWFyQ29udGVudCgpOworICAgIG1fbGluZS5jbGVhckNvbnRlbnQoKTsKICAgICBh
dXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKICAgICBhdXRvIGxvZ2lj
YWxSaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgIGlmIChtX3BhcnRpYWxMZWFkaW5n
VGV4dEl0ZW0pIHsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgo
Km1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5h
cHBlbmQoKm1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAg
bV9saW5lLmFwcGVuZCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOwog
ICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoJm1fcGFy
dGlhbExlYWRpbmdUZXh0SXRlbS52YWx1ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0p
CiAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTUxOCw3ICs2MjcsNyBAQCBzaXplX3QgTGluZUJ1
aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5
b3V0UmFuZ2UpCiAgICAgZm9yICg7IGN1cnJlbnRJdGVtSW5kZXggPCBsYXlvdXRSYW5nZS5lbmQ7
ICsrY3VycmVudEl0ZW1JbmRleCkgewogICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gbV9pbmxp
bmVJdGVtc1tjdXJyZW50SXRlbUluZGV4XTsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBp
bmxpbmVJdGVtV2lkdGgoaW5saW5lSXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5h
cHBlbmQoaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChp
bmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNh
bFdpZHRoOwogICAgICAgICBpZiAoJmlubGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5
SXRlbSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uu
c3RhcnQgKyAxOwpAQCAtNTI2LDYgKzYzNSwyNyBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVp
bGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiAg
ICAgcmV0dXJuIGxheW91dFJhbmdlLnNpemUoKTsKIH0KIAorYm9vbCBMaW5lQnVpbGRlcjo6aXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGluZVJhbmdl
LCBzaXplX3QgbGFzdElubGluZUl0ZW1JbmRleCwgYm9vbCBoYXNQYXJ0aWFsVHJhaWxpbmdDb250
ZW50KSBjb25zdAoreworICAgIGlmIChoYXNQYXJ0aWFsVHJhaWxpbmdDb250ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxpbmVSYW5nZS5lbmQgPT0gbGFzdElubGluZUl0ZW1J
bmRleCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlm
IHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgorICAgIGZvciAoYXV0
byBpID0gbGFzdElubGluZUl0ZW1JbmRleDsgaS0tOykgeworICAgICAgICBpZiAoIW1faW5saW5l
SXRlbXNbaV0uaXNGbG9hdCgpKQorICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZVJhbmdlLmVu
ZCAtIDE7CisgICAgfQorICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZs
b2F0IGl0ZW0uCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitjb25zdCBMYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOworfQorCiB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDg4ODA3OTIxY2IxYTVhMjc2ZmMzYzY4MTc1
Y2EwZTIzZTM4NmE4ZWIuLjQyYWZhNzI4OTlmNDczMGZjYzY3MjkyNTE1NGM5NmMxMmEzMGRlM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMjgsMTYgKzI4LDE4IEBACiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5j
bHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBGbG9hdGlu
Z0NvbnRleHQ7CiBzdHJ1Y3QgTGluZUNhbmRpZGF0ZTsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewog
cHVibGljOgotICAgIExpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jiwg
Y29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0
ZW1zJik7CisgICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBGbG9hdGluZ0NvbnRleHQmLCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250
ZXh0Um9vdCwgY29uc3QgSW5saW5lSXRlbXMmKTsKIAogICAgIHN0cnVjdCBJbmxpbmVJdGVtUmFu
Z2UgewogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7
IH0KQEAgLTU3LDEzICs1OSwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb25zdCBJbmxpbmVJ
dGVtKiBpdGVtIHsgbnVsbHB0ciB9OwogICAgICAgICB9OwogICAgICAgICB1c2luZyBGbG9hdExp
c3QgPSBWZWN0b3I8RmxvYXQ+OwotICAgICAgICBGbG9hdExpc3QgZmxvYXRzOworICAgICAgICBj
b25zdCBGbG9hdExpc3QmIGZsb2F0czsKKyAgICAgICAgYm9vbCBoYXNJbnRydXNpdmVGbG9hdCB7
IGZhbHNlIH07CisgICAgICAgIGNvbnN0IExpbmVCb3ggbGluZUJveDsKICAgICAgICAgY29uc3Qg
TGluZTo6UnVuTGlzdCYgcnVuczsKICAgICB9OwotICAgIExpbmVDb250ZW50IGxheW91dElubGlu
ZUNvbnRlbnQoTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIE9wdGlvbmFsPHVuc2lnbmVk
PiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAgIExpbmVDb250ZW50IGxheW91dElu
bGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhbmdlJiwgT3B0aW9uYWw8dW5zaWduZWQ+IHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0
cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExpbmVDb25zdHJhaW50cywgYm9vbCBpc0Zp
cnN0TGluZSk7CisKKyAgICBzdHJ1Y3QgSW50cmluc2ljQ29udGVudCB7CisgICAgICAgIElubGlu
ZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoIHsgMCB9OworICAgIH07CisgICAgSW50cmluc2ljQ29udGVudCBjb21wdXRlZElu
dHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1SYW5nZSYsIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgbmV4dENvbnRlbnRGb3JMaW5lKExp
bmVDYW5kaWRhdGUmLCB1bnNpZ25lZCBpbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0xlbmd0aCwgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVu
dExvZ2ljYWxSaWdodCk7CisgICAgdm9pZCBuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0
ZSYsIHVuc2lnbmVkIGlubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVk
c0xheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcmZsb3dMZW5ndGgsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlTGluZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRMb2dp
Y2FsUmlnaHQpOwogICAgIHN0cnVjdCBSZXN1bHQgewogICAgICAgICBMaW5lQnJlYWtlcjo6SXNF
bmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6Ok5vIH07CiAg
ICAgICAgIHN0cnVjdCBDb21taXR0ZWRDb250ZW50Q291bnQgewpAQCAtNzQsMTkgKzg0LDM1IEBA
IHByaXZhdGU6CiAgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+
IHBhcnRpYWxDb250ZW50IHsgfTsKICAgICB9OwogICAgIGVudW0gY2xhc3MgQ29tbWl0SW50cnVz
aXZlRmxvYXRzT25seSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGNvbW1pdEZsb2F0cyhMaW5lJiwg
Y29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJ
bnRydXNpdmVGbG9hdHNPbmx5OjpObyk7Ci0gICAgUmVzdWx0IGhhbmRsZUZsb2F0c0FuZElubGlu
ZUNvbnRlbnQoTGluZUJyZWFrZXImLCBMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOwotICAgIHNpemVfdCByZWJ1aWxkTGluZShM
aW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSk7Ci0gICAgdm9pZCBjb21t
aXRQYXJ0aWFsQ29udGVudChMaW5lJiwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmLCBjb25z
dCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7Ci0gICAgTGlu
ZUNvbnRlbnQgY2xvc2UoY29uc3QgTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0
UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNv
bnRlbnQ6OlBhcnRpYWxDb250ZW50Pik7CisgICAgc3RydWN0IFVzZWRDb25zdHJhaW50cyB7Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQgeyAwIH07CisgICAgICAgIElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoIHsgMCB9OworICAgICAgICBib29sIGlz
Q29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKKyAgICB9OworICAgIFVzZWRDb25zdHJhaW50
cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExpbmVDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGlu
ZSk7CisgICAgdm9pZCBjb21taXRGbG9hdHMoY29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdElu
dHJ1c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpObyk7CisgICAg
UmVzdWx0IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImLCBjb25zdCBJ
bmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmKTsK
KyAgICBzaXplX3QgcmVidWlsZExpbmUoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91
dFJhbmdlKTsKKyAgICB2b2lkIGNvbW1pdFBhcnRpYWxDb250ZW50KGNvbnN0IExpbmVCcmVha2Vy
OjpSdW5MaXN0JiwgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29u
dGVudCYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVc2VkQ29uc3RyYWludHMmKTsKKyAg
ICBzdHJ1Y3QgQ29tbWl0dGVkQ29udGVudCB7CisgICAgICAgIHNpemVfdCBpbmxpbmVJdGVtQ291
bnQgeyAwIH07CisgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+
IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ7CisgICAgfTsKKyAgICBDb21taXR0ZWRDb250ZW50IHBs
YWNlSW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBPcHRpb25hbDx1bnNpZ25l
ZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICBJbmxpbmVJdGVtUmFuZ2UgY2xv
c2UoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBjb25zdCBDb21taXR0
ZWRDb250ZW50Jik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25z
dCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0
OworICAgIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbGluZVJhbmdlLCBzaXplX3QgbGFzdElubGluZUl0ZW1JbmRleCwgYm9vbCBoYXNQYXJ0
aWFsVHJhaWxpbmdDb250ZW50KSBjb25zdDsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ7IH0KICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsgfQorICAgIGNvbnN0IExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0OwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29uc3QgRmxvYXRpbmdDb250ZXh0JiBt
X2Zsb2F0aW5nQ29udGV4dDsKICAgICBjb25zdCBDb250YWluZXJCb3gmIG1fZm9ybWF0dGluZ0Nv
bnRleHRSb290OworICAgIExpbmUgbV9saW5lOwogICAgIGNvbnN0IElubGluZUl0ZW1zJiBtX2lu
bGluZUl0ZW1zOwogICAgIExpbmVDb250ZW50OjpGbG9hdExpc3QgbV9mbG9hdHM7CiAgICAgT3B0
aW9uYWw8SW5saW5lVGV4dEl0ZW0+IG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>