<?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>64476</bug_id>
          
          <creation_ts>2011-07-13 12:01:32 -0700</creation_ts>
          <short_desc>Move subtreeHasChanged from RenderTextControl to HTMLTextFormControlElement</short_desc>
          <delta_ts>2013-10-06 20:36:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>falken</cc>
    
    <cc>inferno</cc>
    
    <cc>morrita</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436587</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-13 12:01:32 -0700</bug_when>
    <thetext>subtreeHasChanged is almost nothing to do with rendering.  In fact, it shouldn&apos;t be a member function of RenderTextControl because it fires a bunch of events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436670</commentid>
    <comment_count>1</comment_count>
      <attachid>100715</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-13 14:44:01 -0700</bug_when>
    <thetext>Created attachment 100715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436678</commentid>
    <comment_count>2</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-13 14:48:54 -0700</bug_when>
    <thetext>Looks entirely reasonable to me, thanks for doing this Ryosuke.

Make sure you run the relevant layout tests as there are quite a few edge cases involving event dispatching in this code. Luckily we have tests for most, if not all, of them by now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436684</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-13 14:52:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Looks entirely reasonable to me, thanks for doing this Ryosuke.
&gt; 
&gt; Make sure you run the relevant layout tests as there are quite a few edge cases involving event dispatching in this code. Luckily we have tests for most, if not all, of them by now.

I ran the entire layout tests :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436801</commentid>
    <comment_count>4</comment_count>
      <attachid>100715</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-07-13 17:55:02 -0700</bug_when>
    <thetext>Comment on attachment 100715
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Moved subtreeHasChanged from RenderTextControl, RenderTextControlSingleLine, and
&gt; +        RenderTextControlMultiLine to HTMLTextFormControlElement, HTMLInputElement, and HTMLTextAreaElement.
&gt; +        
&gt; +        Also moved m_searchEventTimer and related functions from RenderTextSingleLine to HTMLInputElement.

Can you split this patch into two?

&gt; Source/WebCore/html/HTMLInputElement.h:211
&gt; +    void startSearchEventTimer();
&gt; +    void stopSearchEventTimer();
&gt; +    void searchEventTimerFired(Timer&lt;HTMLInputElement&gt;*);

They can be private:.

&gt; Source/WebCore/html/HTMLInputElement.h:361
&gt; +    Timer&lt;HTMLInputElement&gt; m_searchEventTimer;

Can you move this data member to SearchInputType?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436829</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-13 18:34:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 100715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100715&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        Moved subtreeHasChanged from RenderTextControl, RenderTextControlSingleLine, and
&gt; &gt; +        RenderTextControlMultiLine to HTMLTextFormControlElement, HTMLInputElement, and HTMLTextAreaElement.
&gt; &gt; +        
&gt; &gt; +        Also moved m_searchEventTimer and related functions from RenderTextSingleLine to HTMLInputElement.
&gt; 
&gt; Can you split this patch into two?

Unfortunately not because subtreeHasChanged calls various functions related to searchEventTimer :(

&gt; &gt; Source/WebCore/html/HTMLInputElement.h:211
&gt; &gt; +    void startSearchEventTimer();
&gt; &gt; +    void stopSearchEventTimer();
&gt; &gt; +    void searchEventTimerFired(Timer&lt;HTMLInputElement&gt;*);
&gt; 
&gt; They can be private:.

Oops, will do.

&gt; &gt; Source/WebCore/html/HTMLInputElement.h:361
&gt; &gt; +    Timer&lt;HTMLInputElement&gt; m_searchEventTimer;
&gt; 
&gt; Can you move this data member to SearchInputType?

Sure.  But is lifetime of SearchInputType guaranteed to last until the search event timer is fired?  What I&apos;m afraid is that we&apos;ll end up firing a timer on a stale object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436837</commentid>
    <comment_count>6</comment_count>
      <attachid>100715</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-07-13 18:45:13 -0700</bug_when>
    <thetext>Comment on attachment 100715
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt;&gt; +        Also moved m_searchEventTimer and related functions from RenderTextSingleLine to HTMLInputElement.
&gt;&gt; 
&gt;&gt; Can you split this patch into two?
&gt; 
&gt; Unfortunately not because subtreeHasChanged calls various functions related to searchEventTimer :(

I see.

&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.h:361
&gt;&gt;&gt; +    Timer&lt;HTMLInputElement&gt; m_searchEventTimer;
&gt;&gt; 
&gt;&gt; Can you move this data member to SearchInputType?
&gt; 
&gt; Sure.  But is lifetime of SearchInputType guaranteed to last until the search event timer is fired?  What I&apos;m afraid is that we&apos;ll end up firing a timer on a stale object.

The lifetime of SearchInputType is exactly synchronized with a period during an input element has type=search.
I&apos;m not worry about a timer on a stale object because a Timer is deleted when the owner SearchInputTYpe is deleted if the Timer is a data member of the SearchInputType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436995</commentid>
    <comment_count>7</comment_count>
      <attachid>100786</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-14 01:37:33 -0700</bug_when>
    <thetext>Created attachment 100786
Moved search timer and related functions to SearchInputType</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437038</commentid>
    <comment_count>8</comment_count>
      <attachid>100786</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-07-14 05:38:46 -0700</bug_when>
    <thetext>Comment on attachment 100786
Moved search timer and related functions to SearchInputType

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437191</commentid>
    <comment_count>9</comment_count>
      <attachid>100786</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 10:45:22 -0700</bug_when>
    <thetext>Comment on attachment 100786
Moved search timer and related functions to SearchInputType

Clearing flags on attachment: 100786

Committed r91014: &lt;http://trac.webkit.org/changeset/91014&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437192</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 10:45:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936941</commentid>
    <comment_count>11</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-10-06 20:36:58 -0700</bug_when>
    <thetext>FYI: after this change, it appears there is no callsite for Document::setIgnoreAutofocus. I ended up removing m_ignoreAutofocus in Blink:
https://src.chromium.org/viewvc/blink?revision=158698&amp;view=revision</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100715</attachid>
            <date>2011-07-13 14:44:01 -0700</date>
            <delta_ts>2011-07-14 01:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64476-20110713144359.patch</filename>
            <type>text/plain</type>
            <size>19969</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwOTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMDctMTMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzdWJ0cmVlSGFzQ2hhbmdl
ZCBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ3NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIHN1YnRy
ZWVIYXNDaGFuZ2VkIGZyb20gUmVuZGVyVGV4dENvbnRyb2wsIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSwgYW5kCisgICAgICAgIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lIHRvIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBIVE1MSW5wdXRFbGVtZW50LCBhbmQgSFRNTFRleHRBcmVh
RWxlbWVudC4KKyAgICAgICAgCisgICAgICAgIEFsc28gbW92ZWQgbV9zZWFyY2hFdmVudFRpbWVy
IGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFJlbmRlclRleHRTaW5nbGVMaW5lIHRvIEhUTUxJ
bnB1dEVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6IEluaXRp
YWxpemVzIG1fc2VhcmNoRXZlbnRUaW1lci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKTogTW92ZWQgZnJvbSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdGFydFNlYXJj
aEV2ZW50VGltZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OnN0b3BTZWFyY2hFdmVudFRpbWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzZWFyY2hFdmVudFRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKTogQ2FsbHMgc3RvcFNlYXJjaEV2ZW50VGlt
ZXIuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKTogTW92ZWQgZnJvbSBSZW5kZXJUZXh0TXVsdGlMaW5l
LgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBDYWxscyBzdWJ0cmVl
SGFzQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzdWJ0cmVlSGFzQ2hhbmdlZCk6IEFkZGVkOyBjYWxscyByZXNwb25kVG9DaGFuZ2VCeVVzZXIu
CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOiBVcGRhdGVkIGNvbW1l
bnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjpyZXNwb25kVG9DaGFuZ2VCeVVzZXIpOiBSZW5hbWVkIGZyb20gc3VidHJl
ZUhhc0NoYW5nZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKTogTm8gbG9uZ2VyIGluaXRpYWxpemVzCisgICAgICAgIG1fc2Vh
cmNoRXZlbnRUaW1lci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmg6CisKIDIwMTEtMDctMTIgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFN0YW5kYXJkaXplIFdpbkNhaXJvIGNvbmRpdGlvbmFsaXplZCBjb2Rl
IHVuZGVyIFBMQVRGT1JNIG1hY3JvLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgSFRNTElu
cHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdAogICAgICwgbV9wYXJzaW5nSW5Qcm9n
cmVzcyhjcmVhdGVkQnlQYXJzZXIpCiAgICAgLCBtX3dhc01vZGlmaWVkQnlVc2VyKGZhbHNlKQog
ICAgICwgbV9pbnB1dFR5cGUoSW5wdXRUeXBlOjpjcmVhdGVUZXh0KHRoaXMpKQorICAgICwgbV9z
ZWFyY2hFdmVudFRpbWVyKHRoaXMsICZIVE1MSW5wdXRFbGVtZW50OjpzZWFyY2hFdmVudFRpbWVy
RmlyZWQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IGhhc1RhZ05hbWUo
aXNpbmRleFRhZykpOwogfQpAQCAtNjA5LDYgKzYxMCw0NSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVR5cGUoKQogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKIH0KIAordm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKGlz
VGV4dEZpZWxkKCkpOworICAgIEFTU0VSVChyZW5kZXJlcigpKTsKKyAgICBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUqIHJlbmRlclRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUocmVuZGVyZXIoKSk7CisKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c3VidHJlZUhhc0NoYW5nZWQoKTsKKworICAgIGJvb2wgd2FzQ2hhbmdlZCA9IHdhc0NoYW5nZWRT
aW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgICAgc2V0Q2hhbmdlZFNpbmNlTGFz
dEZvcm1Db250cm9sQ2hhbmdlRXZlbnQodHJ1ZSk7CisKKyAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGNhbGwgc2FuaXRpemVVc2VySW5wdXRWYWx1ZSgpIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZQorICAg
IC8vIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgaGFz
IGFscmVhZHkgY2FsbGVkCisgICAgLy8gc2FuaXRpemVVc2VySW5wdXRWYWx1ZSgpLgorICAgIC8v
IHNhbml0aXplVmFsdWUoKSBpcyBuZWVkZWQgYmVjYXVzZSBJTUUgaW5wdXQgZG9lc24ndCBkaXNw
YXRjaCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4KKyAgICBTdHJpbmcgdmFsdWUgPSB0b1JlbmRl
clRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0KCk7CisgICAgaWYgKGlzQWNjZXB0YWJsZVZh
bHVlKHZhbHVlKSkKKyAgICAgICAgc2V0VmFsdWVGcm9tUmVuZGVyZXIoc2FuaXRpemVWYWx1ZShj
b252ZXJ0RnJvbVZpc2libGVWYWx1ZSh2YWx1ZSkpKTsKKyAgICAvLyBSZWNhbGMgZm9yIDppbnZh
bGlkIGFuZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNoYW5nZS4KKyAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisKKyAgICBpZiAoY2FuY2VsQnV0dG9uRWxlbWVudCgpKQorICAgICAgICByZW5k
ZXJUZXh0Q29udHJvbC0+dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOworCisgICAgLy8g
SWYgdGhlIGluY3JlbWVudGFsIGF0dHJpYnV0ZSBpcyBzZXQsIHRoZW4gZGlzcGF0Y2ggdGhlIHNl
YXJjaCBldmVudAorICAgIGlmIChzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSkKKyAg
ICAgICAgc3RhcnRTZWFyY2hFdmVudFRpbWVyKCk7CisKKyAgICBpZiAoIXdhc0NoYW5nZWQgJiYg
Zm9jdXNlZCgpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpKQorICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcodGhpcyk7CisgICAgfQorCisgICAgaWYgKGZvY3VzZWQoKSkgeworICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKHRoaXMpOworICAgIH0KK30KKwogY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2lucHV0VHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCk7CkBAIC0xMzU4LDYg
KzEzOTgsMzMgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1JlcXVpcmVkRm9ybUNvbgogICAg
IHJldHVybiBtX2lucHV0VHlwZS0+c3VwcG9ydHNSZXF1aXJlZCgpICYmIHJlcXVpcmVkKCk7CiB9
CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkKK3sKKyAg
ICBBU1NFUlQoaXNTZWFyY2hGaWVsZCgpKTsKKyAgICBBU1NFUlQocmVuZGVyZXIoKSk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIo
KSktPnRleHQoKS5sZW5ndGgoKTsKKworICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgIHN0b3BT
ZWFyY2hFdmVudFRpbWVyKCk7CisgICAgICAgIG9uU2VhcmNoKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBBZnRlciB0eXBpbmcgdGhlIGZpcnN0IGtleSwgd2Ugd2FpdCAwLjUg
c2Vjb25kcy4KKyAgICAvLyBBZnRlciB0aGUgc2Vjb25kIGtleSwgMC40IHNlY29uZHMsIHRoZW4g
MC4zLCB0aGVuIDAuMiBmcm9tIHRoZW4gb24uCisgICAgbV9zZWFyY2hFdmVudFRpbWVyLnN0YXJ0
T25lU2hvdChtYXgoMC4yLCAwLjYgLSAwLjEgKiBsZW5ndGgpKTsKK30KKwordm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzdG9wU2VhcmNoRXZlbnRUaW1lcigpCit7CisgICAgbV9zZWFyY2hFdmVudFRp
bWVyLnN0b3AoKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZWFyY2hFdmVudFRpbWVy
RmlyZWQoVGltZXI8SFRNTElucHV0RWxlbWVudD4qKQoreworICAgIG9uU2VhcmNoKCk7Cit9CisK
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKICAgICBBU1NFUlQo
aXNTZWFyY2hGaWVsZCgpKTsKQEAgLTEzNjgsOCArMTQzNSw3IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6b25TZWFyY2go
KQogewogICAgIEFTU0VSVChpc1NlYXJjaEZpZWxkKCkpOwotICAgIGlmIChyZW5kZXJlcigpKQot
ICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+c3RvcFNl
YXJjaEV2ZW50VGltZXIoKTsKKyAgICBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOwogICAgIGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZh
bHNlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShy
ZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVj
ZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIEljb24qIGljb24o
KSBjb25zdDsKIAorICAgIHZvaWQgc3RhcnRTZWFyY2hFdmVudFRpbWVyKCk7CisgICAgdm9pZCBz
dG9wU2VhcmNoRXZlbnRUaW1lcigpOworICAgIHZvaWQgc2VhcmNoRXZlbnRUaW1lckZpcmVkKFRp
bWVyPEhUTUxJbnB1dEVsZW1lbnQ+Kik7CiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAg
ICB2b2lkIG9uU2VhcmNoKCk7CiAgICAgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNo
ZWQoKSBjb25zdDsKQEAgLTMxMyw2ICszMTYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlVHlwZSgpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgYm9vbCBn
ZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoQW55U3RlcEhhbmRsaW5nLCBkb3Vi
bGUqLCB1bnNpZ25lZCopIGNvbnN0OwogCkBAIC0zNTMsNiArMzU4LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fcGFyc2luZ0luUHJvZ3Jlc3MgOiAxOwogICAgIGJvb2wgbV93YXNNb2RpZmllZEJ5
VXNlciA6IDE7CiAgICAgT3duUHRyPElucHV0VHlwZT4gbV9pbnB1dFR5cGU7CisgICAgVGltZXI8
SFRNTElucHV0RWxlbWVudD4gbV9zZWFyY2hFdmVudFRpbWVyOwogfTsKIAogfSAvL25hbWVzcGFj
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsMjEgQEAgdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYQogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAordm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCit7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCk7CisKKyAgICBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKKyAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKGZhbHNlKTsKKyAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKworICAgIGlmICgh
Zm9jdXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdl
SW5UZXh0QXJlYSh0aGlzKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogZXZlbnQpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0
IHsgcmV0dXJuIHJlcXVpcmVkKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2Vk
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miwx
MyArODIsMTggQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Ywogdm9p
ZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
VGV4dENvbnRyb2woKSkgewotICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkp
LT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOworICAgICAgICBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKK3ZvaWQgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKK3sKKyAgICB0b1JlbmRlclRleHRDb250
cm9sKHJlbmRlcmVyKCkpLT5yZXNwb25kVG9DaGFuZ2VCeVVzZXIoKTsKK30KKwogU3RyaW5nIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3QKIHsK
ICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8g
cmVtb3ZlIENSIGFuZCBMRiBmcm9tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtODUsNiArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBoYXNDYWNoZWRTZWxlY3Rpb25F
bmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZCA+PSAwOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiBwcml2YXRlOgogICAgIGludCBjb21wdXRlU2VsZWN0
aW9uU3RhcnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDkwOTM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9p
ZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleAogCiAgICAgLy8gV2UgdXNlIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dCgpIGluc3RlYWQgb2YgSW5wdXRFbGVtZW50
Ojp2YWx1ZSgpCiAgICAgLy8gYmVjYXVzZSB0aGV5IGNhbiBiZSBtaXNtYXRjaGVkIGJ5IHNhbml0
aXplVmFsdWUoKSBpbgotICAgIC8vIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJl
ZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2VzLgorICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OnN1
YnRyZWVIYXNDaGFuZ2VkKCkgaW4gc29tZSBjYXNlcy4KICAgICB1bnNpZ25lZCBvbGRMZW5ndGgg
PSBudW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1l
bnQoKS0+cmVuZGVyZXIoKSktPnRleHQoKSk7CiAKICAgICAvLyBzZWxlY3Rpb25MZW5ndGggcmVw
cmVzZW50cyB0aGUgc2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmllbGQgdG8gYmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAko
cmV2aXNpb24gOTA5MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsMTIgKzE3NSw2IEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHUKICAgICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKS0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKIH0KIAot
dm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0TGFzdENoYW5nZVdhc1VzZXJFZGl0KGJvb2wgbGFz
dENoYW5nZVdhc1VzZXJFZGl0KQotewotICAgIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0ID0gbGFz
dENoYW5nZVdhc1VzZXJFZGl0OwotICAgIGRvY3VtZW50KCktPnNldElnbm9yZUF1dG9mb2N1cyhs
YXN0Q2hhbmdlV2FzVXNlckVkaXQpOwotfQotCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENv
bnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBp
ZiAoaW5kZXggPD0gMCkKQEAgLTE5NCwxMSArMTg4LDYgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRl
clRleHRDb250cm9sOjp2aXNpYgogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2Uo
KS0+ZW5kUG9zaXRpb24oKSwgVVBTVFJFQU0pOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9s
OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCi17Ci0gICAgbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQgPSB0
cnVlOwotfQotCiBzdGF0aWMgU3RyaW5nIGZpbmlzaFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0
KQogewogICAgIC8vIFJlbW92ZSBvbmUgdHJhaWxpbmcgbmV3bGluZTsgdGhlcmUncyBhbHdheXMg
b25lIHRoYXQncyBjb2xsYXBzZWQgb3V0IGJ5IHJlbmRlcmluZy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCShyZXZpc2lvbiA5MDkzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw5ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlKSBjb25zdCA9IDA7CiAKICAgICBib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0OyB9Ci0gICAgdm9pZCBzZXRMYXN0Q2hh
bmdlV2FzVXNlckVkaXQoYm9vbCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQpOwotCi0gICAgdmlydHVh
bCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VCeVVz
ZXIoKSB7IG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0ID0gdHJ1ZTsgfQogICAgIFN0cmluZyB0ZXh0
KCk7CiAgICAgU3RyaW5nIHRleHRXaXRoSGFyZExpbmVCcmVha3MoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwCShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIxICs0NCw2
IEBAIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjp+UmVuZGVyVGV4dEMKICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG5vZGUoKSktPnJlbmRlcmVyV2lsbEJlRGVz
dHJveWVkKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRyZWVI
YXNDaGFuZ2VkKCkKLXsKLSAgICBSZW5kZXJUZXh0Q29udHJvbDo6c3VidHJlZUhhc0NoYW5nZWQo
KTsKLSAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxU
ZXh0QXJlYUVsZW1lbnQqPihub2RlKCkpOwotICAgIHRleHRBcmVhLT5zZXRDaGFuZ2VkU2luY2VM
YXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKLSAgICB0ZXh0QXJlYS0+c2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgdGV4dEFyZWEtPnNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwotCi0gICAgaWYgKCFub2RlKCktPmZvY3VzZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCi0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEodGV4dEFyZWEpOwotfQot
CiBib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgaWYgKCFSZW5kZXJUZXh0
Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAkocmV2aXNp
b24gOTA5MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRBcmVhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7Ci0KICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CShyZXZpc2lvbiA5MDkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBAIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dEMKICAgICAsIG1fc2VhcmNoUG9w
dXBJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcihm
YWxzZSkKICAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgtMSkKLSAgICAsIG1fc2VhcmNo
RXZlbnRUaW1lcih0aGlzLCAmUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWFyY2hFdmVu
dFRpbWVyRmlyZWQpCiAgICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CiAgICAgQVNTRVJUKG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSk7CkBAIC0xNTgsMTEgKzE1Nyw2IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjphZGRTZWEKICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2Vh
cmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzdG9wU2VhcmNoRXZlbnRUaW1lcigpCi17Ci0gICAgbV9zZWFyY2hFdmVu
dFRpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNo
b3dQb3B1cCgpCiB7CiAgICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCkBAIC0xOTgsNDQg
KzE5Miw2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG8KICAgICAg
ICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKIH0KIAotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKLXsKLSAgICBSZW5kZXJU
ZXh0Q29udHJvbDo6c3VidHJlZUhhc0NoYW5nZWQoKTsKLQotICAgIEFTU0VSVChub2RlKCktPmlz
RWxlbWVudE5vZGUoKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKCkpOwotICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGVsZW1lbnQtPndhc0NoYW5nZWRT
aW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Ci0gICAgZWxlbWVudC0+c2V0Q2hhbmdl
ZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQodHJ1ZSk7Ci0KLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Y2FsbCBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBiZWNhdXNlCi0gICAg
Ly8gSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBoYXMg
YWxyZWFkeSBjYWxsZWQKLSAgICAvLyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkuCi0gICAgLy8g
c2FuaXRpemVWYWx1ZSgpIGlzIG5lZWRlZCBiZWNhdXNlIElNRSBpbnB1dCBkb2Vzbid0IGRpc3Bh
dGNoIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LgotICAgIFN0cmluZyB2YWx1ZSA9IHRleHQoKTsK
LSAgICBpZiAoaW5wdXQtPmlzQWNjZXB0YWJsZVZhbHVlKHZhbHVlKSkKLSAgICAgICAgaW5wdXQt
PnNldFZhbHVlRnJvbVJlbmRlcmVyKGlucHV0LT5zYW5pdGl6ZVZhbHVlKGlucHV0LT5jb252ZXJ0
RnJvbVZpc2libGVWYWx1ZSh2YWx1ZSkpKTsKLSAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGFu
ZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNoYW5nZS4KLSAgICBpbnB1dC0+c2V0TmVlZHNTdHls
ZVJlY2FsYygpOwotCi0gICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKLSAgICAgICAgdXBk
YXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOwotCi0gICAgLy8gSWYgdGhlIGluY3JlbWVudGFs
IGF0dHJpYnV0ZSBpcyBzZXQsIHRoZW4gZGlzcGF0Y2ggdGhlIHNlYXJjaCBldmVudAotICAgIGlm
IChpbnB1dC0+c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkpCi0gICAgICAgIHN0YXJ0
U2VhcmNoRXZlbnRUaW1lcigpOwotCi0gICAgaWYgKCF3YXNDaGFuZ2VkICYmIG5vZGUoKS0+Zm9j
dXNlZCgpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQotICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAgIH0KLQotICAgIGlmIChub2RlKCktPmZvY3Vz
ZWQoKSkgewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
LSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChw
YWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTU5NCwyNyArNTUwLDYgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7CiB9CiAKLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdGFydFNlYXJjaEV2ZW50VGltZXIoKQotewotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsKLQotICAgIC8vIElmIHRoZXJlJ3Mg
bm8gdGV4dCwgZmlyZSB0aGUgZXZlbnQgcmlnaHQgYXdheS4KLSAgICBpZiAoIWxlbmd0aCkgewot
ICAgICAgICBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOwotICAgICAgICBpbnB1dEVsZW1lbnQoKS0+
b25TZWFyY2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFmdGVyIHR5cGlu
ZyB0aGUgZmlyc3Qga2V5LCB3ZSB3YWl0IDAuNSBzZWNvbmRzLgotICAgIC8vIEFmdGVyIHRoZSBz
ZWNvbmQga2V5LCAwLjQgc2Vjb25kcywgdGhlbiAwLjMsIHRoZW4gMC4yIGZyb20gdGhlbiBvbi4K
LSAgICBtX3NlYXJjaEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KG1heCgwLjIsIDAuNiAtIDAuMSAq
IGxlbmd0aCkpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNo
RXZlbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4qKQotewot
ICAgIGlucHV0RWxlbWVudCgpLT5vblNlYXJjaCgpOwotfQotCiAvLyBQb3B1cE1lbnVDbGllbnQg
bWV0aG9kcwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1
bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJ
KHJldmlzaW9uIDkwOTM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
ICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDEyICszOSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IE1vdmUgY3JlYXRlKlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVh
dGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwogCiAgICAgYm9v
bCBwbGFjZWhvbGRlcklzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhY2Vob2xkZXJWaXNp
YmxlOyB9CiAgICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKLSAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVy
KCk7CiAKICAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hQ
b3B1cElzVmlzaWJsZTsgfQogICAgIHZvaWQgc2hvd1BvcHVwKCk7CkBAIC02MCw3ICs1OSw2IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIApAQCAtODgsMTMgKzg2LDkgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRleHRCYXNlU3R5bGUoKSBjb25zdDsKIAotICAgIHZv
aWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwogICAgIEVWaXNpYmlsaXR5
IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdDsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGF1dG9zYXZlTmFtZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzdGFydFNlYXJjaEV2ZW50VGlt
ZXIoKTsKLSAgICB2b2lkIHNlYXJjaEV2ZW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU+Kik7Ci0KICAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwogICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVF
dmVudHMgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25l
ZCwgYm9vbCkge30KQEAgLTE0Miw3ICsxMzYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zZWFy
Y2hQb3B1cElzVmlzaWJsZTsKICAgICBib29sIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9y
OwogICAgIExheW91dFVuaXQgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0OwotICAgIFRpbWVyPFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZT4gbV9zZWFyY2hFdmVudFRpbWVyOwogICAgIFJlZlB0
cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNoUG9wdXA7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9y
ZWNlbnRTZWFyY2hlczsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100786</attachid>
            <date>2011-07-14 01:37:33 -0700</date>
            <delta_ts>2011-07-14 10:45:21 -0700</delta_ts>
            <desc>Moved search timer and related functions to SearchInputType</desc>
            <filename>bug-64476-20110714013732.patch</filename>
            <type>text/plain</type>
            <size>21033</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwOTg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDctMTQgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzdWJ0cmVlSGFzQ2hhbmdl
ZCBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ3NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIHN1YnRy
ZWVIYXNDaGFuZ2VkIGZyb20gUmVuZGVyVGV4dENvbnRyb2wsIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSwgYW5kCisgICAgICAgIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lIHRvIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBIVE1MSW5wdXRFbGVtZW50LCBhbmQKKyAgICAgICAgSFRN
TFRleHRBcmVhRWxlbWVudC4gQWxzbyBtb3ZlZCBtX3NlYXJjaEV2ZW50VGltZXIgYW5kIHJlbGF0
ZWQgZnVuY3Rpb25zIGZyb20KKyAgICAgICAgUmVuZGVyVGV4dFNpbmdsZUxpbmUgdG8gU2VhcmNo
SW5wdXRUeXBlLgorCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKTogTW92ZWQg
ZnJvbSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpvblNlYXJjaCk6IENhbGxzIHN0b3BTZWFyY2hFdmVudFRpbWVyLgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpz
dWJ0cmVlSGFzQ2hhbmdlZCk6IE1vdmVkIGZyb20gUmVuZGVyVGV4dE11bHRpTGluZS4KKyAgICAg
ICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2FsbHMgc3VidHJlZUhhc0NoYW5n
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3VidHJl
ZUhhc0NoYW5nZWQpOiBBZGRlZDsgY2FsbHMgcmVzcG9uZFRvQ2hhbmdlQnlVc2VyLgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL1Nl
YXJjaElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OlNl
YXJjaElucHV0VHlwZSk6IEluaXRpYWxpemVzIG1fc2VhcmNoRXZlbnRUaW1lci4KKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKTogTW92ZWQg
ZnJvbSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hJbnB1dFR5cGU6OnN0b3BTZWFyY2hFdmVudFRpbWVyKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCk6IERpdHRvLgorICAg
ICAgICAqIGh0bWwvU2VhcmNoSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6IFVwZGF0ZWQgY29tbWVudC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnJl
c3BvbmRUb0NoYW5nZUJ5VXNlcik6IFJlbmFtZWQgZnJvbSBzdWJ0cmVlSGFzQ2hhbmdlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUpOiBObyBsb25nZXIgaW5pdGlhbGl6ZXMKKyAgICAgICAgbV9zZWFyY2hFdmVudFRpbWVyLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKwogMjAx
MS0wNy0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3Zl
IGZvcndhcmRFdmVudCBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDkwOTg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNlYXJjaElucHV0VHlwZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTYxNCw2ICs2MTUsNDUgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKCk7CiB9CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQoKQor
eworICAgIEFTU0VSVChpc1RleHRGaWVsZCgpKTsKKyAgICBBU1NFUlQocmVuZGVyZXIoKSk7Cisg
ICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkpOworCisgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCk7CisKKyAgICBib29sIHdhc0NoYW5n
ZWQgPSB3YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAgIHNl
dENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHRydWUpOworCisgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0byBjYWxsIHNhbml0aXplVXNlcklucHV0VmFsdWUoKSBmdW5jdGlvbiBo
ZXJlIGJlY2F1c2UKKyAgICAvLyBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCgpIGhhcyBhbHJlYWR5IGNhbGxlZAorICAgIC8vIHNhbml0aXplVXNlcklucHV0
VmFsdWUoKS4KKyAgICAvLyBzYW5pdGl6ZVZhbHVlKCkgaXMgbmVlZGVkIGJlY2F1c2UgSU1FIGlu
cHV0IGRvZXNuJ3QgZGlzcGF0Y2ggQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuCisgICAgU3RyaW5n
IHZhbHVlID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+dGV4dCgpOworICAgIGlm
IChpc0FjY2VwdGFibGVWYWx1ZSh2YWx1ZSkpCisgICAgICAgIHNldFZhbHVlRnJvbVJlbmRlcmVy
KHNhbml0aXplVmFsdWUoY29udmVydEZyb21WaXNpYmxlVmFsdWUodmFsdWUpKSk7CisgICAgLy8g
UmVjYWxjIGZvciA6aW52YWxpZCBhbmQgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjaGFuZ2UuCisg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworCisgICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQo
KSkKKyAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wtPnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxp
dHkoKTsKKworICAgIC8vIElmIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgaXMgc2V0LCB0aGVu
IGRpc3BhdGNoIHRoZSBzZWFyY2ggZXZlbnQKKyAgICBpZiAoc2VhcmNoRXZlbnRzU2hvdWxkQmVE
aXNwYXRjaGVkKCkgJiYgaXNTZWFyY2hGaWVsZCgpICYmIG1faW5wdXRUeXBlKQorICAgICAgICBz
dGF0aWNfY2FzdDxTZWFyY2hJbnB1dFR5cGUqPihtX2lucHV0VHlwZS5nZXQoKSktPnN0YXJ0U2Vh
cmNoRXZlbnRUaW1lcigpOworCisgICAgaWYgKCF3YXNDaGFuZ2VkICYmIGZvY3VzZWQoKSkgewor
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKHRoaXMpOworICAg
IH0KKworICAgIGlmIChmb2N1c2VkKCkpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRD
aGFuZ2VJblRleHRGaWVsZCh0aGlzKTsKKyAgICB9Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYg
SFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPmZvcm1Db250cm9sVHlwZSgpOwpAQCAtMTM3Myw4ICsxNDEzLDggQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpvblNlYXJjaCgpCiB7CiAgICAgQVNTRVJUKGlzU2VhcmNoRmllbGQoKSk7Ci0gICAgaWYg
KHJlbmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRl
cmVyKCkpLT5zdG9wU2VhcmNoRXZlbnRUaW1lcigpOworICAgIGlmIChtX2lucHV0VHlwZSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8U2VhcmNoSW5wdXRUeXBlKj4obV9pbnB1dFR5cGUuZ2V0KCkpLT5z
dG9wU2VhcmNoRXZlbnRUaW1lcigpOwogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUs
NiArMzE1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcmVjYWxjV2lsbFZhbGlkYXRl
KCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVR5cGUoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAogICAgIGJvb2wgZ2V0QWxsb3dlZFZhbHVlU3RlcFdp
dGhEZWNpbWFsUGxhY2VzKEFueVN0ZXBIYW5kbGluZywgZG91YmxlKiwgdW5zaWduZWQqKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsMjEgQEAgdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYQogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAordm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCit7CisgICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCk7CisKKyAgICBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9y
bUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKKyAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKGZhbHNlKTsKKyAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKworICAgIGlm
ICghZm9jdXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hh
bmdlSW5UZXh0QXJlYSh0aGlzKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogZXZlbnQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIHJlcXVpcmVkKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Kik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFu
Z2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGMKIHZv
aWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRF
ZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5p
c1RleHRDb250cm9sKCkpIHsKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+c3VidHJlZUhhc0NoYW5nZWQoKTsKKyAgICAgICAgc3VidHJlZUhhc0NoYW5nZWQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTYsNiArOTYsMTEgQEAgdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6Zm9yd2FyZAogICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKK3sKKyAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRl
cmVyKCkpLT5yZXNwb25kVG9DaGFuZ2VCeVVzZXIoKTsKK30KKwogU3RyaW5nIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3QKIHsKICAgICAvLyBB
Y2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8gcmVtb3ZlIENS
IGFuZCBMRiBmcm9tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiAr
ODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBoYXNDYWNoZWRTZWxlY3Rpb25FbmQoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZCA+PSAwOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVl
SGFzQ2hhbmdlZCgpOwogCiBwcml2YXRlOgogICAgIGludCBjb21wdXRlU2VsZWN0aW9uU3RhcnQo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAJKHJl
dmlzaW9uIDkwOTg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2VhcmNoSW5wdXRU
eXBlLmgiCiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1
ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW5saW5lIFNlYXJj
aElucHV0VHlwZTo6U2VhcmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgOiBCYXNlVGV4dElucHV0VHlwZShlbGVtZW50KQorICAgICwgbV9zZWFyY2hFdmVudFRpbWVy
KHRoaXMsICZTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCkKIHsKIH0KIApA
QCAtMTA0LDUgKzEwNiwzMSBAQCB2b2lkIFNlYXJjaElucHV0VHlwZTo6ZGVzdHJveVNoYWRvd1N1
YnRyCiAgICAgbV9jYW5jZWxCdXR0b24uY2xlYXIoKTsKIH0KIAordm9pZCBTZWFyY2hJbnB1dFR5
cGU6OnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpCit7CisgICAgQVNTRVJUKGVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+dGV4dCgpLmxlbmd0aCgpOworCisgICAgaWYg
KCFsZW5ndGgpIHsKKyAgICAgICAgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKKyAgICAgICAgZWxl
bWVudCgpLT5vblNlYXJjaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWZ0
ZXIgdHlwaW5nIHRoZSBmaXJzdCBrZXksIHdlIHdhaXQgMC41IHNlY29uZHMuCisgICAgLy8gQWZ0
ZXIgdGhlIHNlY29uZCBrZXksIDAuNCBzZWNvbmRzLCB0aGVuIDAuMywgdGhlbiAwLjIgZnJvbSB0
aGVuIG9uLgorICAgIG1fc2VhcmNoRXZlbnRUaW1lci5zdGFydE9uZVNob3QobWF4KDAuMiwgMC42
IC0gMC4xICogbGVuZ3RoKSk7Cit9CisKK3ZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzdG9wU2VhcmNo
RXZlbnRUaW1lcigpCit7CisgICAgbV9zZWFyY2hFdmVudFRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZChUaW1lcjxTZWFyY2hJbnB1
dFR5cGU+KikKK3sKKyAgICBlbGVtZW50KCktPm9uU2VhcmNoKCk7Cit9CisKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCShy
ZXZpc2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgU2VhcmNoSW5wdXRUeXBl
X2gKIAogI2luY2x1ZGUgIkJhc2VUZXh0SW5wdXRUeXBlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICs0Myw5IEBAIGNsYXNzIFNlYXJjaElu
cHV0VHlwZSA6IHB1YmxpYyBCYXNlVGV4dEkKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CiAKKyAgICB2b2lkIHN0YXJ0
U2VhcmNoRXZlbnRUaW1lcigpOworICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKKwog
cHJpdmF0ZToKICAgICBTZWFyY2hJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOwogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKQEAgLTUz
LDggKzU3LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MRWxlbWVudCogcmVzdWx0c0J1
dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0
b25FbGVtZW50KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNlYXJjaEV2ZW50VGltZXJGaXJlZChUaW1l
cjxTZWFyY2hJbnB1dFR5cGU+Kik7CisKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fcmVzdWx0
c0J1dHRvbjsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fY2FuY2VsQnV0dG9uOworICAgIFRp
bWVyPFNlYXJjaElucHV0VHlwZT4gbV9zZWFyY2hFdmVudFRpbWVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRU
eXBlLmNwcAkocmV2aXNpb24gOTA5ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4CiAKICAgICAvLyBXZSB1c2UgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkgaW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZh
bHVlKCkKICAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVW
YWx1ZSgpIGluCi0gICAgLy8gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFz
Q2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCisgICAgLy8gSFRNTElucHV0RWxlbWVudDo6c3VidHJl
ZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2VzLgogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG51
bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgp
LT5yZW5kZXJlcigpKS0+dGV4dCgpKTsKIAogICAgIC8vIHNlbGVjdGlvbkxlbmd0aCByZXByZXNl
bnRzIHRoZSBzZWxlY3Rpb24gbGVuZ3RoIG9mIHRoaXMgdGV4dCBmaWVsZCB0byBiZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZp
c2lvbiA5MDk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxMiArMTcyLDYgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6c2V0SW5uZXJUZXh0VmFsdQogICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KCkpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogfQogCi12b2lk
IFJlbmRlclRleHRDb250cm9sOjpzZXRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoYm9vbCBsYXN0Q2hh
bmdlV2FzVXNlckVkaXQpCi17Ci0gICAgbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQgPSBsYXN0Q2hh
bmdlV2FzVXNlckVkaXQ7Ci0gICAgZG9jdW1lbnQoKS0+c2V0SWdub3JlQXV0b2ZvY3VzKGxhc3RD
aGFuZ2VXYXNVc2VyRWRpdCk7Ci19Ci0KIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJv
bDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChp
bmRleCA8PSAwKQpAQCAtMTkxLDExICsxODUsNiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4
dENvbnRyb2w6OnZpc2liCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5l
bmRQb3NpdGlvbigpLCBVUFNUUkVBTSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN1
YnRyZWVIYXNDaGFuZ2VkKCkKLXsKLSAgICBtX2xhc3RDaGFuZ2VXYXNVc2VyRWRpdCA9IHRydWU7
Ci19Ci0KIHN0YXRpYyBTdHJpbmcgZmluaXNoVGV4dChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCiB7
CiAgICAgLy8gUmVtb3ZlIG9uZSB0cmFpbGluZyBuZXdsaW5lOyB0aGVyZSdzIGFsd2F5cyBvbmUg
dGhhdCdzIGNvbGxhcHNlZCBvdXQgYnkgcmVuZGVyaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDkwOTg0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDkgKzM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gY3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUp
IGNvbnN0ID0gMDsKIAogICAgIGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQ7IH0KLSAgICB2b2lkIHNldExhc3RDaGFuZ2VX
YXNVc2VyRWRpdChib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZUJ5VXNlcigp
IHsgbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQgPSB0cnVlOyB9CiAgICAgU3RyaW5nIHRleHQoKTsK
ICAgICBTdHJpbmcgdGV4dFdpdGhIYXJkTGluZUJyZWFrcygpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAJKHJldmlzaW9uIDkwOTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjEgKzQyLDYgQEAg
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6On5SZW5kZXJUZXh0QwogICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+cmVuZGVyZXJXaWxsQmVEZXN0cm95
ZWQoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZUhhc0No
YW5nZWQoKQotewotICAgIFJlbmRlclRleHRDb250cm9sOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpOwot
ICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRB
cmVhRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgdGV4dEFyZWEtPnNldENoYW5nZWRTaW5jZUxhc3RG
b3JtQ29udHJvbENoYW5nZUV2ZW50KHRydWUpOwotICAgIHRleHRBcmVhLT5zZXRGb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAgICB0ZXh0QXJlYS0+c2V0TmVlZHNWYWxp
ZGl0eUNoZWNrKCk7Ci0KLSAgICBpZiAoIW5vZGUoKS0+Zm9jdXNlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSh0ZXh0QXJlYSk7Ci19Ci0KIGJv
b2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBpZiAoIVJlbmRlclRleHRDb250
cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA5
MDk4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEFyZWEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKLQogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZn
Q2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDkwOTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDYgQEAgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0QwogICAgICwgbV9zZWFyY2hQb3B1cElz
VmlzaWJsZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKGZhbHNl
KQogICAgICwgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0KC0xKQotICAgICwgbV9zZWFyY2hFdmVu
dFRpbWVyKHRoaXMsICZSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlYXJjaEV2ZW50VGlt
ZXJGaXJlZCkKICAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNI
VE1MRWxlbWVudCgpKTsKQEAgLTE1NiwxMSArMTU1LDYgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmFkZFNlYQogICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hl
cyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnN0b3BTZWFyY2hFdmVudFRpbWVyKCkKLXsKLSAgICBtX3NlYXJjaEV2ZW50VGlt
ZXIuc3RvcCgpOwotfQotCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1Bv
cHVwKCkKIHsKICAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKQEAgLTE5Niw0NCArMTkw
LDYgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQbwogICAgICAgICBt
X3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+aGlkZSgpOwogfQogCi12b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQoKQotewotICAgIFJlbmRlclRleHRD
b250cm9sOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpOwotCi0gICAgQVNTRVJUKG5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUoKSk7Ci0gICAgYm9vbCB3YXNDaGFuZ2VkID0gZWxlbWVudC0+d2FzQ2hhbmdlZFNpbmNl
TGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKLSAgICBlbGVtZW50LT5zZXRDaGFuZ2VkU2lu
Y2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKLQotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjYWxs
IHNhbml0aXplVXNlcklucHV0VmFsdWUoKSBmdW5jdGlvbiBoZXJlIGJlY2F1c2UKLSAgICAvLyBI
VE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGhhcyBhbHJl
YWR5IGNhbGxlZAotICAgIC8vIHNhbml0aXplVXNlcklucHV0VmFsdWUoKS4KLSAgICAvLyBzYW5p
dGl6ZVZhbHVlKCkgaXMgbmVlZGVkIGJlY2F1c2UgSU1FIGlucHV0IGRvZXNuJ3QgZGlzcGF0Y2gg
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQuCi0gICAgU3RyaW5nIHZhbHVlID0gdGV4dCgpOwotICAg
IGlmIChpbnB1dC0+aXNBY2NlcHRhYmxlVmFsdWUodmFsdWUpKQotICAgICAgICBpbnB1dC0+c2V0
VmFsdWVGcm9tUmVuZGVyZXIoaW5wdXQtPnNhbml0aXplVmFsdWUoaW5wdXQtPmNvbnZlcnRGcm9t
VmlzaWJsZVZhbHVlKHZhbHVlKSkpOwotICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgYW5kIGhh
c1VuYWNjZXB0YWJsZVZhbHVlKCkgY2hhbmdlLgotICAgIGlucHV0LT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7Ci0KLSAgICBpZiAoY2FuY2VsQnV0dG9uRWxlbWVudCgpKQotICAgICAgICB1cGRhdGVD
YW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5jcmVtZW50YWwgYXR0
cmlidXRlIGlzIHNldCwgdGhlbiBkaXNwYXRjaCB0aGUgc2VhcmNoIGV2ZW50Ci0gICAgaWYgKGlu
cHV0LT5zZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSkKLSAgICAgICAgc3RhcnRTZWFy
Y2hFdmVudFRpbWVyKCk7Ci0KLSAgICBpZiAoIXdhc0NoYW5nZWQgJiYgbm9kZSgpLT5mb2N1c2Vk
KCkpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCi0gICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUoKS0+Zm9jdXNlZCgp
KSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50KHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtNTg4LDI3ICs1NDQsNiBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIFJlbmRlclRleHRDb250cm9sU2luCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpLT5nZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKIH0KIAotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpCi17Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOwotCi0gICAgLy8gSWYgdGhlcmUncyBubyB0
ZXh0LCBmaXJlIHRoZSBldmVudCByaWdodCBhd2F5LgotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAg
ICAgIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0gICAgICAgIGlucHV0RWxlbWVudCgpLT5vblNl
YXJjaCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWZ0ZXIgdHlwaW5nIHRo
ZSBmaXJzdCBrZXksIHdlIHdhaXQgMC41IHNlY29uZHMuCi0gICAgLy8gQWZ0ZXIgdGhlIHNlY29u
ZCBrZXksIDAuNCBzZWNvbmRzLCB0aGVuIDAuMywgdGhlbiAwLjIgZnJvbSB0aGVuIG9uLgotICAg
IG1fc2VhcmNoRXZlbnRUaW1lci5zdGFydE9uZVNob3QobWF4KDAuMiwgMC42IC0gMC4xICogbGVu
Z3RoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWFyY2hFdmVu
dFRpbWVyRmlyZWQoVGltZXI8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lPiopCi17Ci0gICAg
aW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7Ci19Ci0KIC8vIFBvcHVwTWVudUNsaWVudCBtZXRo
b2RzCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2ln
bmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2
aXNpb24gOTA5ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1
ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw2ICszOCw3
IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogTW92ZSBjcmVhdGUqU3R5bGUoKSB0byB0aGVpciBj
bGFzc2VzLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwogICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogc3RhcnRTdHlsZSkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmls
aXR5KCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgc3Rv
cFNlYXJjaEV2ZW50VGltZXIoKTsKQEAgLTU0LDcgKzU0LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwogCkBAIC04MiwxMyArODEsOSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBSZW5kZXJT
dHlsZSogdGV4dEJhc2VTdHlsZSgpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0
b25WaXNpYmlsaXR5KCkgY29uc3Q7CiAgICAgRVZpc2liaWxpdHkgdmlzaWJpbGl0eUZvckNhbmNl
bEJ1dHRvbigpIGNvbnN0OwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXV0b3NhdmVOYW1lKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpOwotICAgIHZvaWQgc2Vh
cmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4qKTsK
LQogICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOwogICAg
IHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7fQpAQCAtMTMy
LDcgKzEyNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwog
ICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7CiAgICAgTGF5b3V0VW5pdCBt
X2Rlc2lyZWRJbm5lclRleHRIZWlnaHQ7Ci0gICAgVGltZXI8UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lPiBtX3NlYXJjaEV2ZW50VGltZXI7CiAgICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4g
bV9zZWFyY2hQb3B1cDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2VudFNlYXJjaGVzOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>