<?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>63586</bug_id>
          
          <creation_ts>2011-06-28 16:53:08 -0700</creation_ts>
          <short_desc>Simplify AudioBufferSourceNode rendering</short_desc>
          <delta_ts>2011-06-29 14:20:20 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429270</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-28 16:53:08 -0700</bug_when>
    <thetext>Simplify AudioBufferSourceNode rendering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429275</commentid>
    <comment_count>1</comment_count>
      <attachid>99003</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-28 16:59:46 -0700</bug_when>
    <thetext>Created attachment 99003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429372</commentid>
    <comment_count>2</comment_count>
      <attachid>99003</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-28 19:17:33 -0700</bug_when>
    <thetext>Comment on attachment 99003
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=99003&amp;action=review

Thanks for walking me through the code offline. Few comments as we discussed.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:121
&gt; +        size_t bufferFramesToProcess = framesToProcess - quantumFrameOffset;

Missing zeroing from the beginning of the quantum to the quantumFrameOffset.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:246
&gt; +        // Final sanity check on buffer access.

Should there be a FIXME to try to get rid of this check, and use assertions and guards outside the loop instead?

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:54
&gt; +    void renderFromBuffer(AudioBus*, unsigned destinationFrameOffset, size_t numberOfFrames);

This should be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429829</commentid>
    <comment_count>3</comment_count>
      <attachid>99140</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-29 13:38:59 -0700</bug_when>
    <thetext>Created attachment 99140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429834</commentid>
    <comment_count>4</comment_count>
      <attachid>99003</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-29 13:43:37 -0700</bug_when>
    <thetext>Comment on attachment 99003
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=99003&amp;action=review

Also please note at line 250 of the new patch I&apos;ve addressed the small clicks issue with the &quot;pool&quot; demo I discussed with you

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:121
&gt;&gt; +        size_t bufferFramesToProcess = framesToProcess - quantumFrameOffset;
&gt; 
&gt; Missing zeroing from the beginning of the quantum to the quantumFrameOffset.

FIXED: I&apos;ve added the zeroing inside renderFromBuffer()

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:246
&gt;&gt; +        // Final sanity check on buffer access.
&gt; 
&gt; Should there be a FIXME to try to get rid of this check, and use assertions and guards outside the loop instead?

Added FIXME

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:54
&gt;&gt; +    void renderFromBuffer(AudioBus*, unsigned destinationFrameOffset, size_t numberOfFrames);
&gt; 
&gt; This should be private.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429868</commentid>
    <comment_count>5</comment_count>
      <attachid>99140</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-29 14:08:54 -0700</bug_when>
    <thetext>Comment on attachment 99140
Patch

Looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429877</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-29 14:20:20 -0700</bug_when>
    <thetext>Committed r90042: &lt;http://trac.webkit.org/changeset/90042&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99003</attachid>
            <date>2011-06-28 16:59:46 -0700</date>
            <delta_ts>2011-06-29 13:43:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63586-20110628165945.patch</filename>
            <type>text/plain</type>
            <size>20878</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5OTc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYtMjggIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcmVuZGVy
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU4
NgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRpbyBBUEkgaXMgbm90IHlldCBpbXBs
ZW1lbnRlZC4KKworICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291
cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJGcm9t
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT24pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlR3JhaW5Pbik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnRvdGFsUGl0Y2hSYXRlKToKKyAgICAg
ICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaDoKKwogMjAxMS0wNi0yOCAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjg5OTY4LgpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiA4OTkzNykKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNvbnN0IGRvdWJs
ZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9IDAuMDIwOyAvLyAyMG1zCiBjb25zdCBkb3VibGUgVW5r
bm93blRpbWUgPSAtMTsKIAorLy8gQXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHBsYXliYWNrIHJh
dGUuCisvLyBIaWdoZXIgdGhhbiBleHBlY3RlZCByYXRlcyBjYW4gYmUgdXNlZnVsIHdoZW4gcGxh
eWluZyBiYWNrIG92ZXJzYW1wbGVkIGJ1ZmZlcnMKKy8vIHRvIG1pbmltaXplIGxpbmVhciBpbnRl
cnBvbGF0aW9uIGFsaWFzaW5nLgorY29uc3QgZG91YmxlIE1heFJhdGUgPSAxMDI0OworCiBQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVh
dGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyU291cmNlTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KSk7CkBAIC01MywxOSArNTgsMTcgQEAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZl
clNvdXJjZQogICAgICwgbV9oYXNGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fc3RhcnRUaW1lKDAu
MCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKLSAgICAsIG1fc2NoZWR1bGluZ0ZyYW1l
RGVsYXkoMCkKLSAgICAsIG1fcmVhZEluZGV4KDApCisgICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgo
MCkKICAgICAsIG1faXNHcmFpbihmYWxzZSkKICAgICAsIG1fZ3JhaW5PZmZzZXQoMC4wKQogICAg
ICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQotICAgICwgbV9ncmFpbkZy
YW1lQ291bnQoMCkKICAgICAsIG1fbGFzdEdhaW4oMS4wKQogICAgICwgbV9wYW5uZXJOb2RlKDAp
CiB7CiAgICAgc2V0VHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlKTsKIAogICAgIG1fZ2Fp
biA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5
YmFja1JhdGUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBB
dWRpb1Jlc2FtcGxlcjo6TWF4UmF0ZSk7CisgICAgbV9wbGF5YmFja1JhdGUgPSBBdWRpb1BhcmFt
OjpjcmVhdGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBNYXhSYXRlKTsKICAgICAKICAgICBt
X2dhaW4tPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgbV9wbGF5YmFja1JhdGUtPnNldENvbnRl
eHQoY29udGV4dCk7CkBAIC05NSwxNCArOTgsMTMgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZQogICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewogICAg
ICAgICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gc3RhcnQgcGxheWluZy4KICAgICAgICAgZG91
YmxlIHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgICAgIGRvdWJsZSBwaXRj
aFJhdGUgPSB0b3RhbFBpdGNoUmF0ZSgpOwogICAgICAgICBkb3VibGUgcXVhbnR1bVN0YXJ0VGlt
ZSA9IGNvbnRleHQoKS0+Y3VycmVudFRpbWUoKTsKICAgICAgICAgZG91YmxlIHF1YW50dW1FbmRU
aW1lID0gcXVhbnR1bVN0YXJ0VGltZSArIGZyYW1lc1RvUHJvY2VzcyAvIHNhbXBsZVJhdGU7CiAK
ICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNz
ZWQsIHRoZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xl
LgogICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIG1fZW5kVGltZSA8PSBx
dWFudHVtU3RhcnRUaW1lKSB7CiAgICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwotICAg
ICAgICAgICAgbV9yZWFkSW5kZXggPSAwOworICAgICAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4
ID0gMDsKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTEz
LDI3ICsxMTUsMTMgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSGFuZGxlIHNhbXBs
ZS1hY2N1cmF0ZSBzY2hlZHVsaW5nIHNvIHRoYXQgYnVmZmVyIHBsYXliYWNrIHdpbGwgaGFwcGVu
IGF0IGEgdmVyeSBwcmVjaXNlIHRpbWUuCi0gICAgICAgIG1fc2NoZWR1bGluZ0ZyYW1lRGVsYXkg
PSAwOwotICAgICAgICBpZiAobV9zdGFydFRpbWUgPj0gcXVhbnR1bVN0YXJ0VGltZSkgewotICAg
ICAgICAgICAgLy8gbV9zY2hlZHVsaW5nRnJhbWVEZWxheSBpcyBzZXQgaGVyZSBvbmx5IHRoZSB2
ZXJ5IGZpcnN0IHJlbmRlciBxdWFudHVtIChiZWNhdXNlIG9mIGFib3ZlIGNoZWNrOiBtX3N0YXJ0
VGltZSA+PSBxdWFudHVtRW5kVGltZSkKLSAgICAgICAgICAgIC8vIFNvOiBxdWFudHVtU3RhcnRU
aW1lIDw9IG1fc3RhcnRUaW1lIDwgcXVhbnR1bUVuZFRpbWUKLSAgICAgICAgICAgIEFTU0VSVCht
X3N0YXJ0VGltZSA8IHF1YW50dW1FbmRUaW1lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZG91YmxlIHN0YXJ0VGltZUluUXVhbnR1bSA9IG1fc3RhcnRUaW1lIC0gcXVhbnR1bVN0YXJ0VGlt
ZTsKLSAgICAgICAgICAgIGRvdWJsZSBzdGFydEZyYW1lSW5RdWFudHVtID0gc3RhcnRUaW1lSW5R
dWFudHVtICogc2FtcGxlUmF0ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gbV9zY2hl
ZHVsaW5nRnJhbWVEZWxheSBpcyB1c2VkIGluIHByb3ZpZGVJbnB1dCgpLCBzbyBmYWN0b3IgaW4g
dGhlIGN1cnJlbnQgcGxheWJhY2sgcGl0Y2ggcmF0ZS4KLSAgICAgICAgICAgIG1fc2NoZWR1bGlu
Z0ZyYW1lRGVsYXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpdGNoUmF0ZSAqIHN0YXJ0RnJhbWVJblF1
YW50dW0pOwotICAgICAgICB9CisgICAgICAgIGRvdWJsZSBxdWFudHVtVGltZU9mZnNldCA9IG1f
c3RhcnRUaW1lID4gcXVhbnR1bVN0YXJ0VGltZSA/IG1fc3RhcnRUaW1lIC0gcXVhbnR1bVN0YXJ0
VGltZSA6IDA7CisgICAgICAgIHNpemVfdCBxdWFudHVtRnJhbWVPZmZzZXQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocXVhbnR1bVRpbWVPZmZzZXQgKiBzYW1wbGVSYXRlKTsKKyAgICAgICAgcXVh
bnR1bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVzVG9Qcm9jZXNz
KTsgLy8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckZyYW1lc1Rv
UHJvY2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsKIAotICAgICAg
ICAvLyBGSVhNRTogb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5OgotICAgICAgICAvLyBXaXRoIGEg
Yml0IG9mIHdvcmssIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZCBnb2luZyB0aHJvdWdo
IHRoZSByZXNhbXBsZXIgY29tcGxldGVseSB3aGVuIHRoZSBwaXRjaFJhdGUgPT0gMSwKLSAgICAg
ICAgLy8gZXNwZWNpYWxseSBpZiB0aGUgcGl0Y2hSYXRlIGhhcyBuZXZlciBkZXZpYXRlZCBmcm9t
IDEgaW4gdGhlIHBhc3QuCi0KLSAgICAgICAgLy8gUmVhZCB0aGUgc2FtcGxlcyB0aHJvdWdoIHRo
ZSBwaXRjaCByZXNhbXBsZXIuICBPdXIgcHJvdmlkZUlucHV0KCkgbWV0aG9kIHdpbGwgYmUgY2Fs
bGVkIGJ5IHRoZSByZXNhbXBsZXIuCi0gICAgICAgIG1fcmVzYW1wbGVyLnNldFJhdGUocGl0Y2hS
YXRlKTsKLSAgICAgICAgbV9yZXNhbXBsZXIucHJvY2Vzcyh0aGlzLCBvdXRwdXRCdXMsIGZyYW1l
c1RvUHJvY2Vzcyk7CisgICAgICAgIC8vIFJlbmRlciBieSByZWFkaW5nIGRpcmVjdGx5IGZyb20g
dGhlIGJ1ZmZlci4KKyAgICAgICAgcmVuZGVyRnJvbUJ1ZmZlcihvdXRwdXRCdXMsIHF1YW50dW1G
cmFtZU9mZnNldCwgYnVmZmVyRnJhbWVzVG9Qcm9jZXNzKTsKIAogICAgICAgICAvLyBBcHBseSB0
aGUgZ2FpbiAoaW4tcGxhY2UpIHRvIHRoZSBvdXRwdXQgYnVzLgogICAgICAgICBkb3VibGUgdG90
YWxHYWluID0gZ2FpbigpLT52YWx1ZSgpICogbV9idWZmZXItPmdhaW4oKTsKQEAgLTE1NCw3ICsx
NDIsNyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvY2VzcyhzaXplCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBt
X3JlYWRJbmRleCA9IDA7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwogICAg
ICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KIApAQCAtMTY1LDggKzE1Myw3IEBAIHZvaWQg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemUKICAgICB9CiB9CiAKLS8vIFRoZSBy
ZXNhbXBsZXIgY2FsbHMgdXMgYmFjayBoZXJlIHRvIGdldCB0aGUgaW5wdXQgc2FtcGxlcyBmcm9t
IG91ciBidWZmZXIuCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvdmlkZUlucHV0KEF1
ZGlvQnVzKiBidXMsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKK3ZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpyZW5kZXJGcm9tQnVmZmVyKEF1ZGlvQnVzKiBidXMsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uRnJhbWVPZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwogICAgIApAQCAtMTkxLDYgKzE3OCwyMCBAQCB2b2lk
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvdmlkZUlucHV0CiAgICAgaWYgKCFkZXN0aW5hdGlv
bkwpCiAgICAgICAgIHJldHVybjsKICAgICBmbG9hdCogZGVzdGluYXRpb25SID0gKG51bWJlck9m
Q2hhbm5lbHMgPCAyKSA/IDAgOiBidXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKyAgICAKKyAgICBi
b29sIGlzU3RlcmVvID0gZGVzdGluYXRpb25SOworICAgIAorICAgIC8vIFNhbml0eSBjaGVjayBk
ZXN0aW5hdGlvbkZyYW1lT2Zmc2V0LCBudW1iZXJPZkZyYW1lcy4KKyAgICBzaXplX3QgZGVzdGlu
YXRpb25MZW5ndGggPSBidXMtPmxlbmd0aCgpOworICAgIGJvb2wgaXNPZmZzZXRHb29kID0gZGVz
dGluYXRpb25GcmFtZU9mZnNldCArIG51bWJlck9mRnJhbWVzIDw9IGRlc3RpbmF0aW9uTGVuZ3Ro
OworICAgIEFTU0VSVChpc09mZnNldEdvb2QpOworICAgIGlmICghaXNPZmZzZXRHb29kKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBPZmZzZXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBjb3JyZWN0
IG9mZnNldCBmcmFtZS4KKyAgICBkZXN0aW5hdGlvbkwgKz0gZGVzdGluYXRpb25GcmFtZU9mZnNl
dDsKKyAgICBpZiAoZGVzdGluYXRpb25SKQorICAgICAgICBkZXN0aW5hdGlvblIgKz0gZGVzdGlu
YXRpb25GcmFtZU9mZnNldDsKIAogICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBidWZmZXIoKS0+
bGVuZ3RoKCk7CiAgICAgZG91YmxlIGJ1ZmZlclNhbXBsZVJhdGUgPSBidWZmZXIoKS0+c2FtcGxl
UmF0ZSgpOwpAQCAtMTk5LDcgKzIwMCwxMyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
cHJvdmlkZUlucHV0CiAgICAgLy8gSWYgbV9pc0dyYWluIGlzIHRydWUsIHRoZW4gd2Ugd2lsbCBi
ZSBwbGF5aW5nIGEgcG9ydGlvbiBvZiB0aGUgdG90YWwgYnVmZmVyLgogICAgIHVuc2lnbmVkIHN0
YXJ0RnJhbWUgPSBtX2lzR3JhaW4gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFpbk9mZnNl
dCAqIGJ1ZmZlclNhbXBsZVJhdGUpIDogMDsKICAgICB1bnNpZ25lZCBlbmRGcmFtZSA9IG1faXNH
cmFpbiA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydEZyYW1lICsgbV9ncmFpbkR1cmF0aW9u
ICogYnVmZmVyU2FtcGxlUmF0ZSkgOiBidWZmZXJMZW5ndGg7Ci0KKyAgICAKKyAgICBBU1NFUlQo
ZW5kRnJhbWUgPj0gc3RhcnRGcmFtZSk7CisgICAgaWYgKGVuZEZyYW1lIDwgc3RhcnRGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHVuc2lnbmVkIGRlbHRhRnJhbWVzID0gZW5kRnJh
bWUgLSBzdGFydEZyYW1lOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBIQUNLIHRvIGFsbG93IGZv
ciBIUlRGIHRhaWwtdGltZSAtIGF2b2lkcyBnbGl0Y2ggYXQgZW5kLgogICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdGFpbFRpbWUgZm9yIGVhY2ggQXVkaW9Ob2RlIGZvciBhIG1vcmUgZ2VuZXJhbCBz
b2x1dGlvbiB0byB0aGlzIHByb2JsZW0uCiAgICAgaWYgKG1faXNHcmFpbikKQEAgLTIxMCw2MyAr
MjE3LDU1IEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm92aWRlSW5wdXQKICAgICAg
ICAgc3RhcnRGcmFtZSA9ICFidWZmZXJMZW5ndGggPyAwIDogYnVmZmVyTGVuZ3RoIC0gMTsKICAg
ICBpZiAoZW5kRnJhbWUgPiBidWZmZXJMZW5ndGgpCiAgICAgICAgIGVuZEZyYW1lID0gYnVmZmVy
TGVuZ3RoOwotICAgIGlmIChtX3JlYWRJbmRleCA+PSBlbmRGcmFtZSkKLSAgICAgICAgbV9yZWFk
SW5kZXggPSBzdGFydEZyYW1lOyAvLyByZXNldCB0byBzdGFydAorICAgIGlmIChtX3ZpcnR1YWxS
ZWFkSW5kZXggPj0gZW5kRnJhbWUpCisgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHN0YXJ0
RnJhbWU7IC8vIHJlc2V0IHRvIHN0YXJ0CisKKyAgICAvLyBHZXQgcG9pbnRlcnMgdG8gdGhlIHN0
YXJ0IG9mIHRoZSBzYW1wbGUgYnVmZmVyLgorICAgIGZsb2F0KiBzb3VyY2VMID0gbV9idWZmZXIt
PmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCk7CisgICAgZmxvYXQqIHNvdXJjZVIgPSBtX2J1ZmZl
ci0+bnVtYmVyT2ZDaGFubmVscygpID09IDIgPyBtX2J1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSkt
PmRhdGEoKSA6IDA7CiAgICAgCi0gICAgaW50IGZyYW1lc1RvUHJvY2VzcyA9IG51bWJlck9mRnJh
bWVzOworICAgIGRvdWJsZSBwaXRjaFJhdGUgPSB0b3RhbFBpdGNoUmF0ZSgpOwogCi0gICAgLy8g
SGFuZGxlIHNhbXBsZS1hY2N1cmF0ZSBzY2hlZHVsaW5nIHNvIHRoYXQgd2UgcGxheSB0aGUgYnVm
ZmVyIGF0IGEgdmVyeSBwcmVjaXNlIHRpbWUuCi0gICAgLy8gbV9zY2hlZHVsaW5nRnJhbWVEZWxh
eSB3aWxsIG9ubHkgYmUgbm9uLXplcm8gdGhlIHZlcnkgZmlyc3QgdGltZSB0aGF0IHByb3ZpZGVJ
bnB1dCgpIGlzIGNhbGxlZCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAvLyB3aXRoIHRoZSB2ZXJ5
IHN0YXJ0IG9mIHRoZSBidWZmZXIgcGxheWJhY2suCi0gICAgaWYgKG1fc2NoZWR1bGluZ0ZyYW1l
RGVsYXkgPiAwKSB7Ci0gICAgICAgIEFTU0VSVChtX3NjaGVkdWxpbmdGcmFtZURlbGF5IDw9IGZy
YW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIGlmIChtX3NjaGVkdWxpbmdGcmFtZURlbGF5IDw9IGZy
YW1lc1RvUHJvY2VzcykgewotICAgICAgICAgICAgLy8gR2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhl
IGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgZGVzdGluYXRpb24uCi0gICAgICAgICAgICBtZW1zZXQo
ZGVzdGluYXRpb25MLCAwLCBzaXplb2YoZmxvYXQpICogbV9zY2hlZHVsaW5nRnJhbWVEZWxheSk7
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkwgKz0gbV9zY2hlZHVsaW5nRnJhbWVEZWxheTsKLSAg
ICAgICAgICAgIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb25SLCAwLCBzaXplb2YoZmxvYXQpICogbV9zY2hlZHVsaW5nRnJhbWVEZWxheSk7Ci0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25SICs9IG1fc2NoZWR1bGluZ0ZyYW1lRGVsYXk7Ci0g
ICAgICAgICAgICB9CisgICAgLy8gR2V0IGxvY2FsIGNvcHkuCisgICAgZG91YmxlIHZpcnR1YWxS
ZWFkSW5kZXggPSBtX3ZpcnR1YWxSZWFkSW5kZXg7CiAKLSAgICAgICAgICAgIC8vIFNpbmNlIHdl
IGp1c3QgZ2VuZXJhdGVkIHNpbGVuY2UgZm9yIHRoZSBpbml0aWFsIHBvcnRpb24sIHdlIGhhdmUg
ZmV3ZXIgZnJhbWVzIHRvIHByb3ZpZGUuCi0gICAgICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgLT0g
bV9zY2hlZHVsaW5nRnJhbWVEZWxheTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBX
ZSBoYXZlIHRvIGdlbmVyYXRlIGEgY2VydGFpbiBudW1iZXIgb2Ygb3V0cHV0IHNhbXBsZS1mcmFt
ZXMsIGJ1dCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSB3cmFwIGFyb3VuZAot
ICAgIC8vIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHRvIHRoZSBzdGFydCBpZiBwbGF5aW5n
IGJhY2sgd2l0aCBsb29waW5nIGFuZCBhbHNvIHRoZSBjYXNlIHdoZXJlIHdlIHNpbXBseSByZWFj
aCB0aGUKLSAgICAvLyBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhLCBidXQgaGF2ZW4ndCB5ZXQgcmVu
ZGVyZWQgbnVtYmVyT2ZGcmFtZXMgd29ydGggb2Ygb3V0cHV0LgotICAgIHdoaWxlIChmcmFtZXNU
b1Byb2Nlc3MgPiAwKSB7Ci0gICAgICAgIEFTU0VSVChtX3JlYWRJbmRleCA8PSBlbmRGcmFtZSk7
Ci0gICAgICAgIGlmIChtX3JlYWRJbmRleCA+IGVuZEZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgZnJhbWVzIHdl
IGNhbiBwcm9jZXNzIHRoaXMgdGltZS4KLSAgICAgICAgaW50IGZyYW1lc0F2YWlsYWJsZSA9IGVu
ZEZyYW1lIC0gbV9yZWFkSW5kZXg7Ci0gICAgICAgIGludCBmcmFtZXNUaGlzVGltZSA9IG1pbihm
cmFtZXNUb1Byb2Nlc3MsIGZyYW1lc0F2YWlsYWJsZSk7CisgICAgLy8gUmVuZGVyIGxvb3AgLSBy
ZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHVzaW5nIGxp
bmVhciBpbnRlcnBvbGF0aW9uLgorICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgdGhlIHZlcnkg
Y29tbW9uIGNhc2Ugb2YgcGxheWluZyBiYWNrIHdpdGggcGl0Y2hSYXRlID09IDEuCisgICAgLy8g
V2UgY2FuIGF2b2lkIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbi4KKyAgICBpbnQgZnJhbWVzVG9Q
cm9jZXNzID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7
CisgICAgICAgIHVuc2lnbmVkIHJlYWRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2aXJ0
dWFsUmVhZEluZGV4KTsKKyAgICAgICAgZG91YmxlIGludGVycG9sYXRpb25GYWN0b3IgPSB2aXJ0
dWFsUmVhZEluZGV4IC0gcmVhZEluZGV4OwogICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBkZXN0aW5hdGlvbiBidXMgZm9yIHRoZSBwYXJ0IG9mIHRoZSBkZXN0aW5hdGlvbiB3ZSdyZSBw
cm9jZXNzaW5nIHRoaXMgdGltZS4KLSAgICAgICAgQXVkaW9CdXMgY3VycmVudERlc3RpbmF0aW9u
QnVzKGJ1c051bWJlck9mQ2hhbm5lbHMsIGZyYW1lc1RoaXNUaW1lLCBmYWxzZSk7Ci0gICAgICAg
IGN1cnJlbnREZXN0aW5hdGlvbkJ1cy5zZXRDaGFubmVsTWVtb3J5KDAsIGRlc3RpbmF0aW9uTCwg
ZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICBpZiAoYnVzTnVtYmVyT2ZDaGFubmVscyA+IDEpCi0g
ICAgICAgICAgICBjdXJyZW50RGVzdGluYXRpb25CdXMuc2V0Q2hhbm5lbE1lbW9yeSgxLCBkZXN0
aW5hdGlvblIsIGZyYW1lc1RoaXNUaW1lKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBvdXRwdXQg
ZnJvbSB0aGUgYnVmZmVyLgotICAgICAgICByZWFkRnJvbUJ1ZmZlcigmY3VycmVudERlc3RpbmF0
aW9uQnVzLCBmcmFtZXNUaGlzVGltZSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXN0aW5h
dGlvbiBwb2ludGVycy4KLSAgICAgICAgZGVzdGluYXRpb25MICs9IGZyYW1lc1RoaXNUaW1lOwot
ICAgICAgICBpZiAoYnVzTnVtYmVyT2ZDaGFubmVscyA+IDEpCi0gICAgICAgICAgICBkZXN0aW5h
dGlvblIgKz0gZnJhbWVzVGhpc1RpbWU7Ci0KLSAgICAgICAgZnJhbWVzVG9Qcm9jZXNzIC09IGZy
YW1lc1RoaXNUaW1lOwotCi0gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSByZWFj
aCB0aGUgZW5kIG9mIHRoZSBwYXJ0IG9mIHRoZSBzYW1wbGUgZGF0YSB3ZSdyZSBzdXBwb3NlZCB0
byBwbGF5IGZvciB0aGUgYnVmZmVyLgotICAgICAgICBpZiAobV9yZWFkSW5kZXggPj0gZW5kRnJh
bWUpIHsKLSAgICAgICAgICAgIG1fcmVhZEluZGV4ID0gc3RhcnRGcmFtZTsKLSAgICAgICAgICAg
IG1fZ3JhaW5GcmFtZUNvdW50ID0gMDsKLSAgICAgICAgICAgIAorICAgICAgICAvLyBGb3IgbGlu
ZWFyIGludGVycG9sYXRpb24gd2UgbmVlZCB0aGUgbmV4dCBzYW1wbGUtZnJhbWUgdG9vLgorICAg
ICAgICAvLyBNYWtlIHN1cmUgdG8gd3JhcCBhcm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVy
LgorICAgICAgICB1bnNpZ25lZCByZWFkSW5kZXgyID0gcmVhZEluZGV4ICsgMTsKKyAgICAgICAg
aWYgKHJlYWRJbmRleDIgPj0gZW5kRnJhbWUpCisgICAgICAgICAgICByZWFkSW5kZXgyIC09IGRl
bHRhRnJhbWVzOworCisgICAgICAgIC8vIEZpbmFsIHNhbml0eSBjaGVjayBvbiBidWZmZXIgYWNj
ZXNzLgorICAgICAgICBpZiAocmVhZEluZGV4ID49IGJ1ZmZlckxlbmd0aCB8fCByZWFkSW5kZXgy
ID49IGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIExpbmVh
ciBpbnRlcnBvbGF0aW9uLgorICAgICAgICBkb3VibGUgc2FtcGxlTDEgPSBzb3VyY2VMW3JlYWRJ
bmRleF07CisgICAgICAgIGRvdWJsZSBzYW1wbGVMMiA9IHNvdXJjZUxbcmVhZEluZGV4Ml07Cisg
ICAgICAgIGRvdWJsZSBzYW1wbGVMID0gKDEuMCAtIGludGVycG9sYXRpb25GYWN0b3IpICogc2Ft
cGxlTDEgKyBpbnRlcnBvbGF0aW9uRmFjdG9yICogc2FtcGxlTDI7CisgICAgICAgICpkZXN0aW5h
dGlvbkwrKyA9IHNhbXBsZUw7CisKKyAgICAgICAgaWYgKGlzU3RlcmVvKSB7CisgICAgICAgICAg
ICBkb3VibGUgc2FtcGxlUjEgPSBzb3VyY2VSW3JlYWRJbmRleF07CisgICAgICAgICAgICBkb3Vi
bGUgc2FtcGxlUjIgPSBzb3VyY2VSW3JlYWRJbmRleDJdOworICAgICAgICAgICAgZG91YmxlIHNh
bXBsZVIgPSAoMS4wIC0gaW50ZXJwb2xhdGlvbkZhY3RvcikgKiBzYW1wbGVSMSArIGludGVycG9s
YXRpb25GYWN0b3IgKiBzYW1wbGVSMjsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHNh
bXBsZVI7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsUmVhZEluZGV4ICs9IHBpdGNoUmF0
ZTsKKworICAgICAgICAvLyBXcmFwLWFyb3VuZCwgcmV0YWluaW5nIHN1Yi1zYW1wbGUgcG9zaXRp
b24gc2luY2UgdmlydHVhbFJlYWRJbmRleCBpcyBmbG9hdGluZy1wb2ludC4KKyAgICAgICAgaWYg
KHZpcnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpIHsKKyAgICAgICAgICAgIHZpcnR1YWxSZWFk
SW5kZXggLT0gZGVsdGFGcmFtZXM7CisKICAgICAgICAgICAgIGlmICghbG9vcGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGxvb3BpbmcsIHRoZW4gc3RvcCBwbGF5aW5n
IHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgbV9pc1BsYXlpbmcgPSBm
YWxzZTsKQEAgLTI3Niw3ICsyNzUsNyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
dmlkZUlucHV0CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvIGdlbmVyYXRlIHNpbGVuY2UgZm9y
IHRoZSByZW1haW5pbmcuCiAgICAgICAgICAgICAgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbkws
IDAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChkZXN0aW5hdGlvblIpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc1N0ZXJlbykK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChkZXN0aW5hdGlvblIsIDAsIHNpemVvZihm
bG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjg1LDU4
ICsyODQsMTMgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb3ZpZGVJbnB1dAogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotfQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6cmVhZEZyb21CdWZmZXIoQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQotewotICAgIGJvb2wgaXNCdXNHb29kID0gZGVzdGluYXRpb25CdXMgJiYg
ZGVzdGluYXRpb25CdXMtPmxlbmd0aCgpID09IGZyYW1lc1RvUHJvY2VzcyAmJiBkZXN0aW5hdGlv
bkJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJlck9mQ2hhbm5lbHMoKTsKLSAgICBBU1NF
UlQoaXNCdXNHb29kKTsKLSAgICBpZiAoIWlzQnVzR29vZCkKLSAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSB0aGlzLT5udW1iZXJPZkNoYW5uZWxz
KCk7Ci0gICAgLy8gRklYTUU6IHdlIGNhbiBhZGQgc3VwcG9ydCBmb3Igc291cmNlcyB3aXRoIG1v
cmUgdGhhbiB0d28gY2hhbm5lbHMsIGJ1dCB0aGlzIGlzIG5vdCBhIGNvbW1vbiBjYXNlLgotICAg
IGJvb2wgY2hhbm5lbENvdW50R29vZCA9IG51bWJlck9mQ2hhbm5lbHMgPT0gMSB8fCBudW1iZXJP
ZkNoYW5uZWxzID09IDI7Ci0gICAgQVNTRVJUKGNoYW5uZWxDb3VudEdvb2QpOwotICAgIGlmICgh
Y2hhbm5lbENvdW50R29vZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgLy8g
R2V0IHBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBmbG9h
dCogc291cmNlTCA9IG1fYnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgpOwotICAgIGZs
b2F0KiBzb3VyY2VSID0gbV9idWZmZXItPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyID8gbV9idWZm
ZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRhKCkgOiAwOwotCi0gICAgLy8gU2FuaXR5IGNoZWNr
IGJ1ZmZlciBhY2Nlc3MuCi0gICAgYm9vbCBpc1NvdXJjZUdvb2QgPSBzb3VyY2VMICYmIChudW1i
ZXJPZkNoYW5uZWxzID09IDEgfHwgc291cmNlUikgJiYgbV9yZWFkSW5kZXggKyBmcmFtZXNUb1By
b2Nlc3MgPD0gbV9idWZmZXItPmxlbmd0aCgpOwotICAgIEFTU0VSVChpc1NvdXJjZUdvb2QpOwot
ICAgIGlmICghaXNTb3VyY2VHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPZmZzZXQg
dGhlIHBvaW50ZXJzIHRvIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gaW4gdGhlIHNhbXBsZSBi
dWZmZXIuCi0gICAgc291cmNlTCArPSBtX3JlYWRJbmRleDsKLSAgICBzb3VyY2VSICs9IG1fcmVh
ZEluZGV4OwotCi0gICAgLy8gR2V0IHBvaW50ZXJzIHRvIHRoZSBkZXN0aW5hdGlvbi4KLSAgICBm
bG9hdCogZGVzdGluYXRpb25MID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsK
LSAgICBmbG9hdCogZGVzdGluYXRpb25SID0gbnVtYmVyT2ZDaGFubmVscyA9PSAyID8gZGVzdGlu
YXRpb25CdXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7Ci0gICAgYm9vbCBpc0Rlc3RpbmF0aW9u
R29vZCA9IGRlc3RpbmF0aW9uTCAmJiAobnVtYmVyT2ZDaGFubmVscyA9PSAxIHx8IGRlc3RpbmF0
aW9uUik7Ci0gICAgQVNTRVJUKGlzRGVzdGluYXRpb25Hb29kKTsKLSAgICBpZiAoIWlzRGVzdGlu
YXRpb25Hb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTaW1wbHkgY29weSB0aGUgZGF0
YSBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbi4KLSAgICBtZW1jcHko
ZGVzdGluYXRpb25MLCBzb3VyY2VMLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsK
LSAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA9PSAyKQotICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25SLCBzb3VyY2VSLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIC8v
IEFkdmFuY2UgdGhlIGJ1ZmZlcidzIHJlYWQgaW5kZXguCi0gICAgbV9yZWFkSW5kZXggKz0gZnJh
bWVzVG9Qcm9jZXNzOworICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHZpcnR1YWxSZWFkSW5kZXg7
CiB9CiAKIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZXNldCgpCiB7Ci0gICAgbV9yZXNh
bXBsZXIucmVzZXQoKTsKLSAgICBtX3JlYWRJbmRleCA9IDA7Ci0gICAgbV9ncmFpbkZyYW1lQ291
bnQgPSAwOworICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7CiAgICAgbV9sYXN0R2FpbiA9IGdh
aW4oKS0+dmFsdWUoKTsKIH0KIApAQCAtMzYyLDExICszMTYsMTAgQEAgdm9pZCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnNldEJ1ZmZlcihBdQogICAgIGlmIChidWZmZXIpIHsKICAgICAgICAgLy8g
RG8gYW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUgYnVmZmVyJ3MgbnVtYmVy
IG9mIGNoYW5uZWxzLgogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVy
LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgICAgIG1fcmVzYW1wbGVyLmNvbmZpZ3VyZUNoYW5u
ZWxzKG51bWJlck9mQ2hhbm5lbHMpOwogICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9mQ2hh
bm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgfQogCi0gICAgbV9yZWFkSW5kZXggPSAwOwor
ICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7CiAgICAgbV9idWZmZXIgPSBidWZmZXI7CiB9CiAK
QEAgLTM4Myw3ICszMzYsNyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9uKGRv
dWJsCiAKICAgICBtX2lzR3JhaW4gPSBmYWxzZTsKICAgICBtX3N0YXJ0VGltZSA9IHdoZW47Ci0g
ICAgbV9yZWFkSW5kZXggPSAwOworICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7CiAgICAgbV9p
c1BsYXlpbmcgPSB0cnVlOwogfQogCkBAIC00MTAsMTEgKzM2MywxNiBAQCB2b2lkIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZTo6bm90ZUdyYWluT24oCiAgICAgbV9ncmFpbk9mZnNldCA9IGdyYWluT2Zm
c2V0OwogCiAgICAgbV9ncmFpbkR1cmF0aW9uID0gZ3JhaW5EdXJhdGlvbjsKLSAgICBtX2dyYWlu
RnJhbWVDb3VudCA9IDA7CiAgICAgCiAgICAgbV9pc0dyYWluID0gdHJ1ZTsKICAgICBtX3N0YXJ0
VGltZSA9IHdoZW47Ci0gICAgbV9yZWFkSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZ3JhaW5P
ZmZzZXQgKiBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpKTsKKworICAgIC8vIFdlIGNhbGwgZmxvb3Io
KSBoZXJlIHNpbmNlIGF0IHBsYXliYWNrUmF0ZSA9PSAxIHdlIGRvbid0IHdhbnQgdG8gZ28gdGhy
b3VnaCBsaW5lYXIgaW50ZXJwb2xhdGlvbgorICAgIC8vIGF0IGEgc3ViLXNhbXBsZSBwb3NpdGlv
biBzaW5jZSBpdCB3aWxsIGRlZ3JhZGUgdGhlIHF1YWxpdHkuCisgICAgLy8gV2hlbiBhbGlnbmVk
IHRvIHRoZSBzYW1wbGUtZnJhbWUgdGhlIHBsYXliYWNrIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRo
ZSBQQ00gZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlci4KKyAgICAvLyBTaW5jZSBwbGF5YmFja1Jh
dGUgPT0gMSBpcyB2ZXJ5IGNvbW1vbiwgaXQncyB3b3J0aCBjb25zaWRlcmluZyBxdWFsaXR5Lgor
ICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IGZsb29yKG1fZ3JhaW5PZmZzZXQgKiBidWZmZXIoKS0+
c2FtcGxlUmF0ZSgpKTsKKyAgICAKICAgICBtX2lzUGxheWluZyA9IHRydWU7CiB9CiAKQEAgLTQ0
Niw3ICs0MDQsOSBAQCBkb3VibGUgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjp0b3RhbFBpdGNoCiAK
ICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHRvdGFsIHJhdGUuICBJdCdzIHZlcnkgaW1wb3J0YW50
IHRoYXQgdGhlIHJlc2FtcGxlciBub3QgZ2V0IGFueSBiYWQgcmF0ZSB2YWx1ZXMuCiAgICAgdG90
YWxSYXRlID0gbWF4KDAuMCwgdG90YWxSYXRlKTsKLSAgICB0b3RhbFJhdGUgPSBtaW4oQXVkaW9S
ZXNhbXBsZXI6Ok1heFJhdGUsIHRvdGFsUmF0ZSk7CisgICAgaWYgKCF0b3RhbFJhdGUpCisgICAg
ICAgIHRvdGFsUmF0ZSA9IDE7IC8vIHplcm8gcmF0ZSBpcyBjb25zaWRlcmVkIGlsbGVnYWwKKyAg
ICB0b3RhbFJhdGUgPSBtaW4oTWF4UmF0ZSwgdG90YWxSYXRlKTsKICAgICAKICAgICBib29sIGlz
VG90YWxSYXRlVmFsaWQgPSAhaXNuYW4odG90YWxSYXRlKSAmJiAhaXNpbmYodG90YWxSYXRlKTsK
ICAgICBBU1NFUlQoaXNUb3RhbFJhdGVWYWxpZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkocmV2aXNpb24gODk5MzcpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOSArMjksNyBAQAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAi
QXVkaW9HYWluLmgiCiAjaW5jbHVkZSAiQXVkaW9QYW5uZXJOb2RlLmgiCi0jaW5jbHVkZSAiQXVk
aW9SZXNhbXBsZXIuaCIKICNpbmNsdWRlICJBdWRpb1NvdXJjZU5vZGUuaCIKLSNpbmNsdWRlICJB
dWRpb1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtNDMsNyAr
NDEsNyBAQCBjbGFzcyBBdWRpb0NvbnRleHQ7CiAvLyBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgaXMg
YW4gQXVkaW9Ob2RlIHJlcHJlc2VudGluZyBhbiBhdWRpbyBzb3VyY2UgZnJvbSBhbiBpbi1tZW1v
cnkgYXVkaW8gYXNzZXQgcmVwcmVzZW50ZWQgYnkgYW4gQXVkaW9CdWZmZXIuCiAvLyBJdCBnZW5l
cmFsbHkgd2lsbCBiZSB1c2VkIGZvciBzaG9ydCBzb3VuZHMgd2hpY2ggcmVxdWlyZSBhIGhpZ2gg
ZGVncmVlIG9mIHNjaGVkdWxpbmcgZmxleGliaWxpdHkgKGNhbiBwbGF5YmFjayBpbiByaHl0aG1p
Y2FsbHkgcGVyZmVjdCB3YXlzKS4KIAotY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVi
bGljIEF1ZGlvU291cmNlTm9kZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXIgeworY2xhc3Mg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiwgZG91YmxlIHNhbXBsZVJhdGUpOwogCkBAIC01Myw5ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIAotICAgIC8vIEF1ZGlvU291cmNlUHJvdmlkZXIKLSAg
ICAvLyBXaGVuIHByb2Nlc3MoKSBpcyBjYWxsZWQsIHRoZSByZXNhbXBsZXIgY2FsbHMgcHJvdmlk
ZUlucHV0IChpbiB0aGUgYXVkaW8gdGhyZWFkKSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCi0g
ICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZy
YW1lcyk7CisgICAgdm9pZCByZW5kZXJGcm9tQnVmZmVyKEF1ZGlvQnVzKiwgdW5zaWduZWQgZGVz
dGluYXRpb25GcmFtZU9mZnNldCwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKICAgICAKICAgICAv
LyBzZXRCdWZmZXIoKSBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiAgVGhpcyBpcyB0aGUg
YnVmZmVyIHdlIHVzZSBmb3IgcGxheWJhY2suCiAgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZm
ZXIqKTsKQEAgLTEwOSwyNyArMTA1LDE5IEBAIHByaXZhdGU6CiAgICAgLy8gaGFzIGJlZW4gcmVh
Y2hlZC4KICAgICBkb3VibGUgbV9lbmRUaW1lOyAvLyBpbiBzZWNvbmRzCiAgICAgCi0gICAgLy8g
bV9zY2hlZHVsaW5nRnJhbWVEZWxheSBpcyB0aGUgc2FtcGxlLWFjY3VyYXRlIHNjaGVkdWxpbmcg
b2Zmc2V0LgotICAgIC8vIEl0J3MgdXNlZCBzbyB0aGF0IHdlIHN0YXJ0IHJlbmRlcmluZyBhdWRp
byBzYW1wbGVzIGF0IGEgdmVyeSBwcmVjaXNlIHBvaW50IGluIHRpbWUuCi0gICAgLy8gSXQgd2ls
bCBvbmx5IGJlIGEgbm9uLXplcm8gdmFsdWUgdGhlIHZlcnkgZmlyc3QgcmVuZGVyIHF1YW50dW0g
dGhhdCB3ZSByZW5kZXIgZnJvbSB0aGUgYnVmZmVyLgotICAgIGludCBtX3NjaGVkdWxpbmdGcmFt
ZURlbGF5OwotCi0gICAgLy8gbV9yZWFkSW5kZXggaXMgYSBzYW1wbGUtZnJhbWUgaW5kZXggaW50
byBvdXIgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbi4K
LSAgICB1bnNpZ25lZCBtX3JlYWRJbmRleDsKKyAgICAvLyBtX3ZpcnR1YWxSZWFkSW5kZXggaXMg
YSBzYW1wbGUtZnJhbWUgaW5kZXggaW50byBvdXIgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgY3Vy
cmVudCBwbGF5YmFjayBwb3NpdGlvbi4KKyAgICAvLyBTaW5jZSBpdCdzIGZsb2F0aW5nLXBvaW50
LCBpdCBoYXMgc3ViLXNhbXBsZSBhY2N1cmFjeS4KKyAgICBkb3VibGUgbV92aXJ0dWFsUmVhZElu
ZGV4OwogCiAgICAgLy8gR3JhbnVsYXIgcGxheWJhY2sKICAgICBib29sIG1faXNHcmFpbjsKICAg
ICBkb3VibGUgbV9ncmFpbk9mZnNldDsgLy8gaW4gc2Vjb25kcwogICAgIGRvdWJsZSBtX2dyYWlu
RHVyYXRpb247IC8vIGluIHNlY29uZHMKLSAgICBpbnQgbV9ncmFpbkZyYW1lQ291bnQ7IC8vIGtl
ZXBzIHRyYWNrIG9mIHdoaWNoIGZyYW1lIGluIHRoZSBncmFpbiB3ZSdyZSBjdXJyZW50bHkgcmVu
ZGVyaW5nCiAKICAgICAvLyB0b3RhbFBpdGNoUmF0ZSgpIHJldHVybnMgdGhlIGluc3RhbnRhbmVv
dXMgcGl0Y2ggcmF0ZSAobm9uLXRpbWUgcHJlc2VydmluZykuCiAgICAgLy8gSXQgaW5jb3Jwb3Jh
dGVzIHRoZSBiYXNlIHBpdGNoIHJhdGUsIGFueSBzYW1wbGUtcmF0ZSBjb252ZXJzaW9uIGZhY3Rv
ciBmcm9tIHRoZSBidWZmZXIsIGFuZCBhbnkgZG9wcGxlciBzaGlmdCBmcm9tIGFuIGFzc29jaWF0
ZWQgcGFubmVyIG5vZGUuCiAgICAgZG91YmxlIHRvdGFsUGl0Y2hSYXRlKCk7CiAKLSAgICAvLyBt
X3Jlc2FtcGxlciBwZXJmb3JtcyB0aGUgcGl0Y2ggcmF0ZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIg
cGxheWJhY2suCi0gICAgQXVkaW9SZXNhbXBsZXIgbV9yZXNhbXBsZXI7Ci0KICAgICAvLyBtX2xh
c3RHYWluIHByb3ZpZGVzIGNvbnRpbnVpdHkgd2hlbiB3ZSBkeW5hbWljYWxseSBhZGp1c3QgdGhl
IGdhaW4uCiAgICAgZG91YmxlIG1fbGFzdEdhaW47CiAgICAgCkBAIC0xMzksMTAgKzEyNyw2IEBA
IHByaXZhdGU6CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2VzcygpIHdpdGggc2V0QnVm
ZmVyKCkgd2hpY2ggY2FuIGNhdXNlIGR5bmFtaWMgY2hhbm5lbCBjb3VudCBjaGFuZ2VzLgogICAg
IG11dGFibGUgTXV0ZXggbV9wcm9jZXNzTG9jazsKIAotICAgIC8vIFJlYWRzIHRoZSBuZXh0IGZy
YW1lc1RvUHJvY2VzcyBzYW1wbGUtZnJhbWVzIGZyb20gdGhlIEF1ZGlvQnVmZmVyIGludG8gZGVz
dGluYXRpb25CdXMuCi0gICAgLy8gQSBncmFpbiBlbnZlbG9wZSB3aWxsIGJlIGFwcGxpZWQgaWYg
bV9pc0dyYWluIGlzIHNldCB0byB0cnVlLgotICAgIHZvaWQgcmVhZEZyb21CdWZmZXIoQXVkaW9C
dXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQogICAgIC8vIEhh
bmRsZXMgdGhlIHRpbWUgd2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHNhbXBsZSBkYXRhIChub24t
bG9vcGluZykgb3IgdGhlIG5vdGVPZmYoKSB0aW1lIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgdm9p
ZCBmaW5pc2goKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99140</attachid>
            <date>2011-06-29 13:38:59 -0700</date>
            <delta_ts>2011-06-29 14:08:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63586-20110629133858.patch</filename>
            <type>text/plain</type>
            <size>21705</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5OTc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYtMjggIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcmVuZGVy
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU4
NgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRpbyBBUEkgaXMgbm90IHlldCBpbXBs
ZW1lbnRlZC4KKworICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291
cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJGcm9t
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT24pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlR3JhaW5Pbik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnRvdGFsUGl0Y2hSYXRlKToKKyAgICAg
ICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaDoKKwogMjAxMS0wNi0yOCAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjg5OTY4LgpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiA4OTkzNykKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNvbnN0IGRvdWJs
ZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9IDAuMDIwOyAvLyAyMG1zCiBjb25zdCBkb3VibGUgVW5r
bm93blRpbWUgPSAtMTsKIAorLy8gQXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHBsYXliYWNrIHJh
dGUuCisvLyBIaWdoZXIgdGhhbiBleHBlY3RlZCByYXRlcyBjYW4gYmUgdXNlZnVsIHdoZW4gcGxh
eWluZyBiYWNrIG92ZXJzYW1wbGVkIGJ1ZmZlcnMKKy8vIHRvIG1pbmltaXplIGxpbmVhciBpbnRl
cnBvbGF0aW9uIGFsaWFzaW5nLgorY29uc3QgZG91YmxlIE1heFJhdGUgPSAxMDI0OworCiBQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVh
dGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyU291cmNlTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KSk7CkBAIC01MywxOSArNTgsMTcgQEAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZl
clNvdXJjZQogICAgICwgbV9oYXNGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fc3RhcnRUaW1lKDAu
MCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKLSAgICAsIG1fc2NoZWR1bGluZ0ZyYW1l
RGVsYXkoMCkKLSAgICAsIG1fcmVhZEluZGV4KDApCisgICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgo
MCkKICAgICAsIG1faXNHcmFpbihmYWxzZSkKICAgICAsIG1fZ3JhaW5PZmZzZXQoMC4wKQogICAg
ICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQotICAgICwgbV9ncmFpbkZy
YW1lQ291bnQoMCkKICAgICAsIG1fbGFzdEdhaW4oMS4wKQogICAgICwgbV9wYW5uZXJOb2RlKDAp
CiB7CiAgICAgc2V0VHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlKTsKIAogICAgIG1fZ2Fp
biA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5
YmFja1JhdGUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBB
dWRpb1Jlc2FtcGxlcjo6TWF4UmF0ZSk7CisgICAgbV9wbGF5YmFja1JhdGUgPSBBdWRpb1BhcmFt
OjpjcmVhdGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBNYXhSYXRlKTsKICAgICAKICAgICBt
X2dhaW4tPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgbV9wbGF5YmFja1JhdGUtPnNldENvbnRl
eHQoY29udGV4dCk7CkBAIC05NSwxNCArOTgsMTMgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZQogICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewogICAg
ICAgICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gc3RhcnQgcGxheWluZy4KICAgICAgICAgZG91
YmxlIHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgICAgIGRvdWJsZSBwaXRj
aFJhdGUgPSB0b3RhbFBpdGNoUmF0ZSgpOwogICAgICAgICBkb3VibGUgcXVhbnR1bVN0YXJ0VGlt
ZSA9IGNvbnRleHQoKS0+Y3VycmVudFRpbWUoKTsKICAgICAgICAgZG91YmxlIHF1YW50dW1FbmRU
aW1lID0gcXVhbnR1bVN0YXJ0VGltZSArIGZyYW1lc1RvUHJvY2VzcyAvIHNhbXBsZVJhdGU7CiAK
ICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNz
ZWQsIHRoZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xl
LgogICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIG1fZW5kVGltZSA8PSBx
dWFudHVtU3RhcnRUaW1lKSB7CiAgICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwotICAg
ICAgICAgICAgbV9yZWFkSW5kZXggPSAwOworICAgICAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4
ID0gMDsKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTEz
LDI3ICsxMTUsMTMgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSGFuZGxlIHNhbXBs
ZS1hY2N1cmF0ZSBzY2hlZHVsaW5nIHNvIHRoYXQgYnVmZmVyIHBsYXliYWNrIHdpbGwgaGFwcGVu
IGF0IGEgdmVyeSBwcmVjaXNlIHRpbWUuCi0gICAgICAgIG1fc2NoZWR1bGluZ0ZyYW1lRGVsYXkg
PSAwOwotICAgICAgICBpZiAobV9zdGFydFRpbWUgPj0gcXVhbnR1bVN0YXJ0VGltZSkgewotICAg
ICAgICAgICAgLy8gbV9zY2hlZHVsaW5nRnJhbWVEZWxheSBpcyBzZXQgaGVyZSBvbmx5IHRoZSB2
ZXJ5IGZpcnN0IHJlbmRlciBxdWFudHVtIChiZWNhdXNlIG9mIGFib3ZlIGNoZWNrOiBtX3N0YXJ0
VGltZSA+PSBxdWFudHVtRW5kVGltZSkKLSAgICAgICAgICAgIC8vIFNvOiBxdWFudHVtU3RhcnRU
aW1lIDw9IG1fc3RhcnRUaW1lIDwgcXVhbnR1bUVuZFRpbWUKLSAgICAgICAgICAgIEFTU0VSVCht
X3N0YXJ0VGltZSA8IHF1YW50dW1FbmRUaW1lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZG91YmxlIHN0YXJ0VGltZUluUXVhbnR1bSA9IG1fc3RhcnRUaW1lIC0gcXVhbnR1bVN0YXJ0VGlt
ZTsKLSAgICAgICAgICAgIGRvdWJsZSBzdGFydEZyYW1lSW5RdWFudHVtID0gc3RhcnRUaW1lSW5R
dWFudHVtICogc2FtcGxlUmF0ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gbV9zY2hl
ZHVsaW5nRnJhbWVEZWxheSBpcyB1c2VkIGluIHByb3ZpZGVJbnB1dCgpLCBzbyBmYWN0b3IgaW4g
dGhlIGN1cnJlbnQgcGxheWJhY2sgcGl0Y2ggcmF0ZS4KLSAgICAgICAgICAgIG1fc2NoZWR1bGlu
Z0ZyYW1lRGVsYXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpdGNoUmF0ZSAqIHN0YXJ0RnJhbWVJblF1
YW50dW0pOwotICAgICAgICB9CisgICAgICAgIGRvdWJsZSBxdWFudHVtVGltZU9mZnNldCA9IG1f
c3RhcnRUaW1lID4gcXVhbnR1bVN0YXJ0VGltZSA/IG1fc3RhcnRUaW1lIC0gcXVhbnR1bVN0YXJ0
VGltZSA6IDA7CisgICAgICAgIHNpemVfdCBxdWFudHVtRnJhbWVPZmZzZXQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocXVhbnR1bVRpbWVPZmZzZXQgKiBzYW1wbGVSYXRlKTsKKyAgICAgICAgcXVh
bnR1bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVzVG9Qcm9jZXNz
KTsgLy8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckZyYW1lc1Rv
UHJvY2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsKIAotICAgICAg
ICAvLyBGSVhNRTogb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5OgotICAgICAgICAvLyBXaXRoIGEg
Yml0IG9mIHdvcmssIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZCBnb2luZyB0aHJvdWdo
IHRoZSByZXNhbXBsZXIgY29tcGxldGVseSB3aGVuIHRoZSBwaXRjaFJhdGUgPT0gMSwKLSAgICAg
ICAgLy8gZXNwZWNpYWxseSBpZiB0aGUgcGl0Y2hSYXRlIGhhcyBuZXZlciBkZXZpYXRlZCBmcm9t
IDEgaW4gdGhlIHBhc3QuCi0KLSAgICAgICAgLy8gUmVhZCB0aGUgc2FtcGxlcyB0aHJvdWdoIHRo
ZSBwaXRjaCByZXNhbXBsZXIuICBPdXIgcHJvdmlkZUlucHV0KCkgbWV0aG9kIHdpbGwgYmUgY2Fs
bGVkIGJ5IHRoZSByZXNhbXBsZXIuCi0gICAgICAgIG1fcmVzYW1wbGVyLnNldFJhdGUocGl0Y2hS
YXRlKTsKLSAgICAgICAgbV9yZXNhbXBsZXIucHJvY2Vzcyh0aGlzLCBvdXRwdXRCdXMsIGZyYW1l
c1RvUHJvY2Vzcyk7CisgICAgICAgIC8vIFJlbmRlciBieSByZWFkaW5nIGRpcmVjdGx5IGZyb20g
dGhlIGJ1ZmZlci4KKyAgICAgICAgcmVuZGVyRnJvbUJ1ZmZlcihvdXRwdXRCdXMsIHF1YW50dW1G
cmFtZU9mZnNldCwgYnVmZmVyRnJhbWVzVG9Qcm9jZXNzKTsKIAogICAgICAgICAvLyBBcHBseSB0
aGUgZ2FpbiAoaW4tcGxhY2UpIHRvIHRoZSBvdXRwdXQgYnVzLgogICAgICAgICBkb3VibGUgdG90
YWxHYWluID0gZ2FpbigpLT52YWx1ZSgpICogbV9idWZmZXItPmdhaW4oKTsKQEAgLTE1NCw3ICsx
NDIsNyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvY2VzcyhzaXplCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBt
X3JlYWRJbmRleCA9IDA7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwogICAg
ICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KIApAQCAtMTY1LDggKzE1Myw3IEBAIHZvaWQg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemUKICAgICB9CiB9CiAKLS8vIFRoZSBy
ZXNhbXBsZXIgY2FsbHMgdXMgYmFjayBoZXJlIHRvIGdldCB0aGUgaW5wdXQgc2FtcGxlcyBmcm9t
IG91ciBidWZmZXIuCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvdmlkZUlucHV0KEF1
ZGlvQnVzKiBidXMsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKK3ZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpyZW5kZXJGcm9tQnVmZmVyKEF1ZGlvQnVzKiBidXMsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uRnJhbWVPZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwogICAgIApAQCAtMTkxLDYgKzE3OCwyNyBAQCB2b2lk
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvdmlkZUlucHV0CiAgICAgaWYgKCFkZXN0aW5hdGlv
bkwpCiAgICAgICAgIHJldHVybjsKICAgICBmbG9hdCogZGVzdGluYXRpb25SID0gKG51bWJlck9m
Q2hhbm5lbHMgPCAyKSA/IDAgOiBidXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKyAgICAKKyAgICBi
b29sIGlzU3RlcmVvID0gZGVzdGluYXRpb25SOworICAgIAorICAgIC8vIFNhbml0eSBjaGVjayBk
ZXN0aW5hdGlvbkZyYW1lT2Zmc2V0LCBudW1iZXJPZkZyYW1lcy4KKyAgICBzaXplX3QgZGVzdGlu
YXRpb25MZW5ndGggPSBidXMtPmxlbmd0aCgpOworICAgIGJvb2wgaXNPZmZzZXRHb29kID0gZGVz
dGluYXRpb25GcmFtZU9mZnNldCA8PSBkZXN0aW5hdGlvbkxlbmd0aCAmJiBkZXN0aW5hdGlvbkZy
YW1lT2Zmc2V0ICsgbnVtYmVyT2ZGcmFtZXMgPD0gZGVzdGluYXRpb25MZW5ndGg7CisgICAgQVNT
RVJUKGlzT2Zmc2V0R29vZCk7CisgICAgaWYgKCFpc09mZnNldEdvb2QpCisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgLy8gUG90ZW50aWFsbHkgemVybyBvdXQgaW5pdGlhbCBmcmFtZXMg
bGVhZGluZyB1cCB0byB0aGUgb2Zmc2V0LgorICAgIGlmIChkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0
KSB7CisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbkwsIDAsIHNpemVvZihmbG9hdCkgKiBkZXN0
aW5hdGlvbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uUikKKyAgICAgICAg
ICAgIG1lbXNldChkZXN0aW5hdGlvblIsIDAsIHNpemVvZihmbG9hdCkgKiBkZXN0aW5hdGlvbkZy
YW1lT2Zmc2V0KTsKKyAgICB9CisKKyAgICAvLyBPZmZzZXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBj
b3JyZWN0IG9mZnNldCBmcmFtZS4KKyAgICBkZXN0aW5hdGlvbkwgKz0gZGVzdGluYXRpb25GcmFt
ZU9mZnNldDsKKyAgICBpZiAoZGVzdGluYXRpb25SKQorICAgICAgICBkZXN0aW5hdGlvblIgKz0g
ZGVzdGluYXRpb25GcmFtZU9mZnNldDsKIAogICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBidWZm
ZXIoKS0+bGVuZ3RoKCk7CiAgICAgZG91YmxlIGJ1ZmZlclNhbXBsZVJhdGUgPSBidWZmZXIoKS0+
c2FtcGxlUmF0ZSgpOwpAQCAtMTk5LDcgKzIwNywxMyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6cHJvdmlkZUlucHV0CiAgICAgLy8gSWYgbV9pc0dyYWluIGlzIHRydWUsIHRoZW4gd2Ug
d2lsbCBiZSBwbGF5aW5nIGEgcG9ydGlvbiBvZiB0aGUgdG90YWwgYnVmZmVyLgogICAgIHVuc2ln
bmVkIHN0YXJ0RnJhbWUgPSBtX2lzR3JhaW4gPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFp
bk9mZnNldCAqIGJ1ZmZlclNhbXBsZVJhdGUpIDogMDsKICAgICB1bnNpZ25lZCBlbmRGcmFtZSA9
IG1faXNHcmFpbiA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydEZyYW1lICsgbV9ncmFpbkR1
cmF0aW9uICogYnVmZmVyU2FtcGxlUmF0ZSkgOiBidWZmZXJMZW5ndGg7Ci0KKyAgICAKKyAgICBB
U1NFUlQoZW5kRnJhbWUgPj0gc3RhcnRGcmFtZSk7CisgICAgaWYgKGVuZEZyYW1lIDwgc3RhcnRG
cmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHVuc2lnbmVkIGRlbHRhRnJhbWVzID0g
ZW5kRnJhbWUgLSBzdGFydEZyYW1lOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBIQUNLIHRvIGFs
bG93IGZvciBIUlRGIHRhaWwtdGltZSAtIGF2b2lkcyBnbGl0Y2ggYXQgZW5kLgogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgdGFpbFRpbWUgZm9yIGVhY2ggQXVkaW9Ob2RlIGZvciBhIG1vcmUgZ2Vu
ZXJhbCBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0uCiAgICAgaWYgKG1faXNHcmFpbikKQEAgLTIx
MCw2MyArMjI0LDYwIEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm92aWRlSW5wdXQK
ICAgICAgICAgc3RhcnRGcmFtZSA9ICFidWZmZXJMZW5ndGggPyAwIDogYnVmZmVyTGVuZ3RoIC0g
MTsKICAgICBpZiAoZW5kRnJhbWUgPiBidWZmZXJMZW5ndGgpCiAgICAgICAgIGVuZEZyYW1lID0g
YnVmZmVyTGVuZ3RoOwotICAgIGlmIChtX3JlYWRJbmRleCA+PSBlbmRGcmFtZSkKLSAgICAgICAg
bV9yZWFkSW5kZXggPSBzdGFydEZyYW1lOyAvLyByZXNldCB0byBzdGFydAorICAgIGlmIChtX3Zp
cnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpCisgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9
IHN0YXJ0RnJhbWU7IC8vIHJlc2V0IHRvIHN0YXJ0CisKKyAgICAvLyBHZXQgcG9pbnRlcnMgdG8g
dGhlIHN0YXJ0IG9mIHRoZSBzYW1wbGUgYnVmZmVyLgorICAgIGZsb2F0KiBzb3VyY2VMID0gbV9i
dWZmZXItPmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCk7CisgICAgZmxvYXQqIHNvdXJjZVIgPSBt
X2J1ZmZlci0+bnVtYmVyT2ZDaGFubmVscygpID09IDIgPyBtX2J1ZmZlci0+Z2V0Q2hhbm5lbERh
dGEoMSktPmRhdGEoKSA6IDA7CiAgICAgCi0gICAgaW50IGZyYW1lc1RvUHJvY2VzcyA9IG51bWJl
ck9mRnJhbWVzOworICAgIGRvdWJsZSBwaXRjaFJhdGUgPSB0b3RhbFBpdGNoUmF0ZSgpOwogCi0g
ICAgLy8gSGFuZGxlIHNhbXBsZS1hY2N1cmF0ZSBzY2hlZHVsaW5nIHNvIHRoYXQgd2UgcGxheSB0
aGUgYnVmZmVyIGF0IGEgdmVyeSBwcmVjaXNlIHRpbWUuCi0gICAgLy8gbV9zY2hlZHVsaW5nRnJh
bWVEZWxheSB3aWxsIG9ubHkgYmUgbm9uLXplcm8gdGhlIHZlcnkgZmlyc3QgdGltZSB0aGF0IHBy
b3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAvLyB3aXRoIHRo
ZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBidWZmZXIgcGxheWJhY2suCi0gICAgaWYgKG1fc2NoZWR1bGlu
Z0ZyYW1lRGVsYXkgPiAwKSB7Ci0gICAgICAgIEFTU0VSVChtX3NjaGVkdWxpbmdGcmFtZURlbGF5
IDw9IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIGlmIChtX3NjaGVkdWxpbmdGcmFtZURlbGF5
IDw9IGZyYW1lc1RvUHJvY2VzcykgewotICAgICAgICAgICAgLy8gR2VuZXJhdGUgc2lsZW5jZSBm
b3IgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgZGVzdGluYXRpb24uCi0gICAgICAgICAgICBt
ZW1zZXQoZGVzdGluYXRpb25MLCAwLCBzaXplb2YoZmxvYXQpICogbV9zY2hlZHVsaW5nRnJhbWVE
ZWxheSk7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkwgKz0gbV9zY2hlZHVsaW5nRnJhbWVEZWxh
eTsKLSAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb25SLCAwLCBzaXplb2YoZmxvYXQpICogbV9zY2hlZHVsaW5nRnJhbWVEZWxh
eSk7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb25SICs9IG1fc2NoZWR1bGluZ0ZyYW1lRGVs
YXk7Ci0gICAgICAgICAgICB9CisgICAgLy8gR2V0IGxvY2FsIGNvcHkuCisgICAgZG91YmxlIHZp
cnR1YWxSZWFkSW5kZXggPSBtX3ZpcnR1YWxSZWFkSW5kZXg7CiAKLSAgICAgICAgICAgIC8vIFNp
bmNlIHdlIGp1c3QgZ2VuZXJhdGVkIHNpbGVuY2UgZm9yIHRoZSBpbml0aWFsIHBvcnRpb24sIHdl
IGhhdmUgZmV3ZXIgZnJhbWVzIHRvIHByb3ZpZGUuCi0gICAgICAgICAgICBmcmFtZXNUb1Byb2Nl
c3MgLT0gbV9zY2hlZHVsaW5nRnJhbWVEZWxheTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICAvLyBXZSBoYXZlIHRvIGdlbmVyYXRlIGEgY2VydGFpbiBudW1iZXIgb2Ygb3V0cHV0IHNhbXBs
ZS1mcmFtZXMsIGJ1dCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSB3cmFwIGFy
b3VuZAotICAgIC8vIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHRvIHRoZSBzdGFydCBpZiBw
bGF5aW5nIGJhY2sgd2l0aCBsb29waW5nIGFuZCBhbHNvIHRoZSBjYXNlIHdoZXJlIHdlIHNpbXBs
eSByZWFjaCB0aGUKLSAgICAvLyBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhLCBidXQgaGF2ZW4ndCB5
ZXQgcmVuZGVyZWQgbnVtYmVyT2ZGcmFtZXMgd29ydGggb2Ygb3V0cHV0LgotICAgIHdoaWxlIChm
cmFtZXNUb1Byb2Nlc3MgPiAwKSB7Ci0gICAgICAgIEFTU0VSVChtX3JlYWRJbmRleCA8PSBlbmRG
cmFtZSk7Ci0gICAgICAgIGlmIChtX3JlYWRJbmRleCA+IGVuZEZyYW1lKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgZnJh
bWVzIHdlIGNhbiBwcm9jZXNzIHRoaXMgdGltZS4KLSAgICAgICAgaW50IGZyYW1lc0F2YWlsYWJs
ZSA9IGVuZEZyYW1lIC0gbV9yZWFkSW5kZXg7Ci0gICAgICAgIGludCBmcmFtZXNUaGlzVGltZSA9
IG1pbihmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc0F2YWlsYWJsZSk7CisgICAgLy8gUmVuZGVyIGxv
b3AgLSByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHVz
aW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uLgorICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgdGhl
IHZlcnkgY29tbW9uIGNhc2Ugb2YgcGxheWluZyBiYWNrIHdpdGggcGl0Y2hSYXRlID09IDEuCisg
ICAgLy8gV2UgY2FuIGF2b2lkIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbi4KKyAgICBpbnQgZnJh
bWVzVG9Qcm9jZXNzID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vz
cy0tKSB7CisgICAgICAgIHVuc2lnbmVkIHJlYWRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih2aXJ0dWFsUmVhZEluZGV4KTsKKyAgICAgICAgZG91YmxlIGludGVycG9sYXRpb25GYWN0b3Ig
PSB2aXJ0dWFsUmVhZEluZGV4IC0gcmVhZEluZGV4OwogICAgICAgICAKLSAgICAgICAgLy8gQ3Jl
YXRlIHRoZSBkZXN0aW5hdGlvbiBidXMgZm9yIHRoZSBwYXJ0IG9mIHRoZSBkZXN0aW5hdGlvbiB3
ZSdyZSBwcm9jZXNzaW5nIHRoaXMgdGltZS4KLSAgICAgICAgQXVkaW9CdXMgY3VycmVudERlc3Rp
bmF0aW9uQnVzKGJ1c051bWJlck9mQ2hhbm5lbHMsIGZyYW1lc1RoaXNUaW1lLCBmYWxzZSk7Ci0g
ICAgICAgIGN1cnJlbnREZXN0aW5hdGlvbkJ1cy5zZXRDaGFubmVsTWVtb3J5KDAsIGRlc3RpbmF0
aW9uTCwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICBpZiAoYnVzTnVtYmVyT2ZDaGFubmVscyA+
IDEpCi0gICAgICAgICAgICBjdXJyZW50RGVzdGluYXRpb25CdXMuc2V0Q2hhbm5lbE1lbW9yeSgx
LCBkZXN0aW5hdGlvblIsIGZyYW1lc1RoaXNUaW1lKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBv
dXRwdXQgZnJvbSB0aGUgYnVmZmVyLgotICAgICAgICByZWFkRnJvbUJ1ZmZlcigmY3VycmVudERl
c3RpbmF0aW9uQnVzLCBmcmFtZXNUaGlzVGltZSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBk
ZXN0aW5hdGlvbiBwb2ludGVycy4KLSAgICAgICAgZGVzdGluYXRpb25MICs9IGZyYW1lc1RoaXNU
aW1lOwotICAgICAgICBpZiAoYnVzTnVtYmVyT2ZDaGFubmVscyA+IDEpCi0gICAgICAgICAgICBk
ZXN0aW5hdGlvblIgKz0gZnJhbWVzVGhpc1RpbWU7Ci0KLSAgICAgICAgZnJhbWVzVG9Qcm9jZXNz
IC09IGZyYW1lc1RoaXNUaW1lOwotCi0gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3
ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBwYXJ0IG9mIHRoZSBzYW1wbGUgZGF0YSB3ZSdyZSBzdXBw
b3NlZCB0byBwbGF5IGZvciB0aGUgYnVmZmVyLgotICAgICAgICBpZiAobV9yZWFkSW5kZXggPj0g
ZW5kRnJhbWUpIHsKLSAgICAgICAgICAgIG1fcmVhZEluZGV4ID0gc3RhcnRGcmFtZTsKLSAgICAg
ICAgICAgIG1fZ3JhaW5GcmFtZUNvdW50ID0gMDsKLSAgICAgICAgICAgIAorICAgICAgICAvLyBG
b3IgbGluZWFyIGludGVycG9sYXRpb24gd2UgbmVlZCB0aGUgbmV4dCBzYW1wbGUtZnJhbWUgdG9v
LgorICAgICAgICB1bnNpZ25lZCByZWFkSW5kZXgyID0gcmVhZEluZGV4ICsgMTsKKyAgICAgICAg
aWYgKHJlYWRJbmRleDIgPj0gZW5kRnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChsb29waW5nKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gd3JhcCBhcm91bmQgYXQgdGhlIGVu
ZCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAgICAgICAgIHJlYWRJbmRleDIgLT0gZGVsdGFGcmFt
ZXM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZWFkSW5kZXgyID0gcmVh
ZEluZGV4OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIG9uIGJ1
ZmZlciBhY2Nlc3MuCisgICAgICAgIC8vIEZJWE1FOiBhcyBhbiBvcHRpbWl6YXRpb24sIHRyeSB0
byBnZXQgcmlkIG9mIHRoaXMgaW5uZXItbG9vcCBjaGVjayBhbmQgcHV0IGFzc2VydGlvbnMgYW5k
IGd1YXJkcyBiZWZvcmUgdGhlIGxvb3AuCisgICAgICAgIGlmIChyZWFkSW5kZXggPj0gYnVmZmVy
TGVuZ3RoIHx8IHJlYWRJbmRleDIgPj0gYnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gTGluZWFyIGludGVycG9sYXRpb24uCisgICAgICAgIGRvdWJsZSBzYW1w
bGVMMSA9IHNvdXJjZUxbcmVhZEluZGV4XTsKKyAgICAgICAgZG91YmxlIHNhbXBsZUwyID0gc291
cmNlTFtyZWFkSW5kZXgyXTsKKyAgICAgICAgZG91YmxlIHNhbXBsZUwgPSAoMS4wIC0gaW50ZXJw
b2xhdGlvbkZhY3RvcikgKiBzYW1wbGVMMSArIGludGVycG9sYXRpb25GYWN0b3IgKiBzYW1wbGVM
MjsKKyAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc2FtcGxlTDsKKworICAgICAgICBpZiAoaXNT
dGVyZW8pIHsKKyAgICAgICAgICAgIGRvdWJsZSBzYW1wbGVSMSA9IHNvdXJjZVJbcmVhZEluZGV4
XTsKKyAgICAgICAgICAgIGRvdWJsZSBzYW1wbGVSMiA9IHNvdXJjZVJbcmVhZEluZGV4Ml07Cisg
ICAgICAgICAgICBkb3VibGUgc2FtcGxlUiA9ICgxLjAgLSBpbnRlcnBvbGF0aW9uRmFjdG9yKSAq
IHNhbXBsZVIxICsgaW50ZXJwb2xhdGlvbkZhY3RvciAqIHNhbXBsZVIyOworICAgICAgICAgICAg
KmRlc3RpbmF0aW9uUisrID0gc2FtcGxlUjsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWxS
ZWFkSW5kZXggKz0gcGl0Y2hSYXRlOworCisgICAgICAgIC8vIFdyYXAtYXJvdW5kLCByZXRhaW5p
bmcgc3ViLXNhbXBsZSBwb3NpdGlvbiBzaW5jZSB2aXJ0dWFsUmVhZEluZGV4IGlzIGZsb2F0aW5n
LXBvaW50LgorICAgICAgICBpZiAodmlydHVhbFJlYWRJbmRleCA+PSBlbmRGcmFtZSkgeworICAg
ICAgICAgICAgdmlydHVhbFJlYWRJbmRleCAtPSBkZWx0YUZyYW1lczsKKwogICAgICAgICAgICAg
aWYgKCFsb29waW5nKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgbG9vcGlu
ZywgdGhlbiBzdG9wIHBsYXlpbmcgd2hlbiB3ZSBnZXQgdG8gdGhlIGVuZC4KICAgICAgICAgICAg
ICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwpAQCAtMjc2LDY3ICsyODcsMjIgQEAgdm9pZCBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OnByb3ZpZGVJbnB1dAogICAgICAgICAgICAgICAgICAgICAvLyBz
byBnZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGUgcmVtYWluaW5nLgogICAgICAgICAgICAgICAgICAg
ICBtZW1zZXQoZGVzdGluYXRpb25MLCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNz
KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb25SKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNTdGVyZW8pCiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb25SLCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaW5pc2goKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZWFkRnJvbUJ1ZmZlcihB
dWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAg
Ym9vbCBpc0J1c0dvb2QgPSBkZXN0aW5hdGlvbkJ1cyAmJiBkZXN0aW5hdGlvbkJ1cy0+bGVuZ3Ro
KCkgPT0gZnJhbWVzVG9Qcm9jZXNzICYmIGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxz
KCkgPT0gbnVtYmVyT2ZDaGFubmVscygpOwotICAgIEFTU0VSVChpc0J1c0dvb2QpOwotICAgIGlm
ICghaXNCdXNHb29kKQotICAgICAgICByZXR1cm47CiAgICAgCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscyA9IHRoaXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKLSAgICAvLyBGSVhNRTogd2Ug
Y2FuIGFkZCBzdXBwb3J0IGZvciBzb3VyY2VzIHdpdGggbW9yZSB0aGFuIHR3byBjaGFubmVscywg
YnV0IHRoaXMgaXMgbm90IGEgY29tbW9uIGNhc2UuCi0gICAgYm9vbCBjaGFubmVsQ291bnRHb29k
ID0gbnVtYmVyT2ZDaGFubmVscyA9PSAxIHx8IG51bWJlck9mQ2hhbm5lbHMgPT0gMjsKLSAgICBB
U1NFUlQoY2hhbm5lbENvdW50R29vZCk7Ci0gICAgaWYgKCFjaGFubmVsQ291bnRHb29kKQotICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAvLyBHZXQgcG9pbnRlcnMgdG8gdGhlIHN0
YXJ0IG9mIHRoZSBzYW1wbGUgYnVmZmVyLgotICAgIGZsb2F0KiBzb3VyY2VMID0gbV9idWZmZXIt
PmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCk7Ci0gICAgZmxvYXQqIHNvdXJjZVIgPSBtX2J1ZmZl
ci0+bnVtYmVyT2ZDaGFubmVscygpID09IDIgPyBtX2J1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSkt
PmRhdGEoKSA6IDA7Ci0KLSAgICAvLyBTYW5pdHkgY2hlY2sgYnVmZmVyIGFjY2Vzcy4KLSAgICBi
b29sIGlzU291cmNlR29vZCA9IHNvdXJjZUwgJiYgKG51bWJlck9mQ2hhbm5lbHMgPT0gMSB8fCBz
b3VyY2VSKSAmJiBtX3JlYWRJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBtX2J1ZmZlci0+bGVu
Z3RoKCk7Ci0gICAgQVNTRVJUKGlzU291cmNlR29vZCk7Ci0gICAgaWYgKCFpc1NvdXJjZUdvb2Qp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9mZnNldCB0aGUgcG9pbnRlcnMgdG8gdGhlIGN1
cnJlbnQgcmVhZCBwb3NpdGlvbiBpbiB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzb3VyY2VMICs9
IG1fcmVhZEluZGV4OwotICAgIHNvdXJjZVIgKz0gbV9yZWFkSW5kZXg7Ci0KLSAgICAvLyBHZXQg
cG9pbnRlcnMgdG8gdGhlIGRlc3RpbmF0aW9uLgotICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwgPSBk
ZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlv
blIgPSBudW1iZXJPZkNoYW5uZWxzID09IDIgPyBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgxKS0+
ZGF0YSgpIDogMDsKLSAgICBib29sIGlzRGVzdGluYXRpb25Hb29kID0gZGVzdGluYXRpb25MICYm
IChudW1iZXJPZkNoYW5uZWxzID09IDEgfHwgZGVzdGluYXRpb25SKTsKLSAgICBBU1NFUlQoaXNE
ZXN0aW5hdGlvbkdvb2QpOwotICAgIGlmICghaXNEZXN0aW5hdGlvbkdvb2QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFNpbXBseSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIHNvdXJjZSBidWZm
ZXIgdG8gdGhlIGRlc3RpbmF0aW9uLgotICAgIG1lbWNweShkZXN0aW5hdGlvbkwsIHNvdXJjZUws
IHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIGlmIChudW1iZXJPZkNoYW5u
ZWxzID09IDIpCi0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblIsIHNvdXJjZVIsIHNpemVvZihm
bG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gQWR2YW5jZSB0aGUgYnVmZmVyJ3Mg
cmVhZCBpbmRleC4KLSAgICBtX3JlYWRJbmRleCArPSBmcmFtZXNUb1Byb2Nlc3M7CisgICAgbV92
aXJ0dWFsUmVhZEluZGV4ID0gdmlydHVhbFJlYWRJbmRleDsKIH0KIAogdm9pZCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnJlc2V0KCkKIHsKLSAgICBtX3Jlc2FtcGxlci5yZXNldCgpOwotICAgIG1f
cmVhZEluZGV4ID0gMDsKLSAgICBtX2dyYWluRnJhbWVDb3VudCA9IDA7CisgICAgbV92aXJ0dWFs
UmVhZEluZGV4ID0gMDsKICAgICBtX2xhc3RHYWluID0gZ2FpbigpLT52YWx1ZSgpOwogfQogCkBA
IC0zNjIsMTEgKzMyOCwxMCBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVy
KEF1CiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICAvLyBEbyBhbnkgbmVjZXNzc2FyeSByZS1j
b25maWd1cmF0aW9uIHRvIHRoZSBidWZmZXIncyBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBidWZmZXItPm51bWJlck9mQ2hhbm5lbHMoKTsK
LSAgICAgICAgbV9yZXNhbXBsZXIuY29uZmlndXJlQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7
CiAgICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxz
KTsKICAgICB9CiAKLSAgICBtX3JlYWRJbmRleCA9IDA7CisgICAgbV92aXJ0dWFsUmVhZEluZGV4
ID0gMDsKICAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKIH0KIApAQCAtMzgzLDcgKzM0OCw3IEBAIHZv
aWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT24oZG91YmwKIAogICAgIG1faXNHcmFpbiA9
IGZhbHNlOwogICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKLSAgICBtX3JlYWRJbmRleCA9IDA7Cisg
ICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKICAgICBtX2lzUGxheWluZyA9IHRydWU7CiB9CiAK
QEAgLTQxMCwxMSArMzc1LDE2IEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlR3Jh
aW5PbigKICAgICBtX2dyYWluT2Zmc2V0ID0gZ3JhaW5PZmZzZXQ7CiAKICAgICBtX2dyYWluRHVy
YXRpb24gPSBncmFpbkR1cmF0aW9uOwotICAgIG1fZ3JhaW5GcmFtZUNvdW50ID0gMDsKICAgICAK
ICAgICBtX2lzR3JhaW4gPSB0cnVlOwogICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKLSAgICBtX3Jl
YWRJbmRleCA9IHN0YXRpY19jYXN0PGludD4obV9ncmFpbk9mZnNldCAqIGJ1ZmZlcigpLT5zYW1w
bGVSYXRlKCkpOworCisgICAgLy8gV2UgY2FsbCBmbG9vcigpIGhlcmUgc2luY2UgYXQgcGxheWJh
Y2tSYXRlID09IDEgd2UgZG9uJ3Qgd2FudCB0byBnbyB0aHJvdWdoIGxpbmVhciBpbnRlcnBvbGF0
aW9uCisgICAgLy8gYXQgYSBzdWItc2FtcGxlIHBvc2l0aW9uIHNpbmNlIGl0IHdpbGwgZGVncmFk
ZSB0aGUgcXVhbGl0eS4KKyAgICAvLyBXaGVuIGFsaWduZWQgdG8gdGhlIHNhbXBsZS1mcmFtZSB0
aGUgcGxheWJhY2sgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIFBDTSBkYXRhIHN0b3JlZCBpbiB0
aGUgYnVmZmVyLgorICAgIC8vIFNpbmNlIHBsYXliYWNrUmF0ZSA9PSAxIGlzIHZlcnkgY29tbW9u
LCBpdCdzIHdvcnRoIGNvbnNpZGVyaW5nIHF1YWxpdHkuCisgICAgbV92aXJ0dWFsUmVhZEluZGV4
ID0gZmxvb3IobV9ncmFpbk9mZnNldCAqIGJ1ZmZlcigpLT5zYW1wbGVSYXRlKCkpOworICAgIAog
ICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKIH0KIApAQCAtNDQ2LDcgKzQxNiw5IEBAIGRvdWJsZSBB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6OnRvdGFsUGl0Y2gKIAogICAgIC8vIFNhbml0eSBjaGVjayB0
aGUgdG90YWwgcmF0ZS4gIEl0J3MgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGUgcmVzYW1wbGVyIG5v
dCBnZXQgYW55IGJhZCByYXRlIHZhbHVlcy4KICAgICB0b3RhbFJhdGUgPSBtYXgoMC4wLCB0b3Rh
bFJhdGUpOwotICAgIHRvdGFsUmF0ZSA9IG1pbihBdWRpb1Jlc2FtcGxlcjo6TWF4UmF0ZSwgdG90
YWxSYXRlKTsKKyAgICBpZiAoIXRvdGFsUmF0ZSkKKyAgICAgICAgdG90YWxSYXRlID0gMTsgLy8g
emVybyByYXRlIGlzIGNvbnNpZGVyZWQgaWxsZWdhbAorICAgIHRvdGFsUmF0ZSA9IG1pbihNYXhS
YXRlLCB0b3RhbFJhdGUpOwogICAgIAogICAgIGJvb2wgaXNUb3RhbFJhdGVWYWxpZCA9ICFpc25h
bih0b3RhbFJhdGUpICYmICFpc2luZih0b3RhbFJhdGUpOwogICAgIEFTU0VSVChpc1RvdGFsUmF0
ZVZhbGlkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
U291cmNlTm9kZS5oCShyZXZpc2lvbiA4OTkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKICNpbmNsdWRlICJBdWRpb0dhaW4uaCIKICNpbmNsdWRl
ICJBdWRpb1Bhbm5lck5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1Jlc2FtcGxlci5oIgogI2luY2x1
ZGUgIkF1ZGlvU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC00Myw3ICs0MSw3IEBAIGNsYXNzIEF1ZGlvQ29u
dGV4dDsKIC8vIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBpcyBhbiBBdWRpb05vZGUgcmVwcmVzZW50
aW5nIGFuIGF1ZGlvIHNvdXJjZSBmcm9tIGFuIGluLW1lbW9yeSBhdWRpbyBhc3NldCByZXByZXNl
bnRlZCBieSBhbiBBdWRpb0J1ZmZlci4KIC8vIEl0IGdlbmVyYWxseSB3aWxsIGJlIHVzZWQgZm9y
IHNob3J0IHNvdW5kcyB3aGljaCByZXF1aXJlIGEgaGlnaCBkZWdyZWUgb2Ygc2NoZWR1bGluZyBm
bGV4aWJpbGl0eSAoY2FuIHBsYXliYWNrIGluIHJoeXRobWljYWxseSBwZXJmZWN0IHdheXMpLgog
Ci1jbGFzcyBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlLCBw
dWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlciB7CitjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZU5vZGUg
OiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBkb3VibGUgc2Ft
cGxlUmF0ZSk7CiAKQEAgLTUyLDEwICs1MCw2IEBAIHB1YmxpYzoKICAgICAvLyBBdWRpb05vZGUK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIEF1ZGlvU291cmNlUHJvdmlkZXIKLSAgICAv
LyBXaGVuIHByb2Nlc3MoKSBpcyBjYWxsZWQsIHRoZSByZXNhbXBsZXIgY2FsbHMgcHJvdmlkZUlu
cHV0IChpbiB0aGUgYXVkaW8gdGhyZWFkKSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCi0gICAg
dmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1l
cyk7CiAgICAgCiAgICAgLy8gc2V0QnVmZmVyKCkgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVh
ZC4gIFRoaXMgaXMgdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHBsYXliYWNrLgogICAgIHZvaWQgc2V0
QnVmZmVyKEF1ZGlvQnVmZmVyKik7CkBAIC04Myw2ICs3Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCosIGRvdWJsZSBzYW1wbGVS
YXRlKTsKIAorICAgIHZvaWQgcmVuZGVyRnJvbUJ1ZmZlcihBdWRpb0J1cyosIHVuc2lnbmVkIGRl
c3RpbmF0aW9uRnJhbWVPZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CisKICAgICAvLyBt
X2J1ZmZlciBob2xkcyB0aGUgc2FtcGxlIGRhdGEgd2hpY2ggdGhpcyBub2RlIG91dHB1dHMuCiAg
ICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKIApAQCAtMTA5LDI3ICsxMDUsMTkgQEAg
cHJpdmF0ZToKICAgICAvLyBoYXMgYmVlbiByZWFjaGVkLgogICAgIGRvdWJsZSBtX2VuZFRpbWU7
IC8vIGluIHNlY29uZHMKICAgICAKLSAgICAvLyBtX3NjaGVkdWxpbmdGcmFtZURlbGF5IGlzIHRo
ZSBzYW1wbGUtYWNjdXJhdGUgc2NoZWR1bGluZyBvZmZzZXQuCi0gICAgLy8gSXQncyB1c2VkIHNv
IHRoYXQgd2Ugc3RhcnQgcmVuZGVyaW5nIGF1ZGlvIHNhbXBsZXMgYXQgYSB2ZXJ5IHByZWNpc2Ug
cG9pbnQgaW4gdGltZS4KLSAgICAvLyBJdCB3aWxsIG9ubHkgYmUgYSBub24temVybyB2YWx1ZSB0
aGUgdmVyeSBmaXJzdCByZW5kZXIgcXVhbnR1bSB0aGF0IHdlIHJlbmRlciBmcm9tIHRoZSBidWZm
ZXIuCi0gICAgaW50IG1fc2NoZWR1bGluZ0ZyYW1lRGVsYXk7Ci0KLSAgICAvLyBtX3JlYWRJbmRl
eCBpcyBhIHNhbXBsZS1mcmFtZSBpbmRleCBpbnRvIG91ciBidWZmZXIgcmVwcmVzZW50aW5nIHRo
ZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgotICAgIHVuc2lnbmVkIG1fcmVhZEluZGV4Owor
ICAgIC8vIG1fdmlydHVhbFJlYWRJbmRleCBpcyBhIHNhbXBsZS1mcmFtZSBpbmRleCBpbnRvIG91
ciBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgorICAg
IC8vIFNpbmNlIGl0J3MgZmxvYXRpbmctcG9pbnQsIGl0IGhhcyBzdWItc2FtcGxlIGFjY3VyYWN5
LgorICAgIGRvdWJsZSBtX3ZpcnR1YWxSZWFkSW5kZXg7CiAKICAgICAvLyBHcmFudWxhciBwbGF5
YmFjawogICAgIGJvb2wgbV9pc0dyYWluOwogICAgIGRvdWJsZSBtX2dyYWluT2Zmc2V0OyAvLyBp
biBzZWNvbmRzCiAgICAgZG91YmxlIG1fZ3JhaW5EdXJhdGlvbjsgLy8gaW4gc2Vjb25kcwotICAg
IGludCBtX2dyYWluRnJhbWVDb3VudDsgLy8ga2VlcHMgdHJhY2sgb2Ygd2hpY2ggZnJhbWUgaW4g
dGhlIGdyYWluIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcKIAogICAgIC8vIHRvdGFsUGl0Y2hS
YXRlKCkgcmV0dXJucyB0aGUgaW5zdGFudGFuZW91cyBwaXRjaCByYXRlIChub24tdGltZSBwcmVz
ZXJ2aW5nKS4KICAgICAvLyBJdCBpbmNvcnBvcmF0ZXMgdGhlIGJhc2UgcGl0Y2ggcmF0ZSwgYW55
IHNhbXBsZS1yYXRlIGNvbnZlcnNpb24gZmFjdG9yIGZyb20gdGhlIGJ1ZmZlciwgYW5kIGFueSBk
b3BwbGVyIHNoaWZ0IGZyb20gYW4gYXNzb2NpYXRlZCBwYW5uZXIgbm9kZS4KICAgICBkb3VibGUg
dG90YWxQaXRjaFJhdGUoKTsKIAotICAgIC8vIG1fcmVzYW1wbGVyIHBlcmZvcm1zIHRoZSBwaXRj
aCByYXRlIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlciBwbGF5YmFjay4KLSAgICBBdWRpb1Jlc2FtcGxl
ciBtX3Jlc2FtcGxlcjsKLQogICAgIC8vIG1fbGFzdEdhaW4gcHJvdmlkZXMgY29udGludWl0eSB3
aGVuIHdlIGR5bmFtaWNhbGx5IGFkanVzdCB0aGUgZ2Fpbi4KICAgICBkb3VibGUgbV9sYXN0R2Fp
bjsKICAgICAKQEAgLTEzOSwxMCArMTI3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIHN5bmNo
cm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRCdWZmZXIoKSB3aGljaCBjYW4gY2F1c2UgZHluYW1p
YyBjaGFubmVsIGNvdW50IGNoYW5nZXMuCiAgICAgbXV0YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2Nr
OwogCi0gICAgLy8gUmVhZHMgdGhlIG5leHQgZnJhbWVzVG9Qcm9jZXNzIHNhbXBsZS1mcmFtZXMg
ZnJvbSB0aGUgQXVkaW9CdWZmZXIgaW50byBkZXN0aW5hdGlvbkJ1cy4KLSAgICAvLyBBIGdyYWlu
IGVudmVsb3BlIHdpbGwgYmUgYXBwbGllZCBpZiBtX2lzR3JhaW4gaXMgc2V0IHRvIHRydWUuCi0g
ICAgdm9pZCByZWFkRnJvbUJ1ZmZlcihBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOwotCiAgICAgLy8gSGFuZGxlcyB0aGUgdGltZSB3aGVuIHdlIHJlYWNo
IHRoZSBlbmQgb2Ygc2FtcGxlIGRhdGEgKG5vbi1sb29waW5nKSBvciB0aGUgbm90ZU9mZigpIHRp
bWUgaGFzIGJlZW4gcmVhY2hlZC4KICAgICB2b2lkIGZpbmlzaCgpOwogfTsK
</data>
<flag name="review"
          id="93552"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>