<?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>21310</bug_id>
          
          <creation_ts>2008-10-02 09:55:35 -0700</creation_ts>
          <short_desc>Get rid of AnimationEventDispatcher</short_desc>
          <delta_ts>2008-10-10 11:05:11 -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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93746</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-02 09:55:35 -0700</bug_when>
    <thetext>Currently, when we want to send and animation event, we set a 0 duration timer and when it fires, we send the event. This is to avoid calling the event handler directly from the AnimationBase subclass (KeyframeAnimation or ImplicitAnimation), in case these objects are destroyed by the event handler. But this adds a lot of overhead, so it should be changed so these classes are ref counted. Then we can keep a ref to them across the call to the event handler and avoid them getting destroyed too soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93747</commentid>
    <comment_count>1</comment_count>
      <attachid>24022</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-02 10:10:52 -0700</bug_when>
    <thetext>Created attachment 24022
Patch to fix bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93750</commentid>
    <comment_count>2</comment_count>
      <attachid>24022</attachid>
    <who name="">mitz</who>
    <bug_when>2008-10-02 10:37:25 -0700</bug_when>
    <thetext>Comment on attachment 24022
Patch to fix bug

Please remove this:
+        WARNING: NO TEST CASES ADDED OR CHANGED

Unnecessary newline added here:
     virtual ~AnimationBase();
 
+
     RenderObject* renderer() const { return m_object; }

isSuspended() would be a better name than suspended() and more in line with e.g. isAnimatingProperty():
+    bool suspended() const { return m_suspended; }

You can just write &quot;if (keyframeAnim)&quot; here:
+                if (keyframeAnim.get())

These are now out of order:
-class RenderObject;
 class RenderStyle;
+class RenderObject;

No need to initialize a RefPtr to 0:
+            RefPtr&lt;Element&gt; element = 0;

Again, no need to get(). I also think the parentheses are redundant.
+            ASSERT(!element.get() || (element-&gt;document() &amp;&amp; !element-&gt;document()-&gt;inPageCache()));
+            if (!element.get())

The same is repeated in KeyframeAnimation.cpp

This looks odd. Why are you doing this?
+                setChanged(element-&gt;renderer()-&gt;element());

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94893</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-10 11:05:11 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/page/animation/AnimationBase.cpp
Sending        WebCore/page/animation/AnimationBase.h
Sending        WebCore/page/animation/AnimationController.cpp
Sending        WebCore/page/animation/CompositeAnimation.cpp
Sending        WebCore/page/animation/CompositeAnimation.h
Sending        WebCore/page/animation/ImplicitAnimation.cpp
Sending        WebCore/page/animation/ImplicitAnimation.h
Sending        WebCore/page/animation/KeyframeAnimation.cpp
Sending        WebCore/page/animation/KeyframeAnimation.h
Transmitting file data ..........
Committed revision 37484.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24022</attachid>
            <date>2008-10-02 10:10:52 -0700</date>
            <delta_ts>2008-10-02 10:37:25 -0700</delta_ts>
            <desc>Patch to fix bug</desc>
            <filename>21310.patch</filename>
            <type>text/plain</type>
            <size>44415</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzE5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMDgtMTAtMDIgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdB
Uk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxMAorCisgICAgICAgIFJlZGVzaWdu
ZWQgaG93IGFuaW1hdGlvbiBldmVudHMgYXJlIHNlbnQgaW4gb3JkZXIgdG8gZ2V0IHJpZCBvZgor
ICAgICAgICBBbmltYXRpb25FdmVudERpc3BhdGNoZXIuIEltcGxpY2l0QW5pbWF0aW9uIGFuZCBL
ZXlmcmFtZUFuaW1hdGlvbgorICAgICAgICBhcmUgbm93IHJlZiBjb3VudGVkLiBXaGlsZSBjYWxs
aW5nIHRoZSBldmVudCBoYW5kbGVyLCBJIGtlZXAgYSAKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRo
aXMgY2xhc3MgdG8gYXZvaWQgaXQgZ2V0dGluZyBkZXN0cm95ZWQgb3V0IGZyb20gdW5kZXIgbWUu
CisKKyAgICAgICAgSSBhbHNvIG1vdmVkIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgQ29t
cG9zaXRlQW5pbWF0aW9uIHRvCisgICAgICAgIGFuZCBpbnRlcm5hbCBjbGFzcyAoQ29tcG9zaXRl
QW5pbWF0aW9uUHJpdmF0ZSkgdG8gcmVkdWNlIHRoZSBleHBvc3VyZQorICAgICAgICBvZiB0aGUg
aW50ZXJuYWxzIG9mIHRoZSB2YXJpb3VzIGFuaW1hdGlvbiBjbGFzc2VzLgorCisgICAgICAgIFdl
IGhhdmUgc2V2ZXJhbCB0cmFuc2l0aW9uIGFuZCBhbmltYXRpb24gTGF5b3V0VGVzdHMgd2hpY2gg
dmVyaWZ5IHRoYXQKKyAgICAgICAgdGhpcyBmaXggd29ya3MgYXMgZXhwZWN0ZWQgYW5kIGNvbnRp
bnVlcyB0byBhdm9pZCBjcmFzaGVzLgorCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25C
YXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpjYW5jZWxUaW1lcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQmFzZTo6d2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpzdXNwZW5kZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6fkNvbXBvc2l0ZUFu
aW1hdGlvblByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJp
dmF0ZTo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0QW5pbWF0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFuaW1hdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpyZXNldFRy
YW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6
OnJlc2V0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Q
cml2YXRlOjpjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnNldEFuaW1hdGlvblN0YXJ0VGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpzZXRUcmFuc2l0aW9uU3RhcnRU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnN1c3Bl
bmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZh
dGU6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uUHJpdmF0ZTo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQW5pbWF0aW9uSW5kaWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpzdHlsZUF2YWlsYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjppc0FuaW1h
dGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZh
dGU6OnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzZXRUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnN0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnNldFRyYW5zaXRpb25TdGFydFRpbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRk
ZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlv
bkV2ZW50KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudCk6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
QW5pbWF0aW9uOjpjcmVhdGUpOgorCiAyMDA4LTEwLTAyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6
IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMzcxNDQp
CisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCwxOSArNzAsNiBAQCB2b2lkIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2s6OnRpbWVy
RmlyZWQoCiAgICAgbV9hbmltLT5hbmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQobV9ldmVudFR5
cGUsIG1fZWxhcHNlZFRpbWUpOwogfQogCi1BbmltYXRpb25FdmVudERpc3BhdGNoZXI6OkFuaW1h
dGlvbkV2ZW50RGlzcGF0Y2hlcihBbmltYXRpb25CYXNlKiBhbmltKSAKLSAgICA6IEFuaW1hdGlv
blRpbWVyQmFzZShhbmltKQotICAgICwgbV9wcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpCi0g
ICAgLCBtX3Jlc2V0KGZhbHNlKQotICAgICwgbV9lbGFwc2VkVGltZSgtMSkKLXsKLX0KLQotdm9p
ZCBBbmltYXRpb25FdmVudERpc3BhdGNoZXI6OnRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGlt
ZXJCYXNlPiopCi17Ci0gICAgbV9hbmltLT5hbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJlZCht
X2VsZW1lbnQuZ2V0KCksIG1fbmFtZSwgbV9wcm9wZXJ0eSwgbV9yZXNldCwgbV9ldmVudFR5cGUs
IG1fZWxhcHNlZFRpbWUpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMoY29uc3Qg
QW5pbWF0aW9uQmFzZSogYW5pbSwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQog
eyAgCiAgICAgcmV0dXJuIGludChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CkBAIC0z
OTYsMTAgKzM4Myw4IEBAIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWEK
ICAgICAsIG1fcGF1c2VUaW1lKC0xKQogICAgICwgbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2soY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykp
Ci0gICAgLCBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcihjb25zdF9jYXN0PEFuaW1hdGlvbkJh
c2UqPih0aGlzKSkKICAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4odHJh
bnNpdGlvbikpCiAgICAgLCBtX2NvbXBBbmltKGNvbXBBbmltKQotICAgICwgbV93YWl0aW5nRm9y
RW5kRXZlbnQoZmFsc2UpCiAgICAgLCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkKGZhbHNl
KQogewogfQpAQCAtNTAwLDEzICs0ODUsNiBAQCBib29sIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlv
bnNNYXRjaChjb25zCiAgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5hbmltYXRpb25zTWF0Y2goYW5p
bSk7CiB9CiAKLUVsZW1lbnQqIEFuaW1hdGlvbkJhc2U6OmVsZW1lbnRGb3JFdmVudERpc3BhdGNo
KCkKLXsKLSAgICBpZiAobV9vYmplY3QtPm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9vYmpl
Y3QtPm5vZGUoKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiB7CiAg
ICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXRSZXN0YXJ0QW5pbWF0aW9uIHRoZW4g
d2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRsZXNzIG9mIHN0YXRlLgpAQCAtNzQ0LDMz
ICs3MjIsNiBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvblRpbWVyQ2FsbGJhCiAgICAg
fQogfQogCi12b2lkIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVk
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHJlc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1l
KQotewotICAgIG1fd2FpdGluZ0ZvckVuZEV2ZW50ID0gZmFsc2U7Ci0KLSAgICAvLyBLZWVwIGFu
IGF0b21pYyBzdHJpbmcgb24gdGhlIHN0YWNrIHRvIGtlZXAgaXQgYWxpdmUgdW50aWwgd2UgZXhp
dCB0aGlzIG1ldGhvZAotICAgIC8vIChzaW5jZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQgbWF5IGNh
dXNlIHx0aGlzfCB0byBiZSBkZWxldGVkLCB0aGVyZWZvcmUgcmVtb3ZpbmcKLSAgICAvLyB0aGUg
bGFzdCByZWYgdG8gdGhlIGF0b21pYyBzdHJpbmcpLgotICAgIEF0b21pY1N0cmluZyBhbmltTmFt
ZShuYW1lKTsKLSAgICBBdG9taWNTdHJpbmcgYW5pbUV2ZW50VHlwZShldmVudFR5cGUpOwotICAg
IC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBzdGlja3MgYXJvdW5kIHRvbwotICAgIFJlZlB0cjxF
bGVtZW50PiBlbGVtZW50UmV0YWluZXIoZWxlbWVudCk7Ci0KLSAgICBBU1NFUlQoIWVsZW1lbnQg
fHwgKGVsZW1lbnQtPmRvY3VtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUGFnZUNh
Y2hlKCkpKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChl
dmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KQotICAgICAg
ICBlbGVtZW50LT5kaXNwYXRjaFdlYktpdFRyYW5zaXRpb25FdmVudChldmVudFR5cGUsIG5hbWUs
IGVsYXBzZWRUaW1lKTsKLSAgICBlbHNlCi0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoV2ViS2l0
QW5pbWF0aW9uRXZlbnQoZXZlbnRUeXBlLCBuYW1lLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAvLyBS
ZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAoYW5pbUV2ZW50
VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCAmJiBlbGVtZW50LT5y
ZW5kZXJlcigpKQotICAgICAgICBzZXRDaGFuZ2VkKGVsZW1lbnQtPnJlbmRlcmVyKCktPmVsZW1l
bnQoKSk7Ci19Ci0KIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxheVN0YXRlKGJvb2wgcnVu
KQogewogICAgIGlmIChwYXVzZWQoKSA9PSBydW4gfHwgaXNOZXcoKSkKSW5kZXg6IFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAzNzE0NCkKKysrIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0
MCw2IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2U7CiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyOwog
Y2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEltcGxpY2l0
QW5pbWF0aW9uOwotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb247CiBjbGFzcyBOb2RlOwogY2xhc3Mg
UmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CkBAIC03NywzNCArNzUsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgQW5pbWF0aW9uQmFzZSogbV9hbmltOwogfTsKIAotY2xhc3MgQW5pbWF0aW9u
RXZlbnREaXNwYXRjaGVyIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKEFuaW1hdGlvbkJhc2UqIGFuaW0pOyAgICAKLSAg
ICB2aXJ0dWFsIH5BbmltYXRpb25FdmVudERpc3BhdGNoZXIoKSB7IH0KLQotICAgIHZvaWQgc3Rh
cnRUaW1lcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBw
cm9wZXJ0eSwgYm9vbCByZXNldCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLSAgICB7Ci0gICAgICAgIG1fZWxl
bWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgIG1fbmFtZSA9IG5hbWU7Ci0gICAgICAgIG1fcHJvcGVy
dHkgPSBwcm9wZXJ0eTsKLSAgICAgICAgbV9yZXNldCA9IHJlc2V0OwotICAgICAgICBtX2V2ZW50
VHlwZSA9IGV2ZW50VHlwZTsKLSAgICAgICAgbV9lbGFwc2VkVGltZSA9IGVsYXBzZWRUaW1lOwot
ICAgICAgICBBbmltYXRpb25UaW1lckJhc2U6OnN0YXJ0VGltZXIoKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBBdG9taWNTdHJpbmcg
bV9uYW1lOwotICAgIGludCBtX3Byb3BlcnR5OwotICAgIGJvb2wgbV9yZXNldDsKLSAgICBBdG9t
aWNTdHJpbmcgbV9ldmVudFR5cGU7Ci0gICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Ci19OwotCiBj
bGFzcyBBbmltYXRpb25UaW1lckNhbGxiYWNrIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7
CiBwdWJsaWM6CiAgICAgQW5pbWF0aW9uVGltZXJDYWxsYmFjayhBbmltYXRpb25CYXNlKiBhbmlt
KSAKQEAgLTEyOSwxMyArOTksMTQgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9lbGFwc2VkVGlt
ZTsKIH07CiAKLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAg
IGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247CitjbGFzcyBBbmltYXRpb25CYXNlIDog
cHVibGljIFJlZkNvdW50ZWQ8QW5pbWF0aW9uQmFzZT4geworICAgIGZyaWVuZCBjbGFzcyBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOwogCiBwdWJsaWM6CiAgICAgQW5pbWF0aW9uQmFzZShjb25z
dCBBbmltYXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcEFuaW0pOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKTsKIAor
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9
CiAgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CiAg
ICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7CkBAIC0xNDMsNyArMTE0LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgY2FuY2VsVGltZXJzKCkKICAgICB7CiAgICAgICAgIG1fYW5pbWF0aW9uVGltZXJD
YWxsYmFjay5jYW5jZWxUaW1lcigpOwotICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hl
ci5jYW5jZWxUaW1lcigpOwogICAgIH0KIAogICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5zaXRp
b25zIGdvIHRocm91Z2ggdGhlIHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RBUlRF
RCBzdGF0ZQpAQCAtMjAzLDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV3KCkgY29u
c3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGVOZXc7IH0KICAgICBib29s
IHdhaXRpbmdGb3JTdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZVN0YXJ0V2FpdFJlc3BvbnNlOyB9CiAgICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVB
dmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZVN0
YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yRW5kRXZlbnQoKSBj
b25zdCAgeyByZXR1cm4gbV93YWl0aW5nRm9yRW5kRXZlbnQ7IH0KIAogICAgIC8vICJhbmltYXRp
bmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyBhIHRpbWVy
IHRvIGtlZXAgZmlyaW5nCiAgICAgLy8gKGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCkBAIC0y
MTgsOCArMTg3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgYW5pbWF0aW9uVGltZXJDYWxs
YmFja0ZpcmVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRp
bWUpOwotICAgIHZvaWQgYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoRWxlbWVudCosIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBib29sIHJlc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CiAKICAgICBib29sIGFuaW1hdGlvbnNNYXRjaChj
b25zdCBBbmltYXRpb24qKSBjb25zdDsKIApAQCAtMjQ0LDggKzIxMSw2IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzVHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOyB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgRWxlbWVu
dCogZWxlbWVudEZvckV2ZW50RGlzcGF0Y2goKTsKLQogICAgIHZpcnR1YWwgdm9pZCBvdmVycmlk
ZUFuaW1hdGlvbnMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1h
dGlvbnMoKSB7IH0KIApAQCAtMjgwLDEwICsyNDUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
T2JqZWN0KiBtX29iamVjdDsKIAogICAgIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2sgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrOwotICAgIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlciBtX2FuaW1hdGlv
bkV2ZW50RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKICAg
ICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcEFuaW07Ci0gICAgYm9vbCBtX3dhaXRpbmdGb3JF
bmRFdmVudDsKICAgICBib29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7CiB9OwogCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCShy
ZXZpc2lvbiAzNzE0NCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDY5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKK2Ns
YXNzIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGUgeworcHVibGljOgorICAgIENvbXBvc2l0ZUFu
aW1hdGlvblByaXZhdGUoQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlciwg
Q29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCisgICAgICAgIDogbV9zdXNw
ZW5kZWQoZmFsc2UpCisgICAgICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNv
bnRyb2xsZXIpCisgICAgICAgICwgbV9jb21wb3NpdGVBbmltYXRpb24oY29tcG9zaXRlQW5pbWF0
aW9uKQorICAgICAgICAsIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKDApCisgICAgeworICAg
IH0KKyAgICAKKyAgICB+Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZSgpOworCisgICAgUmVuZGVy
U3R5bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKworICAgIHZvaWQgc2V0QW5pbWF0aW5n
KGJvb2wpOworICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgS2V5
ZnJhbWVBbmltYXRpb24qIGdldEFuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0eSkgY29u
c3Q7CisKKyAgICB2b2lkIHJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9p
ZCByZXNldEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisKKyAgICB2b2lkIGNsZWFudXBGaW5p
c2hlZEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisKKyAgICB2b2lkIHNldEFuaW1hdGlvblN0
YXJ0VGltZShkb3VibGUgdCk7CisgICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBw
cm9wZXJ0eSwgZG91YmxlIHQpOworCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOworICAg
IHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworICAgIGJvb2wgc3VzcGVuZGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdXNwZW5kZWQ7IH0KKworICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlv
bnMoaW50IHByb3BlcnR5KTsKKyAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1h
dGlvbnMoaW50IHByb3BlcnR5KTsKKworICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKTsKKworICAg
IGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93
KSBjb25zdDsKKworICAgIHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGJvb2wpOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
OworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0
aW9uPiA+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+ID4gIEFuaW1hdGlvbk5h
bWVNYXA7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwIG1fdHJhbnNpdGlvbnM7Cisg
ICAgQW5pbWF0aW9uTmFtZU1hcCBtX2tleWZyYW1lQW5pbWF0aW9uczsKKyAgICBib29sIG1fc3Vz
cGVuZGVkOworICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOworICAgIHVuc2ln
bmVkIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzOworfTsKKworQ29tcG9zaXRlQW5pbWF0aW9u
UHJpdmF0ZTo6fkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGUoKQogewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX3RyYW5zaXRpb25zKTsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9rZXlmcmFtZUFuaW1h
dGlvbnMpOworICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKKyAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jbGVhcigpOwogfQogICAgIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRy
YW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uUHJpdmF0ZTo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQog
ewogICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsLCB3ZSBkb24ndCBkbyB0cmFuc2l0aW9u
cwogICAgIGlmICghY3VycmVudFN0eWxlIHx8ICF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkK
QEAgLTg1LDcgKzE0MSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0
aW8KICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFu
aW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxlOwogCiAg
ICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRo
aXMgcHJvcAotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0gbV90cmFu
c2l0aW9ucy5nZXQocHJvcCk7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1wbEFu
aW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKS5nZXQoKTsKICAgICAgICAgICAgIGJvb2wgZXF1
YWwgPSB0cnVlOwogCiAgICAgICAgICAgICBpZiAoaW1wbEFuaW0pIHsKQEAgLTk1LDcgKzE1MSw2
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAg
ICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwgdGhlIGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBl
YXJsaWVyIG9uZSwgc28gd2UKICAgICAgICAgICAgICAgIC8vIGJlaGF2ZSBhcyB0aG91Z2ggdGhp
cyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5nIHJlcGxhY2VkLgogICAgICAgICAgICAgICAg
IGlmICghaW1wbEFuaW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCB0YXJnZXRTdHlsZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGltcGxBbmltOwogICAgICAgICAgICAgICAg
ICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsKICAgICAgICAgICAgICAgICAgICAgZXF1
YWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDYsOCArMTYxLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogCiAgICAgICAgICAgICBpZiAoIWVx
dWFsKSB7CiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJhbnNpdGlvbgotICAgICAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGljaXRBbmlt
YXRpb24oY29uc3RfY2FzdDxBbmltYXRpb24qPihhbmltKSwgcHJvcCwgcmVuZGVyZXIsIHRoaXMs
IGZyb21TdHlsZSk7Ci0gICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcCwgYW5p
bWF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnNldChwcm9wLCBJbXBsaWNp
dEFuaW1hdGlvbjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHByb3AsIHJl
bmRlcmVyLCBtX2NvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCBvbmUgcGFzcyBmb3Ig
dGhlIHNpbmdsZSBwcm9wIGNhc2UKQEAgLTExNyw3ICsxNzEsNyBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25z
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdl
IGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBhbnkgYmVmb3JlCiAg
ICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0U3R5bGUtPmhh
c0FuaW1hdGlvbnMoKSkKQEAgLTEzNywxMiArMTkxLDEzIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUt
PmFuaW1hdGlvbnMoKS0+c2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFu
aW1zOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogYW5pbSA9IHRhcmdldFN0
eWxlLT5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBhbmltYXRpb25OYW1lKGFuaW0tPm5hbWUoKSk7CiAKICAgICAgICAgICAgIGlmICghYW5pbS0+
aXNWYWxpZEFuaW1hdGlvbigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IGFuaW1hdGlvbiBm
b3IgdGhpcyBuYW1lCi0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmlt
ID0gZ2V0S2V5ZnJhbWVBbmltYXRpb24oYW5pbS0+bmFtZSgpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Z2V0KGFuaW1hdGlvbk5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChrZXlmcmFtZUFuaW0pIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBvbmUgc28g
aXQgaXMgc3RpbGwgYWN0aXZlCkBAIC0xNTQsNyArMjA5LDcgQEAgdm9pZCBDb21wb3NpdGVBbmlt
YXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0
QW5pbWF0aW9uKGFuaW0pOwogICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0SW5kZXgo
aSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKChhbmltLT5kdXJhdGlvbigpIHx8IGFuaW0tPmRl
bGF5KCkpICYmIGFuaW0tPml0ZXJhdGlvbkNvdW50KCkpIHsKLSAgICAgICAgICAgICAgICBrZXlm
cmFtZUFuaW0gPSBuZXcgS2V5ZnJhbWVBbmltYXRpb24oY29uc3RfY2FzdDxBbmltYXRpb24qPihh
bmltKSwgcmVuZGVyZXIsIGksIHRoaXMsIGN1cnJlbnRTdHlsZSA/IGN1cnJlbnRTdHlsZSA6IHRh
cmdldFN0eWxlKTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1h
dGlvbjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCBpLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbiwgY3VycmVudFN0eWxlID8gY3VycmVudFN0eWxlIDogdGFyZ2V0
U3R5bGUpOwogICAgICAgICAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNldChrZXlmcmFt
ZUFuaW0tPm5hbWUoKS5pbXBsKCksIGtleWZyYW1lQW5pbSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE2NCwyNSArMjE5LDE3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVLZXlmcmFtZUEKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92
ZWQ7CiAgICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGtleWZyYW1lQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBr
ZXlmcmFtZUFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICBpZiAoa2V5ZnJhbWVBbmlt
LT5pbmRleCgpIDwgMCkKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZy
YW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdyByZW1vdmUg
dGhlIGFuaW1hdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
YW5pbXNUb0JlUmVtb3ZlZC5zaXplKCk7ICsraikgewotICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
bioga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KGFuaW1zVG9CZVJlbW92
ZWRbal0pOworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgYW5pbXNUb0JlUmVtb3ZlZC5zaXpl
KCk7ICsraikKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMucmVtb3ZlKGFuaW1zVG9CZVJl
bW92ZWRbal0pOwotICAgICAgICBkZWxldGUga2V5ZnJhbWVBbmltOwotICAgIH0KLX0KLQotS2V5
ZnJhbWVBbmltYXRpb24qIENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVBbmltYXRpb24o
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2tleWZyYW1lQW5pbWF0
aW9ucy5nZXQobmFtZS5pbXBsKCkpOwogfQogCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK1JlbmRlclN0eWxlKiBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkK
IHsKICAgICBSZW5kZXJTdHlsZSogcmVzdWx0U3R5bGUgPSAwOwogCkBAIC0xOTcsOCArMjQ0LDgg
QEAgUmVuZGVyU3R5bGUqIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZQogICAgICAgICAvLyB0
byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KICAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5l
bmQoKTsKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kKQotICAgICAg
ICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFy
Z2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgICAgIGlmIChJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCkpCisgICAgICAgICAgICAgICAgYW5pbS0+YW5pbWF0
ZShtX2NvbXBvc2l0ZUFuaW1hdGlvbiwgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5
bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA5LDggKzI1NiwxMCBA
QCBSZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlCiAgICAgICAgICAgICBj
b25zdCBBbmltYXRpb24qIGFuaW0gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRp
b24oaSk7CiAKICAgICAgICAgICAgIGlmIChhbmltLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGdldEtl
eWZyYW1lQW5pbWF0aW9uKGFuaW0tPm5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIGtleWZy
YW1lQW5pbS0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHls
ZSwgcmVzdWx0U3R5bGUpOworICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyBhbmltYXRpb25O
YW1lKGFuaW0tPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0
aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQoYW5pbWF0aW9uTmFt
ZS5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0uZ2V0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+YW5pbWF0ZShtX2NvbXBvc2l0ZUFuaW1hdGlv
biwgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIyMSwzMyArMjcwLDMzIEBAIFJlbmRl
clN0eWxlKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUKIH0KIAogLy8gImFuaW1hdGluZyIg
bWVhbnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIHRoZSB0aW1lciB0
byBrZWVwIGZpcmluZwotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29s
IGFuaW1hdGluZykKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0QW5pbWF0aW5n
KGJvb2wgYW5pbWF0aW5nKQogewogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBJbXBs
aWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltcGxpY2l0
QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0QW5pbWF0aW5nKGFuaW1hdGluZyk7CiAgICAgfQogCiAgICAgQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICBhbmlt
LT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICB9CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5p
bWF0aW9uOjphbmltYXRpbmcoKQorYm9vbCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjphbmlt
YXRpbmcoKSBjb25zdAogewogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYgKHRyYW5z
aXRpb24gJiYgdHJhbnNpdGlvbi0+YW5pbWF0aW5nKCkgJiYgdHJhbnNpdGlvbi0+cnVubmluZygp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQW5pbWF0aW9uTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVu
ZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0g
ICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICBpZiAoYW5p
bSAmJiAhYW5pbS0+cGF1c2VkKCkgJiYgYW5pbS0+YW5pbWF0aW5nKCkgJiYgYW5pbS0+YWN0aXZl
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNTUsNyArMzA0LDcgQEAg
Ym9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGluZygpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1jb25zdCBLZXlmcmFtZUFuaW1hdGlvbiogQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmlt
YXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0Citjb25zdCBLZXlmcmFtZUFuaW1h
dGlvbiogQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHko
aW50IHByb3BlcnR5KSBjb25zdAogewogICAgIGNvbnN0IEtleWZyYW1lQW5pbWF0aW9uKiByZXR2
YWwgPSAwOwogICAgIApAQCAtMjYzLDcgKzMxMiw3IEBAIGNvbnN0IEtleWZyYW1lQW5pbWF0aW9u
KiBDb21wb3NpdGVBbmltYXQKICAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBh
bGwgYW5pbWF0aW9ucwogICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1h
dGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBjb25zdCBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IEtleWZyYW1lQW5pbWF0
aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYgKGFuaW0tPmhhc0FuaW1h
dGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAg
ICAgfQpAQCAtMjcxLDIwICszMjAsMTcgQEAgY29uc3QgS2V5ZnJhbWVBbmltYXRpb24qIENvbXBv
c2l0ZUFuaW1hdAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpyZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvblByaXZhdGU6OnJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKIHsKLSAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3RyYW5zaXRp
b25zKTsKICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpyZXNldEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KikKK3ZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uUHJpdmF0ZTo6cmVzZXRBbmltYXRpb25zKFJlbmRlck9iamVjdCopCiB7Ci0gICAgZGVs
ZXRlQWxsVmFsdWVzKG1fa2V5ZnJhbWVBbmltYXRpb25zKTsKICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jbGVhcigpOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlz
aGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBDb21wb3NpdGVBbmlt
YXRpb25Qcml2YXRlOjpjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgaWYgKHN1c3BlbmRlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTQs
NjMgKzM0MCw1OSBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlzaGVkCiAg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNF
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogCiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0g
dHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kOworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNv
bmQuZ2V0KCk7CiAgICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoYW5pbS0+cG9zdEFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZlbnQo
KSkKKyAgICAgICAgaWYgKGFuaW0tPnBvc3RBY3RpdmUoKSkKICAgICAgICAgICAgIGZpbmlzaGVk
VHJhbnNpdGlvbnMuYXBwZW5kKGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwogICAgIH0KIAog
ICAgIC8vIERlbGV0ZSB0aGVtCiAgICAgc2l6ZV90IGZpbmlzaGVkVHJhbnNpdGlvbkNvdW50ID0g
ZmluaXNoZWRUcmFuc2l0aW9ucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
aW5pc2hlZFRyYW5zaXRpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IG1fdHJhbnNpdGlvbnMudGFrZShmaW5pc2hlZFRyYW5zaXRpb25zW2ldKSkK
LSAgICAgICAgICAgIGRlbGV0ZSBhbmltOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpbmlzaGVkVHJhbnNpdGlvbkNvdW50OyArK2kpCisgICAgICAgIG1fdHJhbnNpdGlvbnMu
cmVtb3ZlKGZpbmlzaGVkVHJhbnNpdGlvbnNbaV0pOwogCiAgICAgLy8gTWFrZSBhIGxpc3Qgb2Yg
YW5pbWF0aW9ucyB0byBiZSBkZWxldGVkCiAgICAgVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwqPiBm
aW5pc2hlZEFuaW1hdGlvbnM7CiAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogCiAgICAgZm9yIChB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiog
YW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYW5pbS0+cG9zdEFjdGl2ZSgpICYmICFhbmltLT53YWl0
aW5nRm9yRW5kRXZlbnQoKSkKKyAgICAgICAgaWYgKGFuaW0tPnBvc3RBY3RpdmUoKSkKICAgICAg
ICAgICAgIGZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQoYW5pbS0+bmFtZSgpLmltcGwoKSk7CiAg
ICAgfQogCiAgICAgLy8gRGVsZXRlIHRoZW0KICAgICBzaXplX3QgZmluaXNoZWRBbmltYXRpb25D
b3VudCA9IGZpbmlzaGVkQW5pbWF0aW9ucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaW5pc2hlZEFuaW1hdGlvbkNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMudGFrZShmaW5pc2hlZEFuaW1h
dGlvbnNbaV0pKQotICAgICAgICAgICAgZGVsZXRlIGFuaW07Ci0gICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmluaXNoZWRBbmltYXRpb25Db3VudDsgKytpKQorICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5yZW1vdmUoZmluaXNoZWRBbmltYXRpb25zW2ldKTsKIH0KIAotdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKK3Zv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0QW5pbWF0aW9uU3RhcnRUaW1lKGRvdWJs
ZSB0KQogewogICAgIC8vIFNldCBzdGFydCB0aW1lIG9uIGFsbCBhbmltYXRpb25zIHdhaXRpbmcg
Zm9yIGl0CiAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAg
aWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0YXJ0VGltZSgpKQogICAgICAgICAgICAgYW5p
bS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXRT
dGFydFRpbWVTZXQsIHQpOwogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNl
dFRyYW5zaXRpb25TdGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCkKK3ZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHks
IGRvdWJsZSB0KQogewogICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZSBmb3IgZ2l2ZW4gcHJvcGVy
dHkgdHJhbnNpdGlvbgogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3RhcnRUaW1lKCkgJiYgYW5p
bS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGFuaW0tPnVw
ZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRU
aW1lU2V0LCB0KTsKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5k
QW5pbWF0aW9ucygpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zKCkKIHsKICAgICBpZiAobV9zdXNwZW5kZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTM1
OSwxOSArNDAxLDE5IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW8K
IAogICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0g
PSBpdC0+c2Vjb25kKQorICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpKQogICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKGZhbHNlKTsK
ICAgICB9CiAKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0
cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkp
CiAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoZmFsc2UpOwogICAgIH0KIH0KIAot
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQordm9pZCBDb21wb3Np
dGVBbmltYXRpb25Qcml2YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKIHsKICAgICBpZiAoIW1fc3Vz
cGVuZGVkKQogICAgICAgICByZXR1cm47CkBAIC0zODAsOTAgKzQyMiw5MCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9uCiAKICAgICBBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7
CiAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAg
ICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmIChhbmltICYm
IGFuaW0tPnBsYXlTdGF0ZVBsYXlpbmcoKSkKICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlT
dGF0ZSh0cnVlKTsKICAgICB9CiAKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNp
dGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmIChhbmltICYmIGFuaW0t
Pmhhc1N0eWxlKCkpCiAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7CiAg
ICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1h
dGlvbnMoaW50IHByb3BlcnR5KQordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpvdmVy
cmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCiB7CiAgICAgQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsK
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmFu
aW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICBhbmltLT5zZXRPdmVy
cmlkZGVuKHRydWUpOwogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KQordm9pZCBDb21wb3Np
dGVBbmltYXRpb25Qcml2YXRlOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGlu
dCBwcm9wZXJ0eSkKIHsKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQo
KTsKICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwogICAgIH0KIH0K
IAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVBbmltYXRpb25JbmRpY2VzKGNvbnN0IEtleWZy
YW1lQW5pbWF0aW9uKiBhLCBjb25zdCBLZXlmcmFtZUFuaW1hdGlvbiogYikKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlQW5pbWF0aW9uSW5kaWNlcyhSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+
IGEsIGNvbnN0IFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYikKIHsKICAgICByZXR1cm4gYS0+
aW5kZXgoKSA8IGItPmluZGV4KCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdHls
ZUF2YWlsYWJsZSgpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnN0eWxlQXZhaWxh
YmxlKCkKIHsKICAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMgPT0gMCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gV2UgaGF2ZSB0byBnbyB0aHJvdWdoIGFuaW1hdGlvbnMgaW4g
dGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluCiAgICAgLy8gdGhlIHN0eWxlLCBiZWNh
dXNlIG9yZGVyIG1hdHRlcnMgZm9yIGFkZGl0aXZpdHkuCi0gICAgVmVjdG9yPEtleWZyYW1lQW5p
bWF0aW9uKj4gYW5pbWF0aW9ucyhtX2tleWZyYW1lQW5pbWF0aW9ucy5zaXplKCkpOworICAgIFZl
Y3RvcjxSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+ID4gYW5pbWF0aW9ucyhtX2tleWZyYW1lQW5p
bWF0aW9ucy5zaXplKCkpOwogICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcihtX2tleWZyYW1lQW5pbWF0
aW9ucywgYW5pbWF0aW9ucyk7CiAKICAgICBpZiAoYW5pbWF0aW9ucy5zaXplKCkgPiAxKQogICAg
ICAgICBzdGQ6OnN0YWJsZV9zb3J0KGFuaW1hdGlvbnMuYmVnaW4oKSwgYW5pbWF0aW9ucy5lbmQo
KSwgY29tcGFyZUFuaW1hdGlvbkluZGljZXMpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBh
bmltID0gYW5pbWF0aW9uc1tpXTsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBh
bmltYXRpb25zW2ldLmdldCgpOwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9y
U3R5bGVBdmFpbGFibGUoKSkKICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0U3R5bGVBdmFpbGFibGUsIC0xKTsKICAg
ICB9CiAKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAg
ICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkpCiAgICAgICAg
ICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGVJbnB1dFN0eWxlQXZhaWxhYmxlLCAtMSk7CiAgICAgfQogfQogCi1ib29sIENvbXBvc2l0ZUFu
aW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5n
Tm93KSBjb25zdAorYm9vbCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjppc0FuaW1hdGluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBpc1J1bm5pbmdOb3cpIGNvbnN0CiB7CiAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwogICAg
ICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBpc1J1
bm5pbmdOb3cpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3Ry
YW5zaXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwog
ICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBp
c1J1bm5pbmdOb3cpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdHls
ZUF2YWlsYWJsZShib29sIHdhaXRpbmcpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6
OnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRpbmcpCiB7CiAgICAgaWYgKHdh
aXRpbmcpCiAgICAgICAgIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7CkBAIC00NzIsNCAr
NTE0LDg0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRXYWl0aW5nRm9yU3QKICAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXItPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSh3YWl0aW5n
KTsKIH0KIAorQ29tcG9zaXRlQW5pbWF0aW9uOjpDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9u
Q29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICA6IG1fZGF0YShuZXcgQ29tcG9z
aXRlQW5pbWF0aW9uUHJpdmF0ZShhbmltYXRpb25Db250cm9sbGVyLCB0aGlzKSkKK3sKK30KKwor
Q29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKK3sKKyAgICBkZWxldGUg
bV9kYXRhOworfQorCitSZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRlKHJl
bmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKK30KKworYm9vbCBDb21wb3NpdGVB
bmltYXRpb246OmFuaW1hdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0
aW5nKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRXYWl0aW5nRm9yU3R5bGVB
dmFpbGFibGUoYm9vbCBiKQoreworICAgIG1fZGF0YS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKGIpOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzZXRUcmFuc2l0aW9ucyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIG1fZGF0YS0+cmVzZXRUcmFuc2l0aW9ucyhy
ZW5kZXJlcik7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9u
cygpCit7CisgICAgbV9kYXRhLT5zdXNwZW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9kYXRhLT5yZXN1bWVB
bmltYXRpb25zKCk7Cit9CisKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnN1c3BlbmRlZCgpOworfQorCit2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6c3R5bGVBdmFpbGFibGUoKQoreworICAgIG1fZGF0YS0+c3R5bGVBdmFp
bGFibGUoKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29s
IGIpCit7CisgICAgbV9kYXRhLT5zZXRBbmltYXRpbmcoYik7Cit9CisKK2Jvb2wgQ29tcG9zaXRl
QW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBpc1J1bm5p
bmdOb3cpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+aXNBbmltYXRpbmdQcm9wZXJ0eShw
cm9wZXJ0eSwgaXNSdW5uaW5nTm93KTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKK3sKKyAgICBtX2RhdGEtPnNldEFuaW1hdGlv
blN0YXJ0VGltZSh0KTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFRyYW5zaXRp
b25TdGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCkKK3sKKyAgICBtX2RhdGEtPnNldFRy
YW5zaXRpb25TdGFydFRpbWUocHJvcGVydHksIHQpOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KQoreworICAgIG1f
ZGF0YS0+b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMocHJvcGVydHkpOworfQorCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQg
cHJvcGVydHkpCit7CisgICAgbV9kYXRhLT5yZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRp
b25zKHByb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNzE0NCkK
KysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDY4ICszNiw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU7CiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyOwot
Y2xhc3MgSW1wbGljaXRBbmltYXRpb247Ci1jbGFzcyBLZXlmcmFtZUFuaW1hdGlvbjsKLWNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyT2JqZWN0Owog
CiAvLyBBIENvbXBvc2l0ZUFuaW1hdGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBhbmlt
YXRpb25zIHRoYXQgYXJlIHJ1bm5pbmcKIC8vIG9uIGEgc2luZ2xlIFJlbmRlck9iamVjdCwgc3Vj
aCBhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KIGNsYXNz
IENvbXBvc2l0ZUFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAg
Q29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgIDogbV9zdXNwZW5kZWQoZmFsc2UpCi0gICAgICAgICwgbV9hbmltYXRpb25D
b250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgICwgbV9udW1TdHlsZUF2YWls
YWJsZVdhaXRlcnMoMCkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlv
bihBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKTsKICAgICB+Q29tcG9z
aXRlQW5pbWF0aW9uKCk7CiAKICAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5
bGUpOworICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEFuaW1hdGlu
Zyhib29sKTsKLSAgICBib29sIGFuaW1hdGluZygpOwotICAgIAotICAgIGNvbnN0IEtleWZyYW1l
QW5pbWF0aW9uKiBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0Owot
CisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCk7CiAgICAgdm9pZCBy
ZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCopOwotICAgIHZvaWQgcmVzZXRBbmltYXRpb25z
KFJlbmRlck9iamVjdCopOwotCi0gICAgdm9pZCBjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKFJl
bmRlck9iamVjdCopOwotCi0gICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQp
OwotICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0
KTsKIAogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKLSAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVk
OyB9Ci0KLSAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7
Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0
eSk7CisgICAgYm9vbCBzdXNwZW5kZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc3R5bGVBdmFpbGFi
bGUoKTsKLQorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wpOwogICAgIGJvb2wgaXNBbmltYXRp
bmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93KSBjb25zdDsKIAotICAg
IHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGJvb2wpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAgIHZvaWQgdXBk
YXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCBzZXRBbmlt
YXRpb25TdGFydFRpbWUoZG91YmxlIHQpOworICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGlt
ZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKIAotICAgIEtleWZyYW1lQW5pbWF0aW9uKiBnZXRL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIG92ZXJyaWRl
SW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7CisgICAgdm9pZCByZXN1bWVPdmVycmlk
ZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7CiAKIHByaXZhdGU6Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPiBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgS2V5ZnJhbWVB
bmltYXRpb24qPiAgQW5pbWF0aW9uTmFtZU1hcDsKLQotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXAgbV90cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmlt
YXRpb25zOwotICAgIGJvb2wgbV9zdXNwZW5kZWQ7Ci0gICAgQW5pbWF0aW9uQ29udHJvbGxlciog
bV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIHVuc2lnbmVkIG1fbnVtU3R5bGVBdmFpbGFibGVX
YWl0ZXJzOworICAgIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGUqIG1fZGF0YTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNzE0NCkKKysrIFdlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEw
NSwzMCBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2CiAgICAgICAg
IERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OlRSQU5TSVRJ
T05FTkRfTElTVEVORVI7CiAKICAgICAgICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVy
KGxpc3RlbmVyVHlwZSkpIHsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZWxl
bWVudEZvckV2ZW50RGlzcGF0Y2goKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0
eU5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW5nUHJvcGVydHkgIT0gY0FuaW1h
dGVBbGwpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFt
ZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX2FuaW1hdGluZ1Byb3BlcnR5KSk7Ci0gICAg
ICAgICAgICAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLnN0YXJ0VGltZXIoZWxlbWVudCwgcHJvcGVydHlO
YW1lLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCB0cnVlLCBldmVudFR5cGUsIGVsYXBzZWRUaW1lKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1lOworICAgICAgICAg
ICAgaWYgKG1fYW5pbWF0aW5nUHJvcGVydHkgIT0gY0FuaW1hdGVBbGwpCisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5
SUQ+KG1fYW5pbWF0aW5nUHJvcGVydHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIERpc3BhdGNoIHRoZSBldmVudAorICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSAwOworICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5ub2RlKCkgJiYgbV9vYmplY3QtPm5v
ZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obV9vYmplY3QtPm5vZGUoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVCgh
ZWxlbWVudC5nZXQoKSB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAgICAgICAgICAgaWYgKCFlbGVtZW50LmdldCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gS2VlcCBhIHJl
ZmVyZW5jZSB0byB0aGlzIEltcGxpY2l0QW5pbWF0aW9uIHNvIGl0IGRvZXNuJ3QgZ28gYXdheSBp
biB0aGUgaGFuZGxlcgorICAgICAgICAgICAgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPiByZXRh
aW5lcih0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2FsbCB0aGUgZXZlbnQg
aGFuZGxlcgorICAgICAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRUcmFuc2l0aW9uRXZl
bnQoZXZlbnRUeXBlLCBwcm9wZXJ0eU5hbWUsIGVsYXBzZWRUaW1lKTsKKworICAgICAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCisgICAgICAgICAgICBp
ZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50ICYmIGVs
ZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChlbGVtZW50LT5y
ZW5kZXJlcigpLT5lbGVtZW50KCkpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlk
IGRpc3BhdGNoIGFuIGV2ZW50CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJldmlzaW9uIDM3MTQ0KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw4ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBmb3IgYSBzaW5nbGUgUmVu
ZGVyT2JqZWN0LgogY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgaW50
IGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmltYXRpb24qLCBj
b25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKTsKLSAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1h
dGlvbigpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUo
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHks
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOworICAgIH07CiAgICAg
CiAgICAgaW50IHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlv
blByb3BlcnR5OyB9CiAgICAgaW50IGFuaW1hdGluZ1Byb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpbmdQcm9wZXJ0eTsgfQpAQCAtNjksNiArNzEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwogCiBwcml2YXRlOgorICAgIElt
cGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpbmdQcm9wZXJ0eSwg
UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSk7ICAgIAorICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7CisKICAgICBp
bnQgbV90cmFuc2l0aW9uUHJvcGVydHk7ICAgLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eSBhcyBzcGVj
aWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLiBNYXkgYmUgY0FuaW1hdGVBbGwKICAgICBpbnQgbV9h
bmltYXRpbmdQcm9wZXJ0eTsgICAgLy8gU3BlY2lmaWMgcHJvcGVydHkgZm9yIHRoaXMgSW1wbGlj
aXRBbmltYXRpb24KICAgICBib29sIG1fb3ZlcnJpZGRlbjsgICAgICAgICAgLy8gdHJ1ZSB3aGVu
IHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVzIHRoZSB0cmFuc2l0
aW9uaW5nIHByb3BlcnR5CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5p
bWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzcxNDQpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDExICsxOTksMjYg
QEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZQogICAgIH0KIAogICAg
IGlmIChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvckV2ZW50RGlzcGF0Y2goKSkgewotICAg
ICAgICAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSB0cnVlOwotICAgICAgICAgICAgbV9hbmlt
YXRpb25FdmVudERpc3BhdGNoZXIuc3RhcnRUaW1lcihlbGVtZW50LCBtX2tleWZyYW1lcy5hbmlt
YXRpb25OYW1lKCksIC0xLCB0cnVlLCBldmVudFR5cGUsIGVsYXBzZWRUaW1lKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQorICAg
ICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSAwOworICAgICAgICBpZiAobV9vYmplY3QtPm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgp
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG1fb2JqZWN0LT5ub2RlKCkpOworCisgICAgICAgIEFTU0VSVCghZWxlbWVudC5nZXQo
KSB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5QYWdl
Q2FjaGUoKSkpOworICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byB0aGlzIEltcGxpY2l0
QW5pbWF0aW9uIHNvIGl0IGRvZXNuJ3QgZ28gYXdheSBpbiB0aGUgaGFuZGxlcgorICAgICAgICBS
ZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IHJldGFpbmVyKHRoaXMpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2FsbCB0aGUgZXZlbnQgaGFuZGxlcgorICAgICAgICBlbGVtZW50LT5kaXNwYXRjaFdl
YktpdEFuaW1hdGlvbkV2ZW50KGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgp
LCBlbGFwc2VkVGltZSk7CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5p
bWF0ZWQpIHN0eWxlCisgICAgICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0
QW5pbWF0aW9uRW5kRXZlbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHNl
dENoYW5nZWQoZWxlbWVudC0+cmVuZGVyZXIoKS0+ZWxlbWVudCgpKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50CiAgICAgfQogCiAgICAgcmV0dXJuIGZh
bHNlOyAvLyBEaWQgbm90IGRpc3BhdGNoIGFuIGV2ZW50CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNzE0NCkKKysrIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
OSArNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZm9yIGEgc2luZ2xlIFJlbmRlck9i
amVjdC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2Ugewog
cHVibGljOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7Ci0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxLZXlmcmFt
ZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5p
bWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRl
cmVyLCBpbmRleCwgY29tcG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKKyAgICB9
OworICAgIAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKIAogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFu
aW1hdGlvbk5hbWUoKTsgfQpAQCAtNzIsNiArNzQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB2
YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwogCiBwcml2YXRlOgorICAgIEtleWZyYW1l
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqLCBpbnQg
aW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpOworICAgIHZpcnR1YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CisgICAgCiAgICAgLy8g
VGhlIGtleWZyYW1lcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KICAgICBLZXlmcmFtZUxpc3QgbV9r
ZXlmcmFtZXM7CiAK
</data>
<flag name="review"
          id="10866"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>