<?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>53252</bug_id>
          
          <creation_ts>2011-01-27 12:11:58 -0800</creation_ts>
          <short_desc>Split MediaControls out of RenderMedia.</short_desc>
          <delta_ts>2011-01-28 10:34:09 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>
          
          <blocked>53020</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340988</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-27 12:11:58 -0800</bug_when>
    <thetext>Split MediaControls out of RenderMedia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340992</commentid>
    <comment_count>1</comment_count>
      <attachid>80356</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-27 12:24:35 -0800</bug_when>
    <thetext>Created attachment 80356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341063</commentid>
    <comment_count>2</comment_count>
      <attachid>80356</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-01-27 14:47:26 -0800</bug_when>
    <thetext>Comment on attachment 80356
Patch


  BRAVO!!

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

&gt; Source/WebCore/rendering/RenderMedia.cpp:-106
&gt; -MediaPlayer* RenderMedia::player() const
&gt; -{
&gt; -    return mediaElement()-&gt;player();
&gt; -}
&gt; -

Why did you delete this function and update the call sites to use &quot;mediaElement()-&gt;player()&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341065</commentid>
    <comment_count>3</comment_count>
      <attachid>80356</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-27 14:49:41 -0800</bug_when>
    <thetext>Comment on attachment 80356
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderMedia.cpp:-106
&gt;&gt; -
&gt; 
&gt; Why did you delete this function and update the call sites to use &quot;mediaElement()-&gt;player()&quot;.

No reason other than it wasn&apos;t used by this class. If you&apos;d like, I can move it to RenderVideo instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341067</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-01-27 14:54:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 80356 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80356&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderMedia.cpp:-106
&gt; &gt;&gt; -
&gt; &gt; 
&gt; &gt; Why did you delete this function and update the call sites to use &quot;mediaElement()-&gt;player()&quot;.
&gt; 
&gt; No reason other than it wasn&apos;t used by this class. If you&apos;d like, I can move it to RenderVideo instead?

Not necessary, I was just curious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341277</commentid>
    <comment_count>5</comment_count>
      <attachid>80356</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-27 20:17:42 -0800</bug_when>
    <thetext>Comment on attachment 80356
Patch

Please revert if it breaks stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341281</commentid>
    <comment_count>6</comment_count>
      <attachid>80356</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-27 20:23:55 -0800</bug_when>
    <thetext>Comment on attachment 80356
Patch

Rejecting attachment 80356 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2

Last 500 characters of output:
ile Source/WebCore/rendering/MediaControlElements.cpp
patching file Source/WebCore/rendering/RenderMedia.cpp
patching file Source/WebCore/rendering/RenderMedia.h
Hunk #3 FAILED at 62.
Hunk #4 succeeded at 77 (offset -2 lines).
1 out of 4 hunks FAILED -- saving rejects to file Source/WebCore/rendering/RenderMedia.h.rej
patching file Source/WebCore/rendering/RenderVideo.cpp

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Eric Carlson&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7568372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341481</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-28 09:11:18 -0800</bug_when>
    <thetext>Committed r76950: &lt;http://trac.webkit.org/changeset/76950&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341516</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-28 10:34:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76950 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80356</attachid>
            <date>2011-01-27 12:24:35 -0800</date>
            <delta_ts>2011-01-27 20:23:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53252-20110127122434.patch</filename>
            <type>text/plain</type>
            <size>68267</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9B
bmRyb2lkLm1rCmluZGV4IDg1NDFhYTNjN2MzYWFiN2ViMTk0NDVkZTUyNjRhNDExNWJkY2NmOTAu
LmMzMGVkZjY2OTkxN2U1MGM4NTI5Njg4YmJmZjNlZTNhZWJmMTZmY2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIvU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpA
QCAtMzQ2LDYgKzM0Niw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykg
XAogCWh0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgXAogCWh0bWwvcGFyc2VyL1Rl
eHRWaWV3U291cmNlUGFyc2VyLmNwcCBcCiAJXAorCWh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
Y3BwIFwKIAlodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKIAlcCiAJbG9hZGVy
L2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NzI2MzljZjE4MDA1NDY5YmM3YWFlODUyZjg4ODk2YWZiODlhMTU3MS4uNTIwYTMzZmQ3NDRkMWYy
ZDg5MmY1YTA0NGI2NWFjNGEwNWFkZmI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExNDgs
NiArMTE0OCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3BhcnNlci9UZXh0RG9j
dW1lbnRQYXJzZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvVGV4dFZpZXdTb3VyY2VQYXJzZXIuY3Bw
CiAKKyAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAogICAgIGh0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKIAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZjBhMmFjMWQ2MTg3ZjM0YTY1Mzc4MjA4YThhNTI3NWQwZTQ1YzZiLi5l
MzZkY2E4YTM2YjA5MzJhZjhkOTY3NzU3NDcyNmEwNjRmZWJmYWExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTEtMDEtMjcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdCBNZWRpYUNvbnRyb2xzIG91dCBvZiBSZW5kZXJNZWRpYS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjUyCisKKyAgICAgICAgTmVhci1t
ZWNoYW5pY2FsIG1vdmluZyBvZiBzdHVmZiwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLCB0aHVzIG5v
IG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IEFkZGVkIE1lZGlhQ29udHJvbHMg
dG8gYnVpbGQgc3lzdGVtLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOiBDaGFuZ2VkIHRvIGZvcndhcmQgZXZlbnRzIHRvIE1lZGlhQ29udHJvbHMuCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHA6IENvcGllZCBhbGwgY29udHJvbHMtcmVs
YXRlZCBtZXRob2RzIGZyb20KKyAgICAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYS5jcHAsIHB1bGxlZCB0aGVtIGludG8gdGhlaXIgb3duIGNsYXNzIGNhbGxlZCBN
ZWRpYUNvbnRyb2xzLiAKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmg6IERp
dHRvIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmguCisgICAgICAg
ICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IENoYW5n
ZWQgdG8gdXNlIE1lZGlhQ29udHJvbHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYSk6IE1vdmVk
IHJlbGV2YW50IGNvbnN0cnVjdG9yIGluaXRpYWxpemVycyBvdXQgdG8gTWVkaWFDb250cm9scy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpkZXN0cm95KTogQ2hhbmdlZCB0byB1c2Ug
TWVkaWFDb250cm9scy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpzdHlsZURpZENo
YW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmxheW91dCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OnVwZGF0ZUZyb21FbGVtZW50KTog
RGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmg6IFVwZGF0ZWQgZGVmcyBh
Y2NvcmRpbmdseSBhbmQgcmVtb3ZlZCBwbGF5ZXIoKSBhY2Nlc3Nvciwgd2hpY2gKKyAgICAgICAg
ICAgIGlzIG9ubHkgdXNlZCBieSBzdWItY2xhc3MgUmVuZGVyVmlkZW8uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYTo6Y29udHJvbHMpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVmlkZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86On5SZW5kZXJW
aWRlbyk6IENoYW5nZWQgdG8gYWNjZXNzIE1lZGlhUGxheWVyKiBkaXJlY3RseSBmcm9tIG1lZGlh
RWxlbWVudCgpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OmNhbGN1bGF0ZUludHJp
bnNpY1NpemUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJl
cGxhY2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRlUGxh
eWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6c3VwcG9ydHNBY2Nl
bGVyYXRlZFJlbmRlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86
OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKTogRGl0dG8uCisKIDIwMTEtMDEtMjcg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBXaW5DRSBidWlsZCBmaXggZm9yIHI3Njc0My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
ODRkMWRmNjVmYTc4NGM5N2EzMTJiZDdlODVhMjkzMDE2ZjBkYzA5Yy4uMjcyN2RlYWE4MDdiNTll
YjgzMWJhZDgxYzcyNTI5YTVlZjk5NDkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE4Nzgs
NiArMTg3OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1RleHRWaWV3U291cmNlUGFyc2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
VGV4dFZpZXdTb3VyY2VQYXJzZXIuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9scy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHMuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmggXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAzYTk2NTI5NjNjYzFiZTRiOGRkMWYyMjE5MTVkZDgxMmExNmNhY2E1Li5jOGIzYjdh
N2E2OTlhNWM3ODVlNGVhNGFjZTdjNTRhYzVjNTJhZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0x
OTk5LDYgKzE5OTksOCBAQAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBh
cnNlci5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9UZXh0Vmlld1NvdXJjZVBhcnNlci5j
cHAnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL1RleHRWaWV3U291cmNlUGFyc2VyLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwJywKKyAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L1NsaWRlclRodW1iRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWVjM2VjYjg0Y2M5OTFiNTJmOTUwMjM2NDVmMTE1Njc2
MjQ0ZGQxOS4uMmUxNWJmMWE0NDlhYjA2ODZkMjY1MzFmMzE1M2U0MmU4MzcwZTIwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTEwMzgsNiArMTAzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvcGFy
c2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvVGV4dFZpZXdTb3VyY2VQYXJzZXIuY3Bw
IFwKKyAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBcCiAgICAgaHRtbC9zaGFkb3cv
U2xpZGVyVGh1bWJFbGVtZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDc0NzQwZDcwYmJiYjQxOTUxZjFi
ZDBjMzhjYzdlNDAzMzM5YTU0YWIuLjc5MDQyN2MyNTUyNGYzM2E1NzJkNTEyOTU2ZGU0ZDU0MDM1
ODViZTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC01NTQ5Nyw2ICs1NTQ5NywxNCBAQAogCQkJCU5hbWU9InNoYWRvdyIKIAkJCQk+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHNoYWRvd1xNZWRpYUNvbnRyb2xzLmNw
cCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcc2hhZG93XE1lZGlhQ29udHJvbHMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XFNsaWRlclRodW1iRWxlbWVu
dC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDlmMTEwNTczNjIwYzcxNTM2M2MxZTg5
MGY2Y2E4YTFjMjIxNDA4MS4uZGUxOTEwNTFiMzc4ZGU4ZTZjNzhiZjA1YjU2YWJlY2IxNDMzNTEx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtODg4LDYgKzg4OCw4IEBACiAJCTQxMzhEMzM2MTI0NDA1NDgwMDMyM0QzMyAvKiBF
dmVudENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEzOEQzMzQxMjQ0MDU0ODAwMzIzRDMzIC8qIEV2ZW50Q29udGV4dC5jcHAgKi87IH07
CiAJCTQxNTBGOUYxMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTBGOUVGMTJCNkUw
RTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCAqLzsgfTsKIAkJNDE1MEY5RjIxMkI2
RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTUwRjlGMDEyQjZFMEU3MDAwOEM4NjAgLyog
U2xpZGVyVGh1bWJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNDE1N0FGODAxMkYxRkIwNDAwQThDNkY1
IC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxNTdBRjdFMTJGMUZCMDQwMEE4QzZGNSAvKiBNZWRpYUNvbnRyb2xzLmggKi87
IH07CisJCTQxNTdBRjgxMTJGMUZCMDQwMEE4QzZGNSAvKiBNZWRpYUNvbnRyb2xzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTdBRjdGMTJGMUZC
MDQwMEE4QzZGNSAvKiBNZWRpYUNvbnRyb2xzLmNwcCAqLzsgfTsKIAkJNDE2MkE0NTAxMDExNDVB
RTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2MkE0NEQxMDExNDVBRTAwREZGM0VEIC8q
IERlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwICovOyB9OwogCQk0MTYyQTQ1MTEwMTE0NUFFMDBE
RkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2MkE0NEUxMDExNDVBRTAwREZGM0VEIC8qIERlZGlj
YXRlZFdvcmtlckNvbnRleHQuaCAqLzsgfTsKIAkJNDE2MkE0NTQxMDExNDVFMzAwREZGM0VEIC8q
IEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKQEAgLTcyNTEsNiArNzI1Myw4
IEBACiAJCTQxMzhEMzM0MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRl
clRodW1iRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbGlkZXJU
aHVtYkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MEY5RjAxMkI2
RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MTU3QUY3RTEyRjFGQjA0MDBBOEM2RjUgLyogTWVkaWFDb250cm9s
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRyb2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNTdBRjdGMTJGMUZCMDQwMEE4QzZGNSAvKiBN
ZWRpYUNvbnRyb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1l
ZGlhQ29udHJvbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTYyQTQ0RDEw
MTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcDsgcGF0
aCA9IHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNjJBNDRFMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlZGljYXRlZFdvcmtl
ckNvbnRleHQuaDsgcGF0aCA9IHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTYyQTQ0RjEwMTE0NUFFMDBERkYzRUQgLyogRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGVkaWNhdGVk
V29ya2VyQ29udGV4dC5pZGw7IHBhdGggPSB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMyMjUsNiArMTMyMjksOCBAQAog
CQk0MTUwRjlFRDEyQjZFMDk5MDAwOEM4NjAgLyogc2hhZG93ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0MTU3QUY3RjEyRjFGQjA0MDBBOEM2RjUgLyog
TWVkaWFDb250cm9scy5jcHAgKi8sCisJCQkJNDE1N0FGN0UxMkYxRkIwNDAwQThDNkY1IC8qIE1l
ZGlhQ29udHJvbHMuaCAqLywKIAkJCQk0MTUwRjlGMDEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVy
VGh1bWJFbGVtZW50LmNwcCAqLywKIAkJCQk0MTUwRjlFRjEyQjZFMEU3MDAwOEM4NjAgLyogU2xp
ZGVyVGh1bWJFbGVtZW50LmggKi8sCiAJCQkpOwpAQCAtMjE0OTIsNiArMjE0OTgsNyBAQAogCQkJ
CTQ5RTkxMUM3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMUJDQzYxMTEyNERGQ0IwMEJFNzBERCAvKiBNZWRpYUNhblN0
YXJ0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRkU3RTEzMEQzMkZBRjYwMDY2RjRE
MiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE1N0FGODAx
MkYxRkIwNDAwQThDNkY1IC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MjA1QUI4MTIzOTI5MTAwMEIxNzM4MCAvKiBNZWRpYURvY3VtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI0MzM5LDYgKzI0MzQ2LDcgQEAKIAkJCQlGQTY1NEE2QjExMDhB
QkVEMDAyNjE1RTAgLyogTWF0aE1MVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDlENURDMkIwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDE1N0FGODExMkYxRkIw
NDAwQThDNkY1IC8qIE1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUJGRTdF
MTIwRDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3MjA1QUI3MTIzOTI5MTAwMEIxNzM4MCAvKiBNZWRpYURvY3VtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRFMTk1OTIxMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1
cmVOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCmluZGV4IDMxNDliNjhlOGY1YzMxZWYzZWY2NjcxYTJhZDdkMTkwOGUzYzllZGYu
LmVjMWU1ZTE4ZTNiMWMzYThlNDcyYWM5MjE4ZTI4MWY5MjUyOTU4OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IkhUTUxTb3VyY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCiAjaW5jbHVkZSAi
TWVkaWFEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRp
YUxpc3QuaCIKQEAgLTIyODcsNyArMjI4OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHdpZGdldC0+aGFuZGxlRXZl
bnQoZXZlbnQpOwogI2Vsc2UKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01l
ZGlhKCkpCi0gICAgICAgIHRvUmVuZGVyTWVkaWEocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChl
dmVudCk7CisgICAgICAgIHRvUmVuZGVyTWVkaWEocmVuZGVyZXIoKSktPmNvbnRyb2xzKCktPmZv
cndhcmRFdmVudChldmVudCk7CiAgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNDFlNDQ4NTRiMjM4NGIzYmI1M2RjZDc2NDQxYTkzZGQ0NWQ5M2NhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAg
LTAsMCArMSw1NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKKwor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgor
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitzdGF0aWMgY29uc3QgZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkgPSAwLjI7
CitzdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVsYXkgPSAwLjA1
OworCitNZWRpYUNvbnRyb2xzOjpNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKKyAgICA6IG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fdGlt
ZVVwZGF0ZVRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xzOjp0aW1lVXBkYXRlVGltZXJGaXJlZCkK
KyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xzOjpvcGFj
aXR5QW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGlt
ZSgwKQorICAgICwgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24oMCkKKyAgICAsIG1fb3BhY2l0
eUFuaW1hdGlvbkZyb20oMCkKKyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYpCisgICAg
LCBtX21vdXNlT3ZlcihmYWxzZSkKK3sKK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVT
dHlsZSgpCit7CisgICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fcGFuZWwpCisgICAgICAgIG1fcGFuZWwtPnVwZGF0ZVN0eWxlKCk7Cisg
ICAgaWYgKG1fbXV0ZUJ1dHRvbikKKyAgICAgICAgbV9tdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgp
OworICAgIGlmIChtX3BsYXlCdXR0b24pCisgICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlU3R5
bGUoKTsKKyAgICBpZiAobV9zZWVrQmFja0J1dHRvbikKKyAgICAgICAgbV9zZWVrQmFja0J1dHRv
bi0+dXBkYXRlU3R5bGUoKTsKKyAgICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbikKKyAgICAgICAg
bV9zZWVrRm9yd2FyZEJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKKyAgICBpZiAobV9yZXdpbmRCdXR0
b24pCisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT51cGRhdGVTdHlsZSgpOworICAgIGlmIChtX3Jl
dHVyblRvUmVhbHRpbWVCdXR0b24pCisgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+
dXBkYXRlU3R5bGUoKTsKKyAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKKyAg
ICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsKKyAgICBp
ZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZVN0eWxl
KCk7CisgICAgaWYgKG1fdGltZWxpbmVDb250YWluZXIpCisgICAgICAgIG1fdGltZWxpbmVDb250
YWluZXItPnVwZGF0ZVN0eWxlKCk7CisgICAgaWYgKG1fdGltZWxpbmUpCisgICAgICAgIG1fdGlt
ZWxpbmUtPnVwZGF0ZVN0eWxlKCk7CisgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbikKKyAgICAg
ICAgbV9mdWxsc2NyZWVuQnV0dG9uLT51cGRhdGVTdHlsZSgpOworICAgIGlmIChtX2N1cnJlbnRU
aW1lRGlzcGxheSkKKyAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZVN0eWxlKCk7
CisgICAgaWYgKG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpCisgICAgICAgIG1fdGltZVJlbWFpbmlu
Z0Rpc3BsYXktPnVwZGF0ZVN0eWxlKCk7CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
KQorICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKKyAgICBp
ZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQorICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVC
dXR0b24tPnVwZGF0ZVN0eWxlKCk7CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyKQorICAgICAgICBt
X3ZvbHVtZVNsaWRlci0+dXBkYXRlU3R5bGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjpk
ZXN0cm95KCkKK3sKKyAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOworCisg
ICAgaWYgKG1fY29udHJvbHNTaGFkb3dSb290ICYmIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5k
ZXJlcigpKSB7CisKKyAgICAgICAgLy8gZGV0YWNoIHRoZSBwYW5lbCBiZWZvcmUgcmVtb3Zpbmcg
dGhlIHNoYWRvdyByZW5kZXJlciB0byBwcmV2ZW50IGEgY3Jhc2ggaW4gbV9jb250cm9sc1NoYWRv
d1Jvb3QtPmRldGFjaCgpIAorICAgICAgICAvLyAgd2hlbiBkaXNwbGF5OiBzdHlsZSBjaGFuZ2Vz
CisgICAgICAgIG1fcGFuZWwtPmRldGFjaCgpOworCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5y
ZW5kZXJlcigpLT5yZW1vdmVDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7
CisgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKKyAgICAgICAgbV9jb250
cm9sc1NoYWRvd1Jvb3QgPSAwOworICAgIH0KK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRh
dGUoKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Cisg
ICAgaWYgKCFtZWRpYS0+Y29udHJvbHMoKSB8fCAhbWVkaWEtPmluQWN0aXZlRG9jdW1lbnQoKSkg
eworICAgICAgICBpZiAobV9jb250cm9sc1NoYWRvd1Jvb3QpIHsKKyAgICAgICAgICAgIG1fY29u
dHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKKyAgICAgICAgICAgIG1fcGFuZWwgPSAwOworICAg
ICAgICAgICAgbV9tdXRlQnV0dG9uID0gMDsKKyAgICAgICAgICAgIG1fcGxheUJ1dHRvbiA9IDA7
CisgICAgICAgICAgICBtX3N0YXR1c0Rpc3BsYXkgPSAwOworICAgICAgICAgICAgbV90aW1lbGlu
ZUNvbnRhaW5lciA9IDA7CisgICAgICAgICAgICBtX3RpbWVsaW5lID0gMDsKKyAgICAgICAgICAg
IG1fc2Vla0JhY2tCdXR0b24gPSAwOworICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9
IDA7CisgICAgICAgICAgICBtX3Jld2luZEJ1dHRvbiA9IDA7CisgICAgICAgICAgICBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b24gPSAwOworICAgICAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXkg
PSAwOworICAgICAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheSA9IDA7CisgICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5CdXR0b24gPSAwOworICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJDb250
YWluZXIgPSAwOworICAgICAgICAgICAgbV92b2x1bWVTbGlkZXIgPSAwOworICAgICAgICAgICAg
bV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gMDsKKyAgICAgICAgICAgIG1fY29udHJvbHNTaGFk
b3dSb290ID0gMDsKKyAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSAw
OworICAgICAgICB9CisgICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRvID0gMS4wZjsKKyAgICAg
ICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgICAgICBtX3RpbWVVcGRhdGVU
aW1lci5zdG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY29udHJv
bHNTaGFkb3dSb290KSB7CisgICAgICAgIGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAg
ICAgICBjcmVhdGVQYW5lbCgpOworICAgICAgICBpZiAobV9wYW5lbCkgeworICAgICAgICAgICAg
Y3JlYXRlUmV3aW5kQnV0dG9uKCk7CisgICAgICAgICAgICBjcmVhdGVQbGF5QnV0dG9uKCk7Cisg
ICAgICAgICAgICBjcmVhdGVSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKCk7CisgICAgICAgICAgICBj
cmVhdGVTdGF0dXNEaXNwbGF5KCk7CisgICAgICAgICAgICBjcmVhdGVUaW1lbGluZUNvbnRhaW5l
cigpOworICAgICAgICAgICAgaWYgKG1fdGltZWxpbmVDb250YWluZXIpIHsKKyAgICAgICAgICAg
ICAgICBjcmVhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVU
aW1lbGluZSgpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjcmVhdGVTZWVrQmFja0J1dHRvbigpOworICAg
ICAgICAgICAgY3JlYXRlU2Vla0ZvcndhcmRCdXR0b24oKTsKKyAgICAgICAgICAgIGNyZWF0ZVRv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCk7CisgICAgICAgICAgICBjcmVhdGVGdWxsc2NyZWVu
QnV0dG9uKCk7CisgICAgICAgICAgICBjcmVhdGVNdXRlQnV0dG9uKCk7CisgICAgICAgICAgICBj
cmVhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoKTsKKyAgICAgICAgICAgIGlmIChtX3ZvbHVtZVNs
aWRlckNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlcigpOwor
ICAgICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fcGFuZWwtPmF0dGFjaCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1lZGlhLT5jYW5QbGF5KCkpIHsKKyAgICAgICAgaWYgKG1fdGltZVVwZGF0ZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Cisg
ICAgfSBlbHNlIGlmIChtZWRpYS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IFZJU0lCTEUgJiYgbV90aW1lbGluZSAmJiBtX3RpbWVsaW5lLT5yZW5kZXJlcigpICYmIG1fdGlt
ZWxpbmUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FKSB7CisgICAgICAg
IG1fdGltZVVwZGF0ZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkp
OworICAgIH0KKworICAgIGlmIChtX3BhbmVsKSB7CisgICAgICAgIC8vIHVwZGF0ZSgpIG1pZ2h0
IGFsdGVyIHRoZSBvcGFjaXR5IG9mIHRoZSBlbGVtZW50LCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBp
biB0aGUgbWlkZGxlCisgICAgICAgIC8vIG9mIGFuIGFuaW1hdGlvbi4gVGhpcyBpcyB0aGUgb25s
eSBlbGVtZW50IGNvbmNlcm5lZCBhcyB3ZSBhbmltYXRlIG9ubHkgdGhpcyBlbGVtZW50LgorICAg
ICAgICBmbG9hdCBvcGFjaXR5QmVmb3JlQ2hhbmdpbmdTdHlsZSA9IG1fcGFuZWwtPnJlbmRlcmVy
KCkgPyBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5KCkgOiAwOworICAgICAg
ICBtX3BhbmVsLT51cGRhdGUoKTsKKyAgICAgICAgY2hhbmdlT3BhY2l0eShtX3BhbmVsLmdldCgp
LCBvcGFjaXR5QmVmb3JlQ2hhbmdpbmdTdHlsZSk7CisgICAgfQorICAgIGlmIChtX211dGVCdXR0
b24pCisgICAgICAgIG1fbXV0ZUJ1dHRvbi0+dXBkYXRlKCk7CisgICAgaWYgKG1fcGxheUJ1dHRv
bikKKyAgICAgICAgbV9wbGF5QnV0dG9uLT51cGRhdGUoKTsKKyAgICBpZiAobV90aW1lbGluZUNv
bnRhaW5lcikKKyAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlKCk7CisgICAgaWYg
KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQorICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ci0+dXBkYXRlKCk7CisgICAgaWYgKG1fdGltZWxpbmUpCisgICAgICAgIG1fdGltZWxpbmUtPnVw
ZGF0ZSgpOworICAgIGlmIChtX2N1cnJlbnRUaW1lRGlzcGxheSkKKyAgICAgICAgbV9jdXJyZW50
VGltZURpc3BsYXktPnVwZGF0ZSgpOworICAgIGlmIChtX3RpbWVSZW1haW5pbmdEaXNwbGF5KQor
ICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT51cGRhdGUoKTsKKyAgICBpZiAobV9zZWVr
QmFja0J1dHRvbikKKyAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlKCk7CisgICAgaWYg
KG1fc2Vla0ZvcndhcmRCdXR0b24pCisgICAgICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPnVwZGF0
ZSgpOworICAgIGlmIChtX3Jld2luZEJ1dHRvbikKKyAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVw
ZGF0ZSgpOworICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0b24pCisgICAgICAgIG1fcmV0
dXJuVG9SZWFsdGltZUJ1dHRvbi0+dXBkYXRlKCk7CisgICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24pCisgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0
ZSgpOworICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCisgICAgICAgIG1fc3RhdHVzRGlzcGxheS0+
dXBkYXRlKCk7CisgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbikKKyAgICAgICAgbV9mdWxsc2Ny
ZWVuQnV0dG9uLT51cGRhdGUoKTsKKyAgICBpZiAobV92b2x1bWVTbGlkZXIpCisgICAgICAgIG1f
dm9sdW1lU2xpZGVyLT51cGRhdGUoKTsKKyAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9u
KQorICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPnVwZGF0ZSgpOworCisgICAgdXBk
YXRlVGltZURpc3BsYXkoKTsKKyAgICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOworfQorCit2
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpCit7CisgICAgQVNT
RVJUKCFtX2NvbnRyb2xzU2hhZG93Um9vdCk7CisgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSBN
ZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAg
ICBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQobV9jb250cm9sc1NoYWRvd1Jv
b3QtPnJlbmRlcmVyKCkpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBhbmVsKCkK
K3sKKyAgICBBU1NFUlQoIW1fcGFuZWwpOworICAgIG1fcGFuZWwgPSBNZWRpYUNvbnRyb2xFbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQsIE1FRElBX0NPTlRST0xTX1BBTkVMKTsKKyAgICBt
X3BhbmVsLT5hdHRhY2hUb1BhcmVudChtX2NvbnRyb2xzU2hhZG93Um9vdC5nZXQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlTXV0ZUJ1dHRvbigpCit7CisgICAgQVNTRVJUKCFt
X211dGVCdXR0b24pOworICAgIG1fbXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbE11dGVCdXR0b25F
bGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50OjpDb250cm9sbGVyKTsKKyAgICBtX211dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFu
ZWwuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBsYXlCdXR0b24oKQor
eworICAgIEFTU0VSVCghbV9wbGF5QnV0dG9uKTsKKyAgICBtX3BsYXlCdXR0b24gPSBNZWRpYUNv
bnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAgICBtX3Bs
YXlCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworfQorCit2b2lkIE1lZGlh
Q29udHJvbHM6OmNyZWF0ZVNlZWtCYWNrQnV0dG9uKCkKK3sKKyAgICBBU1NFUlQoIW1fc2Vla0Jh
Y2tCdXR0b24pOworICAgIG1fc2Vla0JhY2tCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVrQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50LCBNRURJQV9DT05UUk9MU19TRUVLX0JBQ0tf
QlVUVE9OKTsKKyAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdl
dCgpKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVTZWVrRm9yd2FyZEJ1dHRvbigp
Cit7CisgICAgQVNTRVJUKCFtX3NlZWtGb3J3YXJkQnV0dG9uKTsKKyAgICBtX3NlZWtGb3J3YXJk
QnV0dG9uID0gTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxl
bWVudCwgTUVESUFfQ09OVFJPTFNfU0VFS19GT1JXQVJEX0JVVFRPTik7CisgICAgbV9zZWVrRm9y
d2FyZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sczo6Y3JlYXRlUmV3aW5kQnV0dG9uKCkKK3sKKyAgICBBU1NFUlQoIW1fcmV3aW5k
QnV0dG9uKTsKKyAgICBtX3Jld2luZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7CisgICAgbV9yZXdpbmRCdXR0b24tPmF0dGFj
aFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0
ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKQoreworICAgIEFTU0VSVCghbV9yZXR1cm5Ub1JlYWx0
aW1lQnV0dG9uKTsKKyAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSBNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAg
ICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkp
OworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKCkKK3sKKyAgICBBU1NFUlQoIW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOworICAg
IG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7CisgICAgbV90b2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Cit9
CisKK3ZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlU3RhdHVzRGlzcGxheSgpCit7CisgICAgQVNT
RVJUKCFtX3N0YXR1c0Rpc3BsYXkpOworICAgIG1fc3RhdHVzRGlzcGxheSA9IE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOworICAgIG1fc3Rh
dHVzRGlzcGxheS0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sczo6Y3JlYXRlVGltZWxpbmVDb250YWluZXIoKQoreworICAgIEFTU0VSVCghbV90
aW1lbGluZUNvbnRhaW5lcik7CisgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAgICBt
X3RpbWVsaW5lQ29udGFpbmVyLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKK30KKwor
dm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lbGluZSgpCit7CisgICAgQVNTRVJUKCFtX3Rp
bWVsaW5lKTsKKyAgICBtX3RpbWVsaW5lID0gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojpj
cmVhdGUobV9tZWRpYUVsZW1lbnQpOworICAgIG1fdGltZWxpbmUtPnNldEF0dHJpYnV0ZShwcmVj
aXNpb25BdHRyLCAiZmxvYXQiKTsKKyAgICBtX3RpbWVsaW5lLT5hdHRhY2hUb1BhcmVudChtX3Rp
bWVsaW5lQ29udGFpbmVyLmdldCgpKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVW
b2x1bWVTbGlkZXJDb250YWluZXIoKQoreworICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXJDb250
YWluZXIpOworICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyID0gTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAgICBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVm9sdW1lU2xpZGVyKCkKK3sKKyAgICBBU1NFUlQo
IW1fdm9sdW1lU2xpZGVyKTsKKyAgICBtX3ZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7CisgICAgbV92b2x1bWVTbGlk
ZXItPnNldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKKyAgICBtX3ZvbHVtZVNs
aWRlci0+c2V0QXR0cmlidXRlKG1heEF0dHIsICIxIik7CisgICAgbV92b2x1bWVTbGlkZXItPnNl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIFN0cmluZzo6bnVtYmVyKG1fbWVkaWFFbGVtZW50LT52b2x1
bWUoKSkpOworICAgIG1fdm9sdW1lU2xpZGVyLT5hdHRhY2hUb1BhcmVudChtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbigpCit7CisgICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlck11dGVCdXR0
b24pOworICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbE11dGVCdXR0b25F
bGVtZW50OjpWb2x1bWVTbGlkZXIpOworICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+YXR0
YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOworfQorCit2b2lkIE1l
ZGlhQ29udHJvbHM6OmNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpCit7CisgICAgQVNTRVJUKCFt
X2N1cnJlbnRUaW1lRGlzcGxheSk7CisgICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSBNZWRpYUNv
bnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCwgTUVESUFfQ09O
VFJPTFNfQ1VSUkVOVF9USU1FX0RJU1BMQVkpOworICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5h
dHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKK30KKwordm9pZCBNZWRp
YUNvbnRyb2xzOjpjcmVhdGVUaW1lUmVtYWluaW5nRGlzcGxheSgpCit7CisgICAgQVNTRVJUKCFt
X3RpbWVSZW1haW5pbmdEaXNwbGF5KTsKKyAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVk
aWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQsIE1FRElB
X0NPTlRST0xTX1RJTUVfUkVNQUlOSU5HX0RJU1BMQVkpOworICAgIG1fdGltZVJlbWFpbmluZ0Rp
c3BsYXktPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworfQorCit2
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUZ1bGxzY3JlZW5CdXR0b24oKQoreworICAgIEFTU0VS
VCghbV9mdWxsc2NyZWVuQnV0dG9uKTsKKyAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKKyAg
ICBtX2Z1bGxzY3JlZW5CdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworfQor
Cit2b2lkIE1lZGlhQ29udHJvbHM6OnRpbWVVcGRhdGVUaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29u
dHJvbHM+KikKK3sKKyAgICBpZiAobV90aW1lbGluZSkKKyAgICAgICAgbV90aW1lbGluZS0+dXBk
YXRlKGZhbHNlKTsKKyAgICB1cGRhdGVUaW1lRGlzcGxheSgpOworfQorCit2b2lkIE1lZGlhQ29u
dHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5KCkKK3sKKyAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQt
PnJlbmRlcmVyKCkpOworCisgICAgaWYgKCFtX2N1cnJlbnRUaW1lRGlzcGxheSB8fCAhbV9jdXJy
ZW50VGltZURpc3BsYXktPnJlbmRlcmVyKCkgfHwgbV9jdXJyZW50VGltZURpc3BsYXktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05FIHx8IG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZmxvYXQgbm93ID0gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCk7CisgICAg
ZmxvYXQgZHVyYXRpb24gPSBtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKKworICAgIC8vIEFs
bG93IHRoZSB0aGVtZSB0byBmb3JtYXQgdGhlIHRpbWUKKyAgICBFeGNlcHRpb25Db2RlIGVjOwor
ICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQobV9tZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShub3csIGR1
cmF0aW9uKSwgZWMpOworICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUo
bm93KTsKKyAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRJbm5lclRleHQobV9tZWRpYUVs
ZW1lbnQtPnJlbmRlcmVyKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdU
aW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0
Q3VycmVudFZhbHVlKG5vdyAtIGR1cmF0aW9uKTsKK30KKworUmVuZGVyQm94KiBNZWRpYUNvbnRy
b2xzOjpyZW5kZXJCb3goKQoreworICAgIHJldHVybiBtX2NvbnRyb2xzU2hhZG93Um9vdCA/IG1f
Y29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7Cit9CisKK3ZvaWQgTWVkaWFDb250
cm9sczo6dXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKQoreworICAgIGlmICghbV9wYW5lbCB8fCAh
bV9wYW5lbC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgZmFk
ZSBmb3IgYXVkaW8gY29udHJvbHMuCisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBtX21l
ZGlhRWxlbWVudDsKKyAgICBpZiAoIW1lZGlhLT5oYXNWaWRlbygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobWVkaWEtPnJlbmRlcmVyKCkpOworCisgICAgLy8gRG9uJ3QgZmFkZSBp
ZiB0aGUgbWVkaWEgZWxlbWVudCBpcyBub3QgdmlzaWJsZQorICAgIGlmIChtZWRpYS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBib29sIHNob3VsZEhpZGVDb250cm9sbGVyID0gIW1fbW91c2VPdmVyICYmICFt
ZWRpYS0+Y2FuUGxheSgpOworCisgICAgLy8gRG8gZmFkaW5nIG1hbnVhbGx5LCBjc3MgYW5pbWF0
aW9ucyBkb24ndCB3b3JrIHdpdGggc2hhZG93IHRyZWVzCisKKyAgICBmbG9hdCBhbmltYXRlRnJv
bSA9IG1fcGFuZWwtPnJlbmRlcmVyKCktPnN0eWxlKCktPm9wYWNpdHkoKTsKKyAgICBmbG9hdCBh
bmltYXRlVG8gPSBzaG91bGRIaWRlQ29udHJvbGxlciA/IDAuMGYgOiAxLjBmOworCisgICAgaWYg
KGFuaW1hdGVGcm9tID09IGFuaW1hdGVUbykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
b3BhY2l0eUFuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKG1fb3BhY2l0
eUFuaW1hdGlvblRvID09IGFuaW1hdGVUbykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgIH0KKworICAgIGlmIChhbmltYXRl
RnJvbSA8IGFuaW1hdGVUbykKKyAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24gPSBt
X3BhbmVsLT5yZW5kZXJlcigpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24o
KTsKKyAgICBlbHNlCisgICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uID0gbV9wYW5l
bC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwor
CisgICAgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSA9IGFuaW1hdGVGcm9tOworICAgIG1fb3BhY2l0
eUFuaW1hdGlvblRvID0gYW5pbWF0ZVRvOworCisgICAgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRU
aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdGFydFJl
cGVhdGluZyhjT3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5KTsKK30KKwordm9pZCBNZWRpYUNv
bnRyb2xzOjpjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50KiBlLCBmbG9hdCBvcGFjaXR5KQorewor
ICAgIGlmICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcyA9IFJlbmRlclN0eWxl
OjpjbG9uZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKKyAgICBzLT5zZXRPcGFjaXR5KG9wYWNp
dHkpOworICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBvcGFjaXR5IGlzIHVzZWQKKyAg
ICBzLT5zZXRaSW5kZXgoMCk7CisgICAgZS0+cmVuZGVyZXIoKS0+c2V0U3R5bGUocy5yZWxlYXNl
KCkpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVk
KFRpbWVyPE1lZGlhQ29udHJvbHM+KikKK3sKKyAgICBkb3VibGUgdGltZSA9IGN1cnJlbnRUaW1l
KCkgLSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7CisgICAgaWYgKHRpbWUgPj0gbV9vcGFj
aXR5QW5pbWF0aW9uRHVyYXRpb24pIHsKKyAgICAgICAgdGltZSA9IG1fb3BhY2l0eUFuaW1hdGlv
bkR1cmF0aW9uOworICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAg
fQorICAgIGZsb2F0IG9wYWNpdHkgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fb3BhY2l0eUFu
aW1hdGlvbkZyb20gKyAobV9vcGFjaXR5QW5pbWF0aW9uVG8gLSBtX29wYWNpdHlBbmltYXRpb25G
cm9tKSAqIHRpbWUgLyBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbik7CisgICAgY2hhbmdlT3Bh
Y2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5KTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xzOjp1
cGRhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoYm9vbCB2aXNpYmxlKQoreworICAgIGlmICghbV9t
ZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyIHx8ICFt
X3ZvbHVtZVNsaWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZpc2libGUgJiYgIW1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyLT5pc1Zpc2libGUoKSkgeworICAgICAgICBpZiAoIW1fbXV0
ZUJ1dHRvbiB8fCAhbV9tdXRlQnV0dG9uLT5yZW5kZXJlcigpIHx8ICFtX211dGVCdXR0b24tPnJl
bmRlckJveCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gcyA9IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zdHlsZUZvckVsZW1lbnQoKTsKKyAg
ICAgICAgaW50IGhlaWdodCA9IHMtPmhlaWdodCgpLmlzUGVyY2VudCgpID8gMCA6IHMtPmhlaWdo
dCgpLnZhbHVlKCk7CisgICAgICAgIGludCB3aWR0aCA9IHMtPndpZHRoKCkuaXNQZXJjZW50KCkg
PyAwIDogcy0+d2lkdGgoKS52YWx1ZSgpOworICAgICAgICBJbnRQb2ludCBvZmZzZXQgPSBtX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT52b2x1bWVTbGlkZXJPZmZz
ZXRGcm9tTXV0ZUJ1dHRvbihtX211dGVCdXR0b24tPnJlbmRlcmVyKCktPm5vZGUoKSwgSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGludCB4ID0gb2Zmc2V0LngoKSArIG1fbXV0ZUJ1
dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldExlZnQoKTsKKyAgICAgICAgaW50IHkgPSBvZmZzZXQu
eSgpICsgbV9tdXRlQnV0dG9uLT5yZW5kZXJCb3goKS0+b2Zmc2V0VG9wKCk7CisKKyAgICAgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFBvc2l0aW9uKHgsIHkpOworICAgICAgICBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+c2V0VmlzaWJsZSh0cnVlKTsKKyAgICAgICAgbV92b2x1bWVT
bGlkZXJDb250YWluZXItPnVwZGF0ZSgpOworICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRl
KCk7CisgICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+
aXNWaXNpYmxlKCkpIHsKKyAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFZpc2li
bGUoZmFsc2UpOworICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUo
KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sczo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBl
dmVudCkKK3sKKyAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOworCisgICAg
aWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBtX2NvbnRyb2xzU2hhZG93Um9vdCkgeworICAg
ICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KTsKKyAgICAgICAgSW50UG9pbnQgcG9pbnQobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlv
bigpKTsKKworICAgICAgICBib29sIGRlZmF1bHRIYW5kbGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24gJiYgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT5o
aXRUZXN0KHBvaW50KSkgeworICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT5k
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVkID0g
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3dW
b2x1bWVTbGlkZXIgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWZhdWx0SGFuZGxlZCAmJiBtX211
dGVCdXR0b24gJiYgbV9tdXRlQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkgeworICAgICAgICAgICAg
bV9tdXRlQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgICAgIGlm
IChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICAg
ICAgICAgIHNob3dWb2x1bWVTbGlkZXIgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyICYmIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5oaXRU
ZXN0KHBvaW50KSkKKyAgICAgICAgICAgIHNob3dWb2x1bWVTbGlkZXIgPSB0cnVlOworCisgICAg
ICAgIGlmIChtX3ZvbHVtZVNsaWRlciAmJiBtX3ZvbHVtZVNsaWRlci0+aGl0VGVzdChwb2ludCkp
IHsKKyAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKKyAgICAgICAgICAgIHNob3dWb2x1bWVTbGlkZXIgPSB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgdXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKHNob3dWb2x1bWVTbGlkZXIpOworCisg
ICAgICAgIGlmIChtX3BsYXlCdXR0b24gJiYgbV9wbGF5QnV0dG9uLT5oaXRUZXN0KHBvaW50KSkK
KyAgICAgICAgICAgIG1fcGxheUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisK
KyAgICAgICAgaWYgKG1fc2Vla0JhY2tCdXR0b24gJiYgbV9zZWVrQmFja0J1dHRvbi0+aGl0VGVz
dChwb2ludCkpCisgICAgICAgICAgICBtX3NlZWtCYWNrQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKKworICAgICAgICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbiAmJiBtX3NlZWtG
b3J3YXJkQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKKyAgICAgICAgICAgIG1fc2Vla0ZvcndhcmRC
dXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworCisgICAgICAgIGlmIChtX3Jld2lu
ZEJ1dHRvbiAmJiBtX3Jld2luZEJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCisgICAgICAgICAgICBt
X3Jld2luZEJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisKKyAgICAgICAgaWYg
KG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiAmJiBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmhp
dFRlc3QocG9pbnQpKQorICAgICAgICAgICAgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT5kZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKworICAgICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uICYmIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpdFRlc3QocG9pbnQp
KQorICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7CisKKyAgICAgICAgaWYgKG1fdGltZWxpbmUgJiYgbV90aW1lbGluZS0+
aGl0VGVzdChwb2ludCkpCisgICAgICAgICAgICBtX3RpbWVsaW5lLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKKworICAgICAgICBpZiAobV9mdWxsc2NyZWVuQnV0dG9uICYmIG1fZnVsbHNj
cmVlbkJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCisgICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0
b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworCisgICAgICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICAgICAgbV9tb3Vz
ZU92ZXIgPSB0cnVlOworICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dXRFdmVudCkgeworICAgICAgICAgICAgLy8gV2hlbiB0aGUgc2Nyb2xsYmFyIHRodW1iIGNhcHR1
cmVzIG1vdXNlIGV2ZW50cywgd2Ugc2hvdWxkIHRyZWF0IHRoZSBtb3VzZSBhcyBzdGlsbCBiZWlu
ZyBvdmVyIG91ciByZW5kZXJlciBpZiB0aGUgbmV3IHRhcmdldCBpcyBhIGRlc2NlbmRhbnQKKyAg
ICAgICAgICAgIE5vZGUqIG1vdXNlT3Zlck5vZGUgPSBtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0
KCkgPyBtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpIDogMDsKKyAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogbW91c2VPdmVyUmVuZGVyZXIgPSBtb3VzZU92ZXJOb2RlID8gbW91
c2VPdmVyTm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgICAgICBtX21vdXNlT3ZlciA9IG1v
dXNlT3ZlclJlbmRlcmVyICYmIG1vdXNlT3ZlclJlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZihtX21l
ZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICB1cGRhdGVDb250cm9sVmlzaWJp
bGl0eSgpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBXZSB3YW50IHRoZSB0aW1lbGluZSBz
bGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgorc3RhdGljIGNvbnN0IGludCBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDE2ICsgMTYgKyA0NSArIDEwMCArIDQ1ICsg
MTYgKyAxOworCit2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5VmlzaWJpbGl0
eSgpCit7CisgICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKKworICAgIGlm
ICghbV9jdXJyZW50VGltZURpc3BsYXkgJiYgIW1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCB3aWR0aCA9IG1fbWVkaWFFbGVtZW50LT5yZW5kZXJCb3go
KS0+d2lkdGgoKTsKKyAgICBib29sIHNob3VsZFNob3dUaW1lRGlzcGxheXMgPSB3aWR0aCA+PSBt
aW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyAqIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+
c2V0VmlzaWJsZShzaG91bGRTaG93VGltZURpc3BsYXlzKTsKKyAgICBtX3RpbWVSZW1haW5pbmdE
aXNwbGF5LT5zZXRWaXNpYmxlKHNob3VsZFNob3dUaW1lRGlzcGxheXMpOworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
cy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE0YjlmODE1YTY1Y2YzODY0ZDdmMjFiYTcxZDc3NjE4MWViNmFkOWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTAs
MCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYUNvbnRy
b2xzX2gKKyNkZWZpbmUgTWVkaWFDb250cm9sc19oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7Citj
bGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgRXZlbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Owor
Y2xhc3MgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xS
ZXdpbmRCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ7CitjbGFzcyBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVl
bkJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7Citj
bGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50OworY2xhc3MgTWVk
aWFQbGF5ZXI7CisKK2NsYXNzIFJlbmRlckJveDsKK2NsYXNzIFJlbmRlck1lZGlhOworCitjbGFz
cyBNZWRpYUNvbnRyb2xzIHsKK3B1YmxpYzoKKyAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKworICAgIHZvaWQgZGVzdHJveSgpOworICAgIHZvaWQgdXBkYXRlKCk7CisgICAg
dm9pZCB1cGRhdGVTdHlsZSgpOworICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CisgICAg
dm9pZCB1cGRhdGVUaW1lRGlzcGxheSgpOworICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXlWaXNp
YmlsaXR5KCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgUmVu
ZGVyTWVkaWE6OmxheW91dCB0d2VhayB0aGUgcG9zaXRpb24gb2YgY29udHJvbHMuCisgICAgLy8g
T25jZSBzaGFkb3cgRE9NIHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLCB0aGUgdHdlYWtpbmcgd2ls
bCBiZSBpbiBNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCBhbmQgdGhpcyBhY2Nlc3NvciB3aWxsIG5v
IGxvbmdlciBiZSBuZWNlc3NhcnkuCisgICAgUmVuZGVyQm94KiByZW5kZXJCb3goKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAgIHZvaWQgZGVz
dHJveUNvbnRyb2xzU2hhZG93Um9vdCgpOworICAgIHZvaWQgY3JlYXRlUGFuZWwoKTsKKyAgICB2
b2lkIGNyZWF0ZU11dGVCdXR0b24oKTsKKyAgICB2b2lkIGNyZWF0ZVBsYXlCdXR0b24oKTsKKyAg
ICB2b2lkIGNyZWF0ZVNlZWtCYWNrQnV0dG9uKCk7CisgICAgdm9pZCBjcmVhdGVTZWVrRm9yd2Fy
ZEJ1dHRvbigpOworICAgIHZvaWQgY3JlYXRlUmV3aW5kQnV0dG9uKCk7CisgICAgdm9pZCBjcmVh
dGVSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKCk7CisgICAgdm9pZCBjcmVhdGVUb2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbigpOworICAgIHZvaWQgY3JlYXRlU3RhdHVzRGlzcGxheSgpOworICAgIHZv
aWQgY3JlYXRlVGltZWxpbmVDb250YWluZXIoKTsKKyAgICB2b2lkIGNyZWF0ZVRpbWVsaW5lKCk7
CisgICAgdm9pZCBjcmVhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoKTsKKyAgICB2b2lkIGNyZWF0
ZVZvbHVtZVNsaWRlcigpOworICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbigp
OworICAgIHZvaWQgY3JlYXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7CisgICAgdm9pZCBjcmVhdGVU
aW1lUmVtYWluaW5nRGlzcGxheSgpOworICAgIHZvaWQgY3JlYXRlRnVsbHNjcmVlbkJ1dHRvbigp
OworCisgICAgdm9pZCB0aW1lVXBkYXRlVGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xzPiop
OworCisgICAgdm9pZCB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOworICAgIHZvaWQgY2hhbmdl
T3BhY2l0eShIVE1MRWxlbWVudCosIGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQgb3BhY2l0eUFu
aW1hdGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFDb250cm9scz4qKTsKKworICAgIHZvaWQgdXBk
YXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKGJvb2wgdmlzaWJsZSk7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEhUTUxFbGVtZW50PiBtX2NvbnRyb2xzU2hhZG93Um9vdDsKKyAgICBSZWZQdHI8TWVk
aWFDb250cm9sRWxlbWVudD4gbV9wYW5lbDsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQ+IG1fbXV0ZUJ1dHRvbjsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ+IG1fcGxheUJ1dHRvbjsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sU2Vla0J1
dHRvbkVsZW1lbnQ+IG1fc2Vla0JhY2tCdXR0b247CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFNl
ZWtCdXR0b25FbGVtZW50PiBtX3NlZWtGb3J3YXJkQnV0dG9uOworICAgIFJlZlB0cjxNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiBtX3Jld2luZEJ1dHRvbjsKKyAgICBSZWZQdHI8TWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IG1fcmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbjsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b25FbGVtZW50PiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uOworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IG1fdGltZWxpbmU7CisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyOworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uOworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gbV9mdWxsc2NyZWVu
QnV0dG9uOworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+
IG1fdGltZWxpbmVDb250YWluZXI7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyOworICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ+IG1fY3VycmVudFRpbWVEaXNwbGF5OworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ+IG1fdGltZVJlbWFpbmluZ0Rp
c3BsYXk7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBtX3N0
YXR1c0Rpc3BsYXk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsKKyAg
ICBUaW1lcjxNZWRpYUNvbnRyb2xzPiBtX3RpbWVVcGRhdGVUaW1lcjsKKyAgICBUaW1lcjxNZWRp
YUNvbnRyb2xzPiBtX29wYWNpdHlBbmltYXRpb25UaW1lcjsKKworICAgIGRvdWJsZSBtX29wYWNp
dHlBbmltYXRpb25TdGFydFRpbWU7CisgICAgZG91YmxlIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0
aW9uOworICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvbkZyb207CisgICAgZmxvYXQgbV9vcGFj
aXR5QW5pbWF0aW9uVG87CisKKyAgICBib29sIG1fbW91c2VPdmVyOworfTsKKworCit9CisKKyNl
bmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcAppbmRleCAxMTNjYTNiOTY2YjU4MTQ1ODdhOTJhOWQ5NzlmOTQ4YzVjZTFi
NDUzLi4yZjllYTMwMWI2OTNmNWFkNDRiMjdiODM2MWE3NWM5NGNiMWVmZTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJNZWRpYS5oIgpAQCAtNzQwLDcgKzc0MSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIAogICAgIFJlbmRl
clNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSk7CiAgICAgaWYgKHNs
aWRlciAmJiBzbGlkZXItPmluRHJhZ01vZGUoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShtZWRp
YUVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgICAgIHRv
UmVuZGVyTWVkaWEobWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpLT5jb250cm9scygpLT51cGRh
dGVUaW1lRGlzcGxheSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCkKICAgICAgICAgbWVkaWFFbGVtZW50KCktPmVuZFNjcnViYmluZygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKaW5kZXggN2RhNzJkYmE5Mzc5
MjAyMmVjNDBiZTYyNDAyYzYwMzM0MTk4YmU4MS4uMTZjZDg3NGQ5MmJjN2E4ZDg0Mjc4MzFhNzAz
NGRiYTYxYzIzODYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lZGlhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3Bw
CkBAIC0yOCw0OCArMjgsMjIgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiUmVuZGVy
TWVkaWEuaCIKIAotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOworI2luY2x1
ZGUgIk1lZGlhQ29udHJvbHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0
RGVsYXkgPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0
RGVsYXkgPSAwLjA1OwotCiBSZW5kZXJNZWRpYTo6UmVuZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVu
dCogdmlkZW8pCiAgICAgOiBSZW5kZXJJbWFnZSh2aWRlbykKLSAgICAsIG1fdGltZVVwZGF0ZVRp
bWVyKHRoaXMsICZSZW5kZXJNZWRpYTo6dGltZVVwZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX29w
YWNpdHlBbmltYXRpb25UaW1lcih0aGlzLCAmUmVuZGVyTWVkaWE6Om9wYWNpdHlBbmltYXRpb25U
aW1lckZpcmVkKQotICAgICwgbV9tb3VzZU92ZXIoZmFsc2UpCi0gICAgLCBtX29wYWNpdHlBbmlt
YXRpb25TdGFydFRpbWUoMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKDApCi0g
ICAgLCBtX29wYWNpdHlBbmltYXRpb25Gcm9tKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25U
bygxLjBmKQorICAgICwgbV9jb250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAg
ICAgc2V0SW1hZ2VSZXNvdXJjZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiB9CiAK
IFJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbywgY29uc3Qg
SW50U2l6ZSYgaW50cmluc2ljU2l6ZSkKICAgICA6IFJlbmRlckltYWdlKHZpZGVvKQotICAgICwg
bV90aW1lVXBkYXRlVGltZXIodGhpcywgJlJlbmRlck1lZGlhOjp0aW1lVXBkYXRlVGltZXJGaXJl
ZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyKHRoaXMsICZSZW5kZXJNZWRpYTo6b3Bh
Y2l0eUFuaW1hdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX21vdXNlT3ZlcihmYWxzZSkKLSAgICAs
IG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9vcGFjaXR5QW5pbWF0aW9u
RHVyYXRpb24oMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20oMCkKLSAgICAsIG1fb3Bh
Y2l0eUFuaW1hdGlvblRvKDEuMGYpCisgICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xz
KHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNy
ZWF0ZSgpKTsKICAgICBzZXRJbnRyaW5zaWNTaXplKGludHJpbnNpY1NpemUpOwpAQCAtODEsMTYg
KzU1LDcgQEAgUmVuZGVyTWVkaWE6On5SZW5kZXJNZWRpYSgpCiAKIHZvaWQgUmVuZGVyTWVkaWE6
OmRlc3Ryb3koKQogewotICAgIGlmIChtX2NvbnRyb2xzU2hhZG93Um9vdCAmJiBtX2NvbnRyb2xz
U2hhZG93Um9vdC0+cmVuZGVyZXIoKSkgewotCi0gICAgICAgIC8vIGRldGFjaCB0aGUgcGFuZWwg
YmVmb3JlIHJlbW92aW5nIHRoZSBzaGFkb3cgcmVuZGVyZXIgdG8gcHJldmVudCBhIGNyYXNoIGlu
IG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKSAKLSAgICAgICAgLy8gIHdoZW4gZGlzcGxh
eTogc3R5bGUgY2hhbmdlcwotICAgICAgICBtX3BhbmVsLT5kZXRhY2goKTsKLQotICAgICAgICBy
ZW1vdmVDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1f
Y29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jv
b3QgPSAwOwotICAgIH0KKyAgICBtX2NvbnRyb2xzLT5kZXN0cm95KCk7CiAgICAgUmVuZGVySW1h
Z2U6OmRlc3Ryb3koKTsKIH0KIApAQCAtOTksNTEgKzY0LDEwIEBAIEhUTUxNZWRpYUVsZW1lbnQq
IFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MTWVkaWFFbGVtZW50Kj4obm9kZSgpKTsgCiB9CiAKLU1lZGlhUGxheWVyKiBSZW5kZXJN
ZWRpYTo6cGxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVkaWFFbGVtZW50KCktPnBsYXll
cigpOwotfQotCiB2b2lkIFJlbmRlck1lZGlhOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJlbmRlckltYWdl
OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0KLSAgICBpZiAobV9jb250cm9sc1No
YWRvd1Jvb3QpIHsKLSAgICAgICAgaWYgKG1fcGFuZWwpCi0gICAgICAgICAgICBtX3BhbmVsLT51
cGRhdGVTdHlsZSgpOwotICAgICAgICBpZiAobV9tdXRlQnV0dG9uKQotICAgICAgICAgICAgbV9t
dXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgICAgICBpZiAobV9wbGF5QnV0dG9uKQotICAg
ICAgICAgICAgbV9wbGF5QnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgICAgICBpZiAobV9zZWVr
QmFja0J1dHRvbikKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAgICAgICAgbV9zZWVrRm9y
d2FyZEJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICAgICAgaWYgKG1fcmV3aW5kQnV0dG9uKQot
ICAgICAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgICAgIGlmICht
X3JldHVyblRvUmVhbHRpbWVCdXR0b24pCi0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVC
dXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uKQotICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRl
U3R5bGUoKTsKLSAgICAgICAgaWYgKG1fc3RhdHVzRGlzcGxheSkKLSAgICAgICAgICAgIG1fc3Rh
dHVzRGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICAgICAgaWYgKG1fdGltZWxpbmVDb250YWlu
ZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT51cGRhdGVTdHlsZSgpOwotICAg
ICAgICBpZiAobV90aW1lbGluZSkKLSAgICAgICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24pCi0gICAgICAgICAgICBtX2Z1bGxz
Y3JlZW5CdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRUaW1lRGlz
cGxheSkKLSAgICAgICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwot
ICAgICAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKLSAgICAgICAgICAgIG1fdGltZVJl
bWFpbmluZ0Rpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgICAgIGlmIChtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lcikKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGVT
dHlsZSgpOwotICAgICAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQotICAgICAgICAg
ICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgICAgICBpZiAo
bV92b2x1bWVTbGlkZXIpCi0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlU3R5bGUo
KTsKLSAgICB9CisgICAgbV9jb250cm9scy0+dXBkYXRlU3R5bGUoKTsKIH0KIAogdm9pZCBSZW5k
ZXJNZWRpYTo6bGF5b3V0KCkKQEAgLTE1MiwxNyArNzYsMTMgQEAgdm9pZCBSZW5kZXJNZWRpYTo6
bGF5b3V0KCkKIAogICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAotICAgIFJlbmRlckJveCog
Y29udHJvbHNSZW5kZXJlciA9IG1fY29udHJvbHNTaGFkb3dSb290ID8gbV9jb250cm9sc1NoYWRv
d1Jvb3QtPnJlbmRlckJveCgpIDogMDsKKyAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIg
PSBtX2NvbnRyb2xzLT5yZW5kZXJCb3goKTsKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBJbnRTaXplIG5ld1NpemUgPSBjb250ZW50Qm94UmVjdCgpLnNp
emUoKTsKICAgICBpZiAobmV3U2l6ZSAhPSBvbGRTaXplIHx8IGNvbnRyb2xzUmVuZGVyZXItPm5l
ZWRzTGF5b3V0KCkpIHsKIAotICAgICAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkgJiYgbV90
aW1lUmVtYWluaW5nRGlzcGxheSkgewotICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93VGltZURp
c3BsYXlzID0gc2hvdWxkU2hvd1RpbWVEaXNwbGF5Q29udHJvbHMoKTsKLSAgICAgICAgICAgIG1f
Y3VycmVudFRpbWVEaXNwbGF5LT5zZXRWaXNpYmxlKHNob3VsZFNob3dUaW1lRGlzcGxheXMpOwot
ICAgICAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0VmlzaWJsZShzaG91bGRTaG93
VGltZURpc3BsYXlzKTsKLSAgICAgICAgfQorICAgICAgICBtX2NvbnRyb2xzLT51cGRhdGVUaW1l
RGlzcGxheVZpc2liaWxpdHkoKTsKIAogICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXRMb2Nh
dGlvbihib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdU
b3AoKSk7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKQEAgLTE3Myw0NDMgKzkzLDkgQEAgdm9pZCBS
ZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0
ZUNvbnRyb2xzU2hhZG93Um9vdCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRyb2xzU2hhZG93Um9v
dCk7Ci0gICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKLSAgICBhZGRDaGlsZChtX2NvbnRyb2xzU2hh
ZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVBhbmVs
KCkKLXsKLSAgICBBU1NFUlQoIW1fcGFuZWwpOwotICAgIG1fcGFuZWwgPSBNZWRpYUNvbnRyb2xF
bGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCksIE1FRElBX0NPTlRST0xTX1BBTkVMKTsKLSAg
ICBtX3BhbmVsLT5hdHRhY2hUb1BhcmVudChtX2NvbnRyb2xzU2hhZG93Um9vdC5nZXQoKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZU11dGVCdXR0b24oKQotewotICAgIEFTU0VSVCgh
bV9tdXRlQnV0dG9uKTsKLSAgICBtX211dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xNdXRlQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpLCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudDo6Q29udHJvbGxlcik7Ci0gICAgbV9tdXRlQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKLX0KLQotdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlUGxheUJ1dHRvbigpCi17
Ci0gICAgQVNTRVJUKCFtX3BsYXlCdXR0b24pOwotICAgIG1fcGxheUJ1dHRvbiA9IE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCkpOwotICAgIG1fcGxh
eUJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
TWVkaWE6OmNyZWF0ZVNlZWtCYWNrQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fc2Vla0JhY2tC
dXR0b24pOwotICAgIG1fc2Vla0JhY2tCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpLCBNRURJQV9DT05UUk9MU19TRUVLX0JBQ0tfQlVU
VE9OKTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgp
KTsKLX0KLQotdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlU2Vla0ZvcndhcmRCdXR0b24oKQotewot
ICAgIEFTU0VSVCghbV9zZWVrRm9yd2FyZEJ1dHRvbik7Ci0gICAgbV9zZWVrRm9yd2FyZEJ1dHRv
biA9IE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCks
IE1FRElBX0NPTlRST0xTX1NFRUtfRk9SV0FSRF9CVVRUT04pOwotICAgIG1fc2Vla0ZvcndhcmRC
dXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIFJlbmRlck1l
ZGlhOjpjcmVhdGVSZXdpbmRCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9yZXdpbmRCdXR0b24p
OwotICAgIG1fcmV3aW5kQnV0dG9uID0gTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKLSAgICBtX3Jld2luZEJ1dHRvbi0+YXR0YWNoVG9QYXJl
bnQobV9wYW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVJldHVyblRv
UmVhbHRpbWVCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
KTsKLSAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKLSAgICBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12
b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigpCi17Ci0g
ICAgQVNTRVJUKCFtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKTsKLSAgICBtX3RvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uID0gTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCkpOwotICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIFJl
bmRlck1lZGlhOjpjcmVhdGVTdGF0dXNEaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1fc3RhdHVz
RGlzcGxheSk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxh
eUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQoKSk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5LT5h
dHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBSZW5kZXJNZWRpYTo6Y3Jl
YXRlVGltZWxpbmVDb250YWluZXIoKQotewotICAgIEFTU0VSVCghbV90aW1lbGluZUNvbnRhaW5l
cik7Ci0gICAgbV90aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKLSAgICBtX3RpbWVsaW5lQ29udGFp
bmVyLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBSZW5kZXJNZWRp
YTo6Y3JlYXRlVGltZWxpbmUoKQotewotICAgIEFTU0VSVCghbV90aW1lbGluZSk7Ci0gICAgbV90
aW1lbGluZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVu
dCgpKTsKLSAgICBtX3RpbWVsaW5lLT5zZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0
Iik7Ci0gICAgbV90aW1lbGluZS0+YXR0YWNoVG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5n
ZXQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVZvbHVtZVNsaWRlckNvbnRhaW5l
cigpCi17Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcik7Ci0gICAgbV92b2x1
bWVTbGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCkpOwotICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
LT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBSZW5kZXJNZWRpYTo6
Y3JlYXRlVm9sdW1lU2xpZGVyKCkKLXsKLSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyKTsKLSAg
ICBtX3ZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQoKSk7Ci0gICAgbV92b2x1bWVTbGlkZXItPnNldEF0dHJpYnV0ZShwcmVj
aXNpb25BdHRyLCAiZmxvYXQiKTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKG1h
eEF0dHIsICIxIik7Ci0gICAgbV92b2x1bWVTbGlkZXItPnNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIs
IFN0cmluZzo6bnVtYmVyKG1lZGlhRWxlbWVudCgpLT52b2x1bWUoKSkpOwotICAgIG1fdm9sdW1l
U2xpZGVyLT5hdHRhY2hUb1BhcmVudChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci5nZXQoKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKQotewot
ICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKTsKLSAgICBtX3ZvbHVtZVNsaWRl
ck11dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlh
RWxlbWVudCgpLCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Vm9sdW1lU2xpZGVyKTsK
LSAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fdm9sdW1lU2xp
ZGVyQ29udGFpbmVyLmdldCgpKTsKLSAgICAKLX0KLQotdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRl
Q3VycmVudFRpbWVEaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5
KTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpLCBNRURJQV9DT05UUk9MU19DVVJSRU5UX1RJTUVf
RElTUExBWSk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0dGFjaFRvUGFyZW50KG1fdGlt
ZWxpbmVDb250YWluZXIuZ2V0KCkpOwotfQotCi12b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVUaW1l
UmVtYWluaW5nRGlzcGxheSgpCi17Ci0gICAgQVNTRVJUKCFtX3RpbWVSZW1haW5pbmdEaXNwbGF5
KTsKLSAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sVGltZURpc3BsYXlF
bGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCksIE1FRElBX0NPTlRST0xTX1RJTUVfUkVNQUlO
SU5HX0RJU1BMQVkpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPmF0dGFjaFRvUGFyZW50
KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOwotfQotCi12b2lkIFJlbmRlck1lZGlhOjpjcmVh
dGVGdWxsc2NyZWVuQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbkJ1dHRvbik7
Ci0gICAgbV9mdWxsc2NyZWVuQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQoKSk7Ci0gICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5h
dHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLSAgICAKIHZvaWQgUmVuZGVyTWVkaWE6
OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICB1cGRhdGVDb250cm9scygpOwotfQotICAgICAg
ICAgICAgCi12b2lkIFJlbmRlck1lZGlhOjp1cGRhdGVDb250cm9scygpCi17Ci0gICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWEgPSBtZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoIW1lZGlhLT5jb250
cm9scygpIHx8ICFtZWRpYS0+aW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmIChtX2Nv
bnRyb2xzU2hhZG93Um9vdCkgewotICAgICAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRl
dGFjaCgpOwotICAgICAgICAgICAgbV9wYW5lbCA9IDA7Ci0gICAgICAgICAgICBtX211dGVCdXR0
b24gPSAwOwotICAgICAgICAgICAgbV9wbGF5QnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fc3Rh
dHVzRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyID0gMDsKLSAg
ICAgICAgICAgIG1fdGltZWxpbmUgPSAwOwotICAgICAgICAgICAgbV9zZWVrQmFja0J1dHRvbiA9
IDA7Ci0gICAgICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1f
cmV3aW5kQnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9
IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBt
X3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gMDsKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRv
biA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciA9IDA7Ci0gICAgICAg
ICAgICBtX3ZvbHVtZVNsaWRlciA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVC
dXR0b24gPSAwOwotICAgICAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAwOwotICAgICAg
ICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9vcGFjaXR5QW5pbWF0aW9uVG8gPSAxLjBmOwotICAgICAgICBtX29wYWNpdHlBbmltYXRp
b25UaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0b3AoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290KSB7
Ci0gICAgICAgIGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgICAgICBjcmVhdGVQYW5l
bCgpOwotICAgICAgICBpZiAobV9wYW5lbCkgewotICAgICAgICAgICAgY3JlYXRlUmV3aW5kQnV0
dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVQbGF5QnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVh
dGVSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTdGF0dXNEaXNw
bGF5KCk7Ci0gICAgICAgICAgICBjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigpOwotICAgICAgICAg
ICAgaWYgKG1fdGltZWxpbmVDb250YWluZXIpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVDdXJy
ZW50VGltZURpc3BsYXkoKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVUaW1lbGluZSgpOwotICAg
ICAgICAgICAgICAgIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjcmVhdGVTZWVrQmFja0J1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRl
U2Vla0ZvcndhcmRCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0gICAg
ICAgICAgICBjcmVhdGVNdXRlQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVWb2x1bWVTbGlk
ZXJDb250YWluZXIoKTsKLSAgICAgICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikg
ewotICAgICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlcigpOwotICAgICAgICAgICAgICAg
IGNyZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fcGFuZWwtPmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lZGlh
LT5jYW5QbGF5KCkpIHsKLSAgICAgICAgaWYgKG1fdGltZVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBtX3RpbWVsaW5lICYmIG1fdGltZWxp
bmUtPnJlbmRlcmVyKCkgJiYgbV90aW1lbGluZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlzcGxh
eSgpICE9IE5PTkUpIHsKLSAgICAgICAgbV90aW1lVXBkYXRlVGltZXIuc3RhcnRSZXBlYXRpbmco
Y1RpbWVVcGRhdGVSZXBlYXREZWxheSk7Ci0gICAgfQotCi0gICAgCi0gICAgaWYgKG1fcGFuZWwp
IHsKLSAgICAgICAgLy8gdXBkYXRlKCkgbWlnaHQgYWx0ZXIgdGhlIG9wYWNpdHkgb2YgdGhlIGVs
ZW1lbnQsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUKLSAgICAgICAgLy8gb2Yg
YW4gYW5pbWF0aW9uLiBUaGlzIGlzIHRoZSBvbmx5IGVsZW1lbnQgY29uY2VybmVkIGFzIHdlIGFu
aW1hdGUgb25seSB0aGlzIGVsZW1lbnQuCi0gICAgICAgIGZsb2F0IG9wYWNpdHlCZWZvcmVDaGFu
Z2luZ1N0eWxlID0gbV9wYW5lbC0+cmVuZGVyZXIoKSA/IG1fcGFuZWwtPnJlbmRlcmVyKCktPnN0
eWxlKCktPm9wYWNpdHkoKSA6IDA7Ci0gICAgICAgIG1fcGFuZWwtPnVwZGF0ZSgpOwotICAgICAg
ICBjaGFuZ2VPcGFjaXR5KG1fcGFuZWwuZ2V0KCksIG9wYWNpdHlCZWZvcmVDaGFuZ2luZ1N0eWxl
KTsKLSAgICB9Ci0gICAgaWYgKG1fbXV0ZUJ1dHRvbikKLSAgICAgICAgbV9tdXRlQnV0dG9uLT51
cGRhdGUoKTsKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnVw
ZGF0ZSgpOwotICAgIGlmIChtX3RpbWVsaW5lQ29udGFpbmVyKQotICAgICAgICBtX3RpbWVsaW5l
Q29udGFpbmVyLT51cGRhdGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJDb250YWluZXIpCi0g
ICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGUoKTsKLSAgICBpZiAobV90aW1l
bGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fY3VycmVudFRp
bWVEaXNwbGF5KQotICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpCi0gICAgICAgIG1fdGltZVJlbWFpbmluZ0Rpc3Bs
YXktPnVwZGF0ZSgpOwotICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uKQotICAgICAgICBtX3NlZWtC
YWNrQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbikKLSAgICAg
ICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fcmV3aW5kQnV0dG9u
KQotICAgICAgICBtX3Jld2luZEJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fcmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbikKLSAgICAgICAgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT51cGRhdGUo
KTsKLSAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAgbV90b2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc3RhdHVzRGlzcGxh
eSkKLSAgICAgICAgbV9zdGF0dXNEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV9mdWxsc2Ny
ZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPnVwZGF0ZSgpOwotICAgIGlm
IChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXItPnVwZGF0ZSgpOwotICAg
IGlmIChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbi0+dXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVUaW1lRGlzcGxheSgpOwotICAgIHVwZGF0
ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTWVkaWE6OnRpbWVVcGRhdGVU
aW1lckZpcmVkKFRpbWVyPFJlbmRlck1lZGlhPiopCi17Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0g
ICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZShmYWxzZSk7Ci0gICAgdXBkYXRlVGltZURpc3BsYXko
KTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0ZVRpbWVEaXNwbGF5KCkKLXsKLSAg
ICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5IHx8ICFtX2N1cnJlbnRUaW1lRGlzcGxheS0+cmVu
ZGVyZXIoKSB8fCBtX2N1cnJlbnRUaW1lRGlzcGxheS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlz
cGxheSgpID09IE5PTkUgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IG5vdyA9IG1lZGlhRWxlbWVudCgpLT5jdXJyZW50VGlt
ZSgpOwotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0K
LSAgICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9ybWF0IHRoZSB0aW1lCi0gICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KHRoZW1lKCkt
PmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShub3csIGR1cmF0aW9uKSwgZWMpOwotICAg
IG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93KTsKLSAgICBtX3RpbWVS
ZW1haW5pbmdEaXNwbGF5LT5zZXRJbm5lclRleHQodGhlbWUoKS0+Zm9ybWF0TWVkaWFDb250cm9s
c1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKLSAgICBtX3RpbWVSZW1haW5pbmdE
aXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0gZHVyYXRpb24pOwotfQotCi12b2lkIFJlbmRl
ck1lZGlhOjp1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpIAotewotICAgIGlmICghbV9wYW5lbCB8
fCAhbV9wYW5lbC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3Qg
ZmFkZSBmb3IgYXVkaW8gY29udHJvbHMuCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBt
ZWRpYUVsZW1lbnQoKTsKLSAgICBpZiAoIW1lZGlhLT5oYXNWaWRlbygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBEb24ndCBmYWRlIGlmIHRoZSBtZWRpYSBlbGVtZW50IGlzIG5vdCB2aXNp
YmxlCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgYm9vbCBzaG91bGRIaWRlQ29udHJvbGxlciA9ICFtX21vdXNlT3Zl
ciAmJiAhbWVkaWEtPmNhblBsYXkoKTsKLQotICAgIC8vIERvIGZhZGluZyBtYW51YWxseSwgY3Nz
IGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNoYWRvdyB0cmVlcwotCi0gICAgZmxvYXQgYW5p
bWF0ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAg
ZmxvYXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNvbnRyb2xsZXIgPyAwLjBmIDogMS4wZjsKLQot
ICAgIGlmIChhbmltYXRlRnJvbSA9PSBhbmltYXRlVG8pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX29wYWNpdHlBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGlmICht
X29wYWNpdHlBbmltYXRpb25UbyA9PSBhbmltYXRlVG8pCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAgICB9Ci0KLSAgICBpZiAo
YW5pbWF0ZUZyb20gPCBhbmltYXRlVG8pCi0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0
aW9uID0gbV9wYW5lbC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1
cmF0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9
IG1fcGFuZWwtPnJlbmRlcmVyKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRp
b24oKTsKLQotICAgIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gPSBhbmltYXRlRnJvbTsKLSAgICBt
X29wYWNpdHlBbmltYXRpb25UbyA9IGFuaW1hdGVUbzsKLQotICAgIG1fb3BhY2l0eUFuaW1hdGlv
blN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoY09wYWNpdHlBbmltYXRpb25SZXBlYXREZWxheSk7Ci19Ci0gICAgCi12
b2lkIFJlbmRlck1lZGlhOjpjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50KiBlLCBmbG9hdCBvcGFj
aXR5KSAKLXsKLSAgICBpZiAoIWUgfHwgIWUtPnJlbmRlcmVyKCkgfHwgIWUtPnJlbmRlcmVyKCkt
PnN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgcy0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKLSAgICAvLyB6LWluZGV4IGNhbid0IGJlIGF1dG8gaWYgb3BhY2l0eSBp
cyB1c2VkCi0gICAgcy0+c2V0WkluZGV4KDApOwotICAgIGUtPnJlbmRlcmVyKCktPnNldFN0eWxl
KHMucmVsZWFzZSgpKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTWVkaWE6Om9wYWNpdHlBbmltYXRp
b25UaW1lckZpcmVkKFRpbWVyPFJlbmRlck1lZGlhPiopCi17Ci0gICAgZG91YmxlIHRpbWUgPSBj
dXJyZW50VGltZSgpIC0gbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGlmICh0aW1l
ID49IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAgIHRpbWUgPSBtX29wYWNp
dHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3Rv
cCgpOwotICAgIH0KLSAgICBmbG9hdCBvcGFjaXR5ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdCht
X29wYWNpdHlBbmltYXRpb25Gcm9tICsgKG1fb3BhY2l0eUFuaW1hdGlvblRvIC0gbV9vcGFjaXR5
QW5pbWF0aW9uRnJvbSkgKiB0aW1lIC8gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pOwotICAg
IGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgUmVuZGVy
TWVkaWE6OnVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpCi17Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQoKS0+aGFzQXVkaW8oKSB8fCAhbV92b2x1bWVTbGlkZXJDb250YWlu
ZXIgfHwgIW1fdm9sdW1lU2xpZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodmlzaWJs
ZSAmJiAhbV92b2x1bWVTbGlkZXJDb250YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGlm
ICghbV9tdXRlQnV0dG9uIHx8ICFtX211dGVCdXR0b24tPnJlbmRlcmVyKCkgfHwgIW1fbXV0ZUJ1
dHRvbi0+cmVuZGVyQm94KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBzID0gbV92b2x1bWVTbGlkZXJDb250YWluZXItPnN0eWxlRm9yRWxlbWVu
dCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gcy0+aGVpZ2h0KCkuaXNQZXJjZW50KCkgPyAwIDog
cy0+aGVpZ2h0KCkudmFsdWUoKTsKLSAgICAgICAgaW50IHdpZHRoID0gcy0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSA/IDAgOiBzLT53aWR0aCgpLnZhbHVlKCk7Ci0gICAgICAgIEludFBvaW50IG9mZnNl
dCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11
dGVCdXR0b24obV9tdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5ub2RlKCksIEludFNpemUod2lkdGgs
IGhlaWdodCkpOwotICAgICAgICBpbnQgeCA9IG9mZnNldC54KCkgKyBtX211dGVCdXR0b24tPnJl
bmRlckJveCgpLT5vZmZzZXRMZWZ0KCk7Ci0gICAgICAgIGludCB5ID0gb2Zmc2V0LnkoKSArIG1f
bXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldFRvcCgpOwotCi0gICAgICAgIG1fdm9sdW1l
U2xpZGVyQ29udGFpbmVyLT5zZXRQb3NpdGlvbih4LCB5KTsKLSAgICAgICAgbV92b2x1bWVTbGlk
ZXJDb250YWluZXItPnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29u
dGFpbmVyLT51cGRhdGUoKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXItPnVwZGF0ZSgpOwotICAg
IH0gZWxzZSBpZiAoIXZpc2libGUgJiYgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmlzVmlzaWJs
ZSgpKSB7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRWaXNpYmxlKGZhbHNl
KTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0ZVN0eWxlKCk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlck1lZGlhOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQotewot
ICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgbV9jb250cm9sc1NoYWRvd1Jvb3QpIHsK
LSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQq
PihldmVudCk7Ci0gICAgICAgIEludFBvaW50IHBvaW50KG1vdXNlRXZlbnQtPmFic29sdXRlTG9j
YXRpb24oKSk7Ci0KLSAgICAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IGZhbHNlOwotICAgICAg
ICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uICYmIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBkZWZhdWx0SGFuZGxl
ZCA9IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBz
aG93Vm9sdW1lU2xpZGVyID0gZmFsc2U7Ci0gICAgICAgIGlmICghZGVmYXVsdEhhbmRsZWQgJiYg
bV9tdXRlQnV0dG9uICYmIG1fbXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAg
ICAgIG1fbXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKLSAgICAg
ICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+
aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLQot
ICAgICAgICBpZiAobV92b2x1bWVTbGlkZXIgJiYgbV92b2x1bWVTbGlkZXItPmhpdFRlc3QocG9p
bnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlci0+ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihzaG93Vm9sdW1lU2xpZGVyKTsK
LQotICAgICAgICBpZiAobV9wbGF5QnV0dG9uICYmIG1fcGxheUJ1dHRvbi0+aGl0VGVzdChwb2lu
dCkpCi0gICAgICAgICAgICBtX3BsYXlCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwotCi0gICAgICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uICYmIG1fc2Vla0JhY2tCdXR0b24tPmhp
dFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24gJiYgbV9z
ZWVrRm9yd2FyZEJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3NlZWtGb3J3
YXJkQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9y
ZXdpbmRCdXR0b24gJiYgbV9yZXdpbmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAg
ICAgbV9yZXdpbmRCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAg
IGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gJiYgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
LT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICBpZiAobV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbiAmJiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaXRUZXN0KHBv
aW50KSkKLSAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3RpbWVsaW5lICYmIG1fdGltZWxp
bmUtPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV90aW1lbGluZS0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbiAmJiBtX2Z1
bGxzY3JlZW5CdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVu
QnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewotICAgICAg
ICAgICAgbV9tb3VzZU92ZXIgPSB0cnVlOwotICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2li
aWxpdHkoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2VvdXRFdmVudCkgewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgc2Nyb2xsYmFy
IHRodW1iIGNhcHR1cmVzIG1vdXNlIGV2ZW50cywgd2Ugc2hvdWxkIHRyZWF0IHRoZSBtb3VzZSBh
cyBzdGlsbCBiZWluZyBvdmVyIG91ciByZW5kZXJlciBpZiB0aGUgbmV3IHRhcmdldCBpcyBhIGRl
c2NlbmRhbnQKLSAgICAgICAgICAgIE5vZGUqIG1vdXNlT3Zlck5vZGUgPSBtb3VzZUV2ZW50LT5y
ZWxhdGVkVGFyZ2V0KCkgPyBtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpIDog
MDsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbW91c2VPdmVyUmVuZGVyZXIgPSBtb3VzZU92
ZXJOb2RlID8gbW91c2VPdmVyTm9kZS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgICAgICBtX21v
dXNlT3ZlciA9IG1vdXNlT3ZlclJlbmRlcmVyICYmIG1vdXNlT3ZlclJlbmRlcmVyLT5pc0Rlc2Nl
bmRhbnRPZih0aGlzKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFdlIHdhbnQgdGhlIHRpbWVsaW5lIHNsaWRlciB0byBi
ZSBhdCBsZWFzdCAxMDAgcGl4ZWxzIHdpZGUuCi1zdGF0aWMgY29uc3QgaW50IG1pbldpZHRoVG9E
aXNwbGF5VGltZURpc3BsYXlzID0gMTYgKyAxNiArIDQ1ICsgMTAwICsgNDUgKyAxNiArIDE7Ci0K
LWJvb2wgUmVuZGVyTWVkaWE6OnNob3VsZFNob3dUaW1lRGlzcGxheUNvbnRyb2xzKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5ICYmICFtX3RpbWVSZW1haW5pbmdEaXNw
bGF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgd2lkdGggPSBtZWRpYUVsZW1l
bnQoKS0+cmVuZGVyQm94KCktPndpZHRoKCk7Ci0gICAgcmV0dXJuIHdpZHRoID49IG1pbldpZHRo
VG9EaXNwbGF5VGltZURpc3BsYXlzICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIG1f
Y29udHJvbHMtPnVwZGF0ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDk4M2Y3ZjBlNTdkOWE3Mjc4ZmM3MTY0
OTVmMWJiYzE1ZGI5MTFjZDguLmNkNWM0YjMwMmI4MGE5NmFmYjYxNjA3Nzg0ZGJjMGZkNmRhOWY5
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCkBAIC0yOSwyNyArMjks
MTEgQEAKICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CisKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRy
b2xNdXRlQnV0dG9uRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50
OwotY2xhc3MgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRy
b2xSZXdpbmRCdXR0b25FbGVtZW50OwotY2xhc3MgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ7Ci1jbGFzcyBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OwotY2xhc3MgTWVkaWFDb250cm9sRnVsbHNj
cmVlbkJ1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7
Ci1jbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDsKLWNsYXNzIE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckNvbnRhaW5lckVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50OwotY2xhc3Mg
TWVkaWFQbGF5ZXI7CitjbGFzcyBNZWRpYUNvbnRyb2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6
IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJsaWM6CkBAIC02MSwxNiArNDUsOSBAQCBwdWJsaWM6
CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxk
cmVuOyB9CiAKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdDsKLSAg
ICBNZWRpYVBsYXllciogcGxheWVyKCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3VsZFNob3dUaW1l
RGlzcGxheUNvbnRyb2xzKCkgY29uc3Q7CisgICAgTWVkaWFDb250cm9scyogY29udHJvbHMoKSBj
b25zdDsKIAotICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2b2lkIHVwZGF0ZVBs
YXllcigpOwotICAgIHZvaWQgdXBkYXRlQ29udHJvbHMoKTsKLSAgICB2b2lkIHVwZGF0ZVRpbWVE
aXNwbGF5KCk7Ci0gICAgCi0gICAgdm9pZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKQEAgLTg1LDY3ICs2MiwxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc01lZGlhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgY3JlYXRlQ29udHJv
bHNTaGFkb3dSb290KCk7Ci0gICAgdm9pZCBkZXN0cm95Q29udHJvbHNTaGFkb3dSb290KCk7Ci0g
ICAgdm9pZCBjcmVhdGVQYW5lbCgpOwotICAgIHZvaWQgY3JlYXRlTXV0ZUJ1dHRvbigpOwotICAg
IHZvaWQgY3JlYXRlUGxheUJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlU2Vla0JhY2tCdXR0b24o
KTsKLSAgICB2b2lkIGNyZWF0ZVNlZWtGb3J3YXJkQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVS
ZXdpbmRCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKTsK
LSAgICB2b2lkIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCk7Ci0gICAgdm9pZCBj
cmVhdGVTdGF0dXNEaXNwbGF5KCk7Ci0gICAgdm9pZCBjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigp
OwotICAgIHZvaWQgY3JlYXRlVGltZWxpbmUoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVtZVNsaWRl
ckNvbnRhaW5lcigpOwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyKCk7Ci0gICAgdm9pZCBj
cmVhdGVWb2x1bWVTbGlkZXJNdXRlQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVDdXJyZW50VGlt
ZURpc3BsYXkoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAg
dm9pZCBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0gICAgCi0gICAgdm9pZCB0aW1lVXBkYXRl
VGltZXJGaXJlZChUaW1lcjxSZW5kZXJNZWRpYT4qKTsKLSAgICAKLSAgICB2b2lkIHVwZGF0ZUNv
bnRyb2xWaXNpYmlsaXR5KCk7Ci0gICAgdm9pZCBjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50Kiwg
ZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9pZCBvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZChUaW1l
cjxSZW5kZXJNZWRpYT4qKTsKLQotICAgIHZvaWQgdXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVy
KGJvb2wgdmlzaWJsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9jb250cm9sc1NoYWRvd1Jvb3Q7
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEVsZW1lbnQ+IG1fcGFuZWw7Ci0gICAgUmVmUHRyPE1l
ZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50PiBtX211dGVCdXR0b247Ci0gICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBtX3BsYXlCdXR0b247Ci0gICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtCYWNrQnV0dG9uOwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gbV9yZXdpbmRCdXR0b247
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBt
X3JldHVyblRvUmVhbHRpbWVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBtX3RpbWVsaW5lOwotICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlcjsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ+IG1fZnVsbHNjcmVlbkJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50PiBtX3RpbWVsaW5lQ29udGFpbmVyOwotICAgIFJlZlB0cjxNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
cjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX2N1cnJlbnRU
aW1lRGlzcGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBt
X3RpbWVSZW1haW5pbmdEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gbV9zdGF0dXNEaXNwbGF5OworICAgIE93blB0cjxNZWRpYUNvbnRyb2xzPiBt
X2NvbnRyb2xzOwogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIE5v
ZGUqIG1fbGFzdFVuZGVyTm9kZTsKICAgICBOb2RlKiBtX25vZGVVbmRlck1vdXNlOwotICAgIAot
ICAgIFRpbWVyPFJlbmRlck1lZGlhPiBtX3RpbWVVcGRhdGVUaW1lcjsKLSAgICBUaW1lcjxSZW5k
ZXJNZWRpYT4gbV9vcGFjaXR5QW5pbWF0aW9uVGltZXI7Ci0gICAgYm9vbCBtX21vdXNlT3ZlcjsK
LSAgICBkb3VibGUgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGRvdWJsZSBtX29w
YWNpdHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRpb25Gcm9t
OwotICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvblRvOwogfTsKIAogaW5saW5lIFJlbmRlck1l
ZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMTU0LDYgKzc5LDEx
IEBAIGlubGluZSBSZW5kZXJNZWRpYSogdG9SZW5kZXJNZWRpYShSZW5kZXJPYmplY3QqIG9iamVj
dCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVkaWEqPihvYmplY3QpOwogfQogCitp
bmxpbmUgTWVkaWFDb250cm9scyogUmVuZGVyTWVkaWE6OmNvbnRyb2xzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250cm9scy5nZXQoKTsKK30KKwogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0b1JlbmRlck1lZGlhKGNvbnN0IFJl
bmRlck1lZGlhKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCmlu
ZGV4IDBmM2I1NTExNmE3YTMzMWM3OTA5NjNlNDQyYmRmZmM2ODRlMmM4YzYuLjFhZTczNmJkZDNj
MWI5NWQ2ZjY3YjlhZDY5YWVjZGRlODFlMTdlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZW5kZXJWaWRlbzo6UmVuZGVyVmlk
ZW8oSFRNTFZpZGVvRWxlbWVudCogdmlkZW8pCiAKIFJlbmRlclZpZGVvOjp+UmVuZGVyVmlkZW8o
KQogewotICAgIGlmIChNZWRpYVBsYXllciogcCA9IHBsYXllcigpKSB7CisgICAgaWYgKE1lZGlh
UGxheWVyKiBwID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpKSB7CiAgICAgICAgIHAtPnNldFZp
c2libGUoZmFsc2UpOwogICAgICAgICBwLT5zZXRGcmFtZVZpZXcoMCk7CiAgICAgfQpAQCAtMTA4
LDkgKzEwOCw5IEBAIEludFNpemUgUmVuZGVyVmlkZW86OmNhbGN1bGF0ZUludHJpbnNpY1NpemUo
KQogICAgIC8vIFRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIGEgdmlkZW8gZWxlbWVudCdzIHBsYXli
YWNrIGFyZWEgaXMgdGhlIGludHJpbnNpYyBoZWlnaHQgCiAgICAgLy8gb2YgdGhlIHZpZGVvIHJl
c291cmNlLCBpZiB0aGF0IGlzIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIHRoZSBpbnRyaW5z
aWMgCiAgICAgLy8gaGVpZ2h0IG9mIHRoZSBwb3N0ZXIgZnJhbWUsIGlmIHRoYXQgaXMgYXZhaWxh
YmxlOyBvdGhlcndpc2UgaXQgaXMgMTUwIENTUyBwaXhlbHMuCi0gICAgCi0gICAgaWYgKHBsYXll
cigpICYmIHZpZGVvLT5yZWFkeVN0YXRlKCkgPj0gSFRNTFZpZGVvRWxlbWVudDo6SEFWRV9NRVRB
REFUQSkKLSAgICAgICAgcmV0dXJuIHBsYXllcigpLT5uYXR1cmFsU2l6ZSgpOworICAgIE1lZGlh
UGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQoKS0+cGxheWVyKCk7CisgICAgaWYgKHBsYXll
ciAmJiB2aWRlby0+cmVhZHlTdGF0ZSgpID49IEhUTUxWaWRlb0VsZW1lbnQ6OkhBVkVfTUVUQURB
VEEpCisgICAgICAgIHJldHVybiBwbGF5ZXItPm5hdHVyYWxTaXplKCk7CiAKICAgICBpZiAodmlk
ZW8tPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpICYmICFtX2NhY2hlZEltYWdlU2l6ZS5pc0Vt
cHR5KCkgJiYgIWltYWdlUmVzb3VyY2UoKS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1
cm4gbV9jYWNoZWRJbWFnZVNpemU7CkBAIC0xODYsNyArMTg2LDcgQEAgYm9vbCBSZW5kZXJWaWRl
bzo6c2hvdWxkRGlzcGxheVZpZGVvKCkgY29uc3QKIAogdm9pZCBSZW5kZXJWaWRlbzo6cGFpbnRS
ZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CisgICAgTWVkaWFQbGF5ZXIqIG1lZGlh
UGxheWVyID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGJvb2wgZGlzcGxheWluZ1Bv
c3RlciA9IHZpZGVvRWxlbWVudCgpLT5zaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKTsKIAogICAg
IGlmICghZGlzcGxheWluZ1Bvc3RlcikgewpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgUmVuZGVy
VmlkZW86OnVwZGF0ZVBsYXllcigpCiB7CiAgICAgdXBkYXRlSW50cmluc2ljU2l6ZSgpOwogCi0g
ICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gcGxheWVyKCk7CisgICAgTWVkaWFQbGF5ZXIq
IG1lZGlhUGxheWVyID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGlmICghbWVkaWFQ
bGF5ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGludCBSZW5kZXJW
aWRlbzo6bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiBib29sIFJlbmRlclZpZGVvOjpzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVy
aW5nKCkgY29uc3QKIHsKLSAgICBNZWRpYVBsYXllciogcCA9IHBsYXllcigpOworICAgIE1lZGlh
UGxheWVyKiBwID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGlmIChwKQogICAgICAg
ICByZXR1cm4gcC0+c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpOwogCkBAIC0yNzQsNyAr
Mjc0LDcgQEAgYm9vbCBSZW5kZXJWaWRlbzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0CiAKIHZvaWQgUmVuZGVyVmlkZW86OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFu
Z2VkKCkKIHsKLSAgICBNZWRpYVBsYXllciogcCA9IHBsYXllcigpOworICAgIE1lZGlhUGxheWVy
KiBwID0gbWVkaWFFbGVtZW50KCktPnBsYXllcigpOwogICAgIGlmIChwKQogICAgICAgICBwLT5h
Y2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwogfQo=
</data>
<flag name="review"
          id="71832"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
    <flag name="commit-queue"
          id="71886"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>