<?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>50825</bug_id>
          
          <creation_ts>2010-12-10 10:14:12 -0800</creation_ts>
          <short_desc>GeolocationPositionCache should do database access on background thread</short_desc>
          <delta_ts>2011-07-28 07:59:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>50826</dependson>
          <blocked>65289</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>levin</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>320218</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-10 10:14:12 -0800</bug_when>
    <thetext>GeolocationPositionCache should do database access on background thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323771</commentid>
    <comment_count>1</comment_count>
      <attachid>76878</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-17 08:02:04 -0800</bug_when>
    <thetext>Created attachment 76878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324331</commentid>
    <comment_count>2</comment_count>
      <attachid>76878</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-20 04:25:09 -0800</bug_when>
    <thetext>Comment on attachment 76878
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:38
&gt;  

no newline

&gt; WebCore/page/GeolocationPositionCache.cpp:64
&gt; +    if (!(numUsers++) &amp;&amp; !m_threadId) {

This one line is doing a lot.  Maybe the ++numUsers should stay outside of the if statement?

&gt; WebCore/page/GeolocationPositionCache.cpp:75
&gt;      if (!(--numUsers) &amp;&amp; m_cachedPosition)

ditto

&gt; WebCore/page/GeolocationPositionCache.cpp:106
&gt; +    m_threadId = createThread(threadEntryPoint, this, &quot;WebCore: GeolocationPositionCache&quot;);

Is there any other thread we can share?  Or will this be used for anything else?

&gt; WebCore/page/GeolocationPositionCache.cpp:118
&gt; +        task-&gt;performTask(0 /* ScriptExecutionContext */);

I don&apos;t think we typically use /* style comments.  Maybe instead of saying it&apos;s the SEC (which anyone can look up) you should explain why it&apos;s fine to pass 0...i.e. it&apos;s unused on the other side.  Or just delete.

&gt; WebCore/page/GeolocationPositionCache.cpp:133
&gt; +    MutexLocker lock(m_cachedPositionMutex);

Everything in this can block the main thread.

The next line is just an optimization anyway (if you do a final check before setting m_cachedPostion below).  In non-testing, things will only be created/set in this thread.  So I don&apos;t think you need the lock until my comment below.

&gt; WebCore/page/GeolocationPositionCache.cpp:173
&gt;      m_cachedPosition = Geoposition::create(coordinates.release(), statement.getColumnInt64(7)); // timestamp

Here you should take the lock...and do an if statement to verify it hasn&apos;t been set.

&gt; WebCore/page/GeolocationPositionCache.cpp:188
&gt; +    MutexLocker lock(m_cachedPositionMutex);

Only lock to get a snapshot.  Don&apos;t hold it.  Otherwise, there&apos;s no point...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324355</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 06:27:14 -0800</bug_when>
    <thetext>&gt; no newline
Will do

&gt; This one line is doing a lot.  Maybe the ++numUsers should stay outside of the if statement?
Will do

&gt; Is there any other thread we can share?  Or will this be used for anything else?
I don&apos;t have any plans to use this thread for anything else. Is there a precedent for using a thread for multiple tasks? Do you have a suggestion as to which thread I could use.

&gt; I don&apos;t think we typically use /* style comments.
Will do

&gt; Everything in this can block the main thread.
&gt; Only lock to get a snapshot.  Don&apos;t hold it.  Otherwise, there&apos;s no point...
The reason I lock early is that I also need to protect access to m_databaseFile (I admit my mutex is badly named). There&apos;s still benefit, as the WebCore thread can now treat this as a &apos;fire and forget&apos; operation. It&apos;s unlikely that the DB thread will be in the middle of a read/write when the WebCore thread next asks for the cached position.

One solution would be to use multiple mutexes and use finer grained locking, but that adds more complexity. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324365</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-20 06:33:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; no newline
&gt; Will do
&gt; 
&gt; &gt; This one line is doing a lot.  Maybe the ++numUsers should stay outside of the if statement?
&gt; Will do
&gt; 
&gt; &gt; Is there any other thread we can share?  Or will this be used for anything else?
&gt; I don&apos;t have any plans to use this thread for anything else. Is there a precedent for using a thread for multiple tasks? Do you have a suggestion as to which thread I could use.

There&apos;s not much precedent for threads in general.  In the few places that use them, it&apos;s one function per thread.  So I guess leave it, but maybe put a FIXME combine with other threads?  or something.
 
&gt; &gt; I don&apos;t think we typically use /* style comments.
&gt; Will do
&gt; 
&gt; &gt; Everything in this can block the main thread.
&gt; &gt; Only lock to get a snapshot.  Don&apos;t hold it.  Otherwise, there&apos;s no point...
&gt; The reason I lock early is that I also need to protect access to m_databaseFile (I admit my mutex is badly named). There&apos;s still benefit, as the WebCore thread can now treat this as a &apos;fire and forget&apos; operation. It&apos;s unlikely that the DB thread will be in the middle of a read/write when the WebCore thread next asks for the cached position.
&gt; 
&gt; One solution would be to use multiple mutexes and use finer grained locking, but that adds more complexity. WDYT?

Just use one mutex and {}&apos;s to control the scoping of it.  You can lock it to get the data, do the read, and then lock again to set the values (and verify the constraints are still as expected...if not, I guess loop and run again?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324390</commentid>
    <comment_count>5</comment_count>
      <attachid>76999</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 07:46:25 -0800</bug_when>
    <thetext>Created attachment 76999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324392</commentid>
    <comment_count>6</comment_count>
      <attachid>76999</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-20 07:51:22 -0800</bug_when>
    <thetext>Comment on attachment 76999
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:221
&gt; +    MutexLocker lock(m_cachedPositionMutex);

You probably should just save the data off while you hold the lock above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324394</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-20 07:58:39 -0800</bug_when>
    <thetext>Attachment 76999 did not build on qt:
Build output: http://queues.webkit.org/results/7318068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324395</commentid>
    <comment_count>8</comment_count>
      <attachid>77001</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 08:02:52 -0800</bug_when>
    <thetext>Created attachment 77001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324396</commentid>
    <comment_count>9</comment_count>
      <attachid>77002</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 08:04:46 -0800</bug_when>
    <thetext>Created attachment 77002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324397</commentid>
    <comment_count>10</comment_count>
      <attachid>77001</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-20 08:07:57 -0800</bug_when>
    <thetext>Comment on attachment 77001
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:206
&gt; +        cachedPosition = m_cachedPosition;

You can&apos;t do this.  Geoposition is not threadsafe ref counted.  You&apos;ll need to copy all the individual values or add a method to get a copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324400</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 08:11:51 -0800</bug_when>
    <thetext>Attachment 77001 did not build on mac:
Build output: http://queues.webkit.org/results/7201074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324410</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-20 08:29:36 -0800</bug_when>
    <thetext>Attachment 76999 did not build on win:
Build output: http://queues.webkit.org/results/7198090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324413</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-20 08:38:35 -0800</bug_when>
    <thetext>Attachment 76999 did not build on mac:
Build output: http://queues.webkit.org/results/7241075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324436</commentid>
    <comment_count>14</comment_count>
      <attachid>77011</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 10:00:32 -0800</bug_when>
    <thetext>Created attachment 77011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324444</commentid>
    <comment_count>15</comment_count>
      <attachid>77011</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-20 10:27:55 -0800</bug_when>
    <thetext>Comment on attachment 77011
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324448</commentid>
    <comment_count>16</comment_count>
      <attachid>77011</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-20 10:37:31 -0800</bug_when>
    <thetext>Comment on attachment 77011
Patch

Rejecting attachment 77011 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;apply-attachment&apos;, &apos;--non-interactive&apos;, 77011]&quot; exit_code: 2
Last 500 characters of output:
ations.txt
Failed to merge in the changes.
Patch failed at 0001 2010-12-20  Yury Semikhatsky  &lt;yurys@chromium.org&gt;

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 132.

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 2

Full output: http://queues.webkit.org/results/7297070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324450</commentid>
    <comment_count>17</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-20 10:42:29 -0800</bug_when>
    <thetext>Committed r74354: &lt;http://trac.webkit.org/changeset/74354&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324463</commentid>
    <comment_count>18</comment_count>
      <attachid>77011</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-20 11:13:32 -0800</bug_when>
    <thetext>Comment on attachment 77011
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:102
&gt; +    MutexLocker lock(m_cachedPositionMutex);
&gt;      return m_cachedPosition.get();

This is clearly wrong.

&gt; WebCore/page/GeolocationPositionCache.cpp:121
&gt; +        task-&gt;performTask(0);

This really isn&apos;t correct. This has nothing to do with ScriptExecutionContext.

Really what should happen is a better refactoring of this functionality but this is just hacked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324469</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 11:27:31 -0800</bug_when>
    <thetext>I&apos;m very sorry teh commit-queue went crazy again (corrupted its git repo).  Fixing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326241</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-23 12:59:55 -0800</bug_when>
    <thetext>This caused bug 51557.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326242</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-23 13:00:37 -0800</bug_when>
    <thetext>Please assign to yourself bugs that you fix so that regressions can be blamed to the right person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327643</commentid>
    <comment_count>22</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-29 11:43:39 -0800</bug_when>
    <thetext>&gt; This caused bug 51557.
It looks like this is not the cause of that bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328191</commentid>
    <comment_count>23</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-31 09:39:43 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/page/GeolocationPositionCache.cpp:102
&gt; &gt; +    MutexLocker lock(m_cachedPositionMutex);
&gt; &gt;      return m_cachedPosition.get();
&gt; This is clearly wrong.
Can you elaborate?

&gt; &gt; WebCore/page/GeolocationPositionCache.cpp:121
&gt; &gt; +        task-&gt;performTask(0);
&gt; 
&gt; This really isn&apos;t correct. This has nothing to do with ScriptExecutionContext.
I&apos;m not aware of another generic task queue that I could make use of and I was advised to make use of this class.  Is there another class I should be using? Or I could file a bug to factor out the part of this class that isn&apos;t specific to ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328395</commentid>
    <comment_count>24</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-02 08:16:11 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; WebCore/page/GeolocationPositionCache.cpp:102
&gt; &gt; &gt; +    MutexLocker lock(m_cachedPositionMutex);
&gt; &gt; &gt;      return m_cachedPosition.get();
&gt; &gt; This is clearly wrong.
&gt; Can you elaborate?

This adds a lock around m_cachedPosition. Why?

Either the lock isn&apos;t needed or the returned value may be garbage (because the lock is released). Either way &quot;this is clearly wrong.&quot; :) 


&gt; 
&gt; &gt; &gt; WebCore/page/GeolocationPositionCache.cpp:121
&gt; &gt; &gt; +        task-&gt;performTask(0);
&gt; &gt; 
&gt; &gt; This really isn&apos;t correct. This has nothing to do with ScriptExecutionContext.
&gt; I&apos;m not aware of another generic task queue that I could make use of and I was advised to make use of this class.  Is there another class I should be using? Or I could file a bug to factor out the part of this class that isn&apos;t specific to ScriptExecutionContext.

The refactoring should have occurred to support this work beforehand rather than hacking something in like this. In such a large codebase everyone has to make efforts to not degrade it (like this) or you end up with a mess. That being said I think Kinuko is making progress in this area.

I called this out because in my opinion that is the point of code reviews to help us to not take the shortcuts that seem convenient to the developer but degrade the codebase with hacks (which I also have been called out on in code reviews).

Perhaps there should be a bug to clean this code up though because this is ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328750</commentid>
    <comment_count>25</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 13:30:32 -0800</bug_when>
    <thetext>&gt; This adds a lock around m_cachedPosition. Why?
&gt; 
&gt; Either the lock isn&apos;t needed or the returned value may be garbage (because
&gt; the lock is released). Either way &quot;this is clearly wrong.&quot; :) 
This method is called on the WebCore thread. The lock is required because m_cachedPosition can be set from readFromDatabase() on the background thread.

However, once m_cachedPosition has been set to a non-null value it&apos;s never modified on the background thread, only on the WebCore thread. So the pointer returned by cachedPosition() will never become garbage due to the background thread, even after the lock is released.

&gt; Perhaps there should be a bug to clean this code up though because this is
&gt; ugly.
OK, filed Bug 51818</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328769</commentid>
    <comment_count>26</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-03 13:52:09 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; &gt; This adds a lock around m_cachedPosition. Why?
&gt; &gt; 
&gt; &gt; Either the lock isn&apos;t needed or the returned value may be garbage (because
&gt; &gt; the lock is released). Either way &quot;this is clearly wrong.&quot; :) 
&gt; This method is called on the WebCore thread. The lock is required because m_cachedPosition can be set from readFromDatabase() on the background thread.
&gt; 
&gt; However, once m_cachedPosition has been set to a non-null value it&apos;s never modified on the background thread, only on the WebCore thread. So the pointer returned by cachedPosition() will never become garbage due to the background thread, even after the lock is released.

ok, so this is guarding against a half-assigned pointer. Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76878</attachid>
            <date>2010-12-17 08:02:04 -0800</date>
            <delta_ts>2010-12-20 07:46:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50825-20101217160202.patch</filename>
            <type>text/plain</type>
            <size>7554</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDI2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMTItMTcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBzaG91bGQgZG8gZGF0YWJhc2UgYWNjZXNzIG9uIGJh
Y2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDgyNQorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgR2VvbG9jYXRpb24g
dGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OmFkZFVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpy
ZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
c2V0RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGU6OnN0YXJ0QmFja2dyb3VuZFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6cmVhZEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFz
ZUltcGwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmg6CisKIDIw
MTAtMTItMTcgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNzQyNjgpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCkBAIC0zNSw2ICszNiwxMSBAQAogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IG51bVVz
ZXJzID0gMDsKQEAgLTQ4LDIwICs1NCwyNiBAQCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIEdl
b2xvY2F0aW9uUG9zCiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlKCkKLSAgICA6IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UoZmFsc2UpCisgICAg
OiBtX3RocmVhZElkKDApCiB7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjph
ZGRVc2VyKCkKIHsKICAgICBBU1NFUlQobnVtVXNlcnMgPj0gMCk7Ci0gICAgKytudW1Vc2VyczsK
KyAgICBpZiAoIShudW1Vc2VycysrKSAmJiAhbV90aHJlYWRJZCkgeworICAgICAgICBzdGFydEJh
Y2tncm91bmRUaHJlYWQoKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0
aW9uTXV0ZXgpOworICAgICAgICBpZiAoIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgICAgICB0
cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOworICAgIH0KIH0KIAogdm9pZCBHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2sobV9jYWNo
ZWRQb3NpdGlvbk11dGV4KTsKICAgICBpZiAoISgtLW51bVVzZXJzKSAmJiBtX2NhY2hlZFBvc2l0
aW9uKQotICAgICAgICB3cml0ZVRvRGF0YWJhc2UoKTsKKyAgICAgICAgdHJpZ2dlcldyaXRlVG9E
YXRhYmFzZSgpOwogICAgIEFTU0VSVChudW1Vc2VycyA+PSAwKTsKIH0KIApAQCAtNjksMzAgKzgx
LDU5IEBAIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmEKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsK
ICAgICBTdHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmls
ZU5hbWVUb1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
Y2FjaGVkUG9zaXRpb25NdXRleCk7CiAgICAgaWYgKG1fZGF0YWJhc2VGaWxlICE9IG5ld0ZpbGUp
IHsKICAgICAgICAgbV9kYXRhYmFzZUZpbGUgPSBuZXdGaWxlOwotICAgICAgICBtX2hhdmVSZWFk
RnJvbURhdGFiYXNlID0gZmFsc2U7CisgICAgICAgIGlmIChudW1Vc2VycyAmJiAhbV9jYWNoZWRQ
b3NpdGlvbikKKyAgICAgICAgICAgIHRyaWdnZXJSZWFkRnJvbURhdGFiYXNlKCk7CiAgICAgfQog
fQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24oR2Vv
cG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKQogeworICAgIE11dGV4TG9ja2VyIGxvY2sobV9jYWNo
ZWRQb3NpdGlvbk11dGV4KTsKICAgICBtX2NhY2hlZFBvc2l0aW9uID0gY2FjaGVkUG9zaXRpb247
CiB9CiAKIEdlb3Bvc2l0aW9uKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0
aW9uKCkKIHsKLSAgICBpZiAoIW1faGF2ZVJlYWRGcm9tRGF0YWJhc2UgJiYgIW1fY2FjaGVkUG9z
aXRpb24pCi0gICAgICAgIHJlYWRGcm9tRGF0YWJhc2UoKTsKKyAgICBNdXRleExvY2tlciBsb2Nr
KG1fY2FjaGVkUG9zaXRpb25NdXRleCk7CiAgICAgcmV0dXJuIG1fY2FjaGVkUG9zaXRpb24uZ2V0
KCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNl
KCkKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzdGFydEJhY2tncm91bmRUaHJlYWQo
KQoreworICAgIG1fdGhyZWFkSWQgPSBjcmVhdGVUaHJlYWQodGhyZWFkRW50cnlQb2ludCwgdGhp
cywgIldlYkNvcmU6IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSIpOworfQorCit2b2lkKiBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnQodm9pZCogb2JqZWN0KQorewor
ICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSo+KG9iamVjdCktPnRocmVh
ZEVudHJ5UG9pbnRJbXBsKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1wbCgpCit7CisgICAgd2hpbGUgKE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVz
c2FnZSgpKQorICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwIC8qIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgKi8pOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlclJl
YWRGcm9tRGF0YWJhc2UoKQogewotICAgIEFTU0VSVCghbV9oYXZlUmVhZEZyb21EYXRhYmFzZSk7
Ci0gICAgQVNTRVJUKCFtX2NhY2hlZFBvc2l0aW9uKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChjcmVh
dGVDYWxsYmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFz
ZSwgdGhpcykpOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21E
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hl
KiBjYWNoZSkKK3sKKyAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKK30KIAotICAg
IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UgPSB0cnVlOwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
Y2FjaGVkUG9zaXRpb25NdXRleCk7CisgICAgLy8gQSBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHNl
dCBzaW5jZSB3ZSBjYWxsZWQgdHJpZ2dlclJlYWRGcm9tRGF0YWJhc2UoKS4KKyAgICBpZiAobV9j
YWNoZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0
YWJhc2U7CiAgICAgaWYgKCFkYXRhYmFzZS5vcGVuKG1fZGF0YWJhc2VGaWxlKSkKQEAgLTEzMiw4
ICsxNzMsMTkgQEAgdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRAogICAg
IG1fY2FjaGVkUG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVh
c2UoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDcpKTsgLy8gdGltZXN0YW1wCiB9CiAKLXZv
aWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0YWJhc2UoKQordm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKQoreworICAgIG1f
cXVldWUuYXBwZW5kKGNyZWF0ZUNhbGxiYWNrVGFzayh3cml0ZVRvRGF0YWJhc2UsIHRoaXMpKTsK
K30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKK3sK
KyAgICBjYWNoZS0+d3JpdGVUb0RhdGFiYXNlSW1wbCgpOworfQorCit2b2lkIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlSW1wbCgpCiB7CisgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOwogICAgIEFTU0VSVChtX2NhY2hlZFBvc2l0aW9u
KTsKIAogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwpJbmRleDogV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkocmV2aXNpb24gNzQyNjgpCisrKyBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDEw
IEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKwogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC0z
NSw2ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdlb3Bvc2l0aW9uOwog
CisvLyBNYWludGFpbnMgYSBjYWNoZWQgcG9zaXRpb24gZm9yIEdlb2xvY2F0aW9uLiBUYWtlcyBj
YXJlIG9mIHdyaXRpbmcgYW5kCisvLyByZWFkaW5nIHRoZSBwb3NpdGlvbiB0byBhIGRhdGFiYXNl
IG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuIFRoZSBHZW9sb2NhdGlvbgorLy8gc3BlYyBkb2VzIG5v
dCByZXF1aXJlIGEgY2FjaGVkIHBvc2l0aW9uIHRvIGJlIG1haW50YWluZWQsIHNvIHdlIHRha2Ug
YQorLy8gYmVzdC1lZmZvcnQgYXBwcm9hY2ggd2hlcmUgd2UgZG8gbm90IHdhaXQgZm9yIGRhdGFi
YXNlIHJlYWRzIG9yIHdyaXRlcy4KIGNsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogaW5zdGFuY2UoKTsK
QEAgLTQ5LDEyICs1NiwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSgpOwogCi0gICAgdm9pZCByZWFkRnJvbURhdGFiYXNlKCk7Ci0gICAgdm9pZCB3
cml0ZVRvRGF0YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0QmFja2dyb3VuZFRocmVhZCgpOworICAg
IHN0YXRpYyB2b2lkKiB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIG9iamVjdCk7CisgICAgdm9pZCB0
aHJlYWRFbnRyeVBvaW50SW1wbCgpOworCisgICAgdm9pZCB0cmlnZ2VyUmVhZEZyb21EYXRhYmFz
ZSgpOworICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZvaWQgcmVhZEZyb21EYXRh
YmFzZUltcGwoKTsKKyAgICB2b2lkIHRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKTsKKyAgICBzdGF0
aWMgdm9pZCB3cml0ZVRvRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNlSW1wbCgpOwogCiAg
ICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2NhY2hlZFBvc2l0aW9uOworICAgIE11dGV4IG1fY2Fj
aGVkUG9zaXRpb25NdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7CisgICAg
TWVzc2FnZVF1ZXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IG1fcXVldWU7CiAgICAg
U3RyaW5nIG1fZGF0YWJhc2VGaWxlOwotICAgIGJvb2wgbV9oYXZlUmVhZEZyb21EYXRhYmFzZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76999</attachid>
            <date>2010-12-20 07:46:25 -0800</date>
            <delta_ts>2010-12-20 08:02:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50825-20101220154623.patch</filename>
            <type>text/plain</type>
            <size>11021</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMTItMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBzaG91bGQgZG8gZGF0YWJhc2UgYWNjZXNzIG9uIGJh
Y2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDgyNQorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgR2VvbG9jYXRpb24g
dGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OmFkZFVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpy
ZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
c2V0RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGU6OnN0YXJ0QmFja2dyb3VuZFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6cmVhZEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFz
ZUltcGwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmg6CisKIDIw
MTAtMTItMjAgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgs
MTcgQEAKIAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKIAorI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIK
ICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ4LDU1ICs1Myw5MyBAQCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIEdlb2xvY2F0aW9u
UG9zCiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlKCkKLSAgICA6IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UoZmFsc2UpCisgICAgOiBtX3RocmVh
ZElkKDApCiB7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjphZGRVc2VyKCkK
IHsKICAgICBBU1NFUlQobnVtVXNlcnMgPj0gMCk7CisgICAgaWYgKCFudW1Vc2VycyAmJiAhbV90
aHJlYWRJZCkgeworICAgICAgICBzdGFydEJhY2tncm91bmRUaHJlYWQoKTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOworICAgICAgICBpZiAoIW1fY2Fj
aGVkUG9zaXRpb24pCisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOworICAg
IH0KICAgICArK251bVVzZXJzOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
cmVtb3ZlVXNlcigpCiB7Ci0gICAgaWYgKCEoLS1udW1Vc2VycykgJiYgbV9jYWNoZWRQb3NpdGlv
bikKLSAgICAgICAgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2Nh
Y2hlZFBvc2l0aW9uTXV0ZXgpOworICAgIC0tbnVtVXNlcnM7CiAgICAgQVNTRVJUKG51bVVzZXJz
ID49IDApOworICAgIGlmICghbnVtVXNlcnMgJiYgbV9jYWNoZWRQb3NpdGlvbikKKyAgICAgICAg
dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsKICAgICBT
dHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJh
c2VGaWxlTXV0ZXgpOwogICAgIGlmIChtX2RhdGFiYXNlRmlsZSAhPSBuZXdGaWxlKSB7CiAgICAg
ICAgIG1fZGF0YWJhc2VGaWxlID0gbmV3RmlsZTsKLSAgICAgICAgbV9oYXZlUmVhZEZyb21EYXRh
YmFzZSA9IGZhbHNlOworICAgICAgICBpZiAobnVtVXNlcnMgJiYgIW1fY2FjaGVkUG9zaXRpb24p
CisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOwogICAgIH0KIH0KIAogdm9p
ZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldENhY2hlZFBvc2l0aW9uKEdlb3Bvc2l0aW9u
KiBjYWNoZWRQb3NpdGlvbikKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9zaXRp
b25NdXRleCk7CiAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IGNhY2hlZFBvc2l0aW9uOwogfQogCiBH
ZW9wb3NpdGlvbiogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbigpCiB7
Ci0gICAgaWYgKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlICYmICFtX2NhY2hlZFBvc2l0aW9uKQot
ICAgICAgICByZWFkRnJvbURhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hl
ZFBvc2l0aW9uTXV0ZXgpOwogICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLmdldCgpOwogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSgpCit2b2lk
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c3RhcnRCYWNrZ3JvdW5kVGhyZWFkKCkKK3sKKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgc2hhcmluZyB0aGlzIHRocmVhZCB3aXRoIG90aGVyIGJhY2tn
cm91bmQgdGFza3MuCisgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRFbnRyeVBv
aW50LCB0aGlzLCAiV2ViQ29yZTogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIik7Cit9CisKK3Zv
aWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhyZWFkRW50cnlQb2ludCh2b2lkKiBvYmpl
Y3QpCiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlKTsKLSAgICBBU1NFUlQo
IW1fY2FjaGVkUG9zaXRpb24pOworICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZSo+KG9iamVjdCktPnRocmVhZEVudHJ5UG9pbnRJbXBsKCk7CisgICAgcmV0dXJuIDA7Cit9
CiAKLSAgICBtX2hhdmVSZWFkRnJvbURhdGFiYXNlID0gdHJ1ZTsKK3ZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1wbCgpCit7CisgICAgd2hpbGUgKE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVz
c2FnZSgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IGluIHRoZSBjYWxsYmFjaywgc28gcGFzcyAwIGhlcmUuCisgICAgICAgIHRhc2stPnBlcmZv
cm1UYXNrKDApOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRy
aWdnZXJSZWFkRnJvbURhdGFiYXNlKCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxs
YmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhp
cykpOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNo
ZSkKK3sKKyAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKK30KIAordm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKCkKK3sKICAgICBTUUxp
dGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZp
bGUpKQotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1f
ZGF0YWJhc2VGaWxlTXV0ZXgpOworICAgICAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFz
ZUZpbGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENyZWF0ZSB0aGUg
dGFibGUgaGVyZSwgc3VjaCB0aGF0IGV2ZW4gaWYgd2UndmUganVzdCBjcmVhdGVkIHRoZQogICAg
IC8vIERCLCB0aGUgY29tbWFuZHMgYmVsb3cgc2hvdWxkIHN1Y2NlZWQuCkBAIC0xMjksMTYgKzE3
MiwzMyBAQCB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21ECiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDQpLCAvLyBhbHRp
dHVkZUFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91Ymxl
KDUpLCAvLyBoZWFkaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZXNTcGVlZCwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJs
ZSg2KSk7IC8vIHNwZWVkCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVh
dGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoNykpOyAv
LyB0aW1lc3RhbXAKKyAgICBpbnQ2NCB0aW1lc3RhbXAgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoNyk7IC8vIHRpbWVzdGFtcAorCisgICAgLy8gQSBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHNl
dCBzaW5jZSB3ZSBjYWxsZWQgdHJpZ2dlclJlYWRGcm9tRGF0YWJhc2UoKS4KKyAgICBNdXRleExv
Y2tlciBsb2NrKG1fY2FjaGVkUG9zaXRpb25NdXRleCk7CisgICAgaWYgKG1fY2FjaGVkUG9zaXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gR2VvcG9zaXRpb246
OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCksIHRpbWVzdGFtcCk7Cit9CisKK3ZvaWQgR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0cmlnZ2VyV3JpdGVUb0RhdGFiYXNlKCkKK3sKKyAgICBt
X3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxsYmFja1Rhc2sod3JpdGVUb0RhdGFiYXNlLCB0aGlzKSk7
CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0YWJhc2UoKQor
dm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKIHsKLSAgICBB
U1NFUlQobV9jYWNoZWRQb3NpdGlvbik7CisgICAgY2FjaGUtPndyaXRlVG9EYXRhYmFzZUltcGwo
KTsKK30KIAordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZUlt
cGwoKQorewogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwotICAgIGlmICghZGF0YWJhc2Uu
b3BlbihtX2RhdGFiYXNlRmlsZSkpCi0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV9kYXRhYmFzZUZpbGVNdXRleCk7CisgICAgICAgIGlmICghZGF0YWJh
c2Uub3BlbihtX2RhdGFiYXNlRmlsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGF0YWJhc2UpOwogCkBAIC0xNTgsMjYg
KzIxOCwzMCBAQCB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhCiAgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybjsK
IAotICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDEsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3Jkcygp
LT5sYXRpdHVkZSgpKTsKLSAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgyLCBtX2NhY2hlZFBvc2l0
aW9uLT5jb29yZHMoKS0+bG9uZ2l0dWRlKCkpOwotICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5j
b29yZHMoKS0+Y2FuUHJvdmlkZUFsdGl0dWRlKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91
YmxlKDMsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZSgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCgzKTsKLSAgICBzdGF0ZW1lbnQuYmluZERvdWJs
ZSg0LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWNjdXJhY3koKSk7Ci0gICAgaWYgKG1f
Y2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpKQot
ICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg1LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMo
KS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXRlbWVudC5iaW5k
TnVsbCg1KTsKLSAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVI
ZWFkaW5nKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIG1fY2FjaGVkUG9zaXRp
b24tPmNvb3JkcygpLT5oZWFkaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3RhdGVtZW50LmJp
bmROdWxsKDYpOwotICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlk
ZVNwZWVkKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDcsIG1fY2FjaGVkUG9zaXRp
b24tPmNvb3JkcygpLT5zcGVlZCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXRlbWVudC5iaW5k
TnVsbCg3KTsKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDgsIG1fY2FjaGVkUG9zaXRpb24tPnRp
bWVzdGFtcCgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9zaXRpb25NdXRleCk7
CisgICAgeworICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBtX2NhY2hlZFBvc2l0aW9u
LT5jb29yZHMoKS0+bGF0aXR1ZGUoKSk7CisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDIs
IG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5sb25naXR1ZGUoKSk7CisgICAgICAgIGlmICht
X2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUFsdGl0dWRlKCkpCisgICAgICAg
ICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgzLCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+
YWx0aXR1ZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kTnVs
bCgzKTsKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNCwgbV9jYWNoZWRQb3NpdGlvbi0+
Y29vcmRzKCktPmFjY3VyYWN5KCkpOworICAgICAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29v
cmRzKCktPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCisgICAgICAgICAgICBzdGF0ZW1l
bnQuYmluZERvdWJsZSg1LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVBY2N1
cmFjeSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDUp
OworICAgICAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVIZWFk
aW5nKCkpCisgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg2LCBtX2NhY2hlZFBvc2l0
aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Rh
dGVtZW50LmJpbmROdWxsKDYpOworICAgICAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRz
KCktPmNhblByb3ZpZGVTcGVlZCgpKQorICAgICAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUo
NywgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoNyk7CisgICAgICAgIHN0YXRlbWVudC5iaW5k
SW50NjQoOCwgbV9jYWNoZWRQb3NpdGlvbi0+dGltZXN0YW1wKCkpOworICAgIH0KKwogICAgIGlm
ICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkocmV2aXNpb24gNzQzNDApCisr
KyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDEwIEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL01lc3Nh
Z2VRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCkBAIC0zNSw2ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdlb3Bvc2l0aW9uOwogCisvLyBNYWludGFpbnMgYSBjYWNoZWQgcG9zaXRpb24gZm9yIEdlb2xv
Y2F0aW9uLiBUYWtlcyBjYXJlIG9mIHdyaXRpbmcgYW5kCisvLyByZWFkaW5nIHRoZSBwb3NpdGlv
biB0byBhIGRhdGFiYXNlIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuIFRoZSBHZW9sb2NhdGlvbgor
Ly8gc3BlYyBkb2VzIG5vdCByZXF1aXJlIGEgY2FjaGVkIHBvc2l0aW9uIHRvIGJlIG1haW50YWlu
ZWQsIHNvIHdlIHRha2UgYQorLy8gYmVzdC1lZmZvcnQgYXBwcm9hY2ggd2hlcmUgd2UgZG8gbm90
IHdhaXQgZm9yIGRhdGFiYXNlIHJlYWRzIG9yIHdyaXRlcy4KIGNsYXNzIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZSogaW5zdGFuY2UoKTsKQEAgLTQ5LDEyICs1NiwyMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOwogCi0gICAgdm9pZCByZWFkRnJvbURhdGFiYXNl
KCk7Ci0gICAgdm9pZCB3cml0ZVRvRGF0YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0QmFja2dyb3Vu
ZFRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkKiB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIG9iamVj
dCk7CisgICAgdm9pZCB0aHJlYWRFbnRyeVBvaW50SW1wbCgpOworCisgICAgdm9pZCB0cmlnZ2Vy
UmVhZEZyb21EYXRhYmFzZSgpOworICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZv
aWQgcmVhZEZyb21EYXRhYmFzZUltcGwoKTsKKyAgICB2b2lkIHRyaWdnZXJXcml0ZVRvRGF0YWJh
c2UoKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZvaWQgd3JpdGVUb0RhdGFi
YXNlSW1wbCgpOwogCiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2NhY2hlZFBvc2l0aW9uOwor
ICAgIE11dGV4IG1fY2FjaGVkUG9zaXRpb25NdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1f
dGhyZWFkSWQ7CisgICAgTWVzc2FnZVF1ZXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IG1fcXVldWU7CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VGaWxlOwotICAgIGJvb2wgbV9oYXZlUmVh
ZEZyb21EYXRhYmFzZTsKKyAgICBNdXRleCBtX2RhdGFiYXNlRmlsZU11dGV4OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77001</attachid>
            <date>2010-12-20 08:02:52 -0800</date>
            <delta_ts>2010-12-20 08:08:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50825-20101220160250.patch</filename>
            <type>text/plain</type>
            <size>10840</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMTItMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBzaG91bGQgZG8gZGF0YWJhc2UgYWNjZXNzIG9uIGJh
Y2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDgyNQorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgR2VvbG9jYXRpb24g
dGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OmFkZFVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpy
ZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
c2V0RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGU6OnN0YXJ0QmFja2dyb3VuZFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6cmVhZEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFz
ZUltcGwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmg6CisKIDIw
MTAtMTItMjAgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgs
MTcgQEAKIAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKIAorI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIK
ICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ4LDU1ICs1Myw5MyBAQCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIEdlb2xvY2F0aW9u
UG9zCiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlKCkKLSAgICA6IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UoZmFsc2UpCisgICAgOiBtX3RocmVh
ZElkKDApCiB7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjphZGRVc2VyKCkK
IHsKICAgICBBU1NFUlQobnVtVXNlcnMgPj0gMCk7CisgICAgaWYgKCFudW1Vc2VycyAmJiAhbV90
aHJlYWRJZCkgeworICAgICAgICBzdGFydEJhY2tncm91bmRUaHJlYWQoKTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOworICAgICAgICBpZiAoIW1fY2Fj
aGVkUG9zaXRpb24pCisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOworICAg
IH0KICAgICArK251bVVzZXJzOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
cmVtb3ZlVXNlcigpCiB7Ci0gICAgaWYgKCEoLS1udW1Vc2VycykgJiYgbV9jYWNoZWRQb3NpdGlv
bikKLSAgICAgICAgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2Nh
Y2hlZFBvc2l0aW9uTXV0ZXgpOworICAgIC0tbnVtVXNlcnM7CiAgICAgQVNTRVJUKG51bVVzZXJz
ID49IDApOworICAgIGlmICghbnVtVXNlcnMgJiYgbV9jYWNoZWRQb3NpdGlvbikKKyAgICAgICAg
dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsKICAgICBT
dHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJh
c2VGaWxlTXV0ZXgpOwogICAgIGlmIChtX2RhdGFiYXNlRmlsZSAhPSBuZXdGaWxlKSB7CiAgICAg
ICAgIG1fZGF0YWJhc2VGaWxlID0gbmV3RmlsZTsKLSAgICAgICAgbV9oYXZlUmVhZEZyb21EYXRh
YmFzZSA9IGZhbHNlOworICAgICAgICBpZiAobnVtVXNlcnMgJiYgIW1fY2FjaGVkUG9zaXRpb24p
CisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOwogICAgIH0KIH0KIAogdm9p
ZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldENhY2hlZFBvc2l0aW9uKEdlb3Bvc2l0aW9u
KiBjYWNoZWRQb3NpdGlvbikKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9zaXRp
b25NdXRleCk7CiAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IGNhY2hlZFBvc2l0aW9uOwogfQogCiBH
ZW9wb3NpdGlvbiogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbigpCiB7
Ci0gICAgaWYgKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlICYmICFtX2NhY2hlZFBvc2l0aW9uKQot
ICAgICAgICByZWFkRnJvbURhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hl
ZFBvc2l0aW9uTXV0ZXgpOwogICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLmdldCgpOwogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSgpCit2b2lk
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c3RhcnRCYWNrZ3JvdW5kVGhyZWFkKCkKK3sKKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgc2hhcmluZyB0aGlzIHRocmVhZCB3aXRoIG90aGVyIGJhY2tn
cm91bmQgdGFza3MuCisgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRFbnRyeVBv
aW50LCB0aGlzLCAiV2ViQ29yZTogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIik7Cit9CisKK3Zv
aWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhyZWFkRW50cnlQb2ludCh2b2lkKiBvYmpl
Y3QpCiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlKTsKLSAgICBBU1NFUlQo
IW1fY2FjaGVkUG9zaXRpb24pOworICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZSo+KG9iamVjdCktPnRocmVhZEVudHJ5UG9pbnRJbXBsKCk7CisgICAgcmV0dXJuIDA7Cit9
CiAKLSAgICBtX2hhdmVSZWFkRnJvbURhdGFiYXNlID0gdHJ1ZTsKK3ZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1wbCgpCit7CisgICAgd2hpbGUgKE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVz
c2FnZSgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IGluIHRoZSBjYWxsYmFjaywgc28gcGFzcyAwIGhlcmUuCisgICAgICAgIHRhc2stPnBlcmZv
cm1UYXNrKDApOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRy
aWdnZXJSZWFkRnJvbURhdGFiYXNlKCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxs
YmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhp
cykpOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNo
ZSkKK3sKKyAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKK30KIAordm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKCkKK3sKICAgICBTUUxp
dGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZp
bGUpKQotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1f
ZGF0YWJhc2VGaWxlTXV0ZXgpOworICAgICAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFz
ZUZpbGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENyZWF0ZSB0aGUg
dGFibGUgaGVyZSwgc3VjaCB0aGF0IGV2ZW4gaWYgd2UndmUganVzdCBjcmVhdGVkIHRoZQogICAg
IC8vIERCLCB0aGUgY29tbWFuZHMgYmVsb3cgc2hvdWxkIHN1Y2NlZWQuCkBAIC0xMjksMTYgKzE3
MiwzOSBAQCB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21ECiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDQpLCAvLyBhbHRp
dHVkZUFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91Ymxl
KDUpLCAvLyBoZWFkaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZXNTcGVlZCwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJs
ZSg2KSk7IC8vIHNwZWVkCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVh
dGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoNykpOyAv
LyB0aW1lc3RhbXAKKyAgICBpbnQ2NCB0aW1lc3RhbXAgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
NjQoNyk7IC8vIHRpbWVzdGFtcAorCisgICAgLy8gQSBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHNl
dCBzaW5jZSB3ZSBjYWxsZWQgdHJpZ2dlclJlYWRGcm9tRGF0YWJhc2UoKS4KKyAgICBNdXRleExv
Y2tlciBsb2NrKG1fY2FjaGVkUG9zaXRpb25NdXRleCk7CisgICAgaWYgKG1fY2FjaGVkUG9zaXRp
b24pCisgICAgICAgIHJldHVybjsKKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gR2VvcG9zaXRpb246
OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCksIHRpbWVzdGFtcCk7CiB9CiAKLXZvaWQgR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0YWJhc2UoKQordm9pZCBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKQogewotICAgIEFTU0VSVCht
X2NhY2hlZFBvc2l0aW9uKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxsYmFja1Rhc2so
d3JpdGVUb0RhdGFiYXNlLCB0aGlzKSk7Cit9CiAKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlOjp3cml0ZVRvRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZSogY2FjaGUpCit7CisgICAgY2FjaGUtPndyaXRlVG9EYXRhYmFzZUltcGwo
KTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZUlt
cGwoKQorewogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwotICAgIGlmICghZGF0YWJhc2Uu
b3BlbihtX2RhdGFiYXNlRmlsZSkpCi0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV9kYXRhYmFzZUZpbGVNdXRleCk7CisgICAgICAgIGlmICghZGF0YWJh
c2Uub3BlbihtX2RhdGFiYXNlRmlsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBjYWNoZWRQb3NpdGlvbjsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV9jYWNoZWRQb3NpdGlvbk11dGV4KTsKKyAgICAgICAgY2FjaGVkUG9z
aXRpb24gPSBtX2NhY2hlZFBvc2l0aW9uOworICAgIH0KIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKIApAQCAtMTU4LDI2ICsyMjQsMjcgQEAgdm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYQogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGF0ZW1lbnQuYmlu
ZERvdWJsZSgxLCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+bGF0aXR1ZGUoKSk7Ci0gICAg
c3RhdGVtZW50LmJpbmREb3VibGUoMiwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmxvbmdp
dHVkZSgpKTsKLSAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVB
bHRpdHVkZSgpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgzLCBtX2NhY2hlZFBvc2l0
aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGUoKSk7CisgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMSwg
Y2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5sYXRpdHVkZSgpKTsKKyAgICBzdGF0ZW1lbnQuYmlu
ZERvdWJsZSgyLCBjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmxvbmdpdHVkZSgpKTsKKyAgICBp
ZiAoY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGUoKSkKKyAgICAg
ICAgc3RhdGVtZW50LmJpbmREb3VibGUoMywgY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5hbHRp
dHVkZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCgzKTsKLSAgICBz
dGF0ZW1lbnQuYmluZERvdWJsZSg0LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWNjdXJh
Y3koKSk7Ci0gICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0
aXR1ZGVBY2N1cmFjeSgpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg1LCBtX2NhY2hl
ZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKKyAgICBzdGF0ZW1lbnQu
YmluZERvdWJsZSg0LCBjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmFjY3VyYWN5KCkpOworICAg
IGlmIChjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5
KCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDUsIGNhY2hlZFBvc2l0aW9uLT5jb29y
ZHMoKS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXRlbWVudC5i
aW5kTnVsbCg1KTsKLSAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3Zp
ZGVIZWFkaW5nKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIG1fY2FjaGVkUG9z
aXRpb24tPmNvb3JkcygpLT5oZWFkaW5nKCkpOworICAgIGlmIChjYWNoZWRQb3NpdGlvbi0+Y29v
cmRzKCktPmNhblByb3ZpZGVIZWFkaW5nKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91Ymxl
KDYsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKICAgICBlbHNlCiAgICAg
ICAgIHN0YXRlbWVudC5iaW5kTnVsbCg2KTsKLSAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29v
cmRzKCktPmNhblByb3ZpZGVTcGVlZCgpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg3
LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+c3BlZWQoKSk7CisgICAgaWYgKGNhY2hlZFBv
c2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZVNwZWVkKCkpCisgICAgICAgIHN0YXRlbWVudC5i
aW5kRG91YmxlKDcsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+c3BlZWQoKSk7CiAgICAgZWxz
ZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoNyk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2
NCg4LCBtX2NhY2hlZFBvc2l0aW9uLT50aW1lc3RhbXAoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJ
bnQ2NCg4LCBjYWNoZWRQb3NpdGlvbi0+dGltZXN0YW1wKCkpOworCiAgICAgaWYgKCFzdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsMTAgQEAKICNkZWZpbmUgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlX2gKIAogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM1LDYgKzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2VvcG9zaXRp
b247CiAKKy8vIE1haW50YWlucyBhIGNhY2hlZCBwb3NpdGlvbiBmb3IgR2VvbG9jYXRpb24uIFRh
a2VzIGNhcmUgb2Ygd3JpdGluZyBhbmQKKy8vIHJlYWRpbmcgdGhlIHBvc2l0aW9uIHRvIGEgZGF0
YWJhc2Ugb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4gVGhlIEdlb2xvY2F0aW9uCisvLyBzcGVjIGRv
ZXMgbm90IHJlcXVpcmUgYSBjYWNoZWQgcG9zaXRpb24gdG8gYmUgbWFpbnRhaW5lZCwgc28gd2Ug
dGFrZSBhCisvLyBiZXN0LWVmZm9ydCBhcHByb2FjaCB3aGVyZSB3ZSBkbyBub3Qgd2FpdCBmb3Ig
ZGF0YWJhc2UgcmVhZHMgb3Igd3JpdGVzLgogY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBpbnN0YW5j
ZSgpOwpAQCAtNDksMTIgKzU2LDIzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlKCk7CiAKLSAgICB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoKTsKLSAgICB2
b2lkIHdyaXRlVG9EYXRhYmFzZSgpOworICAgIHZvaWQgc3RhcnRCYWNrZ3JvdW5kVGhyZWFkKCk7
CisgICAgc3RhdGljIHZvaWQqIHRocmVhZEVudHJ5UG9pbnQodm9pZCogb2JqZWN0KTsKKyAgICB2
b2lkIHRocmVhZEVudHJ5UG9pbnRJbXBsKCk7CisKKyAgICB2b2lkIHRyaWdnZXJSZWFkRnJvbURh
dGFiYXNlKCk7CisgICAgc3RhdGljIHZvaWQgcmVhZEZyb21EYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKik7CisgICAgdm9pZCByZWFkRnJv
bURhdGFiYXNlSW1wbCgpOworICAgIHZvaWQgdHJpZ2dlcldyaXRlVG9EYXRhYmFzZSgpOworICAg
IHN0YXRpYyB2b2lkIHdyaXRlVG9EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlKik7CisgICAgdm9pZCB3cml0ZVRvRGF0YWJhc2VJbXBsKCk7
CiAKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY2FjaGVkUG9zaXRpb247CisgICAgTXV0ZXgg
bV9jYWNoZWRQb3NpdGlvbk11dGV4OworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsK
KyAgICBNZXNzYWdlUXVldWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV9xdWV1ZTsK
ICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGU7Ci0gICAgYm9vbCBtX2hhdmVSZWFkRnJvbURhdGFi
YXNlOworICAgIE11dGV4IG1fZGF0YWJhc2VGaWxlTXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77002</attachid>
            <date>2010-12-20 08:04:46 -0800</date>
            <delta_ts>2010-12-20 10:00:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50825-20101220160444.patch</filename>
            <type>text/plain</type>
            <size>10847</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMTItMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBzaG91bGQgZG8gZGF0YWJhc2UgYWNjZXNzIG9uIGJh
Y2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDgyNQorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgR2VvbG9jYXRpb24g
dGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OmFkZFVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpy
ZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
c2V0RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGU6OnN0YXJ0QmFja2dyb3VuZFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6cmVhZEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFz
ZUltcGwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmg6CisKIDIw
MTAtMTItMjAgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgs
MTcgQEAKIAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKIAorI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIK
ICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2Fj
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ4LDU1ICs1Myw5MyBAQCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIEdlb2xvY2F0aW9u
UG9zCiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlKCkKLSAgICA6IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UoZmFsc2UpCisgICAgOiBtX3RocmVh
ZElkKDApCiB7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjphZGRVc2VyKCkK
IHsKICAgICBBU1NFUlQobnVtVXNlcnMgPj0gMCk7CisgICAgaWYgKCFudW1Vc2VycyAmJiAhbV90
aHJlYWRJZCkgeworICAgICAgICBzdGFydEJhY2tncm91bmRUaHJlYWQoKTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOworICAgICAgICBpZiAoIW1fY2Fj
aGVkUG9zaXRpb24pCisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOworICAg
IH0KICAgICArK251bVVzZXJzOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
cmVtb3ZlVXNlcigpCiB7Ci0gICAgaWYgKCEoLS1udW1Vc2VycykgJiYgbV9jYWNoZWRQb3NpdGlv
bikKLSAgICAgICAgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2Nh
Y2hlZFBvc2l0aW9uTXV0ZXgpOworICAgIC0tbnVtVXNlcnM7CiAgICAgQVNTRVJUKG51bVVzZXJz
ID49IDApOworICAgIGlmICghbnVtVXNlcnMgJiYgbV9jYWNoZWRQb3NpdGlvbikKKyAgICAgICAg
dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSgpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsKICAgICBT
dHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVU
b1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJh
c2VGaWxlTXV0ZXgpOwogICAgIGlmIChtX2RhdGFiYXNlRmlsZSAhPSBuZXdGaWxlKSB7CiAgICAg
ICAgIG1fZGF0YWJhc2VGaWxlID0gbmV3RmlsZTsKLSAgICAgICAgbV9oYXZlUmVhZEZyb21EYXRh
YmFzZSA9IGZhbHNlOworICAgICAgICBpZiAobnVtVXNlcnMgJiYgIW1fY2FjaGVkUG9zaXRpb24p
CisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOwogICAgIH0KIH0KIAogdm9p
ZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldENhY2hlZFBvc2l0aW9uKEdlb3Bvc2l0aW9u
KiBjYWNoZWRQb3NpdGlvbikKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9zaXRp
b25NdXRleCk7CiAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IGNhY2hlZFBvc2l0aW9uOwogfQogCiBH
ZW9wb3NpdGlvbiogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbigpCiB7
Ci0gICAgaWYgKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlICYmICFtX2NhY2hlZFBvc2l0aW9uKQot
ICAgICAgICByZWFkRnJvbURhdGFiYXNlKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hl
ZFBvc2l0aW9uTXV0ZXgpOwogICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLmdldCgpOwogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSgpCit2b2lk
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c3RhcnRCYWNrZ3JvdW5kVGhyZWFkKCkKK3sKKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgc2hhcmluZyB0aGlzIHRocmVhZCB3aXRoIG90aGVyIGJhY2tn
cm91bmQgdGFza3MuCisgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZCh0aHJlYWRFbnRyeVBv
aW50LCB0aGlzLCAiV2ViQ29yZTogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIik7Cit9CisKK3Zv
aWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhyZWFkRW50cnlQb2ludCh2b2lkKiBvYmpl
Y3QpCiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNlKTsKLSAgICBBU1NFUlQo
IW1fY2FjaGVkUG9zaXRpb24pOworICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZSo+KG9iamVjdCktPnRocmVhZEVudHJ5UG9pbnRJbXBsKCk7CisgICAgcmV0dXJuIDA7Cit9
CiAKLSAgICBtX2hhdmVSZWFkRnJvbURhdGFiYXNlID0gdHJ1ZTsKK3ZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1wbCgpCit7CisgICAgd2hpbGUgKE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVz
c2FnZSgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IGluIHRoZSBjYWxsYmFjaywgc28gcGFzcyAwIGhlcmUuCisgICAgICAgIHRhc2stPnBlcmZv
cm1UYXNrKDApOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRy
aWdnZXJSZWFkRnJvbURhdGFiYXNlKCkKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxs
YmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhp
cykpOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNo
ZSkKK3sKKyAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKK30KIAordm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2VJbXBsKCkKK3sKICAgICBTUUxp
dGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZp
bGUpKQotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1f
ZGF0YWJhc2VGaWxlTXV0ZXgpOworICAgICAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFz
ZUZpbGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENyZWF0ZSB0aGUg
dGFibGUgaGVyZSwgc3VjaCB0aGF0IGV2ZW4gaWYgd2UndmUganVzdCBjcmVhdGVkIHRoZQogICAg
IC8vIERCLCB0aGUgY29tbWFuZHMgYmVsb3cgc2hvdWxkIHN1Y2NlZWQuCkBAIC0xMjksMTYgKzE3
MiwzOSBAQCB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21ECiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDQpLCAvLyBhbHRp
dHVkZUFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91Ymxl
KDUpLCAvLyBoZWFkaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZXNTcGVlZCwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJs
ZSg2KSk7IC8vIHNwZWVkCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVh
dGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoNykpOyAv
LyB0aW1lc3RhbXAKKyAgICBET01UaW1lU3RhbXAgdGltZXN0YW1wID0gc3RhdGVtZW50LmdldENv
bHVtbkludDY0KDcpOyAvLyB0aW1lc3RhbXAKKworICAgIC8vIEEgcG9zaXRpb24gbWF5IGhhdmUg
YmVlbiBzZXQgc2luY2Ugd2UgY2FsbGVkIHRyaWdnZXJSZWFkRnJvbURhdGFiYXNlKCkuCisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOworICAgIGlmIChtX2NhY2hl
ZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IEdlb3Bv
c2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCB0aW1lc3RhbXApOwogfQogCi12
b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKCkKK3ZvaWQgR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0cmlnZ2VyV3JpdGVUb0RhdGFiYXNlKCkKIHsKLSAgICBB
U1NFUlQobV9jYWNoZWRQb3NpdGlvbik7CisgICAgbV9xdWV1ZS5hcHBlbmQoY3JlYXRlQ2FsbGJh
Y2tUYXNrKHdyaXRlVG9EYXRhYmFzZSwgdGhpcykpOworfQogCit2b2lkIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNhY2hlKQoreworICAgIGNhY2hlLT53cml0ZVRvRGF0YWJh
c2VJbXBsKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0
YWJhc2VJbXBsKCkKK3sKICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRh
dGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQotICAgICAgICByZXR1cm47CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJhc2VGaWxlTXV0ZXgpOworICAgICAgICBpZiAo
IWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gY2FjaGVkUG9zaXRpb247CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9zaXRpb25NdXRleCk7CisgICAgICAgIGNh
Y2hlZFBvc2l0aW9uID0gbV9jYWNoZWRQb3NpdGlvbjsKKyAgICB9CiAKICAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7CiAKQEAgLTE1OCwyNiArMjI0LDI3IEBAIHZv
aWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGEKICAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGVt
ZW50LmJpbmREb3VibGUoMSwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmxhdGl0dWRlKCkp
OwotICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDIsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3Jkcygp
LT5sb25naXR1ZGUoKSk7Ci0gICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Q
cm92aWRlQWx0aXR1ZGUoKSkKLSAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMywgbV9jYWNo
ZWRQb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlKCkpOworICAgIHN0YXRlbWVudC5iaW5kRG91
YmxlKDEsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+bGF0aXR1ZGUoKSk7CisgICAgc3RhdGVt
ZW50LmJpbmREb3VibGUoMiwgY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5sb25naXR1ZGUoKSk7
CisgICAgaWYgKGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUFsdGl0dWRlKCkp
CisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDMsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMo
KS0+YWx0aXR1ZGUoKSk7CiAgICAgZWxzZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoMyk7
Ci0gICAgc3RhdGVtZW50LmJpbmREb3VibGUoNCwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCkt
PmFjY3VyYWN5KCkpOwotICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJv
dmlkZUFsdGl0dWRlQWNjdXJhY3koKSkKLSAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNSwg
bV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlQWNjdXJhY3koKSk7CisgICAgc3Rh
dGVtZW50LmJpbmREb3VibGUoNCwgY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5hY2N1cmFjeSgp
KTsKKyAgICBpZiAoY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGVB
Y2N1cmFjeSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg1LCBjYWNoZWRQb3NpdGlv
bi0+Y29vcmRzKCktPmFsdGl0dWRlQWNjdXJhY3koKSk7CiAgICAgZWxzZQogICAgICAgICBzdGF0
ZW1lbnQuYmluZE51bGwoNSk7Ci0gICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5j
YW5Qcm92aWRlSGVhZGluZygpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg2LCBtX2Nh
Y2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKKyAgICBpZiAoY2FjaGVkUG9zaXRp
b24tPmNvb3JkcygpLT5jYW5Qcm92aWRlSGVhZGluZygpKQorICAgICAgICBzdGF0ZW1lbnQuYmlu
ZERvdWJsZSg2LCBjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmhlYWRpbmcoKSk7CiAgICAgZWxz
ZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoNik7Ci0gICAgaWYgKG1fY2FjaGVkUG9zaXRp
b24tPmNvb3JkcygpLT5jYW5Qcm92aWRlU3BlZWQoKSkKLSAgICAgICAgc3RhdGVtZW50LmJpbmRE
b3VibGUoNywgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOworICAgIGlmIChj
YWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVTcGVlZCgpKQorICAgICAgICBzdGF0
ZW1lbnQuYmluZERvdWJsZSg3LCBjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOwog
ICAgIGVsc2UKICAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDcpOwotICAgIHN0YXRlbWVudC5i
aW5kSW50NjQoOCwgbV9jYWNoZWRQb3NpdGlvbi0+dGltZXN0YW1wKCkpOworICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoOCwgY2FjaGVkUG9zaXRpb24tPnRpbWVzdGFtcCgpKTsKKwogICAgIGlmICgh
c3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkocmV2aXNpb24gNzQzNDApCisrKyBX
ZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDEwIEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC0zNSw2ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdl
b3Bvc2l0aW9uOwogCisvLyBNYWludGFpbnMgYSBjYWNoZWQgcG9zaXRpb24gZm9yIEdlb2xvY2F0
aW9uLiBUYWtlcyBjYXJlIG9mIHdyaXRpbmcgYW5kCisvLyByZWFkaW5nIHRoZSBwb3NpdGlvbiB0
byBhIGRhdGFiYXNlIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuIFRoZSBHZW9sb2NhdGlvbgorLy8g
c3BlYyBkb2VzIG5vdCByZXF1aXJlIGEgY2FjaGVkIHBvc2l0aW9uIHRvIGJlIG1haW50YWluZWQs
IHNvIHdlIHRha2UgYQorLy8gYmVzdC1lZmZvcnQgYXBwcm9hY2ggd2hlcmUgd2UgZG8gbm90IHdh
aXQgZm9yIGRhdGFiYXNlIHJlYWRzIG9yIHdyaXRlcy4KIGNsYXNzIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSog
aW5zdGFuY2UoKTsKQEAgLTQ5LDEyICs1NiwyMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOwogCi0gICAgdm9pZCByZWFkRnJvbURhdGFiYXNlKCk7
Ci0gICAgdm9pZCB3cml0ZVRvRGF0YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0QmFja2dyb3VuZFRo
cmVhZCgpOworICAgIHN0YXRpYyB2b2lkKiB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIG9iamVjdCk7
CisgICAgdm9pZCB0aHJlYWRFbnRyeVBvaW50SW1wbCgpOworCisgICAgdm9pZCB0cmlnZ2VyUmVh
ZEZyb21EYXRhYmFzZSgpOworICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZvaWQg
cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKKyAgICB2b2lkIHRyaWdnZXJXcml0ZVRvRGF0YWJhc2Uo
KTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOworICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNl
SW1wbCgpOwogCiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2NhY2hlZFBvc2l0aW9uOworICAg
IE11dGV4IG1fY2FjaGVkUG9zaXRpb25NdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhy
ZWFkSWQ7CisgICAgTWVzc2FnZVF1ZXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IG1f
cXVldWU7CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VGaWxlOwotICAgIGJvb2wgbV9oYXZlUmVhZEZy
b21EYXRhYmFzZTsKKyAgICBNdXRleCBtX2RhdGFiYXNlRmlsZU11dGV4OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77011</attachid>
            <date>2010-12-20 10:00:32 -0800</date>
            <delta_ts>2010-12-20 11:13:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50825-20101220180029.patch</filename>
            <type>text/plain</type>
            <size>13357</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDM1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTItMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBzaG91bGQgZG8gZGF0YWJhc2UgYWNjZXNzIG9uIGJh
Y2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDgyNQorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgR2VvbG9jYXRpb24g
dGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0Nvb3JkaW5hdGVzLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlczo6dGhyZWFkU2FmZUNvcHkpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6YWRkVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c3RhcnRCYWNrZ3JvdW5k
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhy
ZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2Fj
aGU6OnRocmVhZEVudHJ5UG9pbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6dHJpZ2dlclJlYWRGcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0cmlnZ2VyV3Jp
dGVUb0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6d3JpdGVUb0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlSW1wbCk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuaDoKKyAgICAgICAgKiBwYWdlL0dlb3Bvc2l0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpHZW9wb3NpdGlvbjo6dGhyZWFkU2FmZUNvcHkpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvcG9zaXRpb246Okdlb3Bvc2l0aW9uKToKKwogMjAxMC0xMi0yMCAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkg
U2VtaWtoYXRza3kuCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaAkocmV2aXNpb24gNzQzNDApCisrKyBXZWJD
b3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDE1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQog
Y2xhc3MgQ29vcmRpbmF0ZXMgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlcz4gewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVzPiBjcmVhdGUoZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBh
bHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb29yZGluYXRlcyhsYXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBh
bHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1
cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCkpOyB9
Ci0gICAgCisKKyAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVzPiB0aHJlYWRTYWZlQ29weSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gQ29vcmRpbmF0ZXM6OmNyZWF0ZShtX2xhdGl0dWRl
LCBtX2xvbmdpdHVkZSwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUsIG1fYWx0aXR1ZGUsIG1fYWNjdXJh
Y3ksIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3ksIG1fYWx0aXR1ZGVBY2N1cmFjeSwgbV9j
YW5Qcm92aWRlSGVhZGluZywgbV9oZWFkaW5nLCBtX2NhblByb3ZpZGVTcGVlZCwgbV9zcGVlZCk7
CisgICAgfQorCiAgICAgZG91YmxlIGxhdGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXRpdHVk
ZTsgfQogICAgIGRvdWJsZSBsb25naXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2xvbmdpdHVkZTsg
fQogICAgIGRvdWJsZSBhbHRpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0aXR1ZGU7IH0KSW5k
ZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3
NDM0MCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTcgQEAKIAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
IAorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgi
CiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
ICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDU1ICs1Myw5MyBAQCBHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGUqIEdlb2xvY2F0aW9uUG9zCiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkKLSAgICA6IG1faGF2ZVJlYWRGcm9tRGF0YWJh
c2UoZmFsc2UpCisgICAgOiBtX3RocmVhZElkKDApCiB7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjphZGRVc2VyKCkKIHsKICAgICBBU1NFUlQobnVtVXNlcnMgPj0gMCk7Cisg
ICAgaWYgKCFudW1Vc2VycyAmJiAhbV90aHJlYWRJZCkgeworICAgICAgICBzdGFydEJhY2tncm91
bmRUaHJlYWQoKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0
ZXgpOworICAgICAgICBpZiAoIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgICAgICB0cmlnZ2Vy
UmVhZEZyb21EYXRhYmFzZSgpOworICAgIH0KICAgICArK251bVVzZXJzOwogfQogCiB2b2lkIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVtb3ZlVXNlcigpCiB7Ci0gICAgaWYgKCEoLS1udW1V
c2VycykgJiYgbV9jYWNoZWRQb3NpdGlvbikKLSAgICAgICAgd3JpdGVUb0RhdGFiYXNlKCk7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOworICAgIC0tbnVtVXNl
cnM7CiAgICAgQVNTRVJUKG51bVVzZXJzID49IDApOworICAgIGlmICghbnVtVXNlcnMgJiYgbV9j
YWNoZWRQb3NpdGlvbikKKyAgICAgICAgdHJpZ2dlcldyaXRlVG9EYXRhYmFzZSgpOwogfQogCiB2
b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hl
ZEdlb3Bvc2l0aW9uLmRiIjsKICAgICBTdHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0ZW06
OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAgICBN
dXRleExvY2tlciBsb2NrKG1fZGF0YWJhc2VGaWxlTXV0ZXgpOwogICAgIGlmIChtX2RhdGFiYXNl
RmlsZSAhPSBuZXdGaWxlKSB7CiAgICAgICAgIG1fZGF0YWJhc2VGaWxlID0gbmV3RmlsZTsKLSAg
ICAgICAgbV9oYXZlUmVhZEZyb21EYXRhYmFzZSA9IGZhbHNlOworICAgICAgICBpZiAobnVtVXNl
cnMgJiYgIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgICAgICB0cmlnZ2VyUmVhZEZyb21EYXRh
YmFzZSgpOwogICAgIH0KIH0KIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldENh
Y2hlZFBvc2l0aW9uKEdlb3Bvc2l0aW9uKiBjYWNoZWRQb3NpdGlvbikKIHsKKyAgICBNdXRleExv
Y2tlciBsb2NrKG1fY2FjaGVkUG9zaXRpb25NdXRleCk7CiAgICAgbV9jYWNoZWRQb3NpdGlvbiA9
IGNhY2hlZFBvc2l0aW9uOwogfQogCiBHZW9wb3NpdGlvbiogR2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlOjpjYWNoZWRQb3NpdGlvbigpCiB7Ci0gICAgaWYgKCFtX2hhdmVSZWFkRnJvbURhdGFiYXNl
ICYmICFtX2NhY2hlZFBvc2l0aW9uKQotICAgICAgICByZWFkRnJvbURhdGFiYXNlKCk7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9uTXV0ZXgpOwogICAgIHJldHVybiBtX2Nh
Y2hlZFBvc2l0aW9uLmdldCgpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
cmVhZEZyb21EYXRhYmFzZSgpCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c3RhcnRC
YWNrZ3JvdW5kVGhyZWFkKCkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgc2hhcmluZyB0aGlz
IHRocmVhZCB3aXRoIG90aGVyIGJhY2tncm91bmQgdGFza3MuCisgICAgbV90aHJlYWRJZCA9IGNy
ZWF0ZVRocmVhZCh0aHJlYWRFbnRyeVBvaW50LCB0aGlzLCAiV2ViQ29yZTogR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlIik7Cit9CisKK3ZvaWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhy
ZWFkRW50cnlQb2ludCh2b2lkKiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVSZWFkRnJv
bURhdGFiYXNlKTsKLSAgICBBU1NFUlQoIW1fY2FjaGVkUG9zaXRpb24pOworICAgIHN0YXRpY19j
YXN0PEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSo+KG9iamVjdCktPnRocmVhZEVudHJ5UG9pbnRJ
bXBsKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBtX2hhdmVSZWFkRnJvbURhdGFiYXNlID0g
dHJ1ZTsKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0aHJlYWRFbnRyeVBvaW50SW1w
bCgpCit7CisgICAgd2hpbGUgKE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGluIHRoZSBjYWxsYmFjaywgc28gcGFzcyAwIGhl
cmUuCisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgIH0KK30KKwordm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJSZWFkRnJvbURhdGFiYXNlKCkKK3sKKyAgICBt
X3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxsYmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhpcykpOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKK3sKKyAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFz
ZUltcGwoKTsKK30KIAordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0
YWJhc2VJbXBsKCkKK3sKICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRh
dGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQotICAgICAgICByZXR1cm47CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJhc2VGaWxlTXV0ZXgpOworICAgICAgICBpZiAo
IWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIC8vIENyZWF0ZSB0aGUgdGFibGUgaGVyZSwgc3VjaCB0aGF0IGV2ZW4gaWYgd2Un
dmUganVzdCBjcmVhdGVkIHRoZQogICAgIC8vIERCLCB0aGUgY29tbWFuZHMgYmVsb3cgc2hvdWxk
IHN1Y2NlZWQuCkBAIC0xMjksMTYgKzE3Miw0MCBAQCB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6cmVhZEZyb21ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBzdGF0ZW1lbnQuZ2V0
Q29sdW1uRG91YmxlKDQpLCAvLyBhbHRpdHVkZUFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBz
dGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDUpLCAvLyBoZWFkaW5nCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNTcGVlZCwg
c3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg2KSk7IC8vIHNwZWVkCi0gICAgbV9jYWNoZWRQb3Np
dGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoNykpOyAvLyB0aW1lc3RhbXAKKyAgICBET01UaW1lU3RhbXAgdGlt
ZXN0YW1wID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDcpOyAvLyB0aW1lc3RhbXAKKworICAg
IC8vIEEgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiBzZXQgc2luY2Ugd2UgY2FsbGVkIHRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKCkuCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2NhY2hlZFBvc2l0aW9u
TXV0ZXgpOworICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
bV9jYWNoZWRQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFz
ZSgpLCB0aW1lc3RhbXApOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3Jp
dGVUb0RhdGFiYXNlKCkKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp0cmlnZ2VyV3Jp
dGVUb0RhdGFiYXNlKCkKIHsKLSAgICBBU1NFUlQobV9jYWNoZWRQb3NpdGlvbik7CisgICAgbV9x
dWV1ZS5hcHBlbmQoY3JlYXRlQ2FsbGJhY2tUYXNrKHdyaXRlVG9EYXRhYmFzZSwgdGhpcykpOwor
fQogCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNhY2hlKQorewor
ICAgIGNhY2hlLT53cml0ZVRvRGF0YWJhc2VJbXBsKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0YWJhc2VJbXBsKCkKK3sKICAgICBTUUxpdGVEYXRhYmFz
ZSBkYXRhYmFzZTsKLSAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQotICAg
ICAgICByZXR1cm47CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YWJhc2VG
aWxlTXV0ZXgpOworICAgICAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRhYmFzZUZpbGUpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gY2Fj
aGVkUG9zaXRpb247CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fY2FjaGVkUG9z
aXRpb25NdXRleCk7CisgICAgICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uKQorICAgICAgICAgICAg
Y2FjaGVkUG9zaXRpb24gPSBtX2NhY2hlZFBvc2l0aW9uLT50aHJlYWRTYWZlQ29weSgpOworICAg
IH0KIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKIApAQCAt
MTU4LDI2ICsyMjUsMjcgQEAgdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9E
YQogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBtX2NhY2hlZFBvc2l0aW9uLT5j
b29yZHMoKS0+bGF0aXR1ZGUoKSk7Ci0gICAgc3RhdGVtZW50LmJpbmREb3VibGUoMiwgbV9jYWNo
ZWRQb3NpdGlvbi0+Y29vcmRzKCktPmxvbmdpdHVkZSgpKTsKLSAgICBpZiAobV9jYWNoZWRQb3Np
dGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVBbHRpdHVkZSgpKQotICAgICAgICBzdGF0ZW1lbnQu
YmluZERvdWJsZSgzLCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGUoKSk7Cisg
ICAgc3RhdGVtZW50LmJpbmREb3VibGUoMSwgY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5sYXRp
dHVkZSgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgyLCBjYWNoZWRQb3NpdGlvbi0+Y29v
cmRzKCktPmxvbmdpdHVkZSgpKTsKKyAgICBpZiAoY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5j
YW5Qcm92aWRlQWx0aXR1ZGUoKSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMywgY2Fj
aGVkUG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0
YXRlbWVudC5iaW5kTnVsbCgzKTsKLSAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBtX2NhY2hl
ZFBvc2l0aW9uLT5jb29yZHMoKS0+YWNjdXJhY3koKSk7Ci0gICAgaWYgKG1fY2FjaGVkUG9zaXRp
b24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpKQotICAgICAgICBzdGF0
ZW1lbnQuYmluZERvdWJsZSg1LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVB
Y2N1cmFjeSgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBjYWNoZWRQb3NpdGlvbi0+
Y29vcmRzKCktPmFjY3VyYWN5KCkpOworICAgIGlmIChjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCkt
PmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91
YmxlKDUsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKICAg
ICBlbHNlCiAgICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCg1KTsKLSAgICBpZiAobV9jYWNoZWRQ
b3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVIZWFkaW5nKCkpCi0gICAgICAgIHN0YXRlbWVu
dC5iaW5kRG91YmxlKDYsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5oZWFkaW5nKCkpOwor
ICAgIGlmIChjYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVIZWFkaW5nKCkpCisg
ICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+
aGVhZGluZygpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCg2KTsKLSAg
ICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVTcGVlZCgpKQotICAg
ICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg3LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+
c3BlZWQoKSk7CisgICAgaWYgKGNhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZVNw
ZWVkKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDcsIGNhY2hlZFBvc2l0aW9uLT5j
b29yZHMoKS0+c3BlZWQoKSk7CiAgICAgZWxzZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwo
Nyk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCg4LCBtX2NhY2hlZFBvc2l0aW9uLT50aW1lc3Rh
bXAoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCg4LCBjYWNoZWRQb3NpdGlvbi0+dGltZXN0
YW1wKCkpOworCiAgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCShy
ZXZpc2lvbiA3NDM0MCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsMTAgQEAKICNkZWZpbmUgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM1LDYgKzM4LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgR2VvcG9zaXRpb247CiAKKy8vIE1haW50YWlucyBhIGNhY2hlZCBw
b3NpdGlvbiBmb3IgR2VvbG9jYXRpb24uIFRha2VzIGNhcmUgb2Ygd3JpdGluZyBhbmQKKy8vIHJl
YWRpbmcgdGhlIHBvc2l0aW9uIHRvIGEgZGF0YWJhc2Ugb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4g
VGhlIEdlb2xvY2F0aW9uCisvLyBzcGVjIGRvZXMgbm90IHJlcXVpcmUgYSBjYWNoZWQgcG9zaXRp
b24gdG8gYmUgbWFpbnRhaW5lZCwgc28gd2UgdGFrZSBhCisvLyBiZXN0LWVmZm9ydCBhcHByb2Fj
aCB3aGVyZSB3ZSBkbyBub3Qgd2FpdCBmb3IgZGF0YWJhc2UgcmVhZHMgb3Igd3JpdGVzLgogY2xh
c3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKiBpbnN0YW5jZSgpOwpAQCAtNDksMTIgKzU2LDIzIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCk7CiAKLSAgICB2b2lk
IHJlYWRGcm9tRGF0YWJhc2UoKTsKLSAgICB2b2lkIHdyaXRlVG9EYXRhYmFzZSgpOworICAgIHZv
aWQgc3RhcnRCYWNrZ3JvdW5kVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQqIHRocmVhZEVudHJ5
UG9pbnQodm9pZCogb2JqZWN0KTsKKyAgICB2b2lkIHRocmVhZEVudHJ5UG9pbnRJbXBsKCk7CisK
KyAgICB2b2lkIHRyaWdnZXJSZWFkRnJvbURhdGFiYXNlKCk7CisgICAgc3RhdGljIHZvaWQgcmVh
ZEZyb21EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlKik7CisgICAgdm9pZCByZWFkRnJvbURhdGFiYXNlSW1wbCgpOworICAgIHZvaWQgdHJp
Z2dlcldyaXRlVG9EYXRhYmFzZSgpOworICAgIHN0YXRpYyB2b2lkIHdyaXRlVG9EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKik7CisgICAg
dm9pZCB3cml0ZVRvRGF0YWJhc2VJbXBsKCk7CiAKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1f
Y2FjaGVkUG9zaXRpb247CisgICAgTXV0ZXggbV9jYWNoZWRQb3NpdGlvbk11dGV4OworICAgIFRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBNZXNzYWdlUXVldWU8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gbV9xdWV1ZTsKICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGU7Ci0g
ICAgYm9vbCBtX2hhdmVSZWFkRnJvbURhdGFiYXNlOworICAgIE11dGV4IG1fZGF0YWJhc2VGaWxl
TXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
R2VvcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaAko
cmV2aXNpb24gNzQzNDApCisrKyBXZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsOCArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIEdlb3Bvc2l0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8R2VvcG9zaXRpb24+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3Np
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzLCBET01UaW1l
U3RhbXAgdGltZXN0YW1wKQpAQCAtNDIsNiArNDAsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdlb3Bvc2l0aW9uKGNvb3JkaW5hdGVzLCB0aW1lc3RhbXApKTsKICAg
ICB9CiAKKyAgICBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiB0aHJlYWRTYWZlQ29weSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShtX2Nvb3JkaW5hdGVz
LT50aHJlYWRTYWZlQ29weSgpLCBtX3RpbWVzdGFtcCk7CisgICAgfQorCiAgICAgRE9NVGltZVN0
YW1wIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CiAgICAgQ29vcmRp
bmF0ZXMqIGNvb3JkcygpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMuZ2V0KCk7IH0KICAg
ICAKQEAgLTUwLDYgKzUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgOiBtX2Nvb3JkaW5hdGVzKGNv
b3JkaW5hdGVzKQogICAgICAgICAsIG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKICAgICB7CisgICAg
ICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVzKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q29vcmRpbmF0
ZXM+IG1fY29vcmRpbmF0ZXM7Cg==
</data>
<flag name="review"
          id="68052"
          type_id="1"
          status="+"
          setter="jorlow"
    />
    <flag name="commit-queue"
          id="68054"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>