<?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>20995</bug_id>
          
          <creation_ts>2008-09-22 09:45:31 -0700</creation_ts>
          <short_desc>Rewrite keyframe resolution to be like styleForElement()</short_desc>
          <delta_ts>2008-10-09 16:27:36 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21043</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>dino</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92141</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-22 09:45:31 -0700</bug_when>
    <thetext>Today, I resolve style when the style sheet is read. This has several problems, most notably that it can&apos;t resolve physical units, like ems. So it needs to change.

Hyatt suggests:

1) In addKeyframeStyle, just store the CSSStyleDeclarations for each keyframe
2) Create a new method (keyframeStyleForElement?) which resolves keyframes given an element and animation name
3) When starting an animation, use this method to get the list of RenderStyles for each keyframe, caching them for the duration of the animation, and using them as today to run the animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92142</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-22 09:47:53 -0700</bug_when>
    <thetext>That&apos;s actually keyframeStylesForElement() since it collects style for all keyframes at once</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92571</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-24 13:08:33 -0700</bug_when>
    <thetext>Raising to P1 because of dependent bug 21043.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92802</commentid>
    <comment_count>3</comment_count>
      <attachid>23821</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-25 14:15:57 -0700</bug_when>
    <thetext>Created attachment 23821
Patch, including LayoutTest file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92803</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-25 14:22:25 -0700</bug_when>
    <thetext>The fix is as outlines above. I ended up duplicating the element&apos;s RenderStyle into each keyframe RenderStyle, so they had full information for doing things like lineheight and other font metrics (and possibly others). This makes the RenderStyles a bit more heavyweight in some cases, but I think the model is right.

The submitted testcase tests the line-height property, which was borked before this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93256</commentid>
    <comment_count>5</comment_count>
      <attachid>23821</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-29 12:38:56 -0700</bug_when>
    <thetext>Comment on attachment 23821
Patch, including LayoutTest file

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93286</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-09-29 14:31:37 -0700</bug_when>
    <thetext>Committed r37077
	M	WebCore/rendering/style/KeyframeList.cpp
	M	WebCore/rendering/style/StyleRareNonInheritedData.h
	M	WebCore/rendering/style/StyleRareNonInheritedData.cpp
	M	WebCore/rendering/style/Animation.h
	M	WebCore/rendering/style/Animation.cpp
	M	WebCore/rendering/style/KeyframeList.h
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/ChangeLog
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSStyleSelector.h
	M	WebCore/page/animation/CompositeAnimation.cpp
	M	WebCore/page/animation/KeyframeAnimation.cpp
	M	WebCore/page/animation/KeyframeAnimation.h
	M	LayoutTests/ChangeLog
	A	LayoutTests/animations/lineheight-animation.html
	A	LayoutTests/animations/lineheight-animation-expected.txt
r37077 = e979de02d997b41646bbf7c704ca6bc0c6c3bfdb (trunk)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94800</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-09 16:27:36 -0700</bug_when>
    <thetext>*** Bug 20148 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23821</attachid>
            <date>2008-09-25 14:15:57 -0700</date>
            <delta_ts>2008-09-29 12:38:56 -0700</delta_ts>
            <desc>Patch, including LayoutTest file</desc>
            <filename>20995.patch</filename>
            <type>text/plain</type>
            <size>37179</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjkwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDgtMDktMjUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5NQorICAgICAg
ICBSZXdyaXRlIGtleWZyYW1lIHJlc29sdXRpb24gdG8gYmUgbGlrZSBzdHlsZUZvckVsZW1lbnQo
KQorCisgICAgICAgIFRlc3Q6IGFuaW1hdGlvbnMvbGluZWhlaWdodC1hbmltYXRpb24uaHRtbAor
CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtl
eWZyYW1lQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1l
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpoYXNBbmltYXRpb25Gb3JQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1h
dGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpvdmVycmlk
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnJlc3Vt
ZU92ZXJyaWRkZW5BbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0
aW9uOjphZmZlY3RzUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRp
b246OnZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9BbmltYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uOjphbmltYXRpb25zTWF0Y2gpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9BbmltYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
S2V5ZnJhbWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lTGlzdDo6fktleWZy
YW1lTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWZyYW1lTGlzdDo6aW5zZXJ0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvS2V5ZnJhbWVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZVZhbHVlOjpL
ZXlmcmFtZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lTGlzdDo6S2V5ZnJhbWVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lTGlzdDo6YmVnaW5Qcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lTGlzdDo6ZW5kUHJvcGVydGllcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6CisKIDIwMDgtMDktMjUgIERhdmlkIFNt
aXRoICA8Y2F0ZmlzaC5tYW5AZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90
aHkgSGF0Y2hlcgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDM2ODk4
KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NCw1NCArNDQ0LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9j
dW0KIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBm
b3Iga2V5ZnJhbWUgc3R5bGVzCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5
bGUoRG9jdW1lbnQqIGRvYywgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSkKK3Zv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENT
U0tleWZyYW1lc1J1bGU+IHJ1bGUpCiB7Ci0gICAgLy8gQ3JlYXRlIHRoZSBrZXlmcmFtZSBsaXN0
CiAgICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsKLSAgICBSZWZQdHI8S2V5ZnJhbWVM
aXN0PiBsaXN0OwotICAgIGlmIChtX2tleWZyYW1lUnVsZU1hcC5jb250YWlucyhzLmltcGwoKSkp
Ci0gICAgICAgIGxpc3QgPSBtX2tleWZyYW1lUnVsZU1hcC5nZXQocy5pbXBsKCkpLmdldCgpOwot
ICAgIGVsc2UgewotICAgICAgICBsaXN0ID0gS2V5ZnJhbWVMaXN0OjpjcmVhdGUocyk7Ci0gICAg
ICAgIG1fa2V5ZnJhbWVSdWxlTWFwLmFkZChzLmltcGwoKSwgbGlzdCk7Ci0gICAgfQotICAgIGxp
c3QtPmNsZWFyKCk7Ci0KLSAgICAvLyBBZGQgYWxsIHRoZSBrZXlmcmFtZXMKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBjb25zdCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtmID0gcnVsZS0+aXRlbShpKTsKLSAgICAgICAgbV9zdHls
ZSA9IG5ldyAoZG9jLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBtX3N0
eWxlLT5yZWYoKTsKLSAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBr
Zi0+c3R5bGUoKTsKLSAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NT
UHJvcGVydHk+IGVuZDsKLQotICAgICAgICAvLyBSZWNvcmQgYWxsIHRoZSBwcm9wZXJ0aWVzIGlu
IHRoaXMga2V5ZnJhbWUKLSAgICAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBkZWNsLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0gKml0Owot
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7
Ci0gICAgICAgICAgICBsaXN0LT5hZGRQcm9wZXJ0eShjdXJyZW50LmlkKCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5
IHRpbWVzCi0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKLSAgICAgICAga2YtPmdldEtleXMo
a2V5cyk7Ci0KLSAgICAgICAgZm9yIChzaXplX3Qga2V5SW5kZXggPSAwOyBrZXlJbmRleCA8IGtl
eXMuc2l6ZSgpOyArK2tleUluZGV4KSB7Ci0gICAgICAgICAgICBmbG9hdCBrZXkgPSBrZXlzW2tl
eUluZGV4XTsKLSAgICAgICAgICAgIGxpc3QtPmluc2VydChrZXksICptX3N0eWxlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvYy0+cmVuZGVyQXJlbmEoKSk7Ci0gICAg
ICAgIG1fc3R5bGUgPSAwOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIDAl
IGFuZCBhIDEwMCUga2V5ZnJhbWUKLSAgICBmbG9hdCBmaXJzdCA9IGxpc3QtPmJlZ2luS2V5ZnJh
bWVzKCktPmtleTsKLSAgICBmbG9hdCBsYXN0ID0gKGxpc3QtPmVuZEtleWZyYW1lcygpLTEpLT5r
ZXk7Ci0gICAgaWYgKGZpcnN0ICE9IDAgfHwgbGFzdCAhPSAxKSB7Ci0gICAgICAgIGxpc3QtPmNs
ZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9rZXlmcmFtZXNSdWxlTWFwLmFk
ZChzLmltcGwoKSwgcnVsZSk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCgpCkBA
IC01MTEsNyArNDY3LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQog
ICAgIGRlbGV0ZSBtX2F1dGhvclN0eWxlOwogICAgIGRlbGV0ZSBtX3VzZXJTdHlsZTsKICAgICBk
ZWxldGVBbGxWYWx1ZXMobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzKTsKLSAg
ICBtX2tleWZyYW1lUnVsZU1hcC5jbGVhcigpOworICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5jbGVh
cigpOwogfQogCiBzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUpCkBAIC0xMjE5LDYgKzExNzUsNzcgQEAgUmVuZGVy
U3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogICAgIHJldHVybiBtX3N0eWxlOwog
fQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYg
bGlzdCkKK3sKKyAgICBsaXN0LmNsZWFyKCk7CisgICAgCisgICAgLy8gR2V0IHRoZSBrZXlmcmFt
ZXNSdWxlIGZvciB0aGlzIG5hbWUKKyAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICBpZiAoIW1fa2V5
ZnJhbWVzUnVsZU1hcC5jb250YWlucyhsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNvbnN0IFdlYktpdENTU0tleWZyYW1lc1J1bGUq
IHJ1bGUgPSBtX2tleWZyYW1lc1J1bGVNYXAuZmluZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBs
KCkpLmdldCgpLT5zZWNvbmQuZ2V0KCk7CisgICAgCisgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1
bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFy
YXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBs
b2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKKyAgICAgICAgaW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0
ZShlKTsKKyAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSoga2YgPSBydWxlLT5pdGVtKGkpOworICAgICAg
ICBhZGRNYXRjaGVkRGVjbGFyYXRpb24oa2YtPnN0eWxlKCkpOworCisgICAgICAgIC8vIENyZWF0
ZSB0aGUgc3R5bGUKKyAgICAgICAgbV9zdHlsZSA9IG5ldyAoZS0+ZG9jdW1lbnQoKS0+cmVuZGVy
QXJlbmEoKSkgUmVuZGVyU3R5bGUoKmVsZW1lbnRTdHlsZSk7CisgICAgICAgIG1fc3R5bGUtPnJl
ZigpOworICAgICAgICAKKyAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAK
KyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCisgICAgICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGlu
ZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCisgICAgICAg
IGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkg
LSAxKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBh
aGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICAgICAgaWYgKG1fZm9udERpcnR5KQorICAgICAg
ICAgICAgdXBkYXRlRm9udCgpOworCisgICAgICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVu
IHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQorICAgICAgICBpZiAobV9s
aW5lSGVpZ2h0VmFsdWUpCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGRv
IHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIGFwcGx5RGVjbGFyYXRpb25zKGZhbHNl
LCBmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIAorICAgICAg
ICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwg
Zm9udCBwcm9wcywgCisgICAgICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNvbmQg
dGltZS4KKyAgICAgICAgaWYgKG1fZm9udERpcnR5KQorICAgICAgICAgICAgdXBkYXRlRm9udCgp
OworCisgICAgICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBs
aXN0CisgICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiBlbmQ7CisgICAgICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NT
UHJvcGVydHk+IGl0ID0ga2YtPnN0eWxlKCktPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIGxpc3QuYWRkUHJvcGVydHkoKCppdCkuaWQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhlIGluZGljYXRl
ZCBrZXkgdGltZXMKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOworICAgICAgICBrZi0+Z2V0
S2V5cyhrZXlzKTsKKyAgICAgICAgZm9yIChzaXplX3Qga2V5SW5kZXggPSAwOyBrZXlJbmRleCA8
IGtleXMuc2l6ZSgpOyArK2tleUluZGV4KSB7CisgICAgICAgICAgICBmbG9hdCBrZXkgPSBrZXlz
W2tleUluZGV4XTsKKyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleSwgbV9zdHlsZSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEo
KSk7CisgICAgICAgIG1fc3R5bGUgPSAwOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIHN1cmUg
dGhlcmUgaXMgYSAwJSBhbmQgYSAxMDAlIGtleWZyYW1lCisgICAgZmxvYXQgZmlyc3QgPSBsaXN0
LmJlZ2luS2V5ZnJhbWVzKCktPmtleTsKKyAgICBmbG9hdCBsYXN0ID0gKGxpc3QuZW5kS2V5ZnJh
bWVzKCktMSktPmtleTsKKyAgICBpZiAoZmlyc3QgIT0gMCB8fCBsYXN0ICE9IDEpCisgICAgICAg
IGxpc3QuY2xlYXIoKTsKK30KKwogUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnBzZXVk
b1N0eWxlRm9yRWxlbWVudChSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKCFlKQpAQCAtMjQxMiw4ICsy
NDM5LDcgQEAgdm9pZCBDU1NSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdAogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRG
YWNlUnVsZShmb250RmFjZVJ1bGUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkSXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgcnVsZSB0byBvdXIgc2V0LgotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSoga2V5ZnJh
bWVzUnVsZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHls
ZShzaGVldC0+ZG9jKCksIGtleWZyYW1lc1J1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9ICAgLy8gZm9yIHJ1bGVzCiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKQEAg
LTI0MjYsMTAgKzI0NTIsOCBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENT
U1N0CiAgICAgICAgICAgICBDU1NWYXJpYWJsZXNSdWxlKiB2YXJpYWJsZXMgPSBzdGF0aWNfY2Fz
dDxDU1NWYXJpYWJsZXNSdWxlKj4oaXRlbSk7CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlcy0+
bWVkaWEoKSB8fCBtZWRpdW0uZXZhbCh2YXJpYWJsZXMtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3Ip
KQogICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZFZhcmlhYmxlcyh2YXJpYWJsZXMp
OwotICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpKSB7Ci0gICAgICAg
ICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiByID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZSo+KGl0ZW0pOwotICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJh
bWVTdHlsZShzaGVldC0+ZG9jKCksIHIpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
aXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkpCisgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRL
ZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKSk7
CiAgICAgfQogfQogCkBAIC01MTA4LDE1ICs1MTMyLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwQW5pbWF0aW9uTmFtZSgKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIAotICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICBs
YXllci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwotICAgIH0gZWxzZSB7CisgICAgZWxzZQog
ICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
Ci0gICAgCi0gICAgICAgIC8vIHJlc29sdmUgdG8gdGhlIGtleWZyYW1lcwotICAgICAgICBSZWZQ
dHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IGZpbmRLZXlmcmFtZVJ1bGUocHJpbWl0aXZlVmFs
dWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBsYXllci0+c2V0QW5pbWF0aW9uS2V5ZnJh
bWUoa2V5ZnJhbWUpOwotICAgIH0KIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmlt
YXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgog
ICAgICAgICB2b2lkIGluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUoRWxlbWVudCopOwogICAgICAg
ICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IDAsIFJlbmRlclN0eWxlOjpQc2V1ZG9JZCA9IFJlbmRlclN0eWxlOjpOT1BTRVVETyk7
CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgYWxsb3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNv
bHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSk7CisgICAgICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0JiBs
aXN0KTsKIAogICAgICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGVGb3JFbGVtZW50KFJlbmRl
clN0eWxlOjpQc2V1ZG9JZCwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAp
OwogCkBAIC0xMzksMTggKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTVmFsdWUqIHJlc29s
dmVWYXJpYWJsZURlcGVuZGVudFZhbHVlKENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUqKTsKICAg
ICAgICAgdm9pZCByZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGRlY2wsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBuZXdEZWNsLCBI
YXNoU2V0PFN0cmluZz4mIHVzZWRCbG9ja1ZhcmlhYmxlcyk7CiAKLSAgICAgICAgS2V5ZnJhbWVM
aXN0KiBmaW5kS2V5ZnJhbWVSdWxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBdG9taWNTdHJpbmcgcyhuYW1lKTsKLSAg
ICAgICAgICAgIGlmICghbV9rZXlmcmFtZVJ1bGVNYXAuY29udGFpbnMocy5pbXBsKCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVSdWxl
TWFwLmZpbmQocy5pbXBsKCkpLmdldCgpLT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgY29uc3QgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZSogcnVsZSk7CisgICAgICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNz
UmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpOwogCiAgICAgICAgIHN0YXRpYyBi
b29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBpblN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKIApAQCAt
MTgyLDggKzE3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERh
dGE7CiAgICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogCi0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lTGlzdD4gPiBLZXlmcmFt
ZVJ1bGVNYXA7Ci0gICAgICAgIEtleWZyYW1lUnVsZU1hcCBtX2tleWZyYW1lUnVsZU1hcDsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8V2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZT4gPiBLZXlmcmFtZXNSdWxlTWFwOworICAgICAgICBLZXlmcmFtZXNSdWxl
TWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFJl
bmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRB
dmFpbGFibGU7IH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDM2ODk4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9u
LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUxp
c3QuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5o
IgogCkBAIC0xNTAsOCArMTQ5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtl
eWZyYW1lQQogICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc2F2ZWQgYW5pbWF0aW9uIHRvIHRo
aXMgbmV3IG9uZSwganVzdCBpbiBjYXNlIHRoZSBwbGF5IHN0YXRlIGhhcyBjaGFuZ2VkCiAgICAg
ICAgICAgICAgICAga2ZBbmltLT5zZXRBbmltYXRpb24oYW5pbSk7CiAgICAgICAgICAgICAgICAg
a2ZBbmltLT5zZXRJbmRleChpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW0tPmR1cmF0
aW9uKCkgfHwgYW5pbS0+ZGVsYXkoKSkgJiYgYW5pbS0+aXRlcmF0aW9uQ291bnQoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgYW5pbS0+a2V5ZnJhbWVMaXN0KCkgJiYgIWFuaW0tPmtleWZy
YW1lTGlzdCgpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW0tPmR1
cmF0aW9uKCkgfHwgYW5pbS0+ZGVsYXkoKSkgJiYgYW5pbS0+aXRlcmF0aW9uQ291bnQoKSkgewog
ICAgICAgICAgICAgICAgIGtmQW5pbSA9IG5ldyBLZXlmcmFtZUFuaW1hdGlvbihjb25zdF9jYXN0
PEFuaW1hdGlvbio+KGFuaW0pLCByZW5kZXJlciwgaSwgdGhpcywgY3VycmVudFN0eWxlID8gY3Vy
cmVudFN0eWxlIDogdGFyZ2V0U3R5bGUpOwogICAgICAgICAgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLnNldChrZkFuaW0tPm5hbWUoKS5pbXBsKCksIGtmQW5pbSk7CiAgICAgICAgICAgICB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAko
cmV2aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIktleWZy
YW1lQW5pbWF0aW9uLmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTM3
LDYgKzM4LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorS2V5ZnJhbWVBbmltYXRpb246
OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNv
bnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCisgICAgOiBBbmltYXRpb25CYXNlKGFu
aW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBBbmltKQorICAgICwgbV9rZXlmcmFtZXMocmVuZGVyZXIs
IGFuaW1hdGlvbi0+bmFtZSgpKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1fdW5hbmlt
YXRlZFN0eWxlKDApCit7CisgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uIGxpc3QK
KyAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOworICAgIAorICAgIGlmICh1bmFu
aW1hdGVkU3R5bGUpIHsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHVuYW5pbWF0
ZWRTdHlsZSktPnJlZigpOworICAgICAgICBtX3VuYW5pbWF0ZWRTdHlsZSA9IHVuYW5pbWF0ZWRT
dHlsZTsKKyAgICB9CisgICAgCisgICAgLy8gR2V0IHRoZSBrZXlmcmFtZSBSZW5kZXJTdHlsZXMK
KyAgICBpZiAobV9vYmplY3QgJiYgbV9vYmplY3QtPmVsZW1lbnQoKSAmJiBtX29iamVjdC0+ZWxl
bWVudCgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihtX29iamVjdC0+ZWxlbWVudCgpKSwgdW5hbmltYXRlZFN0eWxlLCBtX2tleWZyYW1l
cyk7Cit9CisKIEtleWZyYW1lQW5pbWF0aW9uOjp+S2V5ZnJhbWVBbmltYXRpb24oKQogewogICAg
IC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBjbGFzcyBzbyB0
aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCkBAIC04MywyMSArMTAzLDE5IEBAIHZv
aWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKICAgICBSZW5kZXJTdHlsZSog
dG9TdHlsZSA9IDA7CiAgICAgZG91YmxlIHNjYWxlID0gMTsKICAgICBkb3VibGUgb2Zmc2V0ID0g
MDsKLSAgICBpZiAobV9rZXlmcmFtZXMuZ2V0KCkpIHsKLSAgICAgICAgVmVjdG9yPEtleWZyYW1l
VmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kS2V5ZnJhbWVzKCk7
Ci0gICAgICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fa2V5ZnJhbWVzLT5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmICh0IDwgaXQtPmtleSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBr
ZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUg
Zmlyc3Qga2V5Ci0gICAgICAgICAgICAgICAgaWYgKCFmcm9tU3R5bGUpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5rZXkgLSBv
ZmZzZXQpOwotICAgICAgICAgICAgICAgIHRvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxl
Kj4oJihpdC0+c3R5bGUpKTsKKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJh
dG9yIGVuZEtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOworICAgIGZvciAo
VmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJl
Z2luS2V5ZnJhbWVzKCk7IGl0ICE9IGVuZEtleWZyYW1lczsgKytpdCkgeworICAgICAgICBpZiAo
dCA8IGl0LT5rZXkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBrZXkgc2hvdWxkIGFsd2F5
cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUgZmlyc3Qga2V5CisgICAg
ICAgICAgICBpZiAoIWZyb21TdHlsZSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgb2Zmc2V0ID0gaXQtPmtleTsKLSAgICAgICAgICAgIGZyb21T
dHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPigmKGl0LT5zdHlsZSkpOworICAgICAgICAg
ICAgc2NhbGUgPSAxLjAgLyAoaXQtPmtleSAtIG9mZnNldCk7CisgICAgICAgICAgICB0b1N0eWxl
ID0gaXQtPnN0eWxlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBv
ZmZzZXQgPSBpdC0+a2V5OworICAgICAgICBmcm9tU3R5bGUgPSBpdC0+c3R5bGU7CiAgICAgfQog
CiAgICAgLy8gSWYgZWl0aGVyIHN0eWxlIGlzIDAgd2UgaGF2ZSBhbiBpbnZhbGlkIGNhc2UsIGp1
c3Qgc3RvcCB0aGUgYW5pbWF0aW9uLgpAQCAtMTEzLDggKzEzMSw4IEBAIHZvaWQgS2V5ZnJhbWVB
bmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKIAogICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3Mo
c2NhbGUsIG9mZnNldCk7CiAKLSAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fa2V5ZnJhbWVzLT5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNoU2V0PGludD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRp
ZXMgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CisgICAgZm9yIChIYXNoU2V0PGludD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9
IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKICAgICAgICAgaWYgKGJsZW5kUHJvcGVydGllcyh0aGlz
LCAqaXQsIGFuaW1hdGVkU3R5bGUsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZykpCiAgICAgICAg
ICAgICBzZXRBbmltYXRpbmcoKTsKICAgICB9CkBAIC0xMjIsOCArMTQwLDggQEAgdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogCiBib29sIEtleWZyYW1lQW5pbWF0aW9u
OjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0CiB7Ci0gICAgSGFz
aFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kUHJvcGVydGll
cygpOwotICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVzLT5iZWdpblByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgSGFzaFNldDxp
bnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7Cisg
ICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVn
aW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoKml0ID09IHBy
b3BlcnR5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTc2LDcgKzE5NCw3
IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmUKICAgICBpZiAoc2hv
dWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewogICAgICAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JFdmVudERpc3BhdGNoKCkpIHsKICAgICAgICAgICAg
IG1fd2FpdGluZ0ZvckVuZEV2ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZl
bnREaXNwYXRjaGVyLnN0YXJ0VGltZXIoZWxlbWVudCwgbV9uYW1lLCAtMSwgdHJ1ZSwgZXZlbnRU
eXBlLCBlbGFwc2VkVGltZSk7CisgICAgICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hl
ci5zdGFydFRpbWVyKGVsZW1lbnQsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgLTEsIHRy
dWUsIGV2ZW50VHlwZSwgZWxhcHNlZFRpbWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IERpZCBkaXNwYXRjaCBhbiBldmVudAogICAgICAgICB9CiAgICAgfQpAQCAtMTg3LDIzICsyMDUs
MjMgQEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZQogdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6b3ZlcnJpZGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBUaGlzIHdpbGwg
b3ZlcnJpZGUgaW1wbGljaXQgYW5pbWF0aW9ucyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVzIGlu
IHRoZSBrZXlmcmFtZSBhbmltYXRpb24KLSAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fa2V5ZnJhbWVzLT5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNoU2V0PGlu
dD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CisgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPm92ZXJyaWRlSW1wbGljaXRBbmlt
YXRpb25zKCppdCk7CiB9CiAKIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRk
ZW5BbmltYXRpb25zKCkKIHsKICAgICAvLyBUaGlzIHdpbGwgcmVzdW1lIG92ZXJyaWRkZW4gaW1w
bGljaXQgYW5pbWF0aW9ucwotICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9rZXlmcmFtZXMtPmVuZFByb3BlcnRpZXMoKTsKLSAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJh
bWVzLmVuZFByb3BlcnRpZXMoKTsKKyAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpblByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5p
bWF0aW9ucygqaXQpOwogfQogCiBib29sIEtleWZyYW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVy
dHkoaW50IHByb3BlcnR5KSBjb25zdAogewotICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9rZXlmcmFtZXMtPmVuZFByb3BlcnRpZXMoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0aWVzKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9rZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCppdCA9PSBwcm9wZXJ0eSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTIxNCwxNyArMjMyLDE3IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OnZhbGlkYXRlVHJhbnNmb3IKIHsKICAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZh
bGlkID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFtX2tleWZyYW1lcy5nZXQoKSB8fCBtX2tleWZy
YW1lcy0+c2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMtPmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pKQorICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8
ICFtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kS2V5ZnJhbWVzKCk7CisgICAgVmVjdG9yPEtl
eWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRLZXlmcmFt
ZXMoKTsKIAogICAgIC8vIEVtcHR5IHRyYW5zZm9ybXMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQg
dGhlIGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCiAgICAgc2l6ZV90IGZp
cnN0SW5kZXggPSAwOwogICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3Ig
Zmlyc3RJdCA9IGVuZDsKICAgICAKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5k
OyArK2l0LCArK2ZpcnN0SW5kZXgpIHsKLSAgICAgICAgaWYgKGl0LT5zdHlsZS50cmFuc2Zvcm0o
KS5vcGVyYXRpb25zKCkuc2l6ZSgpID4gMCkgeworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFs
dWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5ZnJhbWVzKCk7IGl0
ICE9IGVuZDsgKytpdCwgKytmaXJzdEluZGV4KSB7CisgICAgICAgIGlmIChpdC0+c3R5bGUtPnRy
YW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgICAgICBmaXJzdEl0
ID0gaXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjMzLDExICsyNTEsMTEg
QEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2ZvcgogICAgIGlmIChmaXJz
dEl0ID09IGVuZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZmaXJzdEl0LT5zdHlsZS50cmFuc2Zvcm0oKTsKKyAg
ICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZmaXJzdEl0LT5zdHlsZS0+
dHJhbnNmb3JtKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlk
CiAgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmly
c3RJdCsxOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyogdmFsID0gJml0LT5zdHlsZS50cmFuc2Zvcm0oKTsKKyAgICAgICAgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyogdmFsID0gJml0LT5zdHlsZS0+dHJhbnNmb3JtKCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBBIG51bGwgdHJhbnNmb3JtIG1hdGNoZXMgYW55dGhpbmcKICAgICAgICAgaWYg
KHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDM2ODk4KQorKysgV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyOCAr
NDAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZm9yIGEgc2luZ2xlIFJlbmRlck9iamVj
dC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVi
bGljOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29t
cEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCi0gICAgICAgIDogQW5p
bWF0aW9uQmFzZShhbmltYXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKLSAgICAgICAgLCBtX2tl
eWZyYW1lcyhhbmltYXRpb24tPmtleWZyYW1lTGlzdCgpKQotICAgICAgICAsIG1fbmFtZShhbmlt
YXRpb24tPm5hbWUoKSkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fdW5h
bmltYXRlZFN0eWxlKDApCi0gICAgewotICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmlt
YXRpb24gbGlzdAotICAgICAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHVuYW5pbWF0ZWRTdHlsZSkgewotICAgICAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KHVuYW5pbWF0ZWRTdHlsZSktPnJlZigpOwotICAgICAgICAgICAg
bV91bmFuaW1hdGVkU3R5bGUgPSB1bmFuaW1hdGVkU3R5bGU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
KyAgICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
LCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKICAgICB2aXJ0dWFsIH5LZXlm
cmFtZUFuaW1hdGlvbigpOwogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5p
bWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5
bGUpOwogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgcykgeyBtX25hbWUgPSBzOyB9
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFt
ZXMuYW5pbWF0aW9uTmFtZSgpOyB9CiAgICAgaW50IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQogICAgIHZvaWQgc2V0SW5kZXgoaW50IGkpIHsgbV9pbmRleCA9IGk7IH0KIApAQCAt
ODksOCArNzMsOCBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGtleWZyYW1l
cyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBtX2tleWZy
YW1lczsKLSAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIEtleWZyYW1lTGlzdCBtX2tleWZy
YW1lczsKKwogICAgIC8vIFRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGFuaW1hdGlvbiBhcHBlYXJz
IGluIHRoZSBhbmltYXRpb24tbmFtZSBzdHlsZS4KICAgICBpbnQgbV9pbmRleDsKIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNjg5OCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0FuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbmltYXRpb24uaCIK
IAotI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyMywyNSArMTIyLDcgQEAgYm9vbCBBbmltYXRpb246
OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbgogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAobWF0Y2hQbGF5U3RhdGVzICYmIChtX3BsYXlTdGF0ZSAhPSBv
LT5tX3BsYXlTdGF0ZSB8fCBtX3BsYXlTdGF0ZVNldCAhPSBvLT5tX3BsYXlTdGF0ZVNldCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIG5vdyBjaGVjayBrZXlmcmFtZXMKLSAgICBp
ZiAoKG1fa2V5ZnJhbWVMaXN0LmdldCgpICYmICFvLT5tX2tleWZyYW1lTGlzdC5nZXQoKSkgfHwg
KCFtX2tleWZyYW1lTGlzdC5nZXQoKSAmJiBvLT5tX2tleWZyYW1lTGlzdC5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIShtX2tleWZyYW1lTGlzdC5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAqbV9rZXlmcmFtZUxpc3QgPT0gKm8tPm1fa2V5
ZnJhbWVMaXN0OwotfQotCi1jb25zdCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiYgQW5pbWF0aW9uOjpr
ZXlmcmFtZUxpc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX2tleWZyYW1lTGlzdDsKLX0KLQot
dm9pZCBBbmltYXRpb246OnNldEFuaW1hdGlvbktleWZyYW1lKGNvbnN0IFJlZlB0cjxLZXlmcmFt
ZUxpc3Q+IGtleWZyYW1lTGlzdCkKLXsKLSAgICBtX2tleWZyYW1lTGlzdCA9IGtleWZyYW1lTGlz
dDsKKyAgICByZXR1cm4gIW1hdGNoUGxheVN0YXRlcyB8fCAobV9wbGF5U3RhdGUgPT0gby0+bV9w
bGF5U3RhdGUgJiYgbV9wbGF5U3RhdGVTZXQgPT0gby0+bV9wbGF5U3RhdGVTZXQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Bbmlt
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb24u
aAkocmV2aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEtleWZyYW1lTGlzdDsKLQogY2xhc3MgQW5pbWF0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8QW5pbWF0aW9uPiB7CiBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbigpOwpAQCAtODQsOCAr
ODIsNiBAQCBwdWJsaWM6CiAgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eTsgfQogICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KIAotICAgIGNvbnN0IFJlZlB0cjxLZXlmcmFt
ZUxpc3Q+JiBrZXlmcmFtZUxpc3QoKSBjb25zdDsKLQogICAgIHZvaWQgc2V0RGVsYXkoZG91Ymxl
IGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXREaXJl
Y3Rpb24oYm9vbCBkKSB7IG1fZGlyZWN0aW9uID0gZDsgbV9kaXJlY3Rpb25TZXQgPSB0cnVlOyB9
CiAgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUgZCkgeyBBU1NFUlQoZCA+PSAwKTsgbV9kdXJh
dGlvbiA9IGQ7IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9CkBAIC05Nyw4ICs5Myw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0SXNOb25lQW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47
IH0KIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uS2V5ZnJhbWUoY29uc3QgUmVmUHRyPEtleWZyYW1l
TGlzdD4ga2V5ZnJhbWUpOwotCiAgICAgQW5pbWF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQW5pbWF0
aW9uJiBvKTsKIAogICAgIC8vIHJldHVybiB0cnVlIGlmIGFsbCBtZW1iZXJzIG9mIHRoaXMgY2xh
c3MgbWF0Y2ggKGV4Y2x1ZGluZyBtX25leHQpCkBAIC0xMjAsOCArMTE0LDYgQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9wcm9wZXJ0eTsKICAgICBUaW1pbmdGdW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9u
OwogCi0gICAgUmVmUHRyPEtleWZyYW1lTGlzdD4gbV9rZXlmcmFtZUxpc3Q7Ci0KICAgICB1bnNp
Z25lZCBtX3BsYXlTdGF0ZSAgICAgOiAyOwogCiAgICAgYm9vbCBtX2RlbGF5U2V0ICAgICAgICAg
IDogMTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAkocmV2
aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5ICsyMSwyNSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorS2V5ZnJhbWVMaXN0Ojp+S2V5ZnJhbWVMaXN0KCkKK3sK
KyAgICBjbGVhcigpOworfQorCit2b2lkIEtleWZyYW1lTGlzdDo6Y2xlYXIoKQoreworICAgIGZv
ciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVz
LmJlZ2luKCk7IGl0ICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0KQorICAgICAgICBpZiAoaXQt
PnN0eWxlKQorICAgICAgICAgICAgaXQtPnN0eWxlLT5kZXJlZihtX3JlbmRlcmVyLT5yZW5kZXJB
cmVuYSgpKTsKKworICAgIG1fa2V5ZnJhbWVzLmNsZWFyKCk7CisgICAgbV9wcm9wZXJ0aWVzLmNs
ZWFyKCk7Cit9CisKIGJvb2wgS2V5ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWZyYW1l
TGlzdCYgbykgY29uc3QKIHsKICAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpICE9IG8ubV9rZXlm
cmFtZXMuc2l6ZSgpKQpAQCAtNDMsMjkgKzU5LDM4IEBAIGJvb2wgS2V5ZnJhbWVMaXN0OjpvcGVy
YXRvcj09KGNvbnN0IEtleWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLZXlmcmFtZUxp
c3Q6Omluc2VydChmbG9hdCBpbktleSwgY29uc3QgUmVuZGVyU3R5bGUmIGluU3R5bGUpCit2b2lk
IEtleWZyYW1lTGlzdDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewot
ICAgIGlmIChpbktleSA8IDAgfHwgaW5LZXkgPiAxKQorICAgIGlmIChrZXkgPCAwIHx8IGtleSA+
IDEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGludCBpbmRleCA9IC0xOworICAgIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA9PSBpbktleSkgewotICAgICAgICAgICAgbV9rZXlmcmFt
ZXNbaV0uc3R5bGUgPSBpblN0eWxlOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
bV9rZXlmcmFtZXNbaV0ua2V5ID09IGtleSkgeworICAgICAgICAgICAgaW5kZXggPSAoaW50KSBp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fa2V5ZnJhbWVz
W2ldLmtleSA+IGluS2V5KSB7CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPiBrZXkp
IHsKICAgICAgICAgICAgIC8vIGluc2VydCBiZWZvcmUKICAgICAgICAgICAgIG1fa2V5ZnJhbWVz
Lmluc2VydChpLCBLZXlmcmFtZVZhbHVlKCkpOwotICAgICAgICAgICAgbV9rZXlmcmFtZXNbaV0u
a2V5ID0gaW5LZXk7Ci0gICAgICAgICAgICBtX2tleWZyYW1lc1tpXS5zdHlsZSA9IGluU3R5bGU7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpbmRleCA9IChpbnQpIGk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8vIGFwcGVuZAotICAgIG1f
a2V5ZnJhbWVzLmFwcGVuZChLZXlmcmFtZVZhbHVlKCkpOwotICAgIG1fa2V5ZnJhbWVzW21fa2V5
ZnJhbWVzLnNpemUoKS0xXS5rZXkgPSBpbktleTsKLSAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1l
cy5zaXplKCktMV0uc3R5bGUgPSBpblN0eWxlOworICAgIAorICAgIGlmIChpbmRleCA8IDApIHsK
KyAgICAgICAgLy8gYXBwZW5kCisgICAgICAgIGluZGV4ID0gKGludCkgbV9rZXlmcmFtZXMuc2l6
ZSgpOworICAgICAgICBtX2tleWZyYW1lcy5hcHBlbmQoS2V5ZnJhbWVWYWx1ZSgpKTsKKyAgICB9
CisgICAgCisgICAgaWYgKHN0eWxlKQorICAgICAgICBzdHlsZS0+cmVmKCk7CisgICAgaWYgKG1f
a2V5ZnJhbWVzW2luZGV4XS5zdHlsZSkKKyAgICAgICAgbV9rZXlmcmFtZXNbaW5kZXhdLnN0eWxl
LT5kZXJlZihtX3JlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAgICBtX2tleWZyYW1lc1tpbmRl
eF0ua2V5ID0ga2V5OworICAgIG1fa2V5ZnJhbWVzW2luZGV4XS5zdHlsZSA9IHN0eWxlOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9L
ZXlmcmFtZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlm
cmFtZUxpc3QuaAkocmV2aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9L
ZXlmcmFtZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTggKzI2LDYwIEBACiAjZGVmaW5l
IEtleWZyYW1lTGlzdF9oCiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJPYmplY3Q7Citj
bGFzcyBSZW5kZXJTdHlsZTsKKwogY2xhc3MgS2V5ZnJhbWVWYWx1ZSB7CiBwdWJsaWM6CiAgICAg
S2V5ZnJhbWVWYWx1ZSgpCiAgICAgICAgIDoga2V5KC0xKQorICAgICAgICAsIHN0eWxlKDApCiAg
ICAgewogICAgIH0KIAogICAgIGZsb2F0IGtleTsKLSAgICBSZW5kZXJTdHlsZSBzdHlsZTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGU7CiB9OwogCi1jbGFzcyBLZXlmcmFtZUxpc3QgOiBwdWJsaWMg
UmVmQ291bnRlZDxLZXlmcmFtZUxpc3Q+IHsKK2NsYXNzIEtleWZyYW1lTGlzdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8S2V5ZnJhbWVMaXN0PiBjcmVhdGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBhbmltYXRpb25OYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgS2V5ZnJhbWVMaXN0
KGFuaW1hdGlvbk5hbWUpKTsgfQotCisgICAgS2V5ZnJhbWVMaXN0KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9uTmFtZSkKKyAgICAgICAgOiBtX2Fu
aW1hdGlvbk5hbWUoYW5pbWF0aW9uTmFtZSkKKyAgICAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVy
KQorICAgIHsKKyAgICAgICAgaW5zZXJ0KDAsIDApOworICAgICAgICBpbnNlcnQoMSwgMCk7Cisg
ICAgfQorICAgIH5LZXlmcmFtZUxpc3QoKTsKKyAgICAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEtleWZyYW1lTGlzdCYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogICAgIAog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9uTmFtZTsgfQogICAgIAotICAgIHZvaWQgaW5zZXJ0KGZsb2F0IGluS2V5LCBjb25z
dCBSZW5kZXJTdHlsZSYgaW5TdHlsZSk7CisgICAgdm9pZCBpbnNlcnQoZmxvYXQga2V5LCBSZW5k
ZXJTdHlsZSogc3R5bGUpOwogICAgIAogICAgIHZvaWQgYWRkUHJvcGVydHkoaW50IHByb3ApIHsg
bV9wcm9wZXJ0aWVzLmFkZChwcm9wKTsgfQogICAgIGJvb2wgY29udGFpbnNQcm9wZXJ0eShpbnQg
cHJvcCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHByb3ApOyB9Ci0gICAg
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBiZWdpblByb3BlcnRpZXMoKSB7IHJldHVybiBt
X3Byb3BlcnRpZXMuYmVnaW4oKTsgfQotICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kUHJvcGVydGllcygpIHsgcmV0dXJuIG1fcHJvcGVydGllcy5lbmQoKTsgfQorICAgIEhhc2hT
ZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Qcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0aWVzLmJlZ2luKCk7IH0KKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9y
IGVuZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZW5kKCk7IH0KICAg
ICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVhcigpOyBtX3Byb3BlcnRpZXMu
Y2xlYXIoKTsgfQorICAgIHZvaWQgY2xlYXIoKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2tleWZyYW1lcy5pc0VtcHR5KCk7IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLnNpemUoKTsgfQogICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVl
Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5LZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZy
YW1lcy5iZWdpbigpOyB9CiAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRv
ciBlbmRLZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5lbmQoKTsgfQogCiBw
cml2YXRlOgotICAgIEtleWZyYW1lTGlzdChjb25zdCBBdG9taWNTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCi0gICAgICAgIDogbV9hbmltYXRpb25OYW1lKGFuaW1hdGlvbk5hbWUpCi0gICAgewotICAg
ICAgICBpbnNlcnQoMCwgUmVuZGVyU3R5bGUoKSk7Ci0gICAgICAgIGluc2VydCgxLCBSZW5kZXJT
dHlsZSgpKTsKLSAgICB9Ci0gICAgICAgIAogICAgIEF0b21pY1N0cmluZyBtX2FuaW1hdGlvbk5h
bWU7CiAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5ZnJhbWVzOwogICAgIEhhc2hTZXQ8
aW50PiBtX3Byb3BlcnRpZXM7ICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVk
CisgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAz
Njg5OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0NSw3ICs5NDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmhlcml0VHJhbnNp
dGlvbnMoY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50KSB7IHJhcmVOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX3RyYW5zaXRpb25zLnNldChwYXJlbnQgPyBuZXcgQW5pbWF0aW9uTGlzdCgq
cGFyZW50KSA6IDApOyB9CiAgICAgdm9pZCBhZGp1c3RBbmltYXRpb25zKCk7CiAgICAgdm9pZCBh
ZGp1c3RUcmFuc2l0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0
eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLmdl
dCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+dXBkYXRlS2V5ZnJhbWVzKHN0eWxl
U2VsZWN0b3IpOyB9CiAKICAgICB2b2lkIHNldExpbmVDbGFtcChpbnQgYykgeyBTRVRfVkFSKHJh
cmVOb25Jbmhlcml0ZWREYXRhLCBsaW5lQ2xhbXAsIGMpOyB9CiAgICAgdm9pZCBzZXRUZXh0U2l6
ZUFkanVzdChib29sIGIpIHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1
c3QsIGIpOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAkocmV2aXNpb24gMzY4OTgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgIlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
aCIKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJLZXlmcmFtZUxp
c3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0xNDcsMTggKzE0Niw2IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6cmVmbGVj
dGkKIAogfQogCi12b2lkIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnVwZGF0ZUtleWZyYW1l
cyhjb25zdCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQotewotICAgIGlmIChtX2Fu
aW1hdGlvbnMpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9hbmltYXRpb25zLT5hbmltYXRpb24o
aSktPmlzVmFsaWRBbmltYXRpb24oKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFt
ZUxpc3Q+IGtleWZyYW1lID0gc3R5bGVTZWxlY3Rvci0+ZmluZEtleWZyYW1lUnVsZShtX2FuaW1h
dGlvbnMtPmFuaW1hdGlvbihpKS0+bmFtZSgpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlv
bnMtPmFuaW1hdGlvbihpKS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGE6OmFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEmIG8pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuaW1hdGlvbnMgJiYgby5tX2FuaW1hdGlv
bnMgfHwgbV9hbmltYXRpb25zICYmICFvLm1fYW5pbWF0aW9ucykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgJKHJldmlz
aW9uIDM2ODk4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWRE
YXRhJiBvKSBjb25zdDsKICAgICBib29sIGFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29sIHRyYW5zaXRpb25EYXRh
RXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7Ci0gICAg
dm9pZCB1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rv
cik7CiAKICAgICBpbnQgbGluZUNsYW1wOyAvLyBBbiBBcHBsZSBleHRlbnNpb24uCiAjaWYgRU5B
QkxFKERBU0hCT0FSRF9TVVBQT1JUKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzY5MDcpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0w
OS0yNSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGNhc2UgZm9yIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5NQorICAgICAgICBSZXdyaXRlIGtleWZy
YW1lIHJlc29sdXRpb24gdG8gYmUgbGlrZSBzdHlsZUZvckVsZW1lbnQoKQorCisgICAgICAgICog
YW5pbWF0aW9ucy9saW5laGVpZ2h0LWFuaW1hdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGFuaW1hdGlvbnMvbGluZWhlaWdodC1hbmltYXRpb24uaHRtbDogQWRkZWQuCisKIDIw
MDgtMDktMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJ1
YmJlcnN0YW1wZWQgYnkgTWFyayBSb3dlCkluZGV4OiBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2xp
bmVoZWlnaHQtYW5pbWF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hbmltYXRpb25zL2xpbmVoZWlnaHQtYW5pbWF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2FuaW1hdGlvbnMvbGluZWhlaWdodC1hbmltYXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBwZXJmb3JtcyBh
biBhbmltYXRpb24gb2YgdGhlIGxpbmUtaGVpZ2h0IHByb3BlcnR5LiBJdCB0ZXN0cyB3aGV0aGVy
IG9yIG5vdCB3ZSBhcmUgcHJvcGVybHkgZ2V0dGluZyB0aGUgZm9udC1zaXplLiBIZXJlIGlzIHNv
bWUgdGV4dC4gSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBIZXJlIGlzIHNv
bWUgdGV4dC4gSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBIZXJlIGlzIHNv
bWUgdGV4dC4gSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBIZXJlIGlzIHNv
bWUgdGV4dC4gSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LgorUEFTUwpJbmRl
eDogTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9saW5laGVpZ2h0LWFuaW1hdGlvbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2FuaW1hdGlvbnMvbGluZWhlaWdodC1hbmltYXRpb24uaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FuaW1hdGlvbnMvbGluZWhlaWdodC1hbmlt
YXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIGh0bWwg
UFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICJodHRw
Oi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorCis8aHRtbCBsYW5nPSJlbiI+Cis8
aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0
bWw7IGNoYXJzZXQ9dXRmLTgiPgorICA8dGl0bGU+TGluZSBIZWlnaHQgVGVzdDwvdGl0bGU+Cisg
IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgI2JveCB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDogMDsKKyAgICAgICAgdG9wOiAx
MDBweDsKKyAgICAgICAgaGVpZ2h0OiAyNTBweDsKKyAgICAgICAgd2lkdGg6IDQwMHB4OworICAg
ICAgICBmb250LWZhbWlseTogImFyaWFsIjsKKyAgICAgICAgZm9udC1zaXplOiAxMHB4OworICAg
ICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgLXdlYmtpdC1hbmltYXRpb24t
ZHVyYXRpb246IDEwczsKKyAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9u
OiBsaW5lYXI7CisgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ICJhbmltIjsKKyAgICB9
CisgICAgQC13ZWJraXQta2V5ZnJhbWVzICJhbmltIiB7CisgICAgICAgIGZyb20geyBsaW5lLWhl
aWdodDogMWVtOyB9CisgICAgICAgIHRvICAgeyBsaW5lLWhlaWdodDogMmVtOyB9CisgICAgfQor
ICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICByZXN1bHQgPSAiUEFT
UyI7CisgICAgY29uc3QgZGVmYXVsdFRvbGVyYW5jZSA9IDE7CisgICAgCisgICAgZnVuY3Rpb24g
aXNFcXVhbChhY3R1YWwsIGRlc2lyZWQsIHRvbGVyYW5jZSkKKyAgICB7CisgICAgICAgIGlmICh0
b2xlcmFuY2UgPT0gdW5kZWZpbmVkIHx8IHRvbGVyYW5jZSA9PSAwKQorICAgICAgICAgICAgdG9s
ZXJhbmNlID0gZGVmYXVsdFRvbGVyYW5jZTsKKyAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhh
Y3R1YWwgLSBkZXNpcmVkKTsKKyAgICAgICAgcmV0dXJuIGRpZmYgPCB0b2xlcmFuY2U7CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIHNuYXBzaG90KCkKKyAgICB7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gIlBBU1MiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IHZhciBsaW5lSGVpZ2h0ID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpKS5saW5lSGVpZ2h0KTsKKyAgICAgICAgdmFyIGV4cGVj
dGVkID0gMTA7CisgICAgICAgIGlmICghaXNFcXVhbChsaW5lSGVpZ2h0LCBleHBlY3RlZCkpCisg
ICAgICAgICAgICByZXN1bHQgPSAiRkFJTCh3YXM6IitsaW5lSGVpZ2h0KyIsIGV4cGVjdGVkOiIr
ZXhwZWN0ZWQrIikiOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkKKyAgICB7CisgICAg
ICAgIHNldFRpbWVvdXQoInNuYXBzaG90KCkiLCAxMDApOworICAgICAgICAKKyAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgncmVzdWx0JykuaW5uZXJIVE1MID0gcmVzdWx0OworICAgICAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0sIDMwMCk7CisgICAgfQorICAgIAorICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdEFuaW1hdGlvblN0YXJ0Jywgc3RhcnQs
IGZhbHNlKTsKKyAgICAKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdCBw
ZXJmb3JtcyBhbiBhbmltYXRpb24gb2YgdGhlIGxpbmUtaGVpZ2h0IHByb3BlcnR5LiBJdCB0ZXN0
cyB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgcHJvcGVybHkgZ2V0dGluZyB0aGUgZm9udC1zaXplLgor
PGRpdiBpZD0iYm94Ij4KK0hlcmUgaXMgc29tZSB0ZXh0LiBIZXJlIGlzIHNvbWUgdGV4dC4gSGVy
ZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBIZXJlIGlzIHNvbWUgdGV4dC4gSGVy
ZSBpcyBzb21lIHRleHQuIAorSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBI
ZXJlIGlzIHNvbWUgdGV4dC4gSGVyZSBpcyBzb21lIHRleHQuIEhlcmUgaXMgc29tZSB0ZXh0LiBI
ZXJlIGlzIHNvbWUgdGV4dC4gCis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="10722"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>