<?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>23467</bug_id>
          
          <creation_ts>2009-01-21 16:30:28 -0800</creation_ts>
          <short_desc>Optimize styleAvailable logic in AnimationController</short_desc>
          <delta_ts>2009-03-02 11:51:53 -0800</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>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106540</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-21 16:30:28 -0800</bug_when>
    <thetext>One of my tasks is to synchronize animations. To do this I will need to build a linked list of currently running animations so I can change them all at once at certain times. This got me to thinking about how the styleAvailable logic has these same characteristics (they need to get marked as waiting for something, and when that thing happens they all have to be notified at the same time). And I realized that keeping them in a list would be an optimization from having to walk through all CompositeAnimations looking for them. 

So I&apos;m making this change now, both for the optimization and so I can do the same thing for the sync logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106602</commentid>
    <comment_count>1</comment_count>
      <attachid>26926</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-22 09:15:09 -0800</bug_when>
    <thetext>Created attachment 26926
Patch

       Change styleAvailable functionality to be a linked list
        rather than scanning every CompositeAnimation for 
        Animations that are waiting for styleAvailable. This has
        potential for large performance improvement in cases where
        there are many animations firing at once. But it will also
        help in my next fix, which is to synchronize software and
        accelerated animations.

        I also changed slightly when the beginAnimationUpdate and
        endAnimationUpdate calls are made. But this has no real
        effect on performance or behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106776</commentid>
    <comment_count>2</comment_count>
      <attachid>26926</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-23 11:07:02 -0800</bug_when>
    <thetext>Comment on attachment 26926
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106861</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-24 07:10:48 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/dom/Document.cpp
Sending        WebCore/page/animation/AnimationBase.cpp
Sending        WebCore/page/animation/AnimationBase.h
Sending        WebCore/page/animation/AnimationController.cpp
Sending        WebCore/page/animation/AnimationController.h
Sending        WebCore/page/animation/CompositeAnimation.cpp
Sending        WebCore/page/animation/CompositeAnimation.h
Transmitting file data ........
Committed revision 40215.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26926</attachid>
            <date>2009-01-22 09:15:09 -0800</date>
            <delta_ts>2009-01-23 11:07:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>23467.patch</filename>
            <type>text/plain</type>
            <size>19591</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDEyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMDEtMjIgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ2NworCisgICAgICAgIENo
YW5nZSBzdHlsZUF2YWlsYWJsZSBmdW5jdGlvbmFsaXR5IHRvIGJlIGEgbGlua2VkIGxpc3QKKyAg
ICAgICAgcmF0aGVyIHRoYW4gc2Nhbm5pbmcgZXZlcnkgQ29tcG9zaXRlQW5pbWF0aW9uIGZvciAK
KyAgICAgICAgQW5pbWF0aW9ucyB0aGF0IGFyZSB3YWl0aW5nIGZvciBzdHlsZUF2YWlsYWJsZS4g
VGhpcyBoYXMKKyAgICAgICAgcG90ZW50aWFsIGZvciBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCBpbiBjYXNlcyB3aGVyZQorICAgICAgICB0aGVyZSBhcmUgbWFueSBhbmltYXRpb25zIGZp
cmluZyBhdCBvbmNlLiBCdXQgaXQgd2lsbCBhbHNvCisgICAgICAgIGhlbHAgaW4gbXkgbmV4dCBm
aXgsIHdoaWNoIGlzIHRvIHN5bmNocm9uaXplIHNvZnR3YXJlIGFuZAorICAgICAgICBhY2NlbGVy
YXRlZCBhbmltYXRpb25zLgorCisgICAgICAgIEkgYWxzbyBjaGFuZ2VkIHNsaWdodGx5IHdoZW4g
dGhlIGJlZ2luQW5pbWF0aW9uVXBkYXRlIGFuZAorICAgICAgICBlbmRBbmltYXRpb25VcGRhdGUg
Y2FsbHMgYXJlIG1hZGUuIEJ1dCB0aGlzIGhhcyBubyByZWFsCisgICAgICAgIGVmZmVjdCBvbiBw
ZXJmb3JtYW5jZSBvciBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6On5BbmltYXRpb25C
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGlu
ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25CYXNlOjpzZXROZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnN0eWxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tU3R5bGVBdmFpbGFi
bGVXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c3R5bGVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
cjo6QW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyOjplbmRBbmltYXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
Q29udHJvbGxlcjo6YWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0
KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmg6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpyZW1v
dmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVBbmltYXRpb246OmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0
KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoKKwogMjAw
OS0wMS0yMiAgQWRhbSBUcmVhdCAgPGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgogCiAgICAg
ICAgIEZpeCB0aGUgUXQgYnVpbGQgYWZ0ZXIgUmVuZGVyQm94IGNoYW5nZXMuCkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiA0MDEyNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwNiw5ICsxMTA2LDYgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUo
U3R5bGVDaGFuZ2UgYwogICAgIGlmIChtX2luU3R5bGVSZWNhbGMpCiAgICAgICAgIHJldHVybjsg
Ly8gR3VhcmQgYWdhaW5zdCByZS1lbnRyYW5jeS4gLWR3aAogCi0gICAgaWYgKG1fZnJhbWUpCi0g
ICAgICAgIG1fZnJhbWUtPmFuaW1hdGlvbigpLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotCiAg
ICAgbV9pblN0eWxlUmVjYWxjID0gdHJ1ZTsKICAgICBzdXNwZW5kUG9zdEF0dGFjaENhbGxiYWNr
cygpOwogICAgIApAQCAtMTE3MywxOSArMTE3MCwyMSBAQCBiYWlsX291dDoKICAgICAgICAgbV9j
bG9zZUFmdGVyU3R5bGVSZWNhbGMgPSBmYWxzZTsKICAgICAgICAgaW1wbGljaXRDbG9zZSgpOwog
ICAgIH0KLQotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5hbmltYXRpb24oKS0+
ZW5kQW5pbWF0aW9uVXBkYXRlKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVJlbmRlcmlu
ZygpCiB7Ci0gICAgaWYgKGhhc0NoYW5nZWRDaGlsZCgpICYmICFpblBhZ2VDYWNoZSgpKQotICAg
ICAgICByZWNhbGNTdHlsZShOb0NoYW5nZSk7CisgICAgaWYgKCFoYXNDaGFuZ2VkQ2hpbGQoKSB8
fCBpblBhZ2VDYWNoZSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmIChtX2Zy
YW1lKQorICAgICAgICBtX2ZyYW1lLT5hbmltYXRpb24oKS0+YmVnaW5BbmltYXRpb25VcGRhdGUo
KTsKKyAgICAgICAgCisgICAgcmVjYWxjU3R5bGUoTm9DaGFuZ2UpOwogICAgIAotICAgIC8vIFRl
bGwgdGhlIGFuaW1hdGlvbiBjb250cm9sbGVyIHRoYXQgdGhlIHN0eWxlIGlzIGF2YWlsYWJsZSBh
bmQgaXQgY2FuIHN0YXJ0IGFuaW1hdGlvbnMKKyAgICAvLyBUZWxsIHRoZSBhbmltYXRpb24gY29u
dHJvbGxlciB0aGF0IHVwZGF0ZVJlbmRlcmluZyBpcyBmaW5pc2hlZCBhbmQgaXQgY2FuIGRvIGFu
eSBwb3N0LXByb2Nlc3NpbmcKICAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgbV9mcmFtZS0+YW5p
bWF0aW9uKCktPnN0eWxlQXZhaWxhYmxlKCk7CisgICAgICAgIG1fZnJhbWUtPmFuaW1hdGlvbigp
LT5lbmRBbmltYXRpb25VcGRhdGUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlRG9jdW1l
bnRzUmVuZGVyaW5nKCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcAkocmV2aXNpb24gNDAxMjUpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTYsNiArNTE2LDcgQEAgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYQogICAgICwgbV9jb21wQW5pbShjb21wQW5pbSkK
ICAgICAsIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoZmFsc2UpCiAgICAgLCBtX25leHRJ
dGVyYXRpb25EdXJhdGlvbigtMSkKKyAgICAsIG1fbmV4dCgwKQogewogICAgIC8vIENvbXB1dGUg
dGhlIHRvdGFsIGR1cmF0aW9uCiAgICAgbV90b3RhbER1cmF0aW9uID0gLTE7CkBAIC01MjYsNyAr
NTI3LDcgQEAgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYQogQW5pbWF0
aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UoKQogewogICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICBtX2NvbXBBbmltLT5z
ZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAgICBtX2NvbXBBbmltLT5y
ZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKIH0KIAogYm9vbCBBbmltYXRp
b25CYXNlOjpwcm9wZXJ0aWVzRXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikKQEAgLTYwNyw3ICs2MDgsNyBAQCB2b2lkIEFuaW1hdGlvbkJh
c2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRl
SW5wdXRSZXN0YXJ0QW5pbWF0aW9uIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdh
cmRsZXNzIG9mIHN0YXRlLgogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0TWFr
ZU5ldykgewogICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGVTdGFydFdh
aXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JT
dHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgICAgICBtX2NvbXBBbmltLT5yZW1vdmVGcm9t
U3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZU5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwogICAgICAgICBtX3BhdXNl
VGltZSA9IC0xOwpAQCAtNjIwLDcgKzYyMSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRl
U3RhdGVNYWNoaW5lKEEKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0UmVz
dGFydEFuaW1hdGlvbikgewogICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGVTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdh
aXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgICAgICBtX2NvbXBBbmltLT5y
ZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKICAgICAgICAgbV9hbmltU3Rh
dGUgPSBBbmltYXRpb25TdGF0ZU5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwogICAgICAg
ICBtX3BhdXNlVGltZSA9IC0xOwpAQCAtNjM1LDcgKzYzNiw3IEBAIHZvaWQgQW5pbWF0aW9uQmFz
ZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEEKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0RW5kQW5pbWF0aW9uKSB7CiAgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wQW5pbS0+
c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGZhbHNlKTsKKyAgICAgICAgICAgIG1fY29tcEFu
aW0tPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KHRoaXMpOwogICAgICAgICBtX2Fu
aW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlRG9uZTsKICAgICAgICAgZW5kQW5pbWF0aW9uKHRydWUp
OwogICAgICAgICByZXR1cm47CkBAIC02NzYsNyArNjc3LDcgQEAgdm9pZCBBbmltYXRpb25CYXNl
Ojp1cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAw
KTsKICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFu
aW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRp
bWUKICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0Zv
clN0eWxlQXZhaWxhYmxlKHRydWUpOworICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFkZFRv
U3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIC8vIFRyaWdn
ZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAg
ICBpZiAobV9vYmplY3QpCkBAIC02OTEsOCArNjkyLDYgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1
cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU6CiAgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dFN0eWxlQXZhaWxhYmxlIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5
U3RhdGVQYXVzZWQpOwogCi0gICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5
bGVBdmFpbGFibGUoZmFsc2UpOwotCiAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmly
ZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9u
ZCB3aXRoIHN0YXJ0IHRpbWUKICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3Rh
dGVTdGFydFdhaXRSZXNwb25zZTsKIApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmgJKHJldmlzaW9uIDQwMTI1KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTUgQEAgcHVibGljOgog
ICAgIAogICAgIGRvdWJsZSBnZXRFbGFwc2VkVGltZSgpIGNvbnN0OwogICAgIAorICAgIEFuaW1h
dGlvbkJhc2UqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KKyAgICB2b2lkIHNldE5l
eHQoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKSB7IG1fbmV4dCA9IGFuaW1hdGlvbjsgfQorICAg
IAorICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKSAKKyAgICB7CisgICAgICAgIEFTU0VSVCh3YWl0
aW5nRm9yU3R5bGVBdmFpbGFibGUoKSk7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0U3R5bGVBdmFpbGFibGUsIC0xKTsKKyAgICB9
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIHsgfQpA
QCAtMTkzLDYgKzIwMiw4IEBAIHByb3RlY3RlZDoKICAgICBDb21wb3NpdGVBbmltYXRpb24qIG1f
Y29tcEFuaW07CiAgICAgYm9vbCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOwogICAgIGRv
dWJsZSBtX3RvdGFsRHVyYXRpb24sIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uOworICAgIAorICAg
IEFuaW1hdGlvbkJhc2UqIG1fbmV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAko
cmV2aXNpb24gNDAxMjUpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiQW5p
bWF0aW9uQmFzZS5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
IkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTc4LDYgKzc5LDkgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgc2V0QmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKGRvdWJs
ZSB0KSB7IG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gdDsgfQogICAgIAorICAgIHZvaWQg
YWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIHJl
bW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsgICAgCisgICAg
CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBSZWZQdHI8Q29t
cG9zaXRlQW5pbWF0aW9uPiA+IFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDsKIApAQCAtOTgsNiAr
MTAyLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9ub2RlQ2hhbmdl
c1RvRGlzcGF0Y2g7CiAgICAgCiAgICAgZG91YmxlIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
OworICAgIEFuaW1hdGlvbkJhc2UqIG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzOworICAgIEFuaW1h
dGlvbkJhc2UqIG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVyOwogfTsKIAogQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKiBmcmFtZSkK
QEAgLTEwNSw2ICsxMTEsOCBAQCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9u
Q29uCiAgICAgLCBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIodGhpcywgJkFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQpCiAgICAgLCBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoY0JlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZU5vdFNldCkKKyAgICAsIG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzKDAp
CisgICAgLCBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlcigwKQogewogfQogCkBAIC0xMzMsMjMg
KzE0MSw2IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKFIKICAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCi17Ci0gICAgLy8gc3R5bGVBdmFpbGFibGUo
KSBjYW4gY2FsbCBldmVudCBoYW5kbGVycyB3aGljaCB3b3VsZCB1bHRpbWF0ZWx5IGRlbGV0ZSBh
IENvbXBvc2l0ZUFuaW1hdGlvbgotICAgIC8vIGZyb20gdGhlIG1fY29tcG9zaXRlQW5pbWF0aW9u
cyB0YWJsZS4gU28gd2UgY2FuJ3QgaXRlcmF0ZSBpdCBkaXJlY3RseS4gV2Ugd2lsbCBpbnN0ZWFk
IGJ1aWxkCi0gICAgLy8gYSBsaXN0IG9mIENvbXBvc2l0ZUFuaW1hdGlvbnMgd2hpY2ggbmVlZCB0
aGUgc3R5bGVBdmFpbGFibGUoKSBjYWxsIGl0ZXJhdGUgb3ZlciB0aGF0LgotICAgIFZlY3RvcjxS
ZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPiA+IGxpc3Q7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0
QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KQotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNXYWl0aW5nRm9yU3R5
bGVBdmFpbGFibGUoKSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGl0LT5zZWNvbmQpOwotICAg
IAotICAgIFZlY3RvcjxSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRv
ciBsaXN0RW5kID0gbGlzdC5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8Q29tcG9zaXRl
QW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGlz
dEVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnN0eWxlQXZhaWxhYmxlKCk7Ci19Ci0KIHZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKGJvb2wgY2Fs
bFNldENoYW5nZWQvKiA9IGZhbHNlKi8pCiB7CiAgICAgZG91YmxlIG5lZWRzU2VydmljZSA9IC0x
OwpAQCAtMzM5LDkgKzMzMCw0OSBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6bnVtCiAgICAgcmV0dXJuIGNvdW50OwogfQogCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjphZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uKQoreworICAgIEFTU0VSVCghYW5pbWF0aW9uLT5uZXh0KCkpOworICAgIAorICAgIGlmICht
X3N0eWxlQXZhaWxhYmxlV2FpdGVycykKKyAgICAgICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0
ZXItPnNldE5leHQoYW5pbWF0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3R5bGVBdmFpbGFi
bGVXYWl0ZXJzID0gYW5pbWF0aW9uOworICAgICAgICAKKyAgICBtX2xhc3RTdHlsZUF2YWlsYWJs
ZVdhaXRlciA9IGFuaW1hdGlvbjsKKyAgICBhbmltYXRpb24tPnNldE5leHQoMCk7Cit9CisKK3Zv
aWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdh
aXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQoreworICAgIEFuaW1hdGlv
bkJhc2UqIHByZXZBbmltYXRpb24gPSAwOworICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uID0gbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnM7IGFuaW1hdGlvbjsgYW5pbWF0aW9uID0gYW5p
bWF0aW9uLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbiA9PSBhbmltYXRpb25Ub1Jl
bW92ZSkgeworICAgICAgICAgICAgaWYgKHByZXZBbmltYXRpb24pCisgICAgICAgICAgICAgICAg
cHJldkFuaW1hdGlvbi0+c2V0TmV4dChhbmltYXRpb24tPm5leHQoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMgPSBhbmltYXRpb24t
Pm5leHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbGFzdFN0eWxlQXZhaWxh
YmxlV2FpdGVyID09IGFuaW1hdGlvbikKKyAgICAgICAgICAgICAgICBtX2xhc3RTdHlsZUF2YWls
YWJsZVdhaXRlciA9IHByZXZBbmltYXRpb247CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBhbmltYXRpb25Ub1JlbW92ZS0+c2V0TmV4dCgwKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQoreworICAg
IC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5
CisgICAgZm9yIChBbmltYXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3N0eWxlQXZhaWxhYmxlV2Fp
dGVyczsgYW5pbWF0aW9uOyBhbmltYXRpb24gPSBhbmltYXRpb24tPm5leHQoKSkKKyAgICAgICAg
YW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOworICAgIAorICAgIG1fc3R5bGVBdmFpbGFibGVX
YWl0ZXJzID0gMDsKKyAgICBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlciA9IDA7Cit9CisKIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQogICAg
IDogbV9kYXRhKG5ldyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShmcmFtZSkpCi0gICAgLCBt
X251bVN0eWxlQXZhaWxhYmxlV2FpdGVycygwKQogewogfQogCkBAIC00NTMsMTQgKzQ4NCw2IEBA
IHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkTm9kZUNoYW5nZVQKICAgICAgICAgbV9kYXRh
LT5hZGROb2RlQ2hhbmdlVG9EaXNwYXRjaChub2RlKTsKIH0KIAotdm9pZCBBbmltYXRpb25Db250
cm9sbGVyOjpzdHlsZUF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKCFtX251bVN0eWxlQXZhaWxhYmxl
V2FpdGVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5zdHlsZUF2YWlsYWJsZSgp
OwotfQotCiBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlcjo6YmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCkKIHsKICAgICByZXR1cm4gbV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsK
QEAgLTQ3Myw2ICs0OTYsMTcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1h
dGlvbgogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCiB7
CisgICAgbV9kYXRhLT5zdHlsZUF2YWlsYWJsZSgpOworfQorCit2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXI6OmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRp
b24pCit7CisgICAgbV9kYXRhLT5hZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoYW5pbWF0aW9u
KTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVGcm9tU3R5bGVBdmFpbGFi
bGVXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit7CisgICAgbV9kYXRhLT5yZW1v
dmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChhbmltYXRpb24pOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXIuaAkocmV2aXNpb24gNDAxMjUpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFuaW1hdGlvbkJhc2U7CiBjbGFzcyBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTsKIGNsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIERvY3VtZW50
OwpAQCAtNjcsMTYgKzY4LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNo
KFBhc3NSZWZQdHI8RWxlbWVudD4sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CiAgICAgdm9pZCBhZGROb2RlQ2hh
bmdlVG9EaXNwYXRjaChQYXNzUmVmUHRyPE5vZGU+KTsKIAotICAgIHZvaWQgc3R5bGVBdmFpbGFi
bGUoKTsKKyAgICB2b2lkIGFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNl
Kik7CisgICAgdm9pZCByZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25C
YXNlKik7CiAKLSAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRp
bmcpCi0gICAgewotICAgICAgICBpZiAod2FpdGluZykKLSAgICAgICAgICAgIG1fbnVtU3R5bGVB
dmFpbGFibGVXYWl0ZXJzKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbnVtU3R5bGVB
dmFpbGFibGVXYWl0ZXJzLS07Ci0gICAgfQotICAgIAogICAgIGRvdWJsZSBiZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWUoKTsKICAgICAKICAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7CkBA
IC04NCw3ICs3OCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZSogbV9kYXRhOwotICAgIHVuc2lnbmVkIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0
ZXJzOyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDQwMTI1KQor
KysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NSwxMiArNzUsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBbmltYXRp
b25zKCkgY29uc3QgIHsgcmV0dXJuICFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSB8fCAhbV9rZXlm
cmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9CiAKLSAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7
Ci0KICAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5LCBib29sIGlzUnVu
bmluZ05vdykgY29uc3Q7CiAKLSAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShi
b29sKTsKLSAgICBib29sIGlzV2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkgY29uc3QgICAgIHsg
cmV0dXJuIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzID4gMDsgfQorICAgIHZvaWQgYWRkVG9T
dHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIHJlbW92ZUZy
b21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKIAogICAgIGJvb2wgcGF1
c2VBbmltYXRpb25BdFRpbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7CiAg
ICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCk7CkBA
IC01MTEsNDAgKzUwOSw2IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6cmVzdW1l
T3YKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQW5pbWF0aW9uSW5kaWNl
cyhSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGEsIGNvbnN0IFJlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4gYikKLXsKLSAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7Ci19Ci0KLXZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIGlm
IChtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycyA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSBoYXZlIHRvIGdvIHRocm91Z2ggYW5pbWF0aW9ucyBpbiB0aGUgb3JkZXIgaW4gd2hp
Y2ggdGhleSBhcHBlYXIgaW4KLSAgICAvLyB0aGUgc3R5bGUsIGJlY2F1c2Ugb3JkZXIgbWF0dGVy
cyBmb3IgYWRkaXRpdml0eS4KLSAgICBWZWN0b3I8UmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiA+
IGFuaW1hdGlvbnMobV9rZXlmcmFtZUFuaW1hdGlvbnMuc2l6ZSgpKTsKLSAgICBjb3B5VmFsdWVz
VG9WZWN0b3IobV9rZXlmcmFtZUFuaW1hdGlvbnMsIGFuaW1hdGlvbnMpOwotCi0gICAgaWYgKGFu
aW1hdGlvbnMuc2l6ZSgpID4gMSkKLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChhbmltYXRpb25z
LmJlZ2luKCksIGFuaW1hdGlvbnMuZW5kKCksIGNvbXBhcmVBbmltYXRpb25JbmRpY2VzKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGFuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKQotICAgICAg
ICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0
YXRlSW5wdXRTdHlsZUF2YWlsYWJsZSwgLTEpOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT53YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSkKLSAgICAgICAgICAgICAgICBhbmltLT51cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dFN0eWxlQXZh
aWxhYmxlLCAtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIGJvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uUHJpdmF0ZTo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5u
aW5nTm93KSBjb25zdAogewogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
KSB7CkBAIC01NjcsMTMgKzUzMSwxNCBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6
OmlzQW5pbWF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlv
blByaXZhdGU6OnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRpbmcpCit2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChB
bmltYXRpb25CYXNlKiBhbmltYXRpb24pCiB7Ci0gICAgaWYgKHdhaXRpbmcpCi0gICAgICAgIG1f
bnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7Ci0gICAgZWxzZQotICAgICAgICBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycy0tOwotICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c2V0V2FpdGlu
Z0ZvclN0eWxlQXZhaWxhYmxlKHdhaXRpbmcpOworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+
YWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KGFuaW1hdGlvbik7Cit9CisKK3ZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uUHJpdmF0ZTo6cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5p
bWF0aW9uQmFzZSogYW5pbWF0aW9uKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVt
b3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoYW5pbWF0aW9uKTsKIH0KIAogYm9vbCBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGRvdWJsZSB0KQpAQCAtNjY2LDE0ICs2MzEsMTQgQEAgZG91YmxlIENvbXBv
c2l0ZUFuaW1hdGlvbjo6d2lsbE5lZWRTZXJ2aQogICAgIHJldHVybiBtX2RhdGEtPndpbGxOZWVk
U2VydmljZSgpOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0V2FpdGluZ0ZvclN0
eWxlQXZhaWxhYmxlKGJvb2wgYikKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjphZGRUb1N0eWxl
QXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQogewotICAgIG1fZGF0
YS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGIpOworICAgIG1fZGF0YS0+YWRkVG9TdHls
ZUF2YWlsYWJsZVdhaXRMaXN0KGFuaW1hdGlvbik7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uOjppc1dhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpIGNvbnN0Cit2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSog
YW5pbWF0aW9uKQogewotICAgIHJldHVybiBtX2RhdGEtPmlzV2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKCk7CisgICAgbV9kYXRhLT5yZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChhbmlt
YXRpb24pOwogfQogCiB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMo
KQpAQCAtNjk2LDExICs2NjEsNiBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aGFzQW5pbWF0
aW9ucygpCiAgICAgcmV0dXJuIG1fZGF0YS0+aGFzQW5pbWF0aW9ucygpOwogfQogCi12b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIG1fZGF0YS0+c3R5bGVB
dmFpbGFibGUoKTsKLX0KLQogdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhi
b29sIGIpCiB7CiAgICAgbV9kYXRhLT5zZXRBbmltYXRpbmcoYik7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDQwMTI1KQorKysg
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb21wb3Np
dGVBbmltYXRpb25Qcml2YXRlOworY2xhc3MgQW5pbWF0aW9uQmFzZTsKIGNsYXNzIEFuaW1hdGlv
bkNvbnRyb2xsZXI7CiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbjsKIGNsYXNzIFJlbmRlck9iamVj
dDsKQEAgLTYwLDE2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgQW5pbWF0aW9uQ29udHJv
bGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpOwogCi0gICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5
bGVBdmFpbGFibGUoYm9vbCk7Ci0gICAgYm9vbCBpc1dhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgp
IGNvbnN0OwotCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIHZvaWQgcmVzdW1l
QW5pbWF0aW9ucygpOwogICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdDsKICAgICAKICAgICBi
b29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdDsKIAotICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKTsK
ICAgICB2b2lkIHNldEFuaW1hdGluZyhib29sKTsKICAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVy
dHkoaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3Q7CiAgICAgCkBAIC04Niw2
ICs4Myw5IEBAIHB1YmxpYzoKICAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShpbnQgcHJv
cGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdDsKIAorICAgIHZvaWQgYWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlv
bkJhc2UqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1h
dGlvbkJhc2UqKTsKKwogcHJpdmF0ZToKICAgICBDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9u
Q29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcik7CiAgICAgCg==
</data>
<flag name="review"
          id="12894"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>