<?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>176832</bug_id>
          
          <creation_ts>2017-09-13 06:29:20 -0700</creation_ts>
          <short_desc>Make more of the CSS animation system internals element based</short_desc>
          <delta_ts>2022-09-07 08:28:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>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>
          
          <blocked>171926</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>thisiskatewinslet</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348264</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 06:29:20 -0700</bug_when>
    <thetext>Continue moving away from renderers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348265</commentid>
    <comment_count>1</comment_count>
      <attachid>320634</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 06:32:18 -0700</bug_when>
    <thetext>Created attachment 320634
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348266</commentid>
    <comment_count>2</comment_count>
      <attachid>320635</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 06:35:17 -0700</bug_when>
    <thetext>Created attachment 320635
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348268</commentid>
    <comment_count>3</comment_count>
      <attachid>320636</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 06:51:40 -0700</bug_when>
    <thetext>Created attachment 320636
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348288</commentid>
    <comment_count>4</comment_count>
      <attachid>320639</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 08:16:58 -0700</bug_when>
    <thetext>Created attachment 320639
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348290</commentid>
    <comment_count>5</comment_count>
      <attachid>320640</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-13 08:18:37 -0700</bug_when>
    <thetext>Created attachment 320640
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348383</commentid>
    <comment_count>6</comment_count>
      <attachid>320640</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-13 11:20:15 -0700</bug_when>
    <thetext>Comment on attachment 320640
patch

Clearing flags on attachment: 320640

Committed r221980: &lt;http://trac.webkit.org/changeset/221980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348384</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-13 11:20:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350261</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-18 23:45:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/34510866&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320634</attachid>
            <date>2017-09-13 06:32:18 -0700</date>
            <delta_ts>2017-09-13 06:35:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>animation-functions-element.patch</filename>
            <type>text/plain</type>
            <size>51952</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTk2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxNy0wOS0xMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBtb3JlIG9mIHRoZSBD
U1MgYW5pbWF0aW9uIHN5c3RlbSBpbnRlcm5hbHMgZWxlbWVudCBiYXNlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODMyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTIGFuaW1hdGlvbnMgYW5pbWF0
ZSBlbGVtZW50IHN0eWxlLiBDb250aW51ZSBtb3ZpbmcgYXdheSBmcm9tIHJlbmRlcmVycyBpbiB0
aGUgYW5pbWF0aW9uIGNvZGUuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3Bl
cnR5KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVBbmltYXRpb25UaW1lckZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVu
bmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNl
VHJhbnNpdGlvbkF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdldEFuaW1hdGVkU3R5bGVG
b3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250
cm9sbGVyOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGlj
aXRBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6d2lsbEJl
RGVzdHJveWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0gY29uc3QpOgorICAgICAg
ICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVVcGRhdGVyOjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3Jl
YXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRp
bWVPblBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpw
YXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOgorCisyMDE3LTA5LTEyICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbmltYXRpb25CYXNlIHNo
b3VsZCBwb2ludCB0byBFbGVtZW50IGluc3RlYWQgb2YgUmVuZGVyRWxlbWVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODA3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHN0ZXAgdG93
YXJkcyBtYWtpbmcgYW5pbWF0aW9uIHN5c3RlbSBvcGVyYXRlIG9uIGVsZW1lbnRzIGFuZCBzdHls
ZXMgaW5zdGVhZCByZW5kZXJlcnMuCisKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgor
CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkJhc2U6OnJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OmNvbXBvc2l0ZWRSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUpOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQmFzZTo6ZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkJhc2U6OmZyZWV6ZUF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25CYXNlOjpnZXRFbGFwc2VkVGltZSBjb25zdCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6cmVuZGVyZXIgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0
ZW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6Y29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
cGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbXBs
aWNpdEFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGlj
aXRBbmltYXRpb246OmVuZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFu
aW1hdGlvbjo6c2VuZFRyYW5zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6cmVzZXQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmlt
YXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRl
RXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZnJhbWVBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFt
ZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5p
bWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpyZXNvbHZlS2V5ZnJhbWVTdHlsZXMpOgorCiAyMDE3
LTA5LTEzICBNczJnZXIgIDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBEaXNhbGxvdyBw
YXNzaW5nIG51bGwgdmFsdWVzIHRvIHZhcmlvdXMgV2ViR0wyIG1ldGhvZHMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAko
cmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NzcsNyArMjQ3Nyw3IEBAIHN0YXRp
YyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGUKICAgICBhdXRvKiByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKIAogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXND
b21wb3NpdGVkKCkgJiYgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VwcG9ydHNBY2NlbGVyYXRl
ZEFuaW1hdGlvbk9mUHJvcGVydHkocHJvcGVydHlJRCkpIHsKLSAgICAgICAgb3duZWRTdHlsZSA9
IHJlbmRlcmVyLT5hbmltYXRpb24oKS5nZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoKnJlbmRl
cmVyKTsKKyAgICAgICAgb3duZWRTdHlsZSA9IHJlbmRlcmVyLT5hbmltYXRpb24oKS5hbmltYXRl
ZFN0eWxlRm9yUmVuZGVyZXIoKnJlbmRlcmVyKTsKICAgICAgICAgaWYgKHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIgJiYgIWVsZW1lbnQuaXNQc2V1ZG9FbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNhY2hlZCBwc2V1ZG8gc3R5bGUgd2lsbCBvbmx5IGV4aXN0IGlmIHRoZSBh
bmltYXRpb24gaGFzIGJlZW4gcnVuIGF0IGxlYXN0IG9uY2UuCiAgICAgICAgICAgICByZXR1cm4g
b3duZWRTdHlsZS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3NiwxMSBAQCBzdGF0
aWMgaW5saW5lIGRvdWJsZSBzb2x2ZVNwcmluZ0Z1bmN0aW9uCiAgICAgcmV0dXJuIHNvbHZlci5z
b2x2ZSh0ICogZHVyYXRpb24pOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCi0gICAgOiBtX2VsZW1lbnQocmVuZGVy
ZXItPmVsZW1lbnQoKSkKLSAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1h
dGlvbikKK0FuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiBhbmlt
YXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5p
bWF0aW9uKQorICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQorICAgICwgbV9jb21wb3NpdGVBbmlt
YXRpb24oJmNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8
QW5pbWF0aW9uJj4oYW5pbWF0aW9uKSkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICAv
LyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlvbgogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0
aW9uQ291bnQoKSA+IDApCiAgICAgICAgIG1fdG90YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAyMjE5
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1h
dGlvbiopOworICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBF
bGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9uQmFz
ZSgpIHsgfQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdDsKQEAgLTEzNCw4
ICsxMzQsNiBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlID0g
MSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51bGxwdHIpIGNv
bnN0OwogCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhbmltYXRpb24gc3RhdGUgY2hhbmdl
ZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBSZW5kZXJF
bGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVudFN0eWxlKi8sIGNvbnN0IFJlbmRl
clN0eWxlJiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8q
YW5pbWF0ZWRTdHlsZSovLCBib29sJiBkaWRCbGVuZFN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmlt
YXRlZFN0eWxlKi8pID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAyMjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMzQgKzgzLDMy
IEBAIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp+Q1NTQW5pbWEKIHsKIH0KIAotQ29t
cG9zaXRlQW5pbWF0aW9uJiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlQ29t
cG9zaXRlQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQorQ29tcG9zaXRlQW5pbWF0
aW9uJiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0
aW9uKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuZW5zdXJlKCZyZW5kZXJlciwgWyZdIHsKKyAgICBhdXRvIHJlc3VsdCA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5lbnN1cmUoJmVsZW1lbnQsIFsmXSB7CiAgICAgICAgIHJldHVybiBD
b21wb3NpdGVBbmltYXRpb246OmNyZWF0ZSgqdGhpcyk7CiAgICAgfSk7CiAKLSAgICBpZiAoYW5p
bWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KCZyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAg
ICBpZiAoYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KCZlbGVtZW50LmRvY3VtZW50
KCkpKQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygp
OwogCiAgICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1ib29sIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
K2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgYXV0byBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5maW5kKCZyZW5kZXJl
cik7CisgICAgYXV0byBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5maW5kKCZlbGVtZW50KTsK
ICAgICBpZiAoaXQgPT0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlICVwIGNsZWFyOiAlcCIsIHRoaXMsICZyZW5kZXJlcik7CisgICAgTE9HKEFuaW1hdGlv
bnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAm
ZWxlbWVudCk7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpOwot
Ci0gICAgbV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFtlbGVtZW50XSAoY29u
c3QgRXZlbnRUb0Rpc3BhdGNoJiBpbmZvKSB7Ci0gICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQu
cHRyKCkgPT0gZWxlbWVudDsKKyAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hp
bmcoWyZdIChjb25zdCBFdmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKKyAgICAgICAgcmV0dXJuIGlu
Zm8uZWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKICAgICB9KTsKIAotICAgIG1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFtlbGVtZW50XShhdXRvJiBjdXJyZW50
RWxlbWVudCkgewotICAgICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gZWxlbWVu
dDsKKyAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5yZW1vdmVBbGxNYXRjaGluZyhbJl0o
YXV0byYgY3VycmVudEVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50LnB0
cigpID09ICZlbGVtZW50OwogICAgIH0pOwogICAgIAogICAgIC8vIFJldHVybiBmYWxzZSBpZiB3
ZSBkaWRuJ3QgZG8gYW55dGhpbmcgT1Igd2UgYXJlIHN1c3BlbmRlZCAoc28gd2UgZG9uJ3QgdHJ5
IHRvCkBAIC0xMTgsNyArMTE2LDcgQEAgYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Y2xlYQogICAgIC8vIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBkb2VzIHRoZSBvcHBvc2l0ZSBv
ZiB3aGF0IHRoZSBjb21tZW50IGFib3ZlIHNheXMgcmVnYXJkaW5nIHN1c3BlbmRlZCBzdGF0ZS4K
ICAgICBhdXRvJiBhbmltYXRpb24gPSAqaXQtPnZhbHVlOwogICAgIGJvb2wgcmVzdWx0ID0gYW5p
bWF0aW9uLmlzU3VzcGVuZGVkKCk7Ci0gICAgYW5pbWF0aW9uLmNsZWFyUmVuZGVyZXIoKTsKKyAg
ICBhbmltYXRpb24uY2xlYXJFbGVtZW50KCk7CiAKICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
cmVtb3ZlKGl0KTsKIApAQCAtMTQwLDEwICsxMzgsOSBAQCBzdGQ6Om9wdGlvbmFsPFNlY29uZHM+
IENTU0FuaW1hdGlvbkNvbnRyCiAgICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYg
dGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSA9PSAwX3MpIHsKICAgICAgICAgICAgICAgICBpZiAo
Y2FsbFNldENoYW5nZWQgIT0gQ2FsbFNldENoYW5nZWQpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjb21wb3NpdGVBbmltYXRp
b24ua2V5LT5lbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkg
PT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LT5p
bnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9ICpjb21wb3NpdGVBbmltYXRpb24ua2V5OworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6
Tm90SW5QYWdlQ2FjaGUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIGNhbGxlZFNldENoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTUsMTEgKzE1MiwxMSBAQCBz
dGQ6Om9wdGlvbmFsPFNlY29uZHM+IENTU0FuaW1hdGlvbkNvbnRyCiAgICAgcmV0dXJuIHRpbWVU
b05leHRTZXJ2aWNlOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQor
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJG
b3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgc3RkOjpvcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9OZXh0U2VydmljZTsKIAotICAgIGNvbnN0IENvbXBvc2l0ZUFuaW1hdGlvbiogY29t
cG9zaXRlQW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmcmVuZGVyZXIpOwor
ICAgIGNvbnN0IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFjb21wb3NpdGVBbmltYXRp
b24tPmlzU3VzcGVuZGVkKCkgJiYgY29tcG9zaXRlQW5pbWF0aW9uLT5oYXNBbmltYXRpb25zKCkp
CiAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gY29tcG9zaXRlQW5pbWF0aW9uLT50aW1lVG9O
ZXh0U2VydmljZSgpOwogCkBAIC0yODksNyArMjg2LDkgQEAgdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YW5pbQogCiBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmltYXRpb25CYXNlOjpSdW5uaW5nU3RhdGUgcnVubmlu
Z1N0YXRlKSBjb25zdAogewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5nZXQocmVuZGVyZXIuZWxlbWVudCgpKTsKICAgICBpZiAoIWFuaW1hdGlvbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVy
dHkocHJvcGVydHksIGZhbHNlLCBydW5uaW5nU3RhdGUpOwpAQCAtMjk3LDcgKzI5Niw5IEBAIGJv
b2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnUKIAogYm9vbCBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRl
cmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmlt
YXRpb25CYXNlOjpSdW5uaW5nU3RhdGUgcnVubmluZ1N0YXRlKSBjb25zdAogewotICAgIGF1dG8q
IGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBp
ZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8q
IGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVyZXIuZWxlbWVudCgp
KTsKICAgICBpZiAoIWFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIHRydWUsIHJ1bm5pbmdT
dGF0ZSk7CkBAIC00MDIsMTQgKzQwMywxMSBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpzZXRBCiAgICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBh
bGxvd2VkOwogfQogCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFu
aW1hdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBkb3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBh
dXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgZG91YmxlIHQpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1
cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsKKyAgICBDb21wb3NpdGVBbmltYXRpb24m
IGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsK
ICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNlQW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQp
KSB7Ci0gICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZExheWVy
Q29tcG9zaXRpb24oKTsKKyAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNv
bXBvc2l0aW9uKCk7CiAgICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDE3LDE0ICs0MTUsMTEgQEAgYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1cwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBk
b3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNp
dGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3Vi
bGUgdCkKIHsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0
ZUFuaW1hdGlvbigqcmVuZGVyZXIpOworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRl
QW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKGVsZW1lbnQpOwogICAgIGlmIChj
b21wb3NpdGVBbmltYXRpb24ucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGNzc1Byb3BlcnR5SUQocHJv
cGVydHkpLCB0KSkgewotICAgICAgICByZW5kZXJlci0+ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5
bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWRE
aXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQ2NywyNCArNDYy
LDI0IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2UKICAgICBzdGFy
dFRpbWVSZXNwb25zZSh0aW1lKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVy
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZ2V0KCZyZW5kZXJlcik7CisgICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJl
dHVybiBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIGFuaW1hdGlv
blVwZGF0ZUJsb2NrKCp0aGlzKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
YW5pbWF0aW5nU3R5bGUgPSBhbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUoKTsKKyAgICBhdXRv
IGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7CiAgICAgaWYg
KCFhbmltYXRpbmdTdHlsZSkKLSAgICAgICAgYW5pbWF0aW5nU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIHJldHVybiBhbmltYXRpbmdTdHlsZTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Citib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oRWxlbWVudCYgZWxlbWVudCwg
TGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAogewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBhdXRvKiBhbmltYXRpb24gPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWFuaW1hdGlvbikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTYzMSwyOSArNjI2LDI5IEBAIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6On5DU1NBbmltYXRpb25Db24KIHsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQordm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaWYgKCFtX2RhdGEtPmNsZWFyKHJlbmRlcmVyKSkKKyAgICBpZiAoIW1fZGF0
YS0+Y2xlYXIoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSByZW5kZXJlci5lbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRv
Y3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCisgICAgaWYgKGVsZW1lbnQuZG9j
dW1lbnQoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKTsKLSAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNv
bXBvc2l0aW9uKCk7CisgICAgQVNTRVJUKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0
ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7CisgICAgZWxlbWVudC5pbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKQorYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKLSAgICBhdXRvKiBvbGRTdHlsZSA9
IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVs
bHB0cjsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBhdXRv
KiBvbGRTdHlsZSA9IChyZW5kZXJlciAmJiByZW5kZXJlci0+aGFzSW5pdGlhbGl6ZWRTdHlsZSgp
KSA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKCghb2xkU3R5bGUgfHwg
KCFvbGRTdHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYm
ICghbmV3U3R5bGUuYW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS50cmFuc2l0aW9ucygpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlcmVyLmRvY3VtZW50KCkucGFnZUNh
Y2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCisgICAgaWYgKGVsZW1lbnQu
ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRG9uJ3QgcnVuIHRyYW5zaXRpb25zIHdo
ZW4gcHJpbnRpbmcuCi0gICAgaWYgKHJlbmRlcmVyLnZpZXcoKS5wcmludGluZygpKQorICAgIGlm
IChlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQg
YW5pbWF0aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQpAQCAtNjYx
LDM3ICs2NTYsNDEgQEAgYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYQog
ICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVzZXQgdGhlIGFuaW1hdGlvbi4gV2UgdGhlbiBkbyBh
IGJsZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFuZCB3ZSByZXR1cm4KICAgICAvLyBhIG5ldyBzdHls
ZS4KIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW5vbnltb3VzIHBzZXVkbyBlbGVtZW50cyBs
aWtlIDpmaXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIuCi0gICAgQVNTRVJUKHJlbmRlcmVyLmVs
ZW1lbnQoKSk7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBt
X2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKKyAgICBib29sIGFuaW1h
dGlvblN0YXRlQ2hhbmdlZCA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9s
ZFN0eWxlLCBuZXdTdHlsZSwgYW5pbWF0ZWRTdHlsZSk7CiAKLSAgICBDb21wb3NpdGVBbmltYXRp
b24mIHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9u
KHJlbmRlcmVyKTsKLSAgICBib29sIGFuaW1hdGlvblN0YXRlQ2hhbmdlZCA9IHJlbmRlcmVyQW5p
bWF0aW9ucy5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwgbmV3U3R5bGUsIGFuaW1hdGVkU3R5
bGUpOwotCi0gICAgaWYgKHJlbmRlcmVyLnBhcmVudCgpIHx8IG5ld1N0eWxlLmFuaW1hdGlvbnMo
KSB8fCAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKLSAgICAgICAgYXV0
byYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOwotICAgICAgICBpZiAo
cmVuZGVyZXJBbmltYXRpb25zLmhhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQoKSkKKyAg
ICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUuYW5pbWF0
aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgeworICAgICAg
ICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAg
aWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkp
CiAgICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAgIG1fZGF0
YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAgIG1f
ZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICBm
cmFtZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gYW5pbWF0
aW9uU3RhdGVDaGFuZ2VkOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVt
ZW50JiByZW5kZXJlcikKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcjo6YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQogewotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0
aW9ucygpKQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0
eWxlKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVzdWx0OworCisgICAg
aWYgKHJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSAmJiByZW5k
ZXJlci5lbGVtZW50KCkpCisgICAgICAgIHJlc3VsdCA9IG1fZGF0YS0+YW5pbWF0ZWRTdHlsZUZv
ckVsZW1lbnQoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CiAKLSAgICByZXR1cm4gbV9kYXRhLT5nZXRB
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXN1bHQgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNv
bXB1dGVFeHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVj
dCYgYm91bmRzKSBjb25zdAogeworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09y
VHJhbnNpdGlvbnMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gbV9kYXRh
LT5jb21wdXRlRXh0ZW50T2ZBbmltYXRpb24ocmVuZGVyZXIsIGJvdW5kcyk7CisgICAgcmV0dXJu
IG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKCpyZW5kZXJlci5lbGVtZW50KCksIGJv
dW5kcyk7CiB9CiAKIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgZG91YmxlIHN0YXJ0VGltZSkKQEAgLTcw
MywxMCArNzAyLDEwIEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWEK
ICAgICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKIH0KIAot
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKK2Jv
b2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKIHsKICAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4g
bV9kYXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShyZW5kZXJlciwgbmFtZSwgdCk7CisgICAgcmV0
dXJuIG1fZGF0YS0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgbmFtZSwgdCk7CiB9CiAK
IHVuc2lnbmVkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CkBAIC03MTQsMTAgKzcxMywxMCBAQCB1bnNpZ25l
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpudW1iZXJPCiAgICAgcmV0dXJuIG1fZGF0YS0+bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKGRvY3VtZW50KTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KQorYm9vbCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5p
bWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKHJlbmRlcmVyLCBwcm9wZXJ0eSwgdCk7CisgICAgcmV0dXJuIG1fZGF0YS0+cGF1
c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5LCB0KTsKIH0KIAogYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmltYXRpb25CYXNlOjpS
dW5uaW5nU3RhdGUgcnVubmluZ1N0YXRlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBDU1NBbmltYXRpb25Db250cm9sbGVyKEZyYW1lJik7CiAgICAgfkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIoKTsKIAotICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVt
ZW50Jik7Ci0gICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRT
dHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlv
bnMoRWxlbWVudCYpOworICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3Qg
UmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29t
cHV0ZSB0aGUgdmlzdWFsIGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUg
Z2l2ZW4gcmVuZGVyZXIKICAgICAvLyB1c2luZyB0aGUgZ2l2ZW4gcmVjdCwgcmV0dXJuaW5nIHRo
ZSByZXN1bHQgaW4gdGhlIHJlY3QuIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBzb21lCkBAIC02
MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGFjY2Vs
ZXJhdGVkIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkIHRvIGFu
aW1hdGUuCiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKFJlbmRlckVsZW1lbnQmLCBk
b3VibGUgc3RhcnRUaW1lKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRp
b25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91Ymxl
IHQpOyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eSwgZG91YmxlIHQpOyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0
aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVu
dCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5
IGZvciB0ZXN0aW5nCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGlu
ZwogICAgIAogICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVt
ZW50JiwgQ1NTUHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRp
b25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQg
PSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKFNl
dENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKIAotICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQm
KTsKLSAgICBib29sIGNsZWFyKFJlbmRlckVsZW1lbnQmKTsKKyAgICBDb21wb3NpdGVBbmltYXRp
b24mIGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50Jik7CisgICAgYm9vbCBjbGVhcihF
bGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQo
KTsKICAgICB2b2lkIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKQEAgLTc5
LDEzICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlELCBBbmltYXRpb25CYXNlOjpSdW5uaW5n
U3RhdGUpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJl
bmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlELCBBbmltYXRpb25CYXNlOjpSdW5u
aW5nU3RhdGUpIGNvbnN0OwogCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShSZW5kZXJF
bGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBw
YXVzZVRyYW5zaXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHksIGRvdWJsZSB0KTsKKyAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsKKyAgICBib29sIHBhdXNlVHJhbnNp
dGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwog
ICAgIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0Owog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlRm9yUmVu
ZGVyZXIoUmVuZGVyRWxlbWVudCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxlbWVudCYpOwogCi0gICAgYm9vbCBjb21wdXRlRXh0
ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25zdDsKKyAgICBi
b29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVjdCYpIGNvbnN0
OwogCiAgICAgZG91YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwogICAgIApAQCAtMTAx
LDcgKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChB
bmltYXRpb25CYXNlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVy
ZXIoUmVuZGVyRWxlbWVudCYpOworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVt
ZW50KEVsZW1lbnQmKTsKIAogICAgIGJvb2wgYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVu
ZGVkKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQ7
IH0KICAgICB2b2lkIHNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sKTsK
QEAgLTEyNCw3ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0
ZVN0eWxlKCk7CiAgICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdCk7CiAKLSAgICBI
YXNoTWFwPFJlbmRlckVsZW1lbnQqLCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21w
b3NpdGVBbmltYXRpb25zOworICAgIEhhc2hNYXA8RWxlbWVudCosIFJlZlB0cjxDb21wb3NpdGVB
bmltYXRpb24+PiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnM7CiAgICAgVGltZXIgbV9hbmltYXRpb25U
aW1lcjsKICAgICBUaW1lciBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyOwogICAgIEZy
YW1lJiBtX2ZyYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMjE5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxMiArNTMsMTIgQEAgQ29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5p
bWF0aW9uKAogICAgIC8vIFRvc3MgdGhlIHJlZnMgdG8gYWxsIGFuaW1hdGlvbnMsIGJ1dCBtYWtl
IHN1cmUgd2UgcmVtb3ZlIHRoZW0gZnJvbQogICAgIC8vIGFueSB3YWl0aW5nIGxpc3RzIGZpcnN0
LgogCi0gICAgY2xlYXJSZW5kZXJlcigpOworICAgIGNsZWFyRWxlbWVudCgpOwogICAgIG1fdHJh
bnNpdGlvbnMuY2xlYXIoKTsKICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jbGVhcigpOwogfQog
Ci12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCit2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkKIHsKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIENsZWFyIHRoZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmlu
ZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCkBAIC03NywxMCAr
NzcsMTAgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIH0K
IH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1cnJl
bnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBq
dXN0IHNraXAgaXQKLSAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50cmFu
c2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKKyAgICBpZiAoIWN1cnJlbnRT
dHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJrIGFsbCBleGlzdGluZyB0cmFu
c2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0aWxsIGFjdGl2
ZSBvbmVzCkBAIC05MSw5ICs5MSw5IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVU
cmFuc2l0aW8KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVu
dFN0eWxlOwogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgYWN0aXZlIHRyYW5zaXRpb25zCi0gICAgaWYgKHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJn
ZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOworICAgIGlmICh0YXJnZXRTdHls
ZS50cmFuc2l0aW9ucygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
U3R5bGUudHJhbnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGFu
aW1hdGlvbiA9IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKICAgICAg
ICAgICAgIGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwg
YW5pbWF0aW9uLmRlbGF5KCkgPiAwOwogCiAgICAgICAgICAgICBBbmltYXRpb246OkFuaW1hdGlv
bk1vZGUgbW9kZSA9IGFuaW1hdGlvbi5hbmltYXRpb25Nb2RlKCk7CkBAIC0xNDMsNyArMTQzLDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAg
ICAgICAgICAvLyB5b3UgaGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkg
YW5kICdhbGwnIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRo
aXMgY2FzZSwgdGhlIGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UK
ICAgICAgICAgICAgICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmlu
ZyBhbmltYXRpb24gYmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1w
bEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCB0YXJnZXRTdHlsZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbXBsQW5pbS0+aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKHByb3As
ICZ0YXJnZXRTdHlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBhY2NlbGVy
YXRlZCBhbmltYXRpb25zIHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFJlbmRlclN0eWxlIHdpdGgg
dGhlIF9jdXJyZW50XyB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHBy
b3BlcnR5LCBzbyB0aGF0IHJlc3RhcnRlZCB0cmFuc2l0aW9ucyB1c2UgdGhlIGNvcnJlY3Qgc3Rh
cnRpbmcgcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmlt
YXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3ApICYmIGltcGxBbmlt
LT5pc0FjY2VsZXJhdGVkKCkpIHsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0
IGEgdHJhbnNpdGlvbiBpZiBpdCBpcyBhY3RpdmUgYW5kIHRoZSBwcm9wZXJ0aWVzIGRvbid0IG1h
dGNoCi0gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gIWlzQWN0aXZlVHJhbnNpdGlvbiB8fCBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3AsIGZyb21TdHlsZSwgdGFy
Z2V0U3R5bGUpOworICAgICAgICAgICAgICAgICAgICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRp
b24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5
bGUsICZ0YXJnZXRTdHlsZSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFp
c0FjdGl2ZVRyYW5zaXRpb24pLiBXZSBuZWVkCkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAgICAgLy8gPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc4Nz4KICAgICAgICAgICAg
ICAgICBpZiAoIWVxdWFsICYmIGlzQWN0aXZlVHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgdGhlIG5ldyB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aW1wbGljaXRBbmltYXRpb24gPSBJbXBsaWNpdEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwg
cHJvcCwgcmVuZGVyZXIsIHRoaXMsIG1vZGlmaWVkQ3VycmVudFN0eWxlID8gbW9kaWZpZWRDdXJy
ZW50U3R5bGUuZ2V0KCkgOiBmcm9tU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGlt
cGxpY2l0QW5pbWF0aW9uID0gSW1wbGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHBy
b3AsIGVsZW1lbnQsIHRoaXMsIG1vZGlmaWVkQ3VycmVudFN0eWxlID8gbW9kaWZpZWRDdXJyZW50
U3R5bGUuZ2V0KCkgOiBmcm9tU3R5bGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9zdXNw
ZW5kZWQgJiYgaW1wbGljaXRBbmltYXRpb24tPmhhc1N0eWxlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQ
YXVzZWQpOwogCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRlZCBJ
bXBsaWNpdEFuaW1hdGlvbiAlcCBvbiByZW5kZXJlciAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRp
b24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGljaXRBbmltYXRpb24ucHRyKCksIHJlbmRlcmVyLCBn
ZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVs
YXkoKSk7CisgICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRlZCBJbXBs
aWNpdEFuaW1hdGlvbiAlcCBvbiBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyBkdXJhdGlvbiAl
LjJmIGRlbGF5ICUuMmYiLCBpbXBsaWNpdEFuaW1hdGlvbi5wdHIoKSwgJmVsZW1lbnQsIGdldFBy
b3BlcnR5TmFtZShwcm9wKSwgYW5pbWF0aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgp
KTsKICAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcCwgV1RGTW92ZShp
bXBsaWNpdEFuaW1hdGlvbikpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTg5LDcgKzE4OSw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgaWYg
KCF0cmFuc2l0aW9uLT5hY3RpdmUoKSkgewogICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxl
cigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbi5nZXQoKSk7CiAgICAgICAgICAg
ICB0b0JlUmVtb3ZlZC5hcHBlbmQodHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSk7Ci0g
ICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9uICVw
IGZyb20gcmVuZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgcmVu
ZGVyZXIsIGdldFByb3BlcnR5TmFtZSh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7
CisgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9u
ICVwIGZyb20gZWxlbWVudCAlcCBmb3IgcHJvcGVydHkgJXMiLCB0cmFuc2l0aW9uLmdldCgpLCAm
ZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTk4LDE1ICsxOTgsMTUgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92
ZShwcm9wZXJ0eVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSYgdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSBkb24ndCBoYXZl
IGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQotICAgIGlmIChtX2tl
eWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5oYXNBbmltYXRpb25z
KCkpCisgICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0U3R5
bGUuaGFzQW5pbWF0aW9ucygpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgCi0gICAgaWYgKGN1cnJlbnRTdHlsZSAm
JiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS0+aGFzQW5pbWF0
aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUt
PmFuaW1hdGlvbnMoKSkpCisgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmhh
c0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5oYXNBbmltYXRpb25zKCkgJiYgKihjdXJyZW50
U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJnZXRTdHlsZS5hbmltYXRpb25zKCkpKQogICAg
ICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKQEAgLTIy
MSwxMCArMjIxLDEwIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBub25lKCJub25l
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgCiAgICAgLy8gTm93
IG1hcmsgYW55IHN0aWxsIGFjdGl2ZSBhbmltYXRpb25zIGFzIGFjdGl2ZSBhbmQgYWRkIGFueSBu
ZXcgYW5pbWF0aW9ucy4KLSAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewotICAg
ICAgICBpbnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7Cisg
ICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgeworICAgICAgICBpbnQgbnVtQW5pbXMg
PSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0
YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICBhdXRv
JiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKICAg
ICAgICAgICAgIEF0b21pY1N0cmluZyBhbmltYXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwog
CiAgICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0aW9uKCkpCkBAIC0yNDks
OCArMjQ5LDggQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgc2F2ZWQgYW5pbWF0aW9uIHRvIHRoaXMgbmV3IG9uZSwg
anVzdCBpbiBjYXNlIHRoZSBwbGF5IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICAgICAgICAg
IGtleWZyYW1lQW5pbS0+c2V0QW5pbWF0aW9uKGFuaW1hdGlvbik7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKChhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24uZGVsYXkoKSkgJiYgYW5p
bWF0aW9uLml0ZXJhdGlvbkNvdW50KCkgJiYgYW5pbWF0aW9uTmFtZSAhPSBub25lKSB7Ci0gICAg
ICAgICAgICAgICAga2V5ZnJhbWVBbmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0ZShhbmlt
YXRpb24sIHJlbmRlcmVyLCB0aGlzLCB0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICJDcmVhdGluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiByZW5kZXJlciAl
cCB3aXRoIGtleWZyYW1lcyAlcywgZHVyYXRpb24gJS4yZiwgZGVsYXkgJS4yZiwgaXRlcmF0aW9u
cyAlLjJmIiwga2V5ZnJhbWVBbmltLmdldCgpLCByZW5kZXJlciwgYW5pbWF0aW9uLm5hbWUoKS51
dGY4KCkuZGF0YSgpLCBhbmltYXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCksIGFu
aW1hdGlvbi5pdGVyYXRpb25Db3VudCgpKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0g
PSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVudCwgdGhpcywgJnRh
cmdldFN0eWxlKTsKKyAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0aW5nIEtl
eWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFtZXMgJXMsIGR1cmF0
aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5pbS5nZXQo
KSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0aW9uLmR1
cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291bnQoKSk7
CiAKICAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKICAgICAgICAgICAgICAgICAg
ICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7CkBA
IC0yODAsMTggKzI4MCwxOCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJh
bWVBCiAgICAgICAgIGlmICghbmV3QW5pbWF0aW9ucy5jb250YWlucyhhbmltYXRpb24tPm5hbWUo
KS5pbXBsKCkpKSB7CiAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9u
V2lsbEJlUmVtb3ZlZChhbmltYXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgYW5pbWF0aW9uLT5j
bGVhcigpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFu
aW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIiwgYW5pbWF0aW9uLmdldCgpLCByZW5kZXJlcik7
CisgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9u
ICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1hdGlvbi5nZXQoKSwgJmVsZW1lbnQpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIHN0ZDo6c3dhcChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1l
QW5pbWF0aW9ucyk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGJsZW5kZWRTdHlsZSkKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0
eWxlKQogewogICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBo
YXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucygm
cmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgJnRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFt
ZUFuaW1hdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSk7CisgICAg
dXBkYXRlVHJhbnNpdGlvbnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Cisg
ICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKGVsZW1lbnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0
U3R5bGUpOwogICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKIAog
ICAgIGJvb2wgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkID0gZmFsc2U7CkBAIC0zMDMsNyArMzAzLDcg
QEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRQogICAgICAgICBib29s
IGNoZWNrRm9yU3RhY2tpbmdDb250ZXh0ID0gZmFsc2U7CiAgICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGJvb2wgZGlk
QmxlbmRTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGUo
KnRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxl
LCBkaWRCbGVuZFN0eWxlKSkKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRlKCp0
aGlzLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVuZFN0eWxlKSkKICAgICAgICAg
ICAgICAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSB0cnVlOwogCiAgICAgICAgICAgICBpZiAo
ZGlkQmxlbmRTdHlsZSkKQEAgLTMzMyw3ICszMzMsNyBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0ZShSZW5kZXJFCiAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5
ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwogICAgICAgICBpZiAo
a2V5ZnJhbWVBbmltKSB7CiAgICAgICAgICAgICBib29sIGRpZEJsZW5kU3R5bGUgPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRoaXMsICZyZW5kZXJlciwg
Y3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVuZFN0eWxlKSkK
KyAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRoaXMsIHRhcmdldFN0eWxl
LCBibGVuZGVkU3R5bGUsIGRpZEJsZW5kU3R5bGUpKQogICAgICAgICAgICAgICAgIGFuaW1hdGlv
blN0YXRlQ2hhbmdlZCA9IHRydWU7CiAKICAgICAgICAgICAgIGZvcmNlU3RhY2tpbmdDb250ZXh0
IHw9IGRpZEJsZW5kU3R5bGUgJiYga2V5ZnJhbWVBbmltLT50cmlnZ2Vyc1N0YWNraW5nQ29udGV4
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1
Miw5IEBAIHB1YmxpYzoKIAogICAgIH5Db21wb3NpdGVBbmltYXRpb24oKTsKICAgICAKLSAgICB2
b2lkIGNsZWFyUmVuZGVyZXIoKTsKKyAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwogCi0gICAgYm9v
bCBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGJsZW5kZWRTdHlsZSk7CisgICAgYm9vbCBhbmltYXRlKEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUs
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSk7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9v
bCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0Owog
CkBAIC04OCw4ICs4OCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJik7CiAKLSAgICB2b2lkIHVwZGF0ZVRy
YW5zaXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAgIHZvaWQgdXBkYXRlS2V5ZnJh
bWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlVHJh
bnNpdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
UmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMjE5NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
bXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiB0cmFu
c2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVuZGVyZXIsIGNv
bXBBbmltKQotICAgICwgbV9mcm9tU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpmcm9tU3R5
bGUpKQorSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlv
biYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgRWxlbWVudCYg
ZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tU3R5bGUpCisgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIGVs
ZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICAsIG1fZnJvbVN0eWxlKFJlbmRlclN0eWxl
OjpjbG9uZVB0cihmcm9tU3R5bGUpKQogICAgICwgbV90cmFuc2l0aW9uUHJvcGVydHkodHJhbnNp
dGlvbi5wcm9wZXJ0eSgpKQogICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShhbmltYXRpbmdQcm9w
ZXJ0eSkKIHsKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxk
U2VuZEV2ZW50RgogICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCkuaGFzTGlzdGVuZXJU
eXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0
ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0
eWxlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24m
IGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0
eWxlKQogewogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBk
b25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlv
bi4KICAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVh
bmVkIHVwLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAyMjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAvLyBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVu
dC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmlt
YXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorICAgIHN0YXRpYyBSZWY8SW1wbGljaXRB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJ
RCBhbmltYXRpbmdQcm9wZXJ0eSwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tU3R5bGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRp
b24sIGFuaW1hdGluZ1Byb3BlcnR5LCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9t
U3R5bGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1wbGljaXRBbmltYXRpb24o
YW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9u
LCBmcm9tU3R5bGUpKTsKICAgICB9OwogICAgIAogICAgIENTU1Byb3BlcnR5SUQgdHJhbnNpdGlv
blByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9uUHJvcGVydHk7IH0KQEAgLTUz
LDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kQW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAKLSAg
ICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIGNvbnN0
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlk
QmxlbmRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlv
biYsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSk7CiAgICAgdm9pZCBn
ZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBDb21w
b3NpdGVBbmltYXRpb24mKTsKIApAQCAtODYsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYK
IAogcHJpdmF0ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQ
cm9wZXJ0eUlELCBSZW5kZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVu
ZGVyU3R5bGUqKTsKKyAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQ
cm9wZXJ0eUlELCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5
bGUmKTsKICAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgLy8gVGhlIHR3
byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMjE5
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxl
KQotICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIHJlbmRlcmVyLCBjb21wb3NpdGVBbmlt
YXRpb24pCitLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQorICAg
IDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbikK
ICAgICAsIG1fa2V5ZnJhbWVzKGFuaW1hdGlvbi5uYW1lKCkpCi0gICAgLCBtX3VuYW5pbWF0ZWRT
dHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnVuYW5pbWF0ZWRTdHlsZSkpCisgICAgLCBtX3Vu
YW5pbWF0ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodW5hbmltYXRlZFN0eWxlKSkKIHsK
ICAgICByZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKTsKIApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQg
S2V5ZnJhbWVBbmltYXRpb246OmZldGNoSW50ZXJ2YWxFbmQKICAgICBwcm9nID0gcHJvZ3Jlc3Mo
c2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKG5hbWUoKSkpOwogfQog
Ci1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpCitib29sIEtleWZyYW1lQW5pbWF0
aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUg
c3RhcnQgdGltZW91dCBpZiBuZWVkZWQKICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVB
bmltYXRpb24uaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEy
IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogLy8gQSBLZXlmcmFtZUFuaW1hdGlvbiB0cmFja3MgdGhl
IHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFuaW1hdGlvbiBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVu
dC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIGZpbmFsIDogcHVibGljIEFuaW1hdGlvbkJhc2Ug
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmlt
YXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0
aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5
bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlv
bihhbmltYXRpb24sIHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHls
ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmlt
YXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgdW5hbmltYXRlZFN0eWxlKSk7CiAg
ICAgfQogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYsIFJlbmRlckVsZW1l
bnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYg
dGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUs
IGJvb2wmIGRpZEJsZW5kU3R5bGUpIG92ZXJyaWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpOwog
ICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikg
b3ZlcnJpZGU7CiAKICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihM
YXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC05Myw3ICs5Myw3IEBAIHByb3RlY3RlZDoK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlv
biYsIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHls
ZSogdW5hbmltYXRlZFN0eWxlKTsKKyAgICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRp
b24mLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHVu
YW5pbWF0ZWRTdHlsZSk7CiAgICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAK
ICAgICAvLyBHZXQgdGhlIHN0eWxlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5n
IHRoZSBjdXJyZW50IGFuaW1hdGlvbiB0aW1lIGFuZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVt
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2
aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA0LDcgKzExMDQsOCBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgaWYgKG1fc3R5bGUuaGFzRml4ZWRCYWNrZ3JvdW5k
SW1hZ2UoKSAmJiAhc2V0dGluZ3MoKS5maXhlZEJhY2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9j
dW1lbnQoKSkKICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNsb3dSZXBhaW50T2Jq
ZWN0KHRoaXMpOwogCi0gICAgYW5pbWF0aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Cisg
ICAgaWYgKGVsZW1lbnQoKSkKKyAgICAgICAgYW5pbWF0aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygq
ZWxlbWVudCgpKTsKIAogICAgIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNSw3ICsxMDA1LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6
OmN1cnJlbgogICAgIGlmIChyZW5kZXJlcigpLmFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJh
dGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwg
QW5pbWF0aW9uQmFzZTo6UnVubmluZyB8IEFuaW1hdGlvbkJhc2U6OlBhdXNlZCkpIHsKICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKICAgICAgICAgRmxvYXRSZWN0
IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJveC0+Ym9y
ZGVyQm94UmVjdCgpLCBib3gtPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1h
dGlvbigpLmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkuYW5pbWF0aW9u
KCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogICAgICAgICBzdHlsZS0+
YXBwbHlUcmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBw
bHlPcmlnaW4pOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBj
YW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgICAgIHJldHVybiBjdXJyVHJhbnNmb3JtOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkocmV2aXNp
b24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDcgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRl
cjo6Y3JlYXRlUmVuZGVyZXIoRQogCiAgICAgYXV0byYgaW5pdGlhbFN0eWxlID0gbmV3UmVuZGVy
ZXItPnN0eWxlKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0
eWxlOwotICAgIG5ld1JlbmRlcmVyLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpuZXdS
ZW5kZXJlciwgaW5pdGlhbFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKKyAgICBuZXdSZW5kZXJlci0+
YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucyhlbGVtZW50LCBpbml0aWFsU3R5bGUsIGFuaW1h
dGVkU3R5bGUpOwogICAgIGlmIChhbmltYXRlZFN0eWxlKSB7CiAgICAgICAgIG5ld1JlbmRlcmVy
LT5zZXRTdHlsZUludGVybmFsKFdURk1vdmUoKmFuaW1hdGVkU3R5bGUpKTsKICAgICAgICAgbmV3
UmVuZGVyZXItPnNldEhhc0luaXRpYWxBbmltYXRlZFN0eWxlKHRydWUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0
ZUFuaW1hdAogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0
ZWRTdHlsZTsKLSAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPmFuaW1hdGlvbigp
LnVwZGF0ZUFuaW1hdGlvbnMoKnJlbmRlcmVyLCAqbmV3U3R5bGUsIGFuaW1hdGVkU3R5bGUpKQor
ICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+YW5pbWF0aW9uKCkudXBkYXRlQW5p
bWF0aW9ucyhlbGVtZW50LCAqbmV3U3R5bGUsIGFuaW1hdGVkU3R5bGUpKQogICAgICAgICByZWNv
bXBvc2l0ZUxheWVyID0gdHJ1ZTsKIAogICAgIGlmIChhbmltYXRlZFN0eWxlKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAyMjE5NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw3
ICs5MDUsNyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0CiB7CiAg
ICAgaWYgKHBhdXNlVGltZSA8IDApCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmlt
YXRpb25BdFRpbWUoZWxlbWVudC5yZW5kZXJlcigpLCBBdG9taWNTdHJpbmcoYW5pbWF0aW9uTmFt
ZSksIHBhdXNlVGltZSk7CisgICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5p
bWF0aW9uQXRUaW1lKGVsZW1lbnQsIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VU
aW1lKTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBw
YXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCkBAIC05
MjAsMTQgKzkyMCwxNCBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0
CiAgICAgaWYgKCFwc2V1ZG9FbGVtZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1
c2VBbmltYXRpb25BdFRpbWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgQXRvbWljU3RyaW5n
KGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRp
b24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZSgqcHNldWRvRWxlbWVudCwgQXRvbWljU3RyaW5nKGFu
aW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwogfQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5h
bHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAocGF1
c2VUaW1lIDwgMCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRp
bWUoZWxlbWVudC5yZW5kZXJlcigpLCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7CisgICAgcmV0
dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBw
cm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFs
czo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJv
cGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHNldWRvSWQpCkBAIC05NDIsNyArOTQyLDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxz
OjpwYXVzZVRyYW5zaQogICAgIGlmICghcHNldWRvRWxlbWVudCkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgcmV0dXJuIGZyYW1lKCktPmFu
aW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigp
LCBwcm9wZXJ0eSwgcGF1c2VUaW1lKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCku
cGF1c2VUcmFuc2l0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBwcm9wZXJ0eSwgcGF1c2VUaW1l
KTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmVsZW1lbnRSZW5kZXJUcmVl
QXNUZXh0KEVsZW1lbnQmIGVsZW1lbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320635</attachid>
            <date>2017-09-13 06:35:17 -0700</date>
            <delta_ts>2017-09-13 06:51:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>animation-functions-element-2.patch</filename>
            <type>text/plain</type>
            <size>49991</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTk2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE3LTA5LTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vcmUgb2YgdGhlIENT
UyBhbmltYXRpb24gc3lzdGVtIGludGVybmFscyBlbGVtZW50IGJhc2VkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1MgYW5pbWF0aW9ucyBhbmltYXRl
IGVsZW1lbnQgc3R5bGUuIENvbnRpbnVlIG1vdmluZyBhd2F5IGZyb20gcmVuZGVyZXJzIGluIHRo
ZSBhbmltYXRpb24gY29kZS4KKworICAgICAgICBBbHNvIGRvIHNvbWUgZ2VuZXJhbCBtb2Rlcm5p
emF0aW9uLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eSk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9u
VGltZXJGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVy
YXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVk
U3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVB
bmltYXRpb25UaW1lckZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0
QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246
OkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRl
cjo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVk
RWxlbWVudFVwZGF0ZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KToKKwogMjAxNy0wOS0xMyAgTXMyZ2VyICA8TXMyZ2Vy
QGlnYWxpYS5jb20+CiAKICAgICAgICAgRGlzYWxsb3cgcGFzc2luZyBudWxsIHZhbHVlcyB0byB2
YXJpb3VzIFdlYkdMMiBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDc3LDcgKzI0NzcsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlCiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQ29tcG9zaXRlZCgpICYmIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KHBy
b3BlcnR5SUQpKSB7Ci0gICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCku
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7CisgICAgICAgIG93bmVkU3R5
bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5k
ZXJlcik7CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICYmICFlbGVtZW50Lmlz
UHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWNoZWQgcHNl
dWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhhcyBiZWVuIHJ1biBh
dCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIyMTk2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxMiArNzYsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVT
cHJpbmdGdW5jdGlvbgogICAgIHJldHVybiBzb2x2ZXIuc29sdmUodCAqIGR1cmF0aW9uKTsKIH0K
IAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgIDogbV9lbGVtZW50KHJlbmRlcmVyLT5lbGVtZW50KCkpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICA6IG1fZWxlbWVu
dCgmZWxlbWVudCkKKyAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRp
b24pCiAgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikp
CiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVy
YXRpb24KICAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQogICAgICAg
ICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDwKICAgICBmcmll
bmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRp
b24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBBbmltYXRpb25C
YXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYpOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0KIAogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyKCkgY29uc3Q7CkBAIC0xMzQsOCArMTM0LDYgQEAgcHVibGljOgogCiAg
ICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBj
b25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSYgLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLywgYm9vbCYg
ZGlkQmxlbmRTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDM0ICs4MywzMiBAQCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6fkNTU0FuaW1hCiB7CiB9CiAKLUNvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKK0NvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmcmVuZGVy
ZXIsIFsmXSB7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJl
KCZlbGVtZW50LCBbJl0gewogICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVh
dGUoKnRoaXMpOwogICAgIH0pOwogCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudCgmcmVuZGVyZXIuZG9jdW1lbnQoKSkpCisgICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudCgmZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKIAogICAgIHJldHVybiAqcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Y2xlYXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpjbGVhcihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmcmVuZGVyZXIpOworICAgIGF1dG8gaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HKEFu
aW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0
aGlzLCAmcmVuZGVyZXIpOworICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwogCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRj
aC5yZW1vdmVBbGxNYXRjaGluZyhbZWxlbWVudF0gKGNvbnN0IEV2ZW50VG9EaXNwYXRjaCYgaW5m
bykgewotICAgICAgICByZXR1cm4gaW5mby5lbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAg
bV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZlbnRUb0Rp
c3BhdGNoJiBpbmZvKSB7CisgICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkgPT0gJmVs
ZW1lbnQ7CiAgICAgfSk7CiAKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5yZW1vdmVB
bGxNYXRjaGluZyhbZWxlbWVudF0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAgbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJlbnRFbGVtZW50KSB7
CisgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKICAgICB9
KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9S
IHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwpAQCAtMTE4LDcgKzExNiw3IEBA
IGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWEKICAgICAvLyBGSVhNRTog
VGhlIGNvZGUgYmVsb3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29tbWVudCBhYm92
ZSBzYXlzIHJlZ2FyZGluZyBzdXNwZW5kZWQgc3RhdGUuCiAgICAgYXV0byYgYW5pbWF0aW9uID0g
Kml0LT52YWx1ZTsKICAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpOwot
ICAgIGFuaW1hdGlvbi5jbGVhclJlbmRlcmVyKCk7CisgICAgYW5pbWF0aW9uLmNsZWFyRWxlbWVu
dCgpOwogCiAgICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7CiAKQEAgLTE0MCwx
MCArMTM4LDkgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25Db250cgogICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOworICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9z
aXRlQW5pbWF0aW9uLmtleTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTU1LDExICsxNTIsMTEgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBD
U1NBbmltYXRpb25Db250cgogICAgIHJldHVybiB0aW1lVG9OZXh0U2VydmljZTsKIH0KIAotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7CiAK
LSAgICBjb25zdCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBjb25zdCBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVs
ZW1lbnQpOwogICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpICYmIGNv
bXBvc2l0ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICB0aW1lVG9OZXh0U2Vy
dmljZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIApAQCAtMjg5
LDcgKzI4Niw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW0KIAog
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
QW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSwgcnVu
bmluZ1N0YXRlKTsKQEAgLTI5Nyw3ICsyOTYsOSBAQCBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRl
IHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGlu
Z1Byb3BlcnR5KHByb3BlcnR5LCB0cnVlLCBydW5uaW5nU3RhdGUpOwpAQCAtNDAyLDE0ICs0MDMs
MTEgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2V0QQogICAgIG1fYWxs
b3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKIH0KIAotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQogewotICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpy
ZW5kZXJlcik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBl
bnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1h
dGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICByZW5kZXJlci0+
ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAg
IGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBz
dGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTQxNywxNCArNDE1LDExIEBAIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCitib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7Ci0gICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
VHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAg
cmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OworICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00NjcsMjQgKzQ2MiwyNCBAQCB2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlCiAgICAgc3RhcnRUaW1lUmVzcG9uc2UodGltZSk7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
YXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmcmVuZGVyZXIpOwor
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHJlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFu
aW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygqdGhpcyk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7CisgICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZSgpOwogICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAg
ICAgIGFuaW1hdGluZ1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxl
KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gYW5pbWF0aW5n
U3R5bGU7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91
bmRzKSBjb25zdAorYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29u
c3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZy
ZW5kZXJlcik7CisgICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdl
dCgmZWxlbWVudCk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwog
CkBAIC02MzEsMjkgKzYyNiwyOSBAQCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5pbWF0
aW9uQ29uCiB7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9kYXRh
LT5jbGVhcihyZW5kZXJlcikpCisgICAgaWYgKCFtX2RhdGEtPmNsZWFyKGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
OwotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWlu
Z0Rlc3Ryb3llZCgpKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5n
RGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7Ci0gICAg
ZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworICAgIEFTU0VS
VChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5Q
YWdlQ2FjaGUpOworICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlv
bigpOwogfQogCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7Ci0gICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXpl
ZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVy
ZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgYXV0byogb2xkU3R5bGUgPSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmhhc0luaXRpYWxpemVkU3R5bGUoKSkgPyAmcmVuZGVyZXItPnN0eWxlKCkg
OiBudWxscHRyOwogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMo
KSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLmFuaW1hdGlvbnMo
KSAmJiAhbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3Rh
dGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIERvbid0IHJ1biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChy
ZW5kZXJlci52aWV3KCkucHJpbnRpbmcoKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLnJl
bmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KQEAgLTY2MSwzNyArNjU2LDQxIEBAIGJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWEKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdl
IHJlc2V0IHRoZSBhbmltYXRpb24uIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVl
cyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAKLSAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IGFub255bW91cyBwc2V1ZG8gZWxlbWVudHMgbGlrZSA6Zmlyc3QtbGluZSBvciA6Zmly
c3QtbGV0dGVyLgotICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCkpOworICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7CisgICAgYm9vbCBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBjb21w
b3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3U3R5bGUsIGFuaW1h
dGVkU3R5bGUpOwogCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiByZW5kZXJlckFuaW1hdGlvbnMg
PSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYm9vbCBh
bmltYXRpb25TdGF0ZUNoYW5nZWQgPSByZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0ZShyZW5kZXJl
ciwgb2xkU3R5bGUsIG5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKTsKLQotICAgIGlmIChyZW5kZXJl
ci5wYXJlbnQoKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAgICAgIGF1dG8mIGZyYW1lVmlldyA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyQW5pbWF0aW9ucy5oYXNB
bmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkpCisgICAgaWYgKChyZW5kZXJlciAmJiByZW5k
ZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlvbnMoKSB8fCAob2xkU3R5bGUgJiYg
b2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKKyAgICAgICAgYXV0byYgZnJhbWVWaWV3ID0gKmVs
ZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24u
aGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQogICAgICAgICAgICAgbV9kYXRhLT5z
ZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVy
Rm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRp
bWVyRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgZnJhbWVWaWV3LnNjaGVkdWxlQW5pbWF0
aW9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuaW1hdGlvblN0YXRlQ2hhbmdlZDsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpnZXRB
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVkU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRl
cmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJu
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmhh
c0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAg
ICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpyZW5kZXJlci5lbGVt
ZW50KCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24o
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKIHsKKyAg
ICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0
aW9uKHJlbmRlcmVyLCBib3VuZHMpOworICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwogfQogCiB2b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGRvdWJsZSBzdGFydFRpbWUpCkBAIC03MDMsMTAgKzcwMiwxMCBAQCB2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hCiAgICAgbV9kYXRhLT5yZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpCiB7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0
aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VBbmltYXRpb25B
dFRpbWUocmVuZGVyZXIsIG5hbWUsIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlQW5pbWF0
aW9uQXRUaW1lKGVsZW1lbnQsIG5hbWUsIHQpOwogfQogCiB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KSBj
b25zdApAQCAtNzE0LDEwICs3MTMsMTAgQEAgdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6bnVtYmVyTwogICAgIHJldHVybiBtX2RhdGEtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhk
b2N1bWVudCk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KQogewogICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMp
OwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShyZW5kZXJlciwgcHJv
cGVydHksIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVt
ZW50LCBwcm9wZXJ0eSwgdCk7CiB9CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0
ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwogICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7CiAKLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wgdXBkYXRl
QW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJF
bGVtZW50Jik7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKKyAgICBib29s
IHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQg
b2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCiAgICAgLy8g
dXNpbmcgdGhlIGdpdmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgc29tZQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gb3IgdHJh
bnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlLgogICAgIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiwgZG91YmxlIHN0YXJ0VGltZSk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5
IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRp
bWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVz
ZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAgIFdFQkNP
UkVfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNv
bnN0OyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKICAgICAKICAgICBib29sIGlzUnVu
bmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQsIEFu
aW1hdGlvbkJhc2U6OlJ1bm5pbmdTdGF0ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDggKzUyLDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5p
bWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7
CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2Vk
ID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7CiAKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBjbGVhcihSZW5k
ZXJFbGVtZW50Jik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oRWxlbWVudCYpOworICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwogCiAgICAgdm9pZCB1
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7CiAgICAgdm9pZCBzdGFydFVwZGF0
ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NT
UHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKICAgICBib29s
IGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50Jiwg
Q1NTUHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKIAotICAg
IGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKFJl
bmRlckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmKTsKIAotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVs
ZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIGRvdWJsZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKTsKICAgICAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOwogCi0gICAg
dm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKKyAg
ICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50Jik7CiAKICAgICBi
b29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9CiAgICAgdm9pZCBzZXRBbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwogICAgIHZvaWQgc3Rh
cnRUaW1lUmVzcG9uc2UoZG91YmxlIHQpOwogCi0gICAgSGFzaE1hcDxSZW5kZXJFbGVtZW50Kiwg
UmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5pbWF0aW9uczsKKyAgICBI
YXNoTWFwPEVsZW1lbnQqLCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwogICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CiAgICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKICAgICBGcmFtZSYgbV9mcmFtZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBA
IENvbXBvc2l0ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigKICAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KICAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KIAotICAgIGNsZWFyUmVuZGVyZXIo
KTsKKyAgICBjbGVhckVsZW1lbnQoKTsKICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OmNsZWFyUmVuZGVyZXIoKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVu
dCgpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
bGVhciB0aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3
ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgpAQCAtNzcsMTAgKzc3LDEwIEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVy
ZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFj
dXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSAmJiBtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkpCisgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFj
dGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwpAQCAtOTEsOSArOTEsOSBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwot
ICAgIGlmICh0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkt
PmFuaW1hdGlvbihpKTsKKyAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBib29sIGlzQWN0aXZlVHJh
bnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpID4gMDsK
IAogICAgICAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25Nb2RlIG1vZGUgPSBhbmltYXRpb24u
YW5pbWF0aW9uTW9kZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAgICAgLy8geW91IGhhdmUgYm90
aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUgc2FtZQog
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25l
IG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5nIHJlcGxh
Y2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFByb3BlcnR5
RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW1w
bEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVk
IHRvIHJldHVybiBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0
ZWQgdHJhbnNpdGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7CkBA
IC0xNTksNyArMTU5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
bwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zaXRpb24gaWYgaXQgaXMg
YWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAg
ICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBiZSBpbiB0aGlzIGxv
b3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVUcmFuc2l0aW9uKS4gV2Ug
bmVlZApAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+CiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0Fj
dGl2ZVRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHByb3AsIHJlbmRlcmVyLCB0aGlzLCBt
b2RpZmllZEN1cnJlbnRTdHlsZSA/IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpIDogZnJvbVN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCB0aGlzLCBtb2Rp
ZmllZEN1cnJlbnRTdHlsZSA/IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpIDogZnJvbVN0eWxl
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0
aW9uLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRp
b24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKIAotICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24g
cmVuZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGlt
cGxpY2l0QW5pbWF0aW9uLnB0cigpLCByZW5kZXJlciwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBh
bmltYXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOworICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gZWxl
bWVudCAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGlj
aXRBbmltYXRpb24ucHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1h
dGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fdHJhbnNpdGlvbnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRpb24pKTsKICAg
ICAgICAgICAgICAgICB9CiAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkp
IHsKICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1v
dmVkKHRyYW5zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRy
YW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBw
cm9wZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUo
dHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOworICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAgZm9y
IHByb3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFt
ZSh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTE5OCwxNSArMTk4LDE1IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW8KICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQogewogICAg
IC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRp
ZG4ndCBoYXZlIGFueSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0
eSgpICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKQorICAgIGlmIChtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLmhhc0FuaW1hdGlvbnMoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmlt
YXRpb25zKCkgJiYgdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHls
ZS0+YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpKQorICAgIGlm
IChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0
U3R5bGUuaGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09
ICoodGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5B
QkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCkBAIC0yMjEsMTAgKzIyMSwxMCBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBCiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21pY1N0cmluZz4gbm9uZSgibm9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgIAogICAgIC8vIE5vdyBtYXJrIGFueSBzdGlsbCBhY3RpdmUg
YW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1hdGlvbnMuCi0gICAgaWYg
KHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51bUFuaW1zID0gdGFy
Z2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOworICAgIGlmICh0YXJnZXRTdHlsZS5hbmlt
YXRpb25zKCkpIHsKKyAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9u
cygpLT5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkg
ewotICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMo
KS0+YW5pbWF0aW9uKGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5
bGUuYW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcg
YW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmlt
YXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQpAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhl
IHNhdmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBz
dGF0ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnNldEFuaW1h
dGlvbihhbmltYXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmICgoYW5pbWF0aW9uLmR1cmF0
aW9uKCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYmIGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgp
ICYmIGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5p
bSA9IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCByZW5kZXJlciwgdGhpcywg
dGFyZ2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRpbmcg
S2V5ZnJhbWVBbmltYXRpb24gJXAgb24gcmVuZGVyZXIgJXAgd2l0aCBrZXlmcmFtZXMgJXMsIGR1
cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5pbS5n
ZXQoKSwgcmVuZGVyZXIsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0aW9u
LmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291bnQo
KSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNy
ZWF0ZShhbmltYXRpb24sIGVsZW1lbnQsIHRoaXMsICZ0YXJnZXRTdHlsZSk7CisgICAgICAgICAg
ICAgICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBl
bGVtZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBkdXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBp
dGVyYXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0uZ2V0KCksICZlbGVtZW50LCBhbmltYXRpb24u
bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVs
YXkoKSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpOwogCiAgICAgICAgICAgICAgICAgaWYg
KG1fc3VzcGVuZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRl
UGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwpAQCAtMjgwLDE4ICsyODAsMTggQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgICAgICBpZiAoIW5ld0Fu
aW1hdGlvbnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewogICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9u
LmdldCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgICAgIExP
RyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSByZW5kZXJl
ciAlcCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBh
bmltYXRpb24uZ2V0KCksICZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBz
dGQ6OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwogfQogCi1ib29s
IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCitib29sIENv
bXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24n
dCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24g
c3RhcnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUs
ICZ0YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKCZyZW5kZXJlciwg
Y3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZVRyYW5zaXRpb25zKGVsZW1l
bnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0
aW9ucyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKICAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGFuaW1hdGlvblN0YXRl
Q2hhbmdlZCA9IGZhbHNlOwpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRlKFJlbmRlckUKICAgICAgICAgYm9vbCBjaGVja0ZvclN0YWNraW5nQ29udGV4
dCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25z
LnZhbHVlcygpKSB7CiAgICAgICAgICAgICBib29sIGRpZEJsZW5kU3R5bGUgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJl
bnRTdHlsZSwgdGFyZ2V0U3R5bGUsIGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAg
ICAgICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGJsZW5k
ZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVD
aGFuZ2VkID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKGRpZEJsZW5kU3R5bGUpCkBAIC0zMzMs
NyArMzMzLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRQogICAg
ICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmdldChuYW1lKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewogICAgICAg
ICAgICAgYm9vbCBkaWRCbGVuZFN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJh
bWVBbmltLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5
bGUsIGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAgICAgICBpZiAoa2V5ZnJh
bWVBbmltLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVu
ZFN0eWxlKSkKICAgICAgICAgICAgICAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSB0cnVlOwog
CiAgICAgICAgICAgICBmb3JjZVN0YWNraW5nQ29udGV4dCB8PSBkaWRCbGVuZFN0eWxlICYmIGtl
eWZyYW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lv
biAyMjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmlt
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICB+
Q29tcG9zaXRlQW5pbWF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7Cisg
ICAgdm9pZCBjbGVhckVsZW1lbnQoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50
JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOwor
ICAgIGJvb2wgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+JiBibGVuZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNm
b3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZSYpOwogCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVt
ZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmLCBjb25z
dCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5
bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUp
OwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlv
bj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxp
Y2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBh
bmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCi0gICAgOiBBbmlt
YXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKLSAgICAsIG1fZnJvbVN0
eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0eWxlKSkKK0ltcGxpY2l0QW5pbWF0aW9u
OjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3Bl
cnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1h
dGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQor
ICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRp
b24pCisgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkK
ICAgICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKICAgICAs
IG1fYW5pbWF0aW5nUHJvcGVydHkoYW5pbWF0aW5nUHJvcGVydHkpCiB7CkBAIC02MSw3ICs2MSw3
IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4g
bV9lbGVtZW50LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9
CiAKLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKK2Jvb2wgSW1wbGljaXRBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBn
ZXQgdGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNs
ZWFuaW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1
cm4uIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkocmV2aXNp
b24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBSZW5kZXJFbGVt
ZW50OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBJbXBsaWNpdEFuaW1h
dGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElt
cGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1By
b3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3Qg
QW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVs
ZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwg
cmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJv
cGVydHksIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsK
ICAgICAKICAgICBDU1NQcm9wZXJ0eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNpdGlvblByb3BlcnR5OyB9CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2
b2lkIGVuZEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0
ZUFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpIG92ZXJyaWRlOwor
ICAgIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYg
dGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUs
IGJvb2wmIGRpZEJsZW5kU3R5bGUpOwogICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7CiAKQEAg
LTg2LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgSW1wbGlj
aXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVu
dCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgSW1wbGlj
aXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENv
bXBvc2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCB+SW1w
bGljaXRBbmltYXRpb24oKTsKIAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJs
ZW5kaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMCArNDUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFuaW1hdGlv
bjo6S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2Uo
YW5pbWF0aW9uLCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uKQorS2V5ZnJhbWVBbmltYXRp
b246OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50
JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0
aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmlt
YXRpb24ubmFtZSgpKQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25l
UHRyKCp1bmFuaW1hdGVkU3R5bGUpKQorICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHVuYW5pbWF0ZWRTdHlsZSkpCiB7CiAgICAgcmVzb2x2ZUtleWZyYW1lU3R5
bGVzKCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpmZXRj
aEludGVydmFsRW5kCiAgICAgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlm
cmFtZS50aW1pbmdGdW5jdGlvbihuYW1lKCkpKTsKIH0KIAotYm9vbCBLZXlmcmFtZUFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBk
aWRCbGVuZFN0eWxlKQorYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBk
aWRCbGVuZFN0eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVk
CiAgICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIy
MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBSZW5kZXJTdHlsZTsK
IC8vIEEgS2V5ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBh
bmltYXRpb24gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1h
dGlvbiBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24s
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMg
UmVmPEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24s
IEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwg
Y29tcG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3Np
dGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAgIGJvb2wgYW5pbWF0
ZShDb21wb3NpdGVBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKSBv
dmVycmlkZTsKKyAgICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBj
b21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29t
cG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7Cisg
ICAgS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0
ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZp
cnR1YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMg
Zm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24g
dGltZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEwNCw3ICsxMTA0LDggQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQoKQog
ICAgIGlmIChtX3N0eWxlLmhhc0ZpeGVkQmFja2dyb3VuZEltYWdlKCkgJiYgIXNldHRpbmdzKCku
Zml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50KCkpCiAgICAgICAgIHZpZXco
KS5mcmFtZVZpZXcoKS5yZW1vdmVTbG93UmVwYWludE9iamVjdCh0aGlzKTsKIAotICAgIGFuaW1h
dGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOworICAgIGlmIChlbGVtZW50KCkpCisgICAg
ICAgIGFuaW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKmVsZW1lbnQoKSk7CiAKICAgICBkZXN0
cm95TGVmdG92ZXJDaGlsZHJlbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBA
IFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW4KICAgICBpZiAocmVuZGVy
ZXIoKS5hbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIo
cmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIEFuaW1hdGlvbkJhc2U6OlJ1bm5pbmcg
fCBBbmltYXRpb25CYXNlOjpQYXVzZWQpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGN1cnJUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhib3gtPmJvcmRlckJveFJlY3QoKSwgYm94LT5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRpb24oKS5nZXRBbmltYXRlZFN0eWxl
Rm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5k
ZXJlcihyZW5kZXJlcigpKTsKICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFu
c2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgbWFr
ZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkp
OwogICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4
LDcgKzM5OCw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKIAog
ICAgIGF1dG8mIGluaXRpYWxTdHlsZSA9IG5ld1JlbmRlcmVyLT5zdHlsZSgpOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZTsKLSAgICBuZXdSZW5kZXJlci0+
YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVuZGVyZXIsIGluaXRpYWxTdHlsZSwg
YW5pbWF0ZWRTdHlsZSk7CisgICAgbmV3UmVuZGVyZXItPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1h
dGlvbnMoZWxlbWVudCwgaW5pdGlhbFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKICAgICBpZiAoYW5p
bWF0ZWRTdHlsZSkgewogICAgICAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJbnRlcm5hbChXVEZN
b3ZlKCphbmltYXRlZFN0eWxlKSk7CiAgICAgICAgIG5ld1JlbmRlcmVyLT5zZXRIYXNJbml0aWFs
QW5pbWF0ZWRTdHlsZSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJl
ZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRy
ZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBA
IEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXQKICAgICB9CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7Ci0gICAgaWYgKGVsZW1l
bnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpyZW5k
ZXJlciwgKm5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVu
dCgpLmZyYW1lKCktPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0
eWxlLCBhbmltYXRlZFN0eWxlKSkKICAgICAgICAgcmVjb21wb3NpdGVMYXllciA9IHRydWU7CiAK
ICAgICBpZiAoYW5pbWF0ZWRTdHlsZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgRXhjZXB0aW9uT3I8
Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0
dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVu
ZGVyZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOworICAgIHJl
dHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBB
dG9taWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9y
PGJvb2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTIwLDE0ICs5MjAsMTQgQEAgRXhjZXB0
aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogICAgIGlmICghcHNldWRvRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0g
ICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKHBzZXVk
b0VsZW1lbnQtPnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VU
aW1lKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRp
bWUoKnBzZXVkb0VsZW1lbnQsIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1l
KTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhdXNlVGltZSA8IDApCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUo
KS0+YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwg
cHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24o
KS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUp
OwogfQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1l
LCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTQyLDcgKzk0
Miw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2kKICAgICBpZiAo
IXBzZXVkb0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAotICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRp
b25BdFRpbWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgcHJvcGVydHksIHBhdXNlVGltZSk7
CisgICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZSgq
cHNldWRvRWxlbWVudCwgcHJvcGVydHksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiBlbGVtZW50
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320636</attachid>
            <date>2017-09-13 06:51:40 -0700</date>
            <delta_ts>2017-09-13 08:16:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>animation-functions-element-3.patch</filename>
            <type>text/plain</type>
            <size>49988</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTk2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE3LTA5LTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vcmUgb2YgdGhlIENT
UyBhbmltYXRpb24gc3lzdGVtIGludGVybmFscyBlbGVtZW50IGJhc2VkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1MgYW5pbWF0aW9ucyBhbmltYXRl
IGVsZW1lbnQgc3R5bGUuIENvbnRpbnVlIG1vdmluZyBhd2F5IGZyb20gcmVuZGVyZXJzIGluIHRo
ZSBhbmltYXRpb24gY29kZS4KKworICAgICAgICBBbHNvIGRvIHNvbWUgZ2VuZXJhbCBtb2Rlcm5p
emF0aW9uLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eSk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9u
VGltZXJGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVy
YXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVk
U3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVB
bmltYXRpb25UaW1lckZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0
QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246
OkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRl
cjo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVk
RWxlbWVudFVwZGF0ZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KToKKwogMjAxNy0wOS0xMyAgTXMyZ2VyICA8TXMyZ2Vy
QGlnYWxpYS5jb20+CiAKICAgICAgICAgRGlzYWxsb3cgcGFzc2luZyBudWxsIHZhbHVlcyB0byB2
YXJpb3VzIFdlYkdMMiBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDc3LDcgKzI0NzcsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlCiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQ29tcG9zaXRlZCgpICYmIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KHBy
b3BlcnR5SUQpKSB7Ci0gICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCku
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7CisgICAgICAgIG93bmVkU3R5
bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5k
ZXJlcik7CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICYmICFlbGVtZW50Lmlz
UHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWNoZWQgcHNl
dWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhhcyBiZWVuIHJ1biBh
dCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIyMTk2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxMiArNzYsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVT
cHJpbmdGdW5jdGlvbgogICAgIHJldHVybiBzb2x2ZXIuc29sdmUodCAqIGR1cmF0aW9uKTsKIH0K
IAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgIDogbV9lbGVtZW50KHJlbmRlcmVyLT5lbGVtZW50KCkpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICA6IG1fZWxlbWVu
dCgmZWxlbWVudCkKKyAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRp
b24pCiAgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikp
CiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVy
YXRpb24KICAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQogICAgICAg
ICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDwKICAgICBmcmll
bmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRp
b24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBBbmltYXRpb25C
YXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYpOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0KIAogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyKCkgY29uc3Q7CkBAIC0xMzQsOCArMTM0LDYgQEAgcHVibGljOgogCiAg
ICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBj
b25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSYgLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLywgYm9vbCYg
ZGlkQmxlbmRTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDM0ICs4MywzMiBAQCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6fkNTU0FuaW1hCiB7CiB9CiAKLUNvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKK0NvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmcmVuZGVy
ZXIsIFsmXSB7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJl
KCZlbGVtZW50LCBbJl0gewogICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVh
dGUoKnRoaXMpOwogICAgIH0pOwogCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudCgmcmVuZGVyZXIuZG9jdW1lbnQoKSkpCisgICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudCgmZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKIAogICAgIHJldHVybiAqcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Y2xlYXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpjbGVhcihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmcmVuZGVyZXIpOworICAgIGF1dG8gaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HKEFu
aW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0
aGlzLCAmcmVuZGVyZXIpOworICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwogCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRj
aC5yZW1vdmVBbGxNYXRjaGluZyhbZWxlbWVudF0gKGNvbnN0IEV2ZW50VG9EaXNwYXRjaCYgaW5m
bykgewotICAgICAgICByZXR1cm4gaW5mby5lbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAg
bV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZlbnRUb0Rp
c3BhdGNoJiBpbmZvKSB7CisgICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkgPT0gJmVs
ZW1lbnQ7CiAgICAgfSk7CiAKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5yZW1vdmVB
bGxNYXRjaGluZyhbZWxlbWVudF0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAgbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJlbnRFbGVtZW50KSB7
CisgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKICAgICB9
KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9S
IHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwpAQCAtMTE4LDcgKzExNiw3IEBA
IGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWEKICAgICAvLyBGSVhNRTog
VGhlIGNvZGUgYmVsb3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29tbWVudCBhYm92
ZSBzYXlzIHJlZ2FyZGluZyBzdXNwZW5kZWQgc3RhdGUuCiAgICAgYXV0byYgYW5pbWF0aW9uID0g
Kml0LT52YWx1ZTsKICAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpOwot
ICAgIGFuaW1hdGlvbi5jbGVhclJlbmRlcmVyKCk7CisgICAgYW5pbWF0aW9uLmNsZWFyRWxlbWVu
dCgpOwogCiAgICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7CiAKQEAgLTE0MCwx
MCArMTM4LDkgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25Db250cgogICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOworICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9z
aXRlQW5pbWF0aW9uLmtleTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTU1LDExICsxNTIsMTEgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBD
U1NBbmltYXRpb25Db250cgogICAgIHJldHVybiB0aW1lVG9OZXh0U2VydmljZTsKIH0KIAotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7CiAK
LSAgICBjb25zdCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBjb25zdCBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVs
ZW1lbnQpOwogICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpICYmIGNv
bXBvc2l0ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICB0aW1lVG9OZXh0U2Vy
dmljZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIApAQCAtMjg5
LDcgKzI4Niw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW0KIAog
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
QW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSwgcnVu
bmluZ1N0YXRlKTsKQEAgLTI5Nyw3ICsyOTYsOSBAQCBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRl
IHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGlu
Z1Byb3BlcnR5KHByb3BlcnR5LCB0cnVlLCBydW5uaW5nU3RhdGUpOwpAQCAtNDAyLDE0ICs0MDMs
MTEgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2V0QQogICAgIG1fYWxs
b3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKIH0KIAotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQogewotICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpy
ZW5kZXJlcik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBl
bnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1h
dGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICByZW5kZXJlci0+
ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAg
IGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBz
dGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTQxNywxNCArNDE1LDExIEBAIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCitib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7Ci0gICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
VHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAg
cmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OworICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00NjcsMjQgKzQ2MiwyNCBAQCB2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlCiAgICAgc3RhcnRUaW1lUmVzcG9uc2UodGltZSk7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
YXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmcmVuZGVyZXIpOwor
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHJlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFu
aW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygqdGhpcyk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7CisgICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZSgpOwogICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAg
ICAgIGFuaW1hdGluZ1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxl
KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gYW5pbWF0aW5n
U3R5bGU7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91
bmRzKSBjb25zdAorYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29u
c3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZy
ZW5kZXJlcik7CisgICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdl
dCgmZWxlbWVudCk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwog
CkBAIC02MzEsMjkgKzYyNiwyOSBAQCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5pbWF0
aW9uQ29uCiB7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9kYXRh
LT5jbGVhcihyZW5kZXJlcikpCisgICAgaWYgKCFtX2RhdGEtPmNsZWFyKGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
OwotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWlu
Z0Rlc3Ryb3llZCgpKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5n
RGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7Ci0gICAg
ZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworICAgIEFTU0VS
VChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5Q
YWdlQ2FjaGUpOworICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlv
bigpOwogfQogCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7Ci0gICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXpl
ZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVy
ZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgYXV0byogb2xkU3R5bGUgPSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmhhc0luaXRpYWxpemVkU3R5bGUoKSkgPyAmcmVuZGVyZXItPnN0eWxlKCkg
OiBudWxscHRyOwogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMo
KSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLmFuaW1hdGlvbnMo
KSAmJiAhbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3Rh
dGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIERvbid0IHJ1biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChy
ZW5kZXJlci52aWV3KCkucHJpbnRpbmcoKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLnJl
bmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KQEAgLTY2MSwzNyArNjU2LDQxIEBAIGJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWEKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdl
IHJlc2V0IHRoZSBhbmltYXRpb24uIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVl
cyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAKLSAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IGFub255bW91cyBwc2V1ZG8gZWxlbWVudHMgbGlrZSA6Zmlyc3QtbGluZSBvciA6Zmly
c3QtbGV0dGVyLgotICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCkpOworICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7CisgICAgYm9vbCBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBjb21w
b3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3U3R5bGUsIGFuaW1h
dGVkU3R5bGUpOwogCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiByZW5kZXJlckFuaW1hdGlvbnMg
PSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYm9vbCBh
bmltYXRpb25TdGF0ZUNoYW5nZWQgPSByZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0ZShyZW5kZXJl
ciwgb2xkU3R5bGUsIG5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKTsKLQotICAgIGlmIChyZW5kZXJl
ci5wYXJlbnQoKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAgICAgIGF1dG8mIGZyYW1lVmlldyA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyQW5pbWF0aW9ucy5oYXNB
bmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkpCisgICAgaWYgKChyZW5kZXJlciAmJiByZW5k
ZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlvbnMoKSB8fCAob2xkU3R5bGUgJiYg
b2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKKyAgICAgICAgYXV0byYgZnJhbWVWaWV3ID0gKmVs
ZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24u
aGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQogICAgICAgICAgICAgbV9kYXRhLT5z
ZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVy
Rm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRp
bWVyRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgZnJhbWVWaWV3LnNjaGVkdWxlQW5pbWF0
aW9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuaW1hdGlvblN0YXRlQ2hhbmdlZDsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpnZXRB
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVkU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRl
cmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJu
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmhh
c0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAg
ICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpyZW5kZXJlci5lbGVt
ZW50KCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24o
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKIHsKKyAg
ICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0
aW9uKHJlbmRlcmVyLCBib3VuZHMpOworICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwogfQogCiB2b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGRvdWJsZSBzdGFydFRpbWUpCkBAIC03MDMsMTAgKzcwMiwxMCBAQCB2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hCiAgICAgbV9kYXRhLT5yZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpCiB7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0
aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VBbmltYXRpb25B
dFRpbWUocmVuZGVyZXIsIG5hbWUsIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlQW5pbWF0
aW9uQXRUaW1lKGVsZW1lbnQsIG5hbWUsIHQpOwogfQogCiB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KSBj
b25zdApAQCAtNzE0LDEwICs3MTMsMTAgQEAgdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6bnVtYmVyTwogICAgIHJldHVybiBtX2RhdGEtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhk
b2N1bWVudCk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KQogewogICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMp
OwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShyZW5kZXJlciwgcHJv
cGVydHksIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVt
ZW50LCBwcm9wZXJ0eSwgdCk7CiB9CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0
ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwogICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7CiAKLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wgdXBkYXRl
QW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJF
bGVtZW50Jik7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKKyAgICBib29s
IHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQg
b2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCiAgICAgLy8g
dXNpbmcgdGhlIGdpdmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgc29tZQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gb3IgdHJh
bnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlLgogICAgIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiwgZG91YmxlIHN0YXJ0VGltZSk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5
IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRp
bWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVz
ZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAgIFdFQkNP
UkVfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNv
bnN0OyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKICAgICAKICAgICBib29sIGlzUnVu
bmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQsIEFu
aW1hdGlvbkJhc2U6OlJ1bm5pbmdTdGF0ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDggKzUyLDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5p
bWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7
CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2Vk
ID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7CiAKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBjbGVhcihSZW5k
ZXJFbGVtZW50Jik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oRWxlbWVudCYpOworICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwogCiAgICAgdm9pZCB1
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7CiAgICAgdm9pZCBzdGFydFVwZGF0
ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NT
UHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKICAgICBib29s
IGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50Jiwg
Q1NTUHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKIAotICAg
IGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKFJl
bmRlckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmKTsKIAotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVs
ZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIGRvdWJsZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKTsKICAgICAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOwogCi0gICAg
dm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKKyAg
ICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50Jik7CiAKICAgICBi
b29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9CiAgICAgdm9pZCBzZXRBbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwogICAgIHZvaWQgc3Rh
cnRUaW1lUmVzcG9uc2UoZG91YmxlIHQpOwogCi0gICAgSGFzaE1hcDxSZW5kZXJFbGVtZW50Kiwg
UmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5pbWF0aW9uczsKKyAgICBI
YXNoTWFwPEVsZW1lbnQqLCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwogICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CiAgICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKICAgICBGcmFtZSYgbV9mcmFtZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBA
IENvbXBvc2l0ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigKICAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KICAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KIAotICAgIGNsZWFyUmVuZGVyZXIo
KTsKKyAgICBjbGVhckVsZW1lbnQoKTsKICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OmNsZWFyUmVuZGVyZXIoKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVu
dCgpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
bGVhciB0aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3
ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgpAQCAtNzcsMTAgKzc3LDEwIEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVy
ZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFj
dXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSAmJiBtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkpCisgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFj
dGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwpAQCAtOTEsOSArOTEsOSBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwot
ICAgIGlmICh0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkt
PmFuaW1hdGlvbihpKTsKKyAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBib29sIGlzQWN0aXZlVHJh
bnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpID4gMDsK
IAogICAgICAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25Nb2RlIG1vZGUgPSBhbmltYXRpb24u
YW5pbWF0aW9uTW9kZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAgICAgLy8geW91IGhhdmUgYm90
aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUgc2FtZQog
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25l
IG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5nIHJlcGxh
Y2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFByb3BlcnR5
RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW1w
bEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVk
IHRvIHJldHVybiBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0
ZWQgdHJhbnNpdGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7CkBA
IC0xNTksNyArMTU5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
bwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zaXRpb24gaWYgaXQgaXMg
YWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAg
ICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBiZSBpbiB0aGlzIGxv
b3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVUcmFuc2l0aW9uKS4gV2Ug
bmVlZApAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+CiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0Fj
dGl2ZVRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHByb3AsIHJlbmRlcmVyLCB0aGlzLCBt
b2RpZmllZEN1cnJlbnRTdHlsZSA/IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpIDogZnJvbVN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9k
aWZpZWRDdXJyZW50U3R5bGUgPyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9u
LT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKIAotICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gcmVu
ZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxp
Y2l0QW5pbWF0aW9uLnB0cigpLCByZW5kZXJlciwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmlt
YXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOworICAgICAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gZWxlbWVu
dCAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGljaXRB
bmltYXRpb24ucHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1hdGlv
bi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
dHJhbnNpdGlvbnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRpb24pKTsKICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsK
ICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KHRyYW5zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRyYW5z
aXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBwcm9w
ZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAgZm9yIHBy
b3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZSh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE5OCwxNSArMTk4LDE1IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0
aW8KICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQogewogICAgIC8v
IE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4n
dCBoYXZlIGFueSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
ICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKQorICAgIGlmIChtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLmhhc0FuaW1hdGlvbnMoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRp
b25zKCkgJiYgdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+
YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpKQorICAgIGlmIChj
dXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5
bGUuaGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoo
dGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KENTU19BTklNQVRJT05TX0xFVkVMXzIpCkBAIC0yMjEsMTAgKzIyMSwxMCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gbm9uZSgibm9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIAogICAgIC8vIE5vdyBtYXJrIGFueSBzdGlsbCBhY3RpdmUgYW5p
bWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1hdGlvbnMuCi0gICAgaWYgKHRh
cmdldFN0eWxlLT5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0
U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOworICAgIGlmICh0YXJnZXRTdHlsZS5hbmltYXRp
b25zKCkpIHsKKyAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygp
LT5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+
YW5pbWF0aW9uKGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUu
YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5p
bWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24uaXNWYWxpZEFuaW1hdGlvbigpKQpAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNh
dmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBzdGF0
ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnNldEFuaW1hdGlv
bihhbmltYXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmICgoYW5pbWF0aW9uLmR1cmF0aW9u
KCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYmIGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpICYm
IGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbSA9
IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCByZW5kZXJlciwgdGhpcywgdGFy
Z2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRpbmcgS2V5
ZnJhbWVBbmltYXRpb24gJXAgb24gcmVuZGVyZXIgJXAgd2l0aCBrZXlmcmFtZXMgJXMsIGR1cmF0
aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5pbS5nZXQo
KSwgcmVuZGVyZXIsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0aW9uLmR1
cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291bnQoKSk7
CisgICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0
ZShhbmltYXRpb24sIGVsZW1lbnQsICp0aGlzLCB0YXJnZXRTdHlsZSk7CisgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBlbGVt
ZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBkdXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBpdGVy
YXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0uZ2V0KCksICZlbGVtZW50LCBhbmltYXRpb24ubmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXko
KSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1f
c3VzcGVuZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRlUGxh
eVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwpAQCAtMjgwLDE4ICsyODAsMTggQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgICAgICBpZiAoIW5ld0FuaW1h
dGlvbnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewogICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdl
dCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSByZW5kZXJlciAl
cCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBhbmlt
YXRpb24uZ2V0KCksICZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzdGQ6
OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwogfQogCi1ib29sIENv
bXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCitib29sIENvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBk
byBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3Rh
cnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0
YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKCZyZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZVRyYW5zaXRpb25zKGVsZW1lbnQs
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9u
cyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGFuaW1hdGlvblN0YXRlQ2hh
bmdlZCA9IGZhbHNlOwpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9u
OjphbmltYXRlKFJlbmRlckUKICAgICAgICAgYm9vbCBjaGVja0ZvclN0YWNraW5nQ29udGV4dCA9
IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7CiAgICAgICAgICAgICBib29sIGRpZEJsZW5kU3R5bGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUsIGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGJsZW5kZWRT
dHlsZSwgZGlkQmxlbmRTdHlsZSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVDaGFu
Z2VkID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKGRpZEJsZW5kU3R5bGUpCkBAIC0zMzMsNyAr
MzMzLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRQogICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmdldChuYW1lKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewogICAgICAgICAg
ICAgYm9vbCBkaWRCbGVuZFN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUs
IGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVuZFN0
eWxlKSkKICAgICAgICAgICAgICAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSB0cnVlOwogCiAg
ICAgICAgICAgICBmb3JjZVN0YWNraW5nQ29udGV4dCB8PSBkaWRCbGVuZFN0eWxlICYmIGtleWZy
YW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAy
MjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICB+Q29t
cG9zaXRlQW5pbWF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7CisgICAg
dm9pZCBjbGVhckVsZW1lbnQoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAg
IGJvb2wgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+JiBibGVuZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0
QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3Jt
QW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSYpOwogCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUp
OworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwog
ICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmlt
YXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCi0gICAgOiBBbmltYXRp
b25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKLSAgICAsIG1fZnJvbVN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0eWxlKSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJ
bXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5
SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlv
biYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQorICAg
IDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24p
CisgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkKICAg
ICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKICAgICAsIG1f
YW5pbWF0aW5nUHJvcGVydHkoYW5pbWF0aW5nUHJvcGVydHkpCiB7CkBAIC02MSw3ICs2MSw3IEBA
IGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAK
LWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKK2Jvb2wgSW1wbGljaXRBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4u
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkocmV2aXNpb24g
MjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBSZW5kZXJFbGVtZW50
OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBJbXBsaWNpdEFuaW1hdGlv
biA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEltcGxp
Y2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3Bl
cnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5p
bWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1l
bnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVu
ZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVy
dHksIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsKICAg
ICAKICAgICBDU1NQcm9wZXJ0eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5OyB9CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lk
IGVuZEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFu
aW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpIG92ZXJyaWRlOworICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJv
b2wmIGRpZEJsZW5kU3R5bGUpOwogICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
c2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7CiAKQEAgLTg2
LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENvbXBv
c2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKIAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5k
aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MCArNDUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFuaW1hdGlvbjo6
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UoYW5p
bWF0aW9uLCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uKQorS2V5ZnJhbWVBbmltYXRpb246
OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBl
bGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9u
LCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQorICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6
OmNsb25lUHRyKHVuYW5pbWF0ZWRTdHlsZSkpCiB7CiAgICAgcmVzb2x2ZUtleWZyYW1lU3R5bGVz
KCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpmZXRjaElu
dGVydmFsRW5kCiAgICAgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlmcmFt
ZS50aW1pbmdGdW5jdGlvbihuYW1lKCkpKTsKIH0KIAotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyRWxl
bWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQorYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAg
ICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyMTk2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8v
IEEgS2V5ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmlt
YXRpb24gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlv
biBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVs
ZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29t
cG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVB
bmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAgIGJvb2wgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKSBvdmVy
cmlkZTsKKyAgICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjb21w
dXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CisgICAg
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFu
aW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9y
IHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGlt
ZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
NCw3ICsxMTA0LDggQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAg
IGlmIChtX3N0eWxlLmhhc0ZpeGVkQmFja2dyb3VuZEltYWdlKCkgJiYgIXNldHRpbmdzKCkuZml4
ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50KCkpCiAgICAgICAgIHZpZXcoKS5m
cmFtZVZpZXcoKS5yZW1vdmVTbG93UmVwYWludE9iamVjdCh0aGlzKTsKIAotICAgIGFuaW1hdGlv
bigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOworICAgIGlmIChlbGVtZW50KCkpCisgICAgICAg
IGFuaW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKmVsZW1lbnQoKSk7CiAKICAgICBkZXN0cm95
TGVmdG92ZXJDaGlsZHJlbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFRy
YW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW4KICAgICBpZiAocmVuZGVyZXIo
KS5hbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIEFuaW1hdGlvbkJhc2U6OlJ1bm5pbmcgfCBB
bmltYXRpb25CYXNlOjpQYXVzZWQpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1
cnJUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhib3gtPmJvcmRlckJveFJlY3QoKSwgYm94LT5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRpb24oKS5nZXRBbmltYXRlZFN0eWxlRm9y
UmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJl
cihyZW5kZXJlcigpKTsKICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zv
cm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgbWFrZU1h
dHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcg
KzM5OCw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKIAogICAg
IGF1dG8mIGluaXRpYWxTdHlsZSA9IG5ld1JlbmRlcmVyLT5zdHlsZSgpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZTsKLSAgICBuZXdSZW5kZXJlci0+YW5p
bWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVuZGVyZXIsIGluaXRpYWxTdHlsZSwgYW5p
bWF0ZWRTdHlsZSk7CisgICAgbmV3UmVuZGVyZXItPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlv
bnMoZWxlbWVudCwgaW5pdGlhbFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKICAgICBpZiAoYW5pbWF0
ZWRTdHlsZSkgewogICAgICAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJbnRlcm5hbChXVEZNb3Zl
KCphbmltYXRlZFN0eWxlKSk7CiAgICAgICAgIG5ld1JlbmRlcmVyLT5zZXRIYXNJbml0aWFsQW5p
bWF0ZWRTdHlsZSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIEVs
ZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXQKICAgICB9CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7Ci0gICAgaWYgKGVsZW1lbnQu
ZG9jdW1lbnQoKS5mcmFtZSgpLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpyZW5kZXJl
ciwgKm5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCktPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0eWxl
LCBhbmltYXRlZFN0eWxlKSkKICAgICAgICAgcmVjb21wb3NpdGVMYXllciA9IHRydWU7CiAKICAg
ICBpZiAoYW5pbWF0ZWRTdHlsZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgRXhjZXB0aW9uT3I8Ym9v
bD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJu
IGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVy
ZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOworICAgIHJldHVy
biBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9t
aWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPGJv
b2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTIwLDE0ICs5MjAsMTQgQEAgRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogICAgIGlmICghcHNldWRvRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAg
cmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKHBzZXVkb0Vs
ZW1lbnQtPnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1l
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUo
KnBzZXVkb0VsZW1lbnQsIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhdXNlVGltZSA8IDApCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+
YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgcHJv
cGVydHlOYW1lLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5w
YXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOwog
fQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
UHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTQyLDcgKzk0Miw3
IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2kKICAgICBpZiAoIXBz
ZXVkb0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAotICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25B
dFRpbWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgcHJvcGVydHksIHBhdXNlVGltZSk7Cisg
ICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZSgqcHNl
dWRvRWxlbWVudCwgcHJvcGVydHksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiBlbGVtZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320639</attachid>
            <date>2017-09-13 08:16:58 -0700</date>
            <delta_ts>2017-09-13 08:18:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>animation-functions-element-4.patch</filename>
            <type>text/plain</type>
            <size>49988</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTk2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE3LTA5LTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vcmUgb2YgdGhlIENT
UyBhbmltYXRpb24gc3lzdGVtIGludGVybmFscyBlbGVtZW50IGJhc2VkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1MgYW5pbWF0aW9ucyBhbmltYXRl
IGVsZW1lbnQgc3R5bGUuIENvbnRpbnVlIG1vdmluZyBhd2F5IGZyb20gcmVuZGVyZXJzIGluIHRo
ZSBhbmltYXRpb24gY29kZS4KKworICAgICAgICBBbHNvIGRvIHNvbWUgZ2VuZXJhbCBtb2Rlcm5p
emF0aW9uLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eSk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9u
VGltZXJGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVy
YXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVk
U3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVB
bmltYXRpb25UaW1lckZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0
QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246
OkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRl
cjo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVk
RWxlbWVudFVwZGF0ZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KToKKwogMjAxNy0wOS0xMyAgTXMyZ2VyICA8TXMyZ2Vy
QGlnYWxpYS5jb20+CiAKICAgICAgICAgRGlzYWxsb3cgcGFzc2luZyBudWxsIHZhbHVlcyB0byB2
YXJpb3VzIFdlYkdMMiBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDc3LDcgKzI0NzcsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlCiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQ29tcG9zaXRlZCgpICYmIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KHBy
b3BlcnR5SUQpKSB7Ci0gICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCku
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7CisgICAgICAgIG93bmVkU3R5
bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5k
ZXJlcik7CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICYmICFlbGVtZW50Lmlz
UHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWNoZWQgcHNl
dWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhhcyBiZWVuIHJ1biBh
dCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIyMTk2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxMiArNzYsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVT
cHJpbmdGdW5jdGlvbgogICAgIHJldHVybiBzb2x2ZXIuc29sdmUodCAqIGR1cmF0aW9uKTsKIH0K
IAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgIDogbV9lbGVtZW50KHJlbmRlcmVyLT5lbGVtZW50KCkpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICA6IG1fZWxlbWVu
dCgmZWxlbWVudCkKKyAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRp
b24pCiAgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikp
CiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVy
YXRpb24KICAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQogICAgICAg
ICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDwKICAgICBmcmll
bmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRp
b24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBBbmltYXRpb25C
YXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYpOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0KIAogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyKCkgY29uc3Q7CkBAIC0xMzQsOCArMTM0LDYgQEAgcHVibGljOgogCiAg
ICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBj
b25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSYgLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLywgYm9vbCYg
ZGlkQmxlbmRTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDM0ICs4MywzMiBAQCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6fkNTU0FuaW1hCiB7CiB9CiAKLUNvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKK0NvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmcmVuZGVy
ZXIsIFsmXSB7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJl
KCZlbGVtZW50LCBbJl0gewogICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVh
dGUoKnRoaXMpOwogICAgIH0pOwogCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudCgmcmVuZGVyZXIuZG9jdW1lbnQoKSkpCisgICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudCgmZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKIAogICAgIHJldHVybiAqcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Y2xlYXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpjbGVhcihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmcmVuZGVyZXIpOworICAgIGF1dG8gaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HKEFu
aW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0
aGlzLCAmcmVuZGVyZXIpOworICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwogCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRj
aC5yZW1vdmVBbGxNYXRjaGluZyhbZWxlbWVudF0gKGNvbnN0IEV2ZW50VG9EaXNwYXRjaCYgaW5m
bykgewotICAgICAgICByZXR1cm4gaW5mby5lbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAg
bV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZlbnRUb0Rp
c3BhdGNoJiBpbmZvKSB7CisgICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkgPT0gJmVs
ZW1lbnQ7CiAgICAgfSk7CiAKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5yZW1vdmVB
bGxNYXRjaGluZyhbZWxlbWVudF0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAgbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJlbnRFbGVtZW50KSB7
CisgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKICAgICB9
KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9S
IHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwpAQCAtMTE4LDcgKzExNiw3IEBA
IGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWEKICAgICAvLyBGSVhNRTog
VGhlIGNvZGUgYmVsb3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29tbWVudCBhYm92
ZSBzYXlzIHJlZ2FyZGluZyBzdXNwZW5kZWQgc3RhdGUuCiAgICAgYXV0byYgYW5pbWF0aW9uID0g
Kml0LT52YWx1ZTsKICAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpOwot
ICAgIGFuaW1hdGlvbi5jbGVhclJlbmRlcmVyKCk7CisgICAgYW5pbWF0aW9uLmNsZWFyRWxlbWVu
dCgpOwogCiAgICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7CiAKQEAgLTE0MCwx
MCArMTM4LDkgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25Db250cgogICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOworICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9z
aXRlQW5pbWF0aW9uLmtleTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTU1LDExICsxNTIsMTEgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBD
U1NBbmltYXRpb25Db250cgogICAgIHJldHVybiB0aW1lVG9OZXh0U2VydmljZTsKIH0KIAotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7CiAK
LSAgICBjb25zdCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBjb25zdCBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVs
ZW1lbnQpOwogICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpICYmIGNv
bXBvc2l0ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICB0aW1lVG9OZXh0U2Vy
dmljZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIApAQCAtMjg5
LDcgKzI4Niw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW0KIAog
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
QW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSwgcnVu
bmluZ1N0YXRlKTsKQEAgLTI5Nyw3ICsyOTYsOSBAQCBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRl
IHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGlu
Z1Byb3BlcnR5KHByb3BlcnR5LCB0cnVlLCBydW5uaW5nU3RhdGUpOwpAQCAtNDAyLDE0ICs0MDMs
MTEgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2V0QQogICAgIG1fYWxs
b3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKIH0KIAotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQogewotICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpy
ZW5kZXJlcik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBl
bnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1h
dGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICByZW5kZXJlci0+
ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAg
IGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBz
dGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTQxNywxNCArNDE1LDExIEBAIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCitib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7Ci0gICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
VHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAg
cmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OworICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00NjcsMjQgKzQ2MiwyNCBAQCB2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlCiAgICAgc3RhcnRUaW1lUmVzcG9uc2UodGltZSk7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
YXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmcmVuZGVyZXIpOwor
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHJlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFu
aW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygqdGhpcyk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7CisgICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZSgpOwogICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAg
ICAgIGFuaW1hdGluZ1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxl
KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gYW5pbWF0aW5n
U3R5bGU7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91
bmRzKSBjb25zdAorYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29u
c3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZy
ZW5kZXJlcik7CisgICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdl
dCgmZWxlbWVudCk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwog
CkBAIC02MzEsMjkgKzYyNiwyOSBAQCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5pbWF0
aW9uQ29uCiB7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9kYXRh
LT5jbGVhcihyZW5kZXJlcikpCisgICAgaWYgKCFtX2RhdGEtPmNsZWFyKGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
OwotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWlu
Z0Rlc3Ryb3llZCgpKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5n
RGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7Ci0gICAg
ZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworICAgIEFTU0VS
VChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5Q
YWdlQ2FjaGUpOworICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlv
bigpOwogfQogCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7Ci0gICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXpl
ZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVy
ZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgYXV0byogb2xkU3R5bGUgPSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmhhc0luaXRpYWxpemVkU3R5bGUoKSkgPyAmcmVuZGVyZXItPnN0eWxlKCkg
OiBudWxscHRyOwogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMo
KSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLmFuaW1hdGlvbnMo
KSAmJiAhbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3Rh
dGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIERvbid0IHJ1biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChy
ZW5kZXJlci52aWV3KCkucHJpbnRpbmcoKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLnJl
bmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KQEAgLTY2MSwzNyArNjU2LDQxIEBAIGJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWEKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdl
IHJlc2V0IHRoZSBhbmltYXRpb24uIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVl
cyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAKLSAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IGFub255bW91cyBwc2V1ZG8gZWxlbWVudHMgbGlrZSA6Zmlyc3QtbGluZSBvciA6Zmly
c3QtbGV0dGVyLgotICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCkpOworICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7CisgICAgYm9vbCBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBjb21w
b3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3U3R5bGUsIGFuaW1h
dGVkU3R5bGUpOwogCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiByZW5kZXJlckFuaW1hdGlvbnMg
PSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYm9vbCBh
bmltYXRpb25TdGF0ZUNoYW5nZWQgPSByZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0ZShyZW5kZXJl
ciwgb2xkU3R5bGUsIG5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKTsKLQotICAgIGlmIChyZW5kZXJl
ci5wYXJlbnQoKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAgICAgIGF1dG8mIGZyYW1lVmlldyA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyQW5pbWF0aW9ucy5oYXNB
bmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkpCisgICAgaWYgKChyZW5kZXJlciAmJiByZW5k
ZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlvbnMoKSB8fCAob2xkU3R5bGUgJiYg
b2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKKyAgICAgICAgYXV0byYgZnJhbWVWaWV3ID0gKmVs
ZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24u
aGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQogICAgICAgICAgICAgbV9kYXRhLT5z
ZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVy
Rm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRp
bWVyRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgZnJhbWVWaWV3LnNjaGVkdWxlQW5pbWF0
aW9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuaW1hdGlvblN0YXRlQ2hhbmdlZDsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpnZXRB
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVkU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRl
cmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJu
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmhh
c0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAg
ICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpyZW5kZXJlci5lbGVt
ZW50KCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24o
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKIHsKKyAg
ICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0
aW9uKHJlbmRlcmVyLCBib3VuZHMpOworICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwogfQogCiB2b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGRvdWJsZSBzdGFydFRpbWUpCkBAIC03MDMsMTAgKzcwMiwxMCBAQCB2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hCiAgICAgbV9kYXRhLT5yZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpCiB7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0
aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VBbmltYXRpb25B
dFRpbWUocmVuZGVyZXIsIG5hbWUsIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlQW5pbWF0
aW9uQXRUaW1lKGVsZW1lbnQsIG5hbWUsIHQpOwogfQogCiB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KSBj
b25zdApAQCAtNzE0LDEwICs3MTMsMTAgQEAgdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6bnVtYmVyTwogICAgIHJldHVybiBtX2RhdGEtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhk
b2N1bWVudCk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KQogewogICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMp
OwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShyZW5kZXJlciwgcHJv
cGVydHksIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVt
ZW50LCBwcm9wZXJ0eSwgdCk7CiB9CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0
ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwogICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7CiAKLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wgdXBkYXRl
QW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJF
bGVtZW50Jik7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKKyAgICBib29s
IHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQg
b2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCiAgICAgLy8g
dXNpbmcgdGhlIGdpdmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgc29tZQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gb3IgdHJh
bnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlLgogICAgIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiwgZG91YmxlIHN0YXJ0VGltZSk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5
IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRp
bWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVz
ZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAgIFdFQkNP
UkVfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNv
bnN0OyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKICAgICAKICAgICBib29sIGlzUnVu
bmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQsIEFu
aW1hdGlvbkJhc2U6OlJ1bm5pbmdTdGF0ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDggKzUyLDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5p
bWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7
CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2Vk
ID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7CiAKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBjbGVhcihSZW5k
ZXJFbGVtZW50Jik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oRWxlbWVudCYpOworICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwogCiAgICAgdm9pZCB1
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7CiAgICAgdm9pZCBzdGFydFVwZGF0
ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NT
UHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKICAgICBib29s
IGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50Jiwg
Q1NTUHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKIAotICAg
IGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKFJl
bmRlckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmKTsKIAotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVs
ZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIGRvdWJsZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKTsKICAgICAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOwogCi0gICAg
dm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKKyAg
ICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50Jik7CiAKICAgICBi
b29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9CiAgICAgdm9pZCBzZXRBbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwogICAgIHZvaWQgc3Rh
cnRUaW1lUmVzcG9uc2UoZG91YmxlIHQpOwogCi0gICAgSGFzaE1hcDxSZW5kZXJFbGVtZW50Kiwg
UmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5pbWF0aW9uczsKKyAgICBI
YXNoTWFwPEVsZW1lbnQqLCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwogICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CiAgICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKICAgICBGcmFtZSYgbV9mcmFtZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBA
IENvbXBvc2l0ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigKICAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KICAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KIAotICAgIGNsZWFyUmVuZGVyZXIo
KTsKKyAgICBjbGVhckVsZW1lbnQoKTsKICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OmNsZWFyUmVuZGVyZXIoKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVu
dCgpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
bGVhciB0aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3
ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgpAQCAtNzcsMTAgKzc3LDEwIEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVy
ZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFj
dXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSAmJiBtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkpCisgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFj
dGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwpAQCAtOTEsOSArOTEsOSBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwot
ICAgIGlmICh0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkt
PmFuaW1hdGlvbihpKTsKKyAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBib29sIGlzQWN0aXZlVHJh
bnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpID4gMDsK
IAogICAgICAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25Nb2RlIG1vZGUgPSBhbmltYXRpb24u
YW5pbWF0aW9uTW9kZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAgICAgLy8geW91IGhhdmUgYm90
aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUgc2FtZQog
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25l
IG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5nIHJlcGxh
Y2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFByb3BlcnR5
RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW1w
bEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVk
IHRvIHJldHVybiBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0
ZWQgdHJhbnNpdGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7CkBA
IC0xNTksNyArMTU5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
bwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zaXRpb24gaWYgaXQgaXMg
YWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAg
ICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBiZSBpbiB0aGlzIGxv
b3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVUcmFuc2l0aW9uKS4gV2Ug
bmVlZApAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+CiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0Fj
dGl2ZVRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHByb3AsIHJlbmRlcmVyLCB0aGlzLCBt
b2RpZmllZEN1cnJlbnRTdHlsZSA/IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpIDogZnJvbVN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9k
aWZpZWRDdXJyZW50U3R5bGUgPyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9u
LT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKIAotICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gcmVu
ZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxp
Y2l0QW5pbWF0aW9uLnB0cigpLCByZW5kZXJlciwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmlt
YXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOworICAgICAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gZWxlbWVu
dCAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGljaXRB
bmltYXRpb24ucHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1hdGlv
bi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
dHJhbnNpdGlvbnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRpb24pKTsKICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsK
ICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KHRyYW5zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRyYW5z
aXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBwcm9w
ZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAgZm9yIHBy
b3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZSh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE5OCwxNSArMTk4LDE1IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0
aW8KICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQogewogICAgIC8v
IE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4n
dCBoYXZlIGFueSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
ICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKQorICAgIGlmIChtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLmhhc0FuaW1hdGlvbnMoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRp
b25zKCkgJiYgdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+
YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpKQorICAgIGlmIChj
dXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5
bGUuaGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoo
dGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KENTU19BTklNQVRJT05TX0xFVkVMXzIpCkBAIC0yMjEsMTAgKzIyMSwxMCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gbm9uZSgibm9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIAogICAgIC8vIE5vdyBtYXJrIGFueSBzdGlsbCBhY3RpdmUgYW5p
bWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1hdGlvbnMuCi0gICAgaWYgKHRh
cmdldFN0eWxlLT5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0
U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOworICAgIGlmICh0YXJnZXRTdHlsZS5hbmltYXRp
b25zKCkpIHsKKyAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygp
LT5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+
YW5pbWF0aW9uKGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUu
YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5p
bWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24uaXNWYWxpZEFuaW1hdGlvbigpKQpAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNh
dmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBzdGF0
ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnNldEFuaW1hdGlv
bihhbmltYXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmICgoYW5pbWF0aW9uLmR1cmF0aW9u
KCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYmIGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpICYm
IGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbSA9
IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCByZW5kZXJlciwgdGhpcywgdGFy
Z2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRpbmcgS2V5
ZnJhbWVBbmltYXRpb24gJXAgb24gcmVuZGVyZXIgJXAgd2l0aCBrZXlmcmFtZXMgJXMsIGR1cmF0
aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5pbS5nZXQo
KSwgcmVuZGVyZXIsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0aW9uLmR1
cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291bnQoKSk7
CisgICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0
ZShhbmltYXRpb24sIGVsZW1lbnQsICp0aGlzLCB0YXJnZXRTdHlsZSk7CisgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBlbGVt
ZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBkdXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBpdGVy
YXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0uZ2V0KCksICZlbGVtZW50LCBhbmltYXRpb24ubmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXko
KSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1f
c3VzcGVuZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRlUGxh
eVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwpAQCAtMjgwLDE4ICsyODAsMTggQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgICAgICBpZiAoIW5ld0FuaW1h
dGlvbnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewogICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdl
dCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSByZW5kZXJlciAl
cCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBhbmlt
YXRpb24uZ2V0KCksICZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzdGQ6
OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwogfQogCi1ib29sIENv
bXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCitib29sIENvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBk
byBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3Rh
cnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0
YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKCZyZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZVRyYW5zaXRpb25zKGVsZW1lbnQs
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9u
cyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGFuaW1hdGlvblN0YXRlQ2hh
bmdlZCA9IGZhbHNlOwpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9u
OjphbmltYXRlKFJlbmRlckUKICAgICAgICAgYm9vbCBjaGVja0ZvclN0YWNraW5nQ29udGV4dCA9
IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7CiAgICAgICAgICAgICBib29sIGRpZEJsZW5kU3R5bGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUsIGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGJsZW5kZWRT
dHlsZSwgZGlkQmxlbmRTdHlsZSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVDaGFu
Z2VkID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKGRpZEJsZW5kU3R5bGUpCkBAIC0zMzMsNyAr
MzMzLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRQogICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmdldChuYW1lKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewogICAgICAgICAg
ICAgYm9vbCBkaWRCbGVuZFN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUs
IGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVuZFN0
eWxlKSkKICAgICAgICAgICAgICAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSB0cnVlOwogCiAg
ICAgICAgICAgICBmb3JjZVN0YWNraW5nQ29udGV4dCB8PSBkaWRCbGVuZFN0eWxlICYmIGtleWZy
YW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAy
MjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICB+Q29t
cG9zaXRlQW5pbWF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7CisgICAg
dm9pZCBjbGVhckVsZW1lbnQoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAg
IGJvb2wgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+JiBibGVuZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0
QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3Jt
QW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSYpOwogCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUp
OworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwog
ICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmlt
YXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCi0gICAgOiBBbmltYXRp
b25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKLSAgICAsIG1fZnJvbVN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0eWxlKSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJ
bXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5
SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlv
biYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQorICAg
IDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24p
CisgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkKICAg
ICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKICAgICAsIG1f
YW5pbWF0aW5nUHJvcGVydHkoYW5pbWF0aW5nUHJvcGVydHkpCiB7CkBAIC02MSw3ICs2MSw3IEBA
IGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAK
LWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKK2Jvb2wgSW1wbGljaXRBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4u
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkocmV2aXNpb24g
MjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBSZW5kZXJFbGVtZW50
OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBJbXBsaWNpdEFuaW1hdGlv
biA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEltcGxp
Y2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3Bl
cnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5p
bWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1l
bnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVu
ZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVy
dHksIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsKICAg
ICAKICAgICBDU1NQcm9wZXJ0eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5OyB9CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lk
IGVuZEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFu
aW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpIG92ZXJyaWRlOworICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJv
b2wmIGRpZEJsZW5kU3R5bGUpOwogICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
c2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7CiAKQEAgLTg2
LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENvbXBv
c2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKIAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5k
aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MCArNDUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFuaW1hdGlvbjo6
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UoYW5p
bWF0aW9uLCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uKQorS2V5ZnJhbWVBbmltYXRpb246
OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBl
bGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9u
LCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQorICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6
OmNsb25lUHRyKHVuYW5pbWF0ZWRTdHlsZSkpCiB7CiAgICAgcmVzb2x2ZUtleWZyYW1lU3R5bGVz
KCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpmZXRjaElu
dGVydmFsRW5kCiAgICAgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlmcmFt
ZS50aW1pbmdGdW5jdGlvbihuYW1lKCkpKTsKIH0KIAotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyRWxl
bWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQorYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAg
ICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyMTk2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8v
IEEgS2V5ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmlt
YXRpb24gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlv
biBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVs
ZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29t
cG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVB
bmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAgIGJvb2wgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKSBvdmVy
cmlkZTsKKyAgICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjb21w
dXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CisgICAg
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFu
aW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9y
IHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGlt
ZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
NCw3ICsxMTA0LDggQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAg
IGlmIChtX3N0eWxlLmhhc0ZpeGVkQmFja2dyb3VuZEltYWdlKCkgJiYgIXNldHRpbmdzKCkuZml4
ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50KCkpCiAgICAgICAgIHZpZXcoKS5m
cmFtZVZpZXcoKS5yZW1vdmVTbG93UmVwYWludE9iamVjdCh0aGlzKTsKIAotICAgIGFuaW1hdGlv
bigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOworICAgIGlmIChlbGVtZW50KCkpCisgICAgICAg
IGFuaW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKmVsZW1lbnQoKSk7CiAKICAgICBkZXN0cm95
TGVmdG92ZXJDaGlsZHJlbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFRy
YW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW4KICAgICBpZiAocmVuZGVyZXIo
KS5hbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIEFuaW1hdGlvbkJhc2U6OlJ1bm5pbmcgfCBB
bmltYXRpb25CYXNlOjpQYXVzZWQpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1
cnJUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhib3gtPmJvcmRlckJveFJlY3QoKSwgYm94LT5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRpb24oKS5nZXRBbmltYXRlZFN0eWxlRm9y
UmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJl
cihyZW5kZXJlcigpKTsKICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zv
cm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgbWFrZU1h
dHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcg
KzM5OCw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKIAogICAg
IGF1dG8mIGluaXRpYWxTdHlsZSA9IG5ld1JlbmRlcmVyLT5zdHlsZSgpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZTsKLSAgICBuZXdSZW5kZXJlci0+YW5p
bWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVuZGVyZXIsIGluaXRpYWxTdHlsZSwgYW5p
bWF0ZWRTdHlsZSk7CisgICAgbmV3UmVuZGVyZXItPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlv
bnMoZWxlbWVudCwgaW5pdGlhbFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKICAgICBpZiAoYW5pbWF0
ZWRTdHlsZSkgewogICAgICAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJbnRlcm5hbChXVEZNb3Zl
KCphbmltYXRlZFN0eWxlKSk7CiAgICAgICAgIG5ld1JlbmRlcmVyLT5zZXRIYXNJbml0aWFsQW5p
bWF0ZWRTdHlsZSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIEVs
ZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXQKICAgICB9CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7Ci0gICAgaWYgKGVsZW1lbnQu
ZG9jdW1lbnQoKS5mcmFtZSgpLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpyZW5kZXJl
ciwgKm5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCktPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0eWxl
LCBhbmltYXRlZFN0eWxlKSkKICAgICAgICAgcmVjb21wb3NpdGVMYXllciA9IHRydWU7CiAKICAg
ICBpZiAoYW5pbWF0ZWRTdHlsZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgRXhjZXB0aW9uT3I8Ym9v
bD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJu
IGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVy
ZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOworICAgIHJldHVy
biBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9t
aWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPGJv
b2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTIwLDE0ICs5MjAsMTQgQEAgRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogICAgIGlmICghcHNldWRvRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAg
cmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKHBzZXVkb0Vs
ZW1lbnQtPnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1l
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUo
KnBzZXVkb0VsZW1lbnQsIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhdXNlVGltZSA8IDApCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+
YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgcHJv
cGVydHlOYW1lLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5w
YXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOwog
fQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
UHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTQyLDcgKzk0Miw3
IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2kKICAgICBpZiAoIXBz
ZXVkb0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAotICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25B
dFRpbWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgcHJvcGVydHksIHBhdXNlVGltZSk7Cisg
ICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZSgqcHNl
dWRvRWxlbWVudCwgcHJvcGVydHksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiBlbGVtZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320640</attachid>
            <date>2017-09-13 08:18:37 -0700</date>
            <delta_ts>2017-09-13 11:20:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>animation-functions-element-4.patch</filename>
            <type>text/plain</type>
            <size>51207</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTk2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE3LTA5LTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vcmUgb2YgdGhlIENT
UyBhbmltYXRpb24gc3lzdGVtIGludGVybmFscyBlbGVtZW50IGJhc2VkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1MgYW5pbWF0aW9ucyBhbmltYXRl
IGVsZW1lbnQgc3R5bGUuIENvbnRpbnVlIG1vdmluZyBhd2F5IGZyb20gcmVuZGVyZXJzIGluIHRo
ZSBhbmltYXRpb24gY29kZS4KKworICAgICAgICBBbHNvIGRvIHNvbWUgZ2VuZXJhbCBtb2Rlcm5p
emF0aW9uLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eSk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9u
VGltZXJGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVy
YXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVk
U3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVB
bmltYXRpb25UaW1lckZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0
QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246
OkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRl
cjo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVk
RWxlbWVudFVwZGF0ZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KToKKwogMjAxNy0wOS0xMyAgTXMyZ2VyICA8TXMyZ2Vy
QGlnYWxpYS5jb20+CiAKICAgICAgICAgRGlzYWxsb3cgcGFzc2luZyBudWxsIHZhbHVlcyB0byB2
YXJpb3VzIFdlYkdMMiBtZXRob2RzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDc3LDcgKzI0NzcsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlCiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQ29tcG9zaXRlZCgpICYmIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KHBy
b3BlcnR5SUQpKSB7Ci0gICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCku
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7CisgICAgICAgIG93bmVkU3R5
bGUgPSByZW5kZXJlci0+YW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5k
ZXJlcik7CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICYmICFlbGVtZW50Lmlz
UHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWNoZWQgcHNl
dWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhhcyBiZWVuIHJ1biBh
dCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIyMTk2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxMiArNzYsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVT
cHJpbmdGdW5jdGlvbgogICAgIHJldHVybiBzb2x2ZXIuc29sdmUodCAqIGR1cmF0aW9uKTsKIH0K
IAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgIDogbV9lbGVtZW50KHJlbmRlcmVyLT5lbGVtZW50KCkpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICA6IG1fZWxlbWVu
dCgmZWxlbWVudCkKKyAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRp
b24pCiAgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikp
CiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVy
YXRpb24KICAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQogICAgICAg
ICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDwKICAgICBmcmll
bmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRp
b24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBBbmltYXRpb25C
YXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYpOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0KIAogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyKCkgY29uc3Q7CkBAIC0xMzQsOCArMTM0LDYgQEAgcHVibGljOgogCiAg
ICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBj
b25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSYgLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLywgYm9vbCYg
ZGlkQmxlbmRTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDM0ICs4MywzMiBAQCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6fkNTU0FuaW1hCiB7CiB9CiAKLUNvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKK0NvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmcmVuZGVy
ZXIsIFsmXSB7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJl
KCZlbGVtZW50LCBbJl0gewogICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVh
dGUoKnRoaXMpOwogICAgIH0pOwogCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudCgmcmVuZGVyZXIuZG9jdW1lbnQoKSkpCisgICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudCgmZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKIAogICAgIHJldHVybiAqcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Y2xlYXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpjbGVhcihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmcmVuZGVyZXIpOworICAgIGF1dG8gaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HKEFu
aW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0
aGlzLCAmcmVuZGVyZXIpOworICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwogCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRj
aC5yZW1vdmVBbGxNYXRjaGluZyhbZWxlbWVudF0gKGNvbnN0IEV2ZW50VG9EaXNwYXRjaCYgaW5m
bykgewotICAgICAgICByZXR1cm4gaW5mby5lbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAg
bV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZlbnRUb0Rp
c3BhdGNoJiBpbmZvKSB7CisgICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkgPT0gJmVs
ZW1lbnQ7CiAgICAgfSk7CiAKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5yZW1vdmVB
bGxNYXRjaGluZyhbZWxlbWVudF0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09IGVsZW1lbnQ7CisgICAgbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJlbnRFbGVtZW50KSB7
CisgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKICAgICB9
KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9S
IHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwpAQCAtMTE4LDcgKzExNiw3IEBA
IGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWEKICAgICAvLyBGSVhNRTog
VGhlIGNvZGUgYmVsb3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29tbWVudCBhYm92
ZSBzYXlzIHJlZ2FyZGluZyBzdXNwZW5kZWQgc3RhdGUuCiAgICAgYXV0byYgYW5pbWF0aW9uID0g
Kml0LT52YWx1ZTsKICAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpOwot
ICAgIGFuaW1hdGlvbi5jbGVhclJlbmRlcmVyKCk7CisgICAgYW5pbWF0aW9uLmNsZWFyRWxlbWVu
dCgpOwogCiAgICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7CiAKQEAgLTE0MCwx
MCArMTM4LDkgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25Db250cgogICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOworICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9z
aXRlQW5pbWF0aW9uLmtleTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTU1LDExICsxNTIsMTEgQEAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBD
U1NBbmltYXRpb25Db250cgogICAgIHJldHVybiB0aW1lVG9OZXh0U2VydmljZTsKIH0KIAotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7CiAK
LSAgICBjb25zdCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5nZXQoJnJlbmRlcmVyKTsKKyAgICBjb25zdCBDb21wb3NpdGVBbmlt
YXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVs
ZW1lbnQpOwogICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpICYmIGNv
bXBvc2l0ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICB0aW1lVG9OZXh0U2Vy
dmljZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIApAQCAtMjg5
LDcgKzI4Niw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW0KIAog
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
QW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSwgcnVu
bmluZ1N0YXRlKTsKQEAgLTI5Nyw3ICsyOTYsOSBAQCBib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc1J1CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRl
IHJ1bm5pbmdTdGF0ZSkgY29uc3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KCZyZW5kZXJlcik7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgaWYgKCFhbmltYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGlu
Z1Byb3BlcnR5KHByb3BlcnR5LCB0cnVlLCBydW5uaW5nU3RhdGUpOwpAQCAtNDAyLDE0ICs0MDMs
MTEgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2V0QQogICAgIG1fYWxs
b3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKIH0KIAotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQogewotICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpy
ZW5kZXJlcik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBl
bnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1h
dGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICByZW5kZXJlci0+
ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAgICAg
IGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBz
dGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTQxNywxNCArNDE1LDExIEBAIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCitib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7Ci0gICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
VHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAg
cmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OworICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00NjcsMjQgKzQ2MiwyNCBAQCB2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlCiAgICAgc3RhcnRUaW1lUmVzcG9uc2UodGltZSk7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
YXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmcmVuZGVyZXIpOwor
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHJlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFu
aW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygqdGhpcyk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7CisgICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZSgpOwogICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAg
ICAgIGFuaW1hdGluZ1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxl
KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gYW5pbWF0aW5n
U3R5bGU7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91
bmRzKSBjb25zdAorYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29u
c3QKIHsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZy
ZW5kZXJlcik7CisgICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdl
dCgmZWxlbWVudCk7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwog
CkBAIC02MzEsMjkgKzYyNiwyOSBAQCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5pbWF0
aW9uQ29uCiB7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9kYXRh
LT5jbGVhcihyZW5kZXJlcikpCisgICAgaWYgKCFtX2RhdGEtPmNsZWFyKGVsZW1lbnQpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
OwotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWlu
Z0Rlc3Ryb3llZCgpKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5n
RGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7Ci0gICAg
ZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworICAgIEFTU0VS
VChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5Q
YWdlQ2FjaGUpOworICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlv
bigpOwogfQogCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7Ci0gICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXpl
ZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVy
ZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgYXV0byogb2xkU3R5bGUgPSAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmhhc0luaXRpYWxpemVkU3R5bGUoKSkgPyAmcmVuZGVyZXItPnN0eWxlKCkg
OiBudWxscHRyOwogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMo
KSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLmFuaW1hdGlvbnMo
KSAmJiAhbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKQorICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3Rh
dGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIERvbid0IHJ1biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChy
ZW5kZXJlci52aWV3KCkucHJpbnRpbmcoKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLnJl
bmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KQEAgLTY2MSwzNyArNjU2LDQxIEBAIGJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWEKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdl
IHJlc2V0IHRoZSBhbmltYXRpb24uIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVl
cyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAKLSAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IGFub255bW91cyBwc2V1ZG8gZWxlbWVudHMgbGlrZSA6Zmlyc3QtbGluZSBvciA6Zmly
c3QtbGV0dGVyLgotICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCkpOworICAgIENvbXBvc2l0
ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7CisgICAgYm9vbCBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBjb21w
b3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3U3R5bGUsIGFuaW1h
dGVkU3R5bGUpOwogCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiByZW5kZXJlckFuaW1hdGlvbnMg
PSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYm9vbCBh
bmltYXRpb25TdGF0ZUNoYW5nZWQgPSByZW5kZXJlckFuaW1hdGlvbnMuYW5pbWF0ZShyZW5kZXJl
ciwgb2xkU3R5bGUsIG5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKTsKLQotICAgIGlmIChyZW5kZXJl
ci5wYXJlbnQoKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAgICAgIGF1dG8mIGZyYW1lVmlldyA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyQW5pbWF0aW9ucy5oYXNB
bmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkpCisgICAgaWYgKChyZW5kZXJlciAmJiByZW5k
ZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlvbnMoKSB8fCAob2xkU3R5bGUgJiYg
b2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKKyAgICAgICAgYXV0byYgZnJhbWVWaWV3ID0gKmVs
ZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24u
aGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQogICAgICAgICAgICAgbV9kYXRhLT5z
ZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVy
Rm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRp
bWVyRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgZnJhbWVWaWV3LnNjaGVkdWxlQW5pbWF0
aW9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuaW1hdGlvblN0YXRlQ2hhbmdlZDsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpnZXRB
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCitzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGVkU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRl
cmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJu
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmhh
c0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAg
ICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpyZW5kZXJlci5lbGVt
ZW50KCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24o
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKIHsKKyAg
ICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0
aW9uKHJlbmRlcmVyLCBib3VuZHMpOworICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwogfQogCiB2b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGRvdWJsZSBzdGFydFRpbWUpCkBAIC03MDMsMTAgKzcwMiwxMCBAQCB2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hCiAgICAgbV9kYXRhLT5yZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpCitib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpCiB7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0
aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VBbmltYXRpb25B
dFRpbWUocmVuZGVyZXIsIG5hbWUsIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlQW5pbWF0
aW9uQXRUaW1lKGVsZW1lbnQsIG5hbWUsIHQpOwogfQogCiB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KSBj
b25zdApAQCAtNzE0LDEwICs3MTMsMTAgQEAgdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6bnVtYmVyTwogICAgIHJldHVybiBtX2RhdGEtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhk
b2N1bWVudCk7CiB9CiAKLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgdCkKK2Jvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KQogewogICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMp
OwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShyZW5kZXJlciwgcHJv
cGVydHksIHQpOworICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVt
ZW50LCBwcm9wZXJ0eSwgdCk7CiB9CiAKIGJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlIHJ1bm5pbmdTdGF0
ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwogICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7CiAKLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wgdXBkYXRl
QW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJF
bGVtZW50Jik7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKKyAgICBib29s
IHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQg
b2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCiAgICAgLy8g
dXNpbmcgdGhlIGdpdmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgc29tZQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gb3IgdHJh
bnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlLgogICAgIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiwgZG91YmxlIHN0YXJ0VGltZSk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlckVsZW1lbnQq
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5
IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRp
bWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVz
ZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5LCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAgIFdFQkNP
UkVfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNv
bnN0OyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKICAgICAKICAgICBib29sIGlzUnVu
bmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQsIEFu
aW1hdGlvbkJhc2U6OlJ1bm5pbmdTdGF0ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDggKzUyLDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5p
bWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7
CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2Vk
ID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7CiAKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBjbGVhcihSZW5k
ZXJFbGVtZW50Jik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oRWxlbWVudCYpOworICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwogCiAgICAgdm9pZCB1
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7CiAgICAgdm9pZCBzdGFydFVwZGF0
ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CkBAIC03OSwxMyArNzksMTMgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NT
UHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKICAgICBib29s
IGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50Jiwg
Q1NTUHJvcGVydHlJRCwgQW5pbWF0aW9uQmFzZTo6UnVubmluZ1N0YXRlKSBjb25zdDsKIAotICAg
IGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKFJl
bmRlckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmKTsKIAotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVs
ZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIGRvdWJsZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKTsKICAgICAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOwogCi0gICAg
dm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKKyAg
ICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50Jik7CiAKICAgICBi
b29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9CiAgICAgdm9pZCBzZXRBbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwogICAgIHZvaWQgc3Rh
cnRUaW1lUmVzcG9uc2UoZG91YmxlIHQpOwogCi0gICAgSGFzaE1hcDxSZW5kZXJFbGVtZW50Kiwg
UmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5pbWF0aW9uczsKKyAgICBI
YXNoTWFwPEVsZW1lbnQqLCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwogICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CiAgICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKICAgICBGcmFtZSYgbV9mcmFtZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBA
IENvbXBvc2l0ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigKICAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KICAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KIAotICAgIGNsZWFyUmVuZGVyZXIo
KTsKKyAgICBjbGVhckVsZW1lbnQoKTsKICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OmNsZWFyUmVuZGVyZXIoKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVu
dCgpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBD
bGVhciB0aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3
ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgpAQCAtNzcsMTAgKzc3LDEwIEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVy
ZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFj
dXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSAmJiBtX3RyYW5zaXRp
b25zLmlzRW1wdHkoKSkpCisgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFj
dGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwpAQCAtOTEsOSArOTEsOSBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1cnJlbnRTdHlsZTsKICAgICAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwot
ICAgIGlmICh0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkt
PmFuaW1hdGlvbihpKTsKKyAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS50
cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBib29sIGlzQWN0aXZlVHJh
bnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpID4gMDsK
IAogICAgICAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25Nb2RlIG1vZGUgPSBhbmltYXRpb24u
YW5pbWF0aW9uTW9kZSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAgICAgLy8geW91IGhhdmUgYm90
aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUgc2FtZQog
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25l
IG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5nIHJlcGxh
Y2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFByb3BlcnR5
RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW1w
bEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVk
IHRvIHJldHVybiBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0
ZWQgdHJhbnNpdGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7CkBA
IC0xNTksNyArMTU5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
bwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zaXRpb24gaWYgaXQgaXMg
YWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAg
ICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBiZSBpbiB0aGlzIGxv
b3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVUcmFuc2l0aW9uKS4gV2Ug
bmVlZApAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+CiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0Fj
dGl2ZVRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHByb3AsIHJlbmRlcmVyLCB0aGlzLCBt
b2RpZmllZEN1cnJlbnRTdHlsZSA/IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpIDogZnJvbVN0
eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9k
aWZpZWRDdXJyZW50U3R5bGUgPyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9u
LT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKIAotICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gcmVu
ZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxp
Y2l0QW5pbWF0aW9uLnB0cigpLCByZW5kZXJlciwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmlt
YXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOworICAgICAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gZWxlbWVu
dCAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGljaXRB
bmltYXRpb24ucHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1hdGlv
bi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
dHJhbnNpdGlvbnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRpb24pKTsKICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsK
ICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KHRyYW5zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRyYW5z
aXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBwcm9w
ZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAgZm9yIHBy
b3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZSh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE5OCwxNSArMTk4LDE1IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0
aW8KICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQogewogICAgIC8v
IE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4n
dCBoYXZlIGFueSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
ICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKQorICAgIGlmIChtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLmhhc0FuaW1hdGlvbnMoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRp
b25zKCkgJiYgdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+
YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpKQorICAgIGlmIChj
dXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5
bGUuaGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoo
dGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KENTU19BTklNQVRJT05TX0xFVkVMXzIpCkBAIC0yMjEsMTAgKzIyMSwxMCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gbm9uZSgibm9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIAogICAgIC8vIE5vdyBtYXJrIGFueSBzdGlsbCBhY3RpdmUgYW5p
bWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1hdGlvbnMuCi0gICAgaWYgKHRh
cmdldFN0eWxlLT5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0
U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOworICAgIGlmICh0YXJnZXRTdHlsZS5hbmltYXRp
b25zKCkpIHsKKyAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygp
LT5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+
YW5pbWF0aW9uKGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUu
YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5p
bWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24uaXNWYWxpZEFuaW1hdGlvbigpKQpAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNh
dmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBzdGF0
ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnNldEFuaW1hdGlv
bihhbmltYXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmICgoYW5pbWF0aW9uLmR1cmF0aW9u
KCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYmIGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpICYm
IGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbSA9
IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCByZW5kZXJlciwgdGhpcywgdGFy
Z2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3JlYXRpbmcgS2V5
ZnJhbWVBbmltYXRpb24gJXAgb24gcmVuZGVyZXIgJXAgd2l0aCBrZXlmcmFtZXMgJXMsIGR1cmF0
aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5pbS5nZXQo
KSwgcmVuZGVyZXIsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0aW9uLmR1
cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291bnQoKSk7
CisgICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0
ZShhbmltYXRpb24sIGVsZW1lbnQsICp0aGlzLCB0YXJnZXRTdHlsZSk7CisgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBlbGVt
ZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBkdXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBpdGVy
YXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0uZ2V0KCksICZlbGVtZW50LCBhbmltYXRpb24ubmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXko
KSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1f
c3VzcGVuZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRlUGxh
eVN0YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwpAQCAtMjgwLDE4ICsyODAsMTggQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgICAgICBpZiAoIW5ld0FuaW1h
dGlvbnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewogICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdl
dCgpKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSByZW5kZXJlciAl
cCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBhbmlt
YXRpb24uZ2V0KCksICZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzdGQ6
OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwogfQogCi1ib29sIENv
bXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCitib29sIENvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBk
byBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3Rh
cnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0
YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKCZyZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZVRyYW5zaXRpb25zKGVsZW1lbnQs
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9u
cyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGFuaW1hdGlvblN0YXRlQ2hh
bmdlZCA9IGZhbHNlOwpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9u
OjphbmltYXRlKFJlbmRlckUKICAgICAgICAgYm9vbCBjaGVja0ZvclN0YWNraW5nQ29udGV4dCA9
IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7CiAgICAgICAgICAgICBib29sIGRpZEJsZW5kU3R5bGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUsIGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGJsZW5kZWRT
dHlsZSwgZGlkQmxlbmRTdHlsZSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RhdGVDaGFu
Z2VkID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKGRpZEJsZW5kU3R5bGUpCkBAIC0zMzMsNyAr
MzMzLDcgQEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRQogICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmdldChuYW1lKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewogICAgICAgICAg
ICAgYm9vbCBkaWRCbGVuZFN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCAmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUs
IGJsZW5kZWRTdHlsZSwgZGlkQmxlbmRTdHlsZSkpCisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYmxlbmRlZFN0eWxlLCBkaWRCbGVuZFN0
eWxlKSkKICAgICAgICAgICAgICAgICBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSB0cnVlOwogCiAg
ICAgICAgICAgICBmb3JjZVN0YWNraW5nQ29udGV4dCB8PSBkaWRCbGVuZFN0eWxlICYmIGtleWZy
YW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAy
MjE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICB+Q29t
cG9zaXRlQW5pbWF0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7CisgICAg
dm9pZCBjbGVhckVsZW1lbnQoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAg
IGJvb2wgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+JiBibGVuZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0
QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3Jt
QW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSYpOwogCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUp
OworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwog
ICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmlt
YXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCi0gICAgOiBBbmltYXRp
b25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKLSAgICAsIG1fZnJvbVN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0eWxlKSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJ
bXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5
SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlv
biYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQorICAg
IDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24p
CisgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkKICAg
ICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKICAgICAsIG1f
YW5pbWF0aW5nUHJvcGVydHkoYW5pbWF0aW5nUHJvcGVydHkpCiB7CkBAIC02MSw3ICs2MSw3IEBA
IGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAK
LWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKK2Jvb2wgSW1wbGljaXRBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSwgYm9vbCYgZGlkQmxlbmRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4u
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkocmV2aXNpb24g
MjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBSZW5kZXJFbGVtZW50
OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBJbXBsaWNpdEFuaW1hdGlv
biA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEltcGxp
Y2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3Bl
cnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5p
bWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1l
bnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVu
ZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVy
dHksIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsKICAg
ICAKICAgICBDU1NQcm9wZXJ0eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5OyB9CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lk
IGVuZEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFu
aW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJvb2wmIGRpZEJsZW5kU3R5bGUpIG92ZXJyaWRlOworICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUsIGJv
b2wmIGRpZEJsZW5kU3R5bGUpOwogICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
c2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7CiAKQEAgLTg2
LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENvbXBv
c2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKIAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5k
aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MCArNDUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFuaW1hdGlvbjo6
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UoYW5p
bWF0aW9uLCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uKQorS2V5ZnJhbWVBbmltYXRpb246
OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBl
bGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9u
LCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQorICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6
OmNsb25lUHRyKHVuYW5pbWF0ZWRTdHlsZSkpCiB7CiAgICAgcmVzb2x2ZUtleWZyYW1lU3R5bGVz
KCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpmZXRjaElu
dGVydmFsRW5kCiAgICAgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlmcmFt
ZS50aW1pbmdGdW5jdGlvbihuYW1lKCkpKTsKIH0KIAotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyRWxl
bWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQorYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRC
bGVuZFN0eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAg
ICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyMTk2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8v
IEEgS2V5ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmlt
YXRpb24gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlv
biBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUmVm
PEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVs
ZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29t
cG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVB
bmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAgIGJvb2wgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKSBvdmVy
cmlkZTsKKyAgICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlLCBib29sJiBkaWRCbGVuZFN0eWxlKTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjb21w
dXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CisgICAg
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFu
aW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9y
IHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGlt
ZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
NCw3ICsxMTA0LDggQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAg
IGlmIChtX3N0eWxlLmhhc0ZpeGVkQmFja2dyb3VuZEltYWdlKCkgJiYgIXNldHRpbmdzKCkuZml4
ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50KCkpCiAgICAgICAgIHZpZXcoKS5m
cmFtZVZpZXcoKS5yZW1vdmVTbG93UmVwYWludE9iamVjdCh0aGlzKTsKIAotICAgIGFuaW1hdGlv
bigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOworICAgIGlmIChlbGVtZW50KCkpCisgICAgICAg
IGFuaW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKmVsZW1lbnQoKSk7CiAKICAgICBkZXN0cm95
TGVmdG92ZXJDaGlsZHJlbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFRy
YW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW4KICAgICBpZiAocmVuZGVyZXIo
KS5hbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIEFuaW1hdGlvbkJhc2U6OlJ1bm5pbmcgfCBB
bmltYXRpb25CYXNlOjpQYXVzZWQpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1
cnJUcmFuc2Zvcm07CiAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhib3gtPmJvcmRlckJveFJlY3QoKSwgYm94LT5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRpb24oKS5nZXRBbmltYXRlZFN0eWxlRm9y
UmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJl
cihyZW5kZXJlcigpKTsKICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zv
cm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgbWFrZU1h
dHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcg
KzM5OCw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKIAogICAg
IGF1dG8mIGluaXRpYWxTdHlsZSA9IG5ld1JlbmRlcmVyLT5zdHlsZSgpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZTsKLSAgICBuZXdSZW5kZXJlci0+YW5p
bWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqbmV3UmVuZGVyZXIsIGluaXRpYWxTdHlsZSwgYW5p
bWF0ZWRTdHlsZSk7CisgICAgbmV3UmVuZGVyZXItPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlv
bnMoZWxlbWVudCwgaW5pdGlhbFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKICAgICBpZiAoYW5pbWF0
ZWRTdHlsZSkgewogICAgICAgICBuZXdSZW5kZXJlci0+c2V0U3R5bGVJbnRlcm5hbChXVEZNb3Zl
KCphbmltYXRlZFN0eWxlKSk7CiAgICAgICAgIG5ld1JlbmRlcmVyLT5zZXRIYXNJbml0aWFsQW5p
bWF0ZWRTdHlsZSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDIyMTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIEVs
ZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXQKICAgICB9CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7Ci0gICAgaWYgKGVsZW1lbnQu
ZG9jdW1lbnQoKS5mcmFtZSgpLT5hbmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpyZW5kZXJl
ciwgKm5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKSkKKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCktPmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0eWxl
LCBhbmltYXRlZFN0eWxlKSkKICAgICAgICAgcmVjb21wb3NpdGVMYXllciA9IHRydWU7CiAKICAg
ICBpZiAoYW5pbWF0ZWRTdHlsZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkocmV2aXNpb24gMjIxOTY1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgRXhjZXB0aW9uT3I8Ym9v
bD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJu
IGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVy
ZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOworICAgIHJldHVy
biBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9t
aWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPGJv
b2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTIwLDE0ICs5MjAsMTQgQEAgRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdAogICAgIGlmICghcHNldWRvRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAg
cmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKHBzZXVkb0Vs
ZW1lbnQtPnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1l
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUo
KnBzZXVkb0VsZW1lbnQsIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhdXNlVGltZSA8IDApCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+
YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgcHJv
cGVydHlOYW1lLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5w
YXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOwog
fQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
UHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQpAQCAtOTQyLDcgKzk0Miw3
IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2kKICAgICBpZiAoIXBz
ZXVkb0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAotICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25B
dFRpbWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgcHJvcGVydHksIHBhdXNlVGltZSk7Cisg
ICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZSgqcHNl
dWRvRWxlbWVudCwgcHJvcGVydHksIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiBlbGVtZW50KQpJ
bmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMjIxOTY1KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcxLDcgKzExNzEsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYXVzZUFuaW1hdGlvbihfSW5f
IEJTCiAgICAgaWYgKCFkb21Ob2RlKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgKmFu
aW1hdGlvbldhc1J1bm5pbmcgPSBmcmFtZS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRp
bWUoZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oZG9tTm9kZS0+bm9kZSgpLT5yZW5kZXJlcigpKSwg
U3RyaW5nKGFuaW1hdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihhbmltYXRpb25OYW1lKSksIHNlY29u
ZHNGcm9tTm93KTsKKyAgICAqYW5pbWF0aW9uV2FzUnVubmluZyA9IGZyYW1lLT5hbmltYXRpb24o
KS5wYXVzZUFuaW1hdGlvbkF0VGltZShkb3duY2FzdDxFbGVtZW50PigqZG9tTm9kZS0+bm9kZSgp
KSwgU3RyaW5nKGFuaW1hdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihhbmltYXRpb25OYW1lKSksIHNl
Y29uZHNGcm9tTm93KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTE5MCw3ICsxMTkwLDcg
QEAgSFJFU1VMVCBXZWJGcmFtZTo6cGF1c2VUcmFuc2l0aW9uKF9Jbl8gQgogICAgIGlmICghZG9t
Tm9kZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgICp0cmFuc2l0aW9uV2FzUnVubmlu
ZyA9IGZyYW1lLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZG93bmNhc3Q8UmVu
ZGVyRWxlbWVudD4oZG9tTm9kZS0+bm9kZSgpLT5yZW5kZXJlcigpKSwgU3RyaW5nKHByb3BlcnR5
TmFtZSwgU3lzU3RyaW5nTGVuKHByb3BlcnR5TmFtZSkpLCBzZWNvbmRzRnJvbU5vdyk7CisgICAg
KnRyYW5zaXRpb25XYXNSdW5uaW5nID0gZnJhbWUtPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlv
bkF0VGltZShkb3duY2FzdDxFbGVtZW50PigqZG9tTm9kZS0+bm9kZSgpKSwgU3RyaW5nKHByb3Bl
cnR5TmFtZSwgU3lzU3RyaW5nTGVuKHByb3BlcnR5TmFtZSkpLCBzZWNvbmRzRnJvbU5vdyk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>