<?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>52722</bug_id>
          
          <creation_ts>2011-01-19 06:52:31 -0800</creation_ts>
          <short_desc>IDBTransaction and IDBRequest can be deleted while ScriptExecutionContext is iterating....which is bad</short_desc>
          <delta_ts>2011-02-02 18:24:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>eric</cc>
    
    <cc>hans</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jorlow</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336496</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-19 06:52:31 -0800</bug_when>
    <thetext>IDBRequest and IDBTransaction should not be Active DOM Objects.  We should instead have a single IDB object which has a stop handler.  When this is called, it&apos;ll abort all running transactions (which should have registered themselves with it).  It&apos;s essential that this object does not cause any other active DOM objects to get killed or run any JavaScript synchronously.

We should only have one of these objects per script execution context.  And when there are no active transactions, it should be destroyed.


Context:

[6:54pm] ap: jorlow: ayt?
[6:54pm] jorlow: ap: what&apos;s up?
[6:55pm] ap: jorlow: I&apos;m finally looking at your patch again, and I&apos;m wondering why we even need to stop or abort transactions
[6:55pm] jorlow: so that when you leave a page stuff doesn&apos;t keep running
[6:55pm] ap: jorlow: it seems like requests need to be stopped, not transactions
[6:55pm] jorlow: no
[6:55pm] • ap listens
[6:55pm] jorlow: if you leave a page, a transaction can&apos;t ever be committed
[6:56pm] jorlow: requests can&apos;t be aborted
[6:56pm] jorlow: only transactions
[6:57pm] ap: jorlow: ok. then looking at it from a different angle, why are requests ActiveDOMObjects?
[6:57pm] jorlow: they need to be...it might be a fair question why IDBTransactions are though
[6:57pm] jorlow: requests need to be because if someone is listening to onsuccess or onerror, then it&apos;s possible they&apos;ll abort the transaciton or schedule another operation in that handler
[6:58pm] jorlow: and that the transaction committed at that point would be a logic error
[6:59pm] jorlow: transactions, on the other hand, only fire their event listeners after abort or complete happens
[6:59pm] jorlow: hm.....ok.....so by my earlier logic, maybe we should be aborting transactions with ::stop either way....  
[6:59pm] jorlow: i.e. if they navigate away, that&apos;s a signal they want the app to stop doing work
[6:59pm] jorlow: do event targets need to be active dom objects?
[7:00pm] ap: jorlow: only if nothing else can guarantee that they live long enough
[7:00pm] ap: jorlow: e.g. XMLHttpRequest is an ActiveDOMObject, but XMLHttpRequest.upload is not
[7:01pm] ap: jorlow: because XMLHttpRequest keeps XMLHttpRequestUpload alive
[7:01pm] jorlow: hmm
[7:01pm] ap: jorlow: we just need to pick a central object that will outlive others, and manage their lifetime
[7:01pm] jorlow: they may not need to be active dom objects then
[7:01pm] jorlow: let me think on this some
[7:02pm] jorlow: (and grab dinner...brb)
[7:02pm] ap: jorlow: bon appetit 
[7:05pm] ap: jorlow: (well, manage lifetime and suspend/stop/resume), of course. Since requests belong to transactions, the latter should be able to centralize everything
[7:20pm] jorlow: ap: so the one reason left why we need these to be active dom objects is that we need the page not to go into cache
[7:20pm] jorlow: any suggestions on how else to do that?
[7:20pm] jorlow: ap: er....page go into page cache
[7:21pm] ap: jorlow: either transaction or request probably needs to be an active dom object, right?
[7:21pm] ap: jorlow: otherwise, what would protect them from being destroyed if there are no JS references to them
[7:22pm] jorlow: ap: yeah...make sense
[7:23pm] jorlow: but i think then we&apos;re back to a situation where ::stop() can cause the active dom object to be killed
[7:23pm] jorlow: ap: the IDBTransaction needs to be active...not IDBRequest, btw
[7:23pm] jorlow: since active transactions are the reason it can&apos;t go to cache
[7:24pm] ap: jorlow: sounds reasonable
[7:24pm] jorlow: but the IDBTransactionBackendImpl needs to have a ref to the IDBTransaction.  And when abort happens, that link is broken
[7:24pm] jorlow: and that can cause IDBTransaction to go to 0 refs
[7:25pm] jorlow: ap^^
[7:28pm] ap: jorlow: hmm... ok, so what happens in XMLHttpRequest case? ScriptExecutionContext::stopActiveDOMObjects() calls XMLHTTPRequest::stop() - so far, the same as with IDB, right?
[7:28pm] ap: jorlow: XMLHTTPRequest::stop() supposedly releases the last ref, and we should be getting into ScriptExecutionContext::destroyedActiveDOMObject()
[7:28pm] jorlow: hmmm
[7:28pm] ap: jorlow: so either we have the same problem with XHR, or there&apos;s some witty trick
[7:33pm] ap: jorlow: ah, I know what the trick is
[7:34pm] jorlow: ap: yeah?
[7:34pm] ap: jorlow: XMLHttpRequest always has a JS wrapper, which keeps a reference to it
[7:34pm] jorlow: why?
[7:35pm] ap: jorlow: there is no way to create an XMLHttpRequest without creating a wrapper
[7:35pm] jorlow: But couldn&apos;t the wrapper get GCed?
[7:36pm] ap: jorlow: not while there&apos;s an ongoing request (that&apos;s what ActiveDOMObject is primarily about)
[7:36pm] ap: jorlow: and if there is no request, and the wrapper gets GC&apos;ed, then XMLHttpREquest itself is destroyed, too
[7:37pm] ap: jorlow: now, that doesn&apos;t quite work even for XHR
[7:38pm] ap: jorlow: because XHR::stop ends up calling reportExtraMemoryCost() for JSC, and that can collect the unprotected wrapper of another XHR (the current one is still protected at the moment)
[7:39pm] jorlow: ap: ouch..that&apos;s subtle
[7:39pm] jorlow: or any other active dom object, for that matter
[7:39pm] ap: jorlow: if there we really no JS code running from stop(), then the extra reference we&apos;re looking for would have been guaranteed by the wrapper
[7:40pm] ap: jorlow: but even XHR violates this requirement by forcing GC sometimes
[7:40pm] jorlow: ap: to be honest, i still don&apos;t fully understand why...I think maybe I just need to look at the code with these comments in mind (can&apos;t at the moment)
[7:40pm] jorlow: but it also seems as though maybe it doesn&apos;t matter
[7:40pm] MX80 left the chat room. (Remote host closed the connection)
[7:41pm] jorlow: and that we need a more general solution to the problem
[7:48pm] jorlow: is Helder Correia on irc?
[7:49pm] jorlow: ap would you agree with my last comment?
[7:49pm] jorlow: my thinking is that the subtlety of these 2 issues points to the need for a more general solution....maybe the one I originally proposed
[7:50pm] ap: jorlow: I don&apos;t know. Seems easy enough to fix XMLHttpRequest to not force GC from stop(), but it&apos;s indeed subtle
[7:50pm] jorlow: I think removing active dom objects during iteration is probably much more likely and less determinisitc than adding
[7:50pm] jorlow: and it kind of seems like it&apos;s only a matter of time before we see another one of these
[7:51pm] jorlow: personally, I&apos;d rather go with the general solution...I&apos;m not super happy with the one I presented, but I can&apos;t think of a better one
[7:51pm] ap: jorlow: if we go with your original solution, I&apos;d prefer that we don&apos;t do the contains() check though
[7:51pm] jorlow: ap: how can we avoid it?
[7:52pm] jorlow: I guess if the vector we iterate over was a member variable we could
[7:52pm] ap: jorlow: having a no-longer-active inactive object be destroyed while stopping further objects is kind of normal indeed
[7:52pm] jorlow: by moving the last element in to replace the removed element
[7:53pm] ap: jorlow: but the fact that stopping one object can indirectly destroy others seems evil
[7:53pm] jorlow: ap: aren&apos;t all objects stopped or none?
[7:53pm] jorlow: and why is it evil?
[7:53pm] jorlow: i feel like the IDB case of doing this is pretty legit
[7:53pm] jorlow: even if the XHR one is kinda shady
[7:54pm] ap: jorlow: my thinking is that an active object is fairly independent, and ScriptExecutionContext manages these
[7:54pm] ap: jorlow: that&apos;s why there are so few guarantees in this iteration code
[7:55pm] ap: jorlow: having a &quot;sub-manager&quot; inside IDB sounds complicated
[7:55pm] ap: jorlow: and this complicated situation is what we have now - ScriptExecutionContext can stop an active object, but also one IDB active object can stop another one
[7:55pm] jorlow: ap: actually, i was just going to suggest that maybe we should have one active dom object within IDB that they all share
[7:56pm] ap: jorlow: right, and if we do that, we wont need a contains() check, correct?
[7:56pm] jorlow: we wouldn&apos;t need anything in my patch actually
[7:56pm] jorlow: if we fix the XHR thing as well
[7:56pm] jorlow: (though we should put in the ASSERTs you suggested)
[7:56pm] ap: jorlow: ok, so how about this plan:
[7:57pm] ap: 1. Fix XHR
[7:57pm] ap: 2. Fix IDB to have one active dom object
[7:57pm] ap: 3. add an assertion
[7:57pm] jorlow: ap: can I file a bug on you for #1?
[7:57pm] ap: 4. consider making a copy in a vector to make this less subtle
[7:57pm] ap: jorlow: sure, that would be great
[7:57pm] jorlow: k...will do
[7:57pm] jorlow: not sure about 4 tho
[7:58pm] jorlow: I feel like the rest of this is a replacement for it
[7:58pm] jorlow: I&apos;ll put a nice change log comment in I guess
[7:58pm] ap: jorlow: it says &quot;consider&quot;, not &quot;do&quot; 
[7:58pm] jorlow: k
[7:58pm] jorlow: I&apos;ll try to summarize these in the bugs
[7:58pm] jorlow: might not get aroudn to filing until tomorrow though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336511</commentid>
    <comment_count>1</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-01-19 07:27:24 -0800</bug_when>
    <thetext>Alexey Proskuryakov is ap@webkit.org I believe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339877</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-25 13:12:58 -0800</bug_when>
    <thetext>FWIW, I&apos;m currently writing this patch and I&apos;m finding that it&apos;s an awful lot of similar/duplicate code to ActiveDOMObject.  It&apos;s really making me think we should just make the changes to ADO itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340085</commentid>
    <comment_count>3</comment_count>
      <attachid>80158</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-25 18:51:29 -0800</bug_when>
    <thetext>Created attachment 80158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340088</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-25 19:05:56 -0800</bug_when>
    <thetext>Attachment 80158 did not build on chromium:
Build output: http://queues.webkit.org/results/7540357</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340163</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-25 23:30:49 -0800</bug_when>
    <thetext>Attachment 80158 did not build on chromium:
Build output: http://queues.webkit.org/results/7542347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340249</commentid>
    <comment_count>6</comment_count>
      <attachid>80158</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-26 06:56:32 -0800</bug_when>
    <thetext>Comment on attachment 80158
Patch

Did IDBActiveDOMObject.h slip out of this patch? I can&apos;t find it, and that seems to be what makes the bots red.

&gt; Source/WebCore/ChangeLog:9
&gt; +        ActiveDOMObject. The former has less implications the latter and iterates

nit: less implications *than* the latter

&gt; Source/WebCore/storage/IDBActiveDOMObject.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

nit: 2011?

&gt; Source/WebCore/storage/IDBActiveDOMObject.cpp:13
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of

I thought this should be a two-clause thing nowadays?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340329</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-26 10:14:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 80158 [details])
&gt; Did IDBActiveDOMObject.h slip out of this patch? I can&apos;t find it, and that seems to be what makes the bots red.

oops...will make sure it&apos;s added
 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        ActiveDOMObject. The former has less implications the latter and iterates
&gt; 
&gt; nit: less implications *than* the latter

oops..will fix

&gt; &gt; Source/WebCore/storage/IDBActiveDOMObject.cpp:2
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; nit: 2011?

k
 
&gt; &gt; Source/WebCore/storage/IDBActiveDOMObject.cpp:13
&gt; &gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; 
&gt; I thought this should be a two-clause thing nowadays?

k...will change to this: http://webkit.org/coding/bsd-license.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340331</commentid>
    <comment_count>8</comment_count>
      <attachid>80207</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-26 10:20:04 -0800</bug_when>
    <thetext>Created attachment 80207
new

Weird....webkit-patch refuses to upload that file....created a patch manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340555</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-26 16:12:58 -0800</bug_when>
    <thetext>Alexey, can you take a look at the general approach of IDBActiveDOMObject here and give your comments?  As I mentioned, I want to have something in by EOW even if we need to continue iterating after that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340599</commentid>
    <comment_count>10</comment_count>
      <attachid>80207</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-26 17:03:45 -0800</bug_when>
    <thetext>Comment on attachment 80207
new

I talked to Nate and JamesR and we came up with something that I think will be far superior and not require all the IDBActiveDOMObject stuff.

IDBTransaction will be an ActiveDOMObject.  IDBRequest won&apos;t be.  I&apos;ll be able to get rid of the self ref for request.  And IDBTransaction can probably use the built in machinery in ActiveDOMObject for that.

Will try to upload something tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342967</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-31 19:08:11 -0800</bug_when>
    <thetext>Ok, after more experimenting and chatting with people, I&apos;m pretty positive of a few things:
* IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.
* IDBTransaction needs the same + it needs to abort its transaction on ::stop and disable suspension while transactions are running.
* IDBTransaction and IDBTransactionBackend both depend on each other (well, technically the former implements the IDBTransactionCallbacks interface and the latter actually owns that).  The transaction finishing is, as far as I can tell, the only suitable time to break the reference cycles.  As far as I can tell, the only solution is to allow IDBTransaction to be deleted while the ::stop()s are being called.

So, first of all, how do we allow ::stop() to be called and handle the ScriptExecutionContext* bit?  Well, to me, these are clearly ActiveDOMObjects even if the name of the class needs to be changed.  (If so, please make a suggestion for a new name?  Or we can do it in a later patch.)

Next, assuming we have to &quot;allow IDBTransaction to be deleted while the ::stop()s are being called&quot;, I see a couple options:
1) ActiveDOMObject could iterate on a copy.  We do this fairly often.  It shouldn&apos;t be too bad perf wise since we should never have too many.
2) We could make the IDBTransactionBackend -&gt; IDBTransaction connection weak.
3) We could switch its HashMap to be some data structure which would handle the iteration fine.
4) We could make HashMap handle such iteration.
5) We could fork ActiveDOMObject and create some base type for things that can be deleted during iteration.  Personally, this seems like premature optimization to me.

Personally I think #1 is best because the rest are making things more difficult than necessary.  But #2 would work and I had actually considered doing it at an earlier point.

Note that https://bug-52366-attachments.webkit.org/attachment.cgi?id=78812 implemented #1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343736</commentid>
    <comment_count>12</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:05:52 -0800</bug_when>
    <thetext>Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343752</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:19:15 -0800</bug_when>
    <thetext>+ mihai and jamesr.  If you had any thoughts about comment #11, they&apos;d be greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343757</commentid>
    <comment_count>14</comment_count>
      <attachid>80871</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:28:31 -0800</bug_when>
    <thetext>Created attachment 80871
reposting my original solution to this problem

I&apos;m reposting my original solution to the problem as I think it&apos;s the best answer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343762</commentid>
    <comment_count>15</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-02-01 18:37:38 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Ok, after more experimenting and chatting with people, I&apos;m pretty positive of a few things:
&gt; * IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.
&gt; * IDBTransaction needs the same + it needs to abort its transaction on ::stop and disable suspension while transactions are running.
&gt; * IDBTransaction and IDBTransactionBackend both depend on each other (well, technically the former implements the IDBTransactionCallbacks interface and the latter actually owns that).  The transaction finishing is, as far as I can tell, the only suitable time to break the reference cycles.  As far as I can tell, the only solution is to allow IDBTransaction to be deleted while the ::stop()s are being called.
&gt; 


Maybe stupid question: rather than

http://trac.webkit.org/browser/trunk/Source/WebCore/storage/IDBTransactionBackendImpl.cpp#L126

could we call onAbort asynchronously (e.g. schedule an event or use a timer)? That means that the cycle would be broken outside of the loop in ScriptExecutionContext::stopActiveDOMObjects()

Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343770</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:48:40 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #11)
&gt; &gt; Ok, after more experimenting and chatting with people, I&apos;m pretty positive of a few things:
&gt; &gt; * IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.
&gt; &gt; * IDBTransaction needs the same + it needs to abort its transaction on ::stop and disable suspension while transactions are running.
&gt; &gt; * IDBTransaction and IDBTransactionBackend both depend on each other (well, technically the former implements the IDBTransactionCallbacks interface and the latter actually owns that).  The transaction finishing is, as far as I can tell, the only suitable time to break the reference cycles.  As far as I can tell, the only solution is to allow IDBTransaction to be deleted while the ::stop()s are being called.
&gt; &gt; 
&gt; 
&gt; 
&gt; Maybe stupid question: rather than
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/storage/IDBTransactionBackendImpl.cpp#L126
&gt; 
&gt; could we call onAbort asynchronously (e.g. schedule an event or use a timer)? That means that the cycle would be broken outside of the loop in ScriptExecutionContext::stopActiveDOMObjects()

I&apos;m not sure about that exact location, but having the abort call in IDBTransaction/IDBRequest::stop() seems like a pretty good solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344015</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-02 09:49:18 -0800</bug_when>
    <thetext>&gt; * IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.

The ScriptExecutionContext pointer is normally zeroed out in contextDestroyed(), not in stop().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344041</commentid>
    <comment_count>18</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 10:29:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; * IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.
&gt; 
&gt; The ScriptExecutionContext pointer is normally zeroed out in contextDestroyed(), not in stop().

Oops!  Good catch.  I guess I&apos;ll add a flag to keep track of it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344046</commentid>
    <comment_count>19</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 10:35:52 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; &gt; * IDBRequest needs to have access to a ScriptExecutionContext* and needs to know when stop is called so it can null out the pointer when it&apos;s invalid.
&gt; &gt; 
&gt; &gt; The ScriptExecutionContext pointer is normally zeroed out in contextDestroyed(), not in stop().
&gt; 
&gt; Oops!  Good catch.  I guess I&apos;ll add a flag to keep track of it then.

Er...I thought this was the other bug where I have code that assumes this.

Anyway, you&apos;re right that it&apos;s contextDestroyed not stop, but I don&apos;t think that actually changes anything in this case.


......hm....

Actually, can&apos;t we just do what Geoffrey suggested in https://bugs.webkit.org/show_bug.cgi?id=52719#c5 in contextDestroyed and then do the work that could lead to destruction in contextDestroyed?  It seems like this should be permissible even if you&apos;re going to argue that destruction of ActiveDOMObjects during the other points of iteration isn&apos;t.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344060</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-02 10:57:35 -0800</bug_when>
    <thetext>&gt; can&apos;t we just do what Geoffrey suggested in https://bugs.webkit.org/show_bug.cgi?id=52719#c5 in contextDestroyed

Sounds good to me, as long as we have an assertion that new ActiveDOMObjects aren&apos;t added during contextDestroyed() iteration. Again, if we could have an assertion that no JS is executed during the iteration, that would be better yet. Maybe ScriptController is already dysfunctional at this point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344145</commentid>
    <comment_count>21</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 12:35:32 -0800</bug_when>
    <thetext>*** Bug 52366 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344147</commentid>
    <comment_count>22</comment_count>
      <attachid>80952</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 12:40:18 -0800</bug_when>
    <thetext>Created attachment 80952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344268</commentid>
    <comment_count>23</comment_count>
      <attachid>80952</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-02-02 14:41:08 -0800</bug_when>
    <thetext>Comment on attachment 80952
Patch

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

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:261
&gt; +    ASSERT(!m_iteratingActiveDOMObjects);
&gt; +    ASSERT(!m_inDestructor);

Here and elsewhere: Should we be doing something more than just ASSERTing in debug?  This seems like it&apos;ll be a security problem if we do ever hit this case in release builds.

LGTM otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344301</commentid>
    <comment_count>24</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 15:14:30 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 80952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80952&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptExecutionContext.cpp:261
&gt; &gt; +    ASSERT(!m_iteratingActiveDOMObjects);
&gt; &gt; +    ASSERT(!m_inDestructor);
&gt; 
&gt; Here and elsewhere: Should we be doing something more than just ASSERTing in debug?  This seems like it&apos;ll be a security problem if we do ever hit this case in release builds.
&gt; 
&gt; LGTM otherwise.

Good point!  Although this should never happen in theory, if it did, it could turn into a security vulnerability (due to the dangling ScriptExecutionContext pointer).  It seems there&apos;s really nothing good to do in such a case, so we should probably just crash in such a case.  Will make the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344331</commentid>
    <comment_count>25</comment_count>
      <attachid>80984</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 15:47:22 -0800</bug_when>
    <thetext>Created attachment 80984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344344</commentid>
    <comment_count>26</comment_count>
      <attachid>80990</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 15:57:38 -0800</bug_when>
    <thetext>Created attachment 80990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344352</commentid>
    <comment_count>27</comment_count>
      <attachid>80990</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-02-02 16:04:41 -0800</bug_when>
    <thetext>Comment on attachment 80990
Patch

Ok.

Is it worth an explanatory comment as to why we&apos;re crashing instead of just asserting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344397</commentid>
    <comment_count>28</comment_count>
      <attachid>80990</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 16:39:03 -0800</bug_when>
    <thetext>Comment on attachment 80990
Patch

If someone wants to remove it, I&apos;d hope they&apos;d look at the change that added it and thus see this thread.  That seems to be the WebKit way anyhow...for better or worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344476</commentid>
    <comment_count>29</comment_count>
      <attachid>80990</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-02 18:24:15 -0800</bug_when>
    <thetext>Comment on attachment 80990
Patch

Clearing flags on attachment: 80990

Committed r77456: &lt;http://trac.webkit.org/changeset/77456&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344477</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-02 18:24:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80158</attachid>
            <date>2011-01-25 18:51:29 -0800</date>
            <delta_ts>2011-01-26 10:20:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52722-20110125185128.patch</filename>
            <type>text/plain</type>
            <size>38503</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li40
ZTMwMTI3MTQ1OWNkNzgxNmE0YjZmNjI4NzM5Yzc4OTM2MDhmOTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzMgQEAKKzIwMTEtMDEtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5k
ZXhlZERCIHNob3VsZCBvbmx5IGhhdmUgb25lIGFjdGl2ZSBkb20gb2JqZWN0IHBlciBzY3JpcHQg
ZXhlY3V0aW9uIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyNzIyCisKKyAgICAgICAgSURCVHJhbnNhY3Rpb24gYW5kIElEQlJlcXVlc3Qg
bm93IGltcGxlbWVudCBJREJBY3RpdmVET01PYmplY3QgcmF0aGVyIHRoYW4KKyAgICAgICAgQWN0
aXZlRE9NT2JqZWN0LiBUaGUgZm9ybWVyIGhhcyBsZXNzIGltcGxpY2F0aW9ucyB0aGUgbGF0dGVy
IGFuZCBpdGVyYXRlcworICAgICAgICBtb3JlIHNhZmVseS4KKworICAgICAgICBJbiBhZGRpdGlv
biwgdGhpcyBwYXRjaCBjbGVhbnMgdXAgYSBsb3QuIFRoZSB3YXkgd2Ugc2VsZi1yZWZmZWQgYmVm
b3JlIHdhcworICAgICAgICB0b3RhbGx5IGJyb2tlbiwgZm9yIGV4YW1wbGUuCisKKyAgICAgICAg
Tm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIHRlc3QuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
CisgICAgICAgICogc3RvcmFnZS9JREJBY3RpdmVET01PYmplY3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjpJREJBY3RpdmVET01PYmplY3RQ
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6On5J
REJBY3RpdmVET01PYmplY3RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURP
TU9iamVjdFByaXZhdGU6OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBY3RpdmVE
T01PYmplY3RQcml2YXRlOjp1bnN1YnNjcmliZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBY3Rp
dmVET01PYmplY3RQcml2YXRlOjpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OmNhblN1c3BlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJB
Y3RpdmVET01PYmplY3Q6OklEQkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJBY3RpdmVET01PYmplY3Q6On5JREJBY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkFjdGl2ZURPTU9iamVjdDo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJBY3RpdmVET01PYmplY3Q6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZl
RE9NT2JqZWN0OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9NT2JqZWN0
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OklEQlJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25T
dWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6Y2FuU3VzcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2NoZWR1
bGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRp
bWVvdXRFdmVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6c3Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25BYm9ydFRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGVUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6
CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxs
YmFja3MuaDoKKwogMjAxMS0wMS0yNCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggNjE5OGMxZjVkNjE4YjMyMmEwMTZhYmU3ZTQ2MzdhNzhjMzcwNmYzMC4uNGZkMWQ4MmNh
NDRmNTkxNWNhMDU2OTU1NzIzNWE0M2I4OTA3MTI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzk5
Nyw2ICszOTk3LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVu
dC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkFib3J0RXZlbnQuY3BwJywKICAgICAgICAg
ICAgICdzdG9yYWdlL0lEQkFib3J0RXZlbnQuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9JREJB
Y3RpdmVET01PYmplY3QuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQkFjdGl2ZURPTU9i
amVjdC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkFueS5jcHAnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvSURCQW55LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgn
LApAQCAtNDA1MCw4ICs0MDUyLDYgQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlNRTGl0ZURh
dGFiYXNlLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCU3VjY2Vzc0V2ZW50LmNwcCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJTdWNjZXNzRXZlbnQuaCcsCi0gICAgICAgICAgICAnc3Rv
cmFnZS9JREJUaW1lb3V0RXZlbnQuY3BwJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRpbWVv
dXRFdmVudC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZjQxOGViNTIwYzA3
NDdlYzE1YWM2NmRkZjU5MjU1OTg4MjY4Mjg3Zi4uNmE1ZTg2MjZiMzA3ODZjMDcxN2QyM2NmMDIx
YjdiMDgyNjM1MDA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI1NjQsNyArMjU2NCw2IEBAIHN1YiBJc0FjdGl2ZURv
bVR5cGUKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViU29ja2V0IjsKICAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiV29ya2VyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2hhcmVk
V29ya2VyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CiAgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJGaWxlV3JpdGVyIjsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQWN0aXZlRE9NT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTQ0YThlMjlhNWViNGQ4ZDc5ZWNi
ODBkYTI1NjdiYzE3ZTY5OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBY3RpdmVET01PYmplY3QuY3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkFjdGl2ZURPTU9iamVjdC5oIgorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhl
IG9uZSBhY3R1YWwgQWN0aXZlRE9NT2JqZWN0IHdoaWNoIHRoZW4gaW50ZXJhY3RzIHdpdGggYWxs
IHRoZSBvYmplY3RzIHRoYXQgaW1wbGVtZW50IElEQkFjdGl2ZURPTU9iamVjdC4KK2NsYXNzIElE
QkFjdGl2ZURPTU9iamVjdFByaXZhdGUgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMg
UmVmQ291bnRlZDxJREJBY3RpdmVET01PYmplY3RQcml2YXRlPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZT4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB+SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSgpOworCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZT4gc3Vic2NyaWJl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJBY3RpdmVET01PYmplY3QqKTsKKyAgICB2b2lk
IHVuc3Vic2NyaWJlKElEQkFjdGl2ZURPTU9iamVjdCopOworCisgICAgdmlydHVhbCB2b2lkIGNv
bnRleHREZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVu
c2lvbik7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CisKK3ByaXZhdGU6CisgICAgSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKKyAgICBIYXNoU2V0PElEQkFjdGl2ZURPTU9iamVjdCo+IG1fc3Vi
c2NyaWJlcnM7CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgdG8gdGhlIG9uZSBhbmQgb25seSBJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlIGZvciBhIHBhcnRpY3VsYXIgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC4KKyAgICBzdGF0aWMgSGFzaE1hcDxTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCQWN0
aXZlRE9NT2JqZWN0UHJpdmF0ZSo+IHNfYWN0aXZlRE9NT2JqZWN0czsKK307CisKK0hhc2hNYXA8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGUqPiBJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlOjpzX2FjdGl2ZURPTU9iamVjdHM7CisKK1Bhc3NSZWZQdHI8
SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZT4gSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJBY3RpdmVET01PYmplY3RQcml2YXRlKGNvbnRleHQpKTsKK30KKworSURCQWN0
aXZlRE9NT2JqZWN0UHJpdmF0ZTo6SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRo
aXMpCit7CisgICAgQVNTRVJUKCFzX2FjdGl2ZURPTU9iamVjdHMuY29udGFpbnMoY29udGV4dCkp
OworICAgIHNfYWN0aXZlRE9NT2JqZWN0cy5zZXQoY29udGV4dCwgdGhpcyk7Cit9CisKK0lEQkFj
dGl2ZURPTU9iamVjdFByaXZhdGU6On5JREJBY3RpdmVET01PYmplY3RQcml2YXRlKCkKK3sKK30K
KworUGFzc1JlZlB0cjxJREJBY3RpdmVET01PYmplY3RQcml2YXRlPiBJREJBY3RpdmVET01PYmpl
Y3RQcml2YXRlOjpzdWJzY3JpYmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURC
QWN0aXZlRE9NT2JqZWN0KiBzdWJzY3JpYmVyKQoreworICAgIFJlZlB0cjxJREJBY3RpdmVET01P
YmplY3RQcml2YXRlPiBvYmplY3Q7CisgICAgaWYgKHNfYWN0aXZlRE9NT2JqZWN0cy5jb250YWlu
cyhjb250ZXh0KSkKKyAgICAgICAgb2JqZWN0ID0gc19hY3RpdmVET01PYmplY3RzLmdldChjb250
ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIG9iamVjdCA9IElEQkFjdGl2ZURPTU9iamVjdFByaXZh
dGU6OmNyZWF0ZShjb250ZXh0KTsKKworICAgIG9iamVjdC0+bV9zdWJzY3JpYmVycy5hZGQoc3Vi
c2NyaWJlcik7CisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSURCQWN0
aXZlRE9NT2JqZWN0UHJpdmF0ZTo6dW5zdWJzY3JpYmUoSURCQWN0aXZlRE9NT2JqZWN0KiBzdWJz
Y3JpYmVyKQoreworICAgIEFTU0VSVChtX3N1YnNjcmliZXJzLmNvbnRhaW5zKHN1YnNjcmliZXIp
KTsKKyAgICBtX3N1YnNjcmliZXJzLnJlbW92ZShzdWJzY3JpYmVyKTsKK30KKwordm9pZCBJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlOjpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBWZWN0b3I8
SURCQWN0aXZlRE9NT2JqZWN0Kj4gc3Vic2NyaWJlcnM7CisgICAgY29weVRvVmVjdG9yKG1fc3Vi
c2NyaWJlcnMsIHN1YnNjcmliZXJzKTsKKworICAgIFZlY3RvcjxJREJBY3RpdmVET01PYmplY3Qq
Pjo6aXRlcmF0b3IgZW5kID0gc3Vic2NyaWJlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8SURC
QWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBzdWJzY3JpYmVycy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmIChtX3N1YnNjcmliZXJzLmNvbnRhaW5z
KCppdGVyKSkKKyAgICAgICAgICAgICgqaXRlciktPmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoc19hY3RpdmVET01PYmplY3RzLmNvbnRhaW5zKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkpOworICAgIHNfYWN0aXZlRE9NT2JqZWN0cy5yZW1vdmUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKKworICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgp
OyAvLyBXaWxsIGNsZWFyIHRoZSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkuCit9CisKK2Jvb2wg
SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6Y2FuU3VzcGVuZCgpIGNvbnN0Cit7CisgICAgVmVj
dG9yPElEQkFjdGl2ZURPTU9iamVjdCo+IHN1YnNjcmliZXJzOworICAgIGNvcHlUb1ZlY3Rvciht
X3N1YnNjcmliZXJzLCBzdWJzY3JpYmVycyk7CisKKyAgICBWZWN0b3I8SURCQWN0aXZlRE9NT2Jq
ZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IHN1YnNjcmliZXJzLmVuZCgpOworICAgIGZvciAoVmVjdG9y
PElEQkFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRvciBpdGVyID0gc3Vic2NyaWJlcnMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpZiAobV9zdWJzY3JpYmVycy5jb250
YWlucygqaXRlcikgJiYgISgqaXRlciktPmNhblN1c3BlbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJREJBY3RpdmVE
T01PYmplY3RQcml2YXRlOjpzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVu
c2lvbiByZWFzb24pCit7CisgICAgVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+IHN1YnNjcmli
ZXJzOworICAgIGNvcHlUb1ZlY3RvcihtX3N1YnNjcmliZXJzLCBzdWJzY3JpYmVycyk7CisKKyAg
ICBWZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IHN1YnNjcmliZXJz
LmVuZCgpOworICAgIGZvciAoVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRvciBp
dGVyID0gc3Vic2NyaWJlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAg
ICBpZiAobV9zdWJzY3JpYmVycy5jb250YWlucygqaXRlcikpCisgICAgICAgICAgICAoKml0ZXIp
LT5zdXNwZW5kKHJlYXNvbik7CisgICAgfQorfQorCit2b2lkIElEQkFjdGl2ZURPTU9iamVjdFBy
aXZhdGU6OnJlc3VtZSgpCit7CisgICAgVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+IHN1YnNj
cmliZXJzOworICAgIGNvcHlUb1ZlY3RvcihtX3N1YnNjcmliZXJzLCBzdWJzY3JpYmVycyk7CisK
KyAgICBWZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IHN1YnNjcmli
ZXJzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRv
ciBpdGVyID0gc3Vic2NyaWJlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBpZiAobV9zdWJzY3JpYmVycy5jb250YWlucygqaXRlcikpCisgICAgICAgICAgICAoKml0
ZXIpLT5yZXN1bWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0
ZTo6c3RvcCgpCit7CisgICAgVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+IHN1YnNjcmliZXJz
OworICAgIGNvcHlUb1ZlY3RvcihtX3N1YnNjcmliZXJzLCBzdWJzY3JpYmVycyk7CisKKyAgICBW
ZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IHN1YnNjcmliZXJzLmVu
ZCgpOworICAgIGZvciAoVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRvciBpdGVy
ID0gc3Vic2NyaWJlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBp
ZiAobV9zdWJzY3JpYmVycy5jb250YWlucygqaXRlcikpCisgICAgICAgICAgICAoKml0ZXIpLT5z
dG9wKCk7CisgICAgfQorfQorCitJREJBY3RpdmVET01PYmplY3Q6OklEQkFjdGl2ZURPTU9iamVj
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fcHJpdmF0ZSA9IElE
QkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OnN1YnNjcmliZShjb250ZXh0LCB0aGlzKTsKKyAgICBB
U1NFUlQobV9wcml2YXRlKTsKK30KKworSURCQWN0aXZlRE9NT2JqZWN0Ojp+SURCQWN0aXZlRE9N
T2JqZWN0KCkKK3sKKyAgICBtX3ByaXZhdGUtPnVuc3Vic2NyaWJlKHRoaXMpOworfQorCit2b2lk
IElEQkFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpCit7Cit9CisKK2Jvb2wgSURC
QWN0aXZlRE9NT2JqZWN0OjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgSURCQWN0aXZlRE9NT2JqZWN0OjpzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6
UmVhc29uRm9yU3VzcGVuc2lvbikKK3sKK30KKwordm9pZCBJREJBY3RpdmVET01PYmplY3Q6OnJl
c3VtZSgpCit7Cit9CisKK3ZvaWQgSURCQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCkKK3sKK30KKwor
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAKaW5kZXggNDQ0YzEwOWExZDU2NTg0YTIzNDY1OTRk
NjViMTc1MTljMjg1YjQ3Ny4uNGJlNmY0YTU1MjQ4NTk1NDY4M2I5MTY4NTc3YTI0MmIzMTI5MmNl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcApAQCAtODQsNyArODQsNyBAQCB2
b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90
cmFuc2FjdGlvbi5nZXQoKSkpCiAgICAgICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihr
ZXksIG1fcmVxdWVzdCwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsK
IH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggY2JkNjM1Y2Y5NjcxMmVhMTZmZWQ0YzBh
OThhMjgzZTM4NjE1ZTRlMy4uMmIwZjA3ZmM0MDZlN2YzOTgxZjkwYjQ4YTA1NDAyNzcyZDBkNDAy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC00NiwxMSArNDYsMTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uKQoreworICAgIHJldHVybiBuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRyYW5z
YWN0aW9uKTsgLy8gVGhpcyBhZG9wdHMgaXRzZWxmIGluIHRoZSBjb25zdHJ1Y3Rvci4KK30KKwog
SURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAg
OiBJREJBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAg
ICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgLCBtX3RpbWVyKHRoaXMsICZJREJS
ZXF1ZXN0Ojp0aW1lckZpcmVkKQorICAgICwgbV9zZWxmUmVmKGFkb3B0UmVmKHRoaXMpKQogICAg
ICwgbV9yZWFkeVN0YXRlKExPQURJTkcpCiB7CiAgICAgaWYgKG1fdHJhbnNhY3Rpb24pCkBAIC02
Myw1MiArNjksNzYgQEAgSURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQogCiBib29sIElEQlJlcXVl
c3Q6OnJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uKQogewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7Ci0gICAgbV9yZWFk
eVN0YXRlID0gTE9BRElORzsKKyAgICAvLyBJZiB3ZSBzdGlsbCBoYXZlIHRoZSBzZWxmLXJlZiwg
dGhlbiB0aGUgbGFzdCByZXF1ZXN0IGhhcyBub3QgdHJpZWQgdG8gZmlyZSBpdHMKKyAgICAvLyBl
dmVudCBoYW5kbGVyIHlldCwgc28gdGhlIGNhbGxlciBzaG91bGQgZmlyZSBhbiBleGNlcHRpb24u
CisgICAgaWYgKG1fc2VsZlJlZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsK
ICAgICBtX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CisgICAgbV9zZWxmUmVmID0gdGhpczsK
KyAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5HOworCiAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9u
TW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwor
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25FcnJvcihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQogeworICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgc2NoZWR1bGVFdmVudCgwLCBlcnJvcik7
CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKCkKIHsKKyAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxlRXZlbnQoSURC
QW55OjpjcmVhdGVOdWxsKCksIDApOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7CisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKICAgICBzY2hlZHVs
ZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpKSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogeworICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgc2No
ZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJEYXRhYmFzZTo6Y3JlYXRlKGJhY2tlbmQpKSwg
MCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogeworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0
ZShJREJJbmRleDo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSwgMCk7CiB9
CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkp
CiB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsK
ICAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKGlkYktleSksIDApOwogfQogCiB2b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQg
Z28gYXdheSBvbmNlIGNyZWF0ZU9iamVjdFN0b3JlIGlzIHN5bmMuCisgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBnbyBhd2F5LgogICAgIHNjaGVkdWxl
RXZlbnQoSURCQW55OjpjcmVhdGUoSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShiYWNrZW5kLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKSksIDApOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZCkKIHsK
KyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQgPSBwcnBCYWNr
ZW5kOwogICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5IHNldFZlcnNpb24gd2hpY2ggd2lsbCBh
bHdheXMgaGF2ZSBhIHNvdXJjZSB0aGF0J3MgYW4gSURCRGF0YWJhc2UuCiAgICAgbV9zb3VyY2Ut
PmlkYkRhdGFiYXNlKCktPnNldFNldFZlcnNpb25UcmFuc2FjdGlvbihiYWNrZW5kLmdldCgpKTsK
QEAgLTEyMSw4NCArMTUxLDgzIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kCiAKIHZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkU2NyaXB0VmFsdWUpCiB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
CisgICAgICAgIHJldHVybjsKICAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKHNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSksIDApOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJS
ZXF1ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWN0
aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgcmV0dXJuIElEQkFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQogCiBib29sIElEQlJl
cXVlc3Q6OmNhblN1c3BlbmQoKSBjb25zdAogewotICAgIC8vIElEQlRyYW5zYWN0aW9ucyBjYW5u
b3QgYmUgc3VzcGVuZGVkIGF0IHRoZSBtb21lbnQuIFdlIHRoZXJlZm9yZQotICAgIC8vIGRpc2Fs
bG93IHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgZm9yIHBhZ2VzIHRoYXQgdXNlIEluZGV4ZWREYXRh
YmFzZS4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSURCVHJhbnNhY3Rpb24gd2lsbCBibG9j
ayBzdXNwZW5zaW9uIGlmIG5lY2Vzc2FyeS4KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRXZlbnRU
YXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQordm9pZCBJREJSZXF1ZXN0
OjpzdG9wKCkKIHsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQorICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgX2JpdF8gb3Zlcmx5IGJyb2FkLiBXZSBjb3VsZCB0aWdodGVuIHRoZSBj
b25kaXRpb25zIGlmIHdlIHJlYWxseSB3YW50ZWQgdG8uCisgICAgaWYgKG1fdHJhbnNhY3Rpb24p
CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAKLUV2ZW50VGFyZ2V0RGF0YSogSURC
UmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOworICAgIG1fdGltZXIuc3RvcCgpOworICAgIG1fc2VsZlJlZi5jbGVhcigpOwor
ICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKKworICAgIElEQkFjdGl2ZURPTU9iamVjdDo6c3Rv
cCgpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnRpbWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4q
KQogewogICAgIEFTU0VSVChtX3NlbGZSZWYpOwotICAgIEFTU0VSVChtX3BlbmRpbmdFdmVudHMu
c2l6ZSgpKTsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGUgc3RvcCBldmVudCBh
bmQgc3RvcCBhbnkgdGltZXJzIHdoZW4gd2Ugc2VlIGl0LiBXZSBjYW4gdGhlbiBhc3NlcnQgaGVy
ZSB0aGF0IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgbm9uLW51bGwuCisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICAvLyBXZSBuZWVkIHRvIGtlZXAgc2VsZi1y
ZWZlcmVuY2luZyBvdXJzZWxmLCBvdGhlcndpc2UgaXQncyBwb3NzaWJsZSB3ZSdsbCBiZSBkZWxl
dGVkLgotICAgIC8vIEJ1dCBpbiBzb21lIGNhc2VzLCBzdXNwZW5kKCkgY291bGQgYmUgY2FsbGVk
IHdoaWxlIHdlJ3JlIGRpc3BhdGNoaW5nIGFuIGV2ZW50LCBzbyB3ZQotICAgIC8vIG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgcmVzdW1lKCkgZG9lc24ndCByZS1zdGFydCB0aGUgdGltZXIgYmFzZWQg
b24gbV9zZWxmUmVmIGJlaW5nIHNldC4KKyAgICAvLyByZXNldFJlYWR5U3RhdGUgY2FuIGJlIGNh
bGxlZCB3aGlsZSB3ZSdyZSBmaXJpbmcgdGhpcywgc28gc2F2ZSBldmVyeXRoaW5nIG9mZiB0byB0
aGUgc2lkZS4KKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLQotICAgIC8vIHJlYWR5U3RhdGVSZXNl
dCBjYW4gYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hpbGUgd2UncmUgZGlzcGF0Y2hpbmcgdGhl
IGV2ZW50LgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbjsKLSAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7Ci0KLSAg
ICBWZWN0b3I8UGVuZGluZ0V2ZW50PiBwZW5kaW5nRXZlbnRzOwotICAgIHBlbmRpbmdFdmVudHMu
c3dhcChtX3BlbmRpbmdFdmVudHMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGVuZGlu
Z0V2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHdlJ3ZlIG5h
dmlnYXRlZCBpbiB3aGljaCBjYXNlIHdlJ2xsIGNyYXNoLgotICAgICAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocGVu
ZGluZ0V2ZW50c1tpXS5tX2Vycm9yKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXBlbmRpbmdFdmVu
dHNbaV0ubV9yZXN1bHQpOwotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChJREJFcnJvckV2ZW50
OjpjcmVhdGUobV9zb3VyY2UsICpwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChwZW5kaW5nRXZlbnRzW2ldLm1fcmVzdWx0LT50
eXBlKCkgIT0gSURCQW55OjpVbmRlZmluZWRUeXBlKTsKLSAgICAgICAgICAgIGRpc3BhdGNoRXZl
bnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIHBlbmRpbmdFdmVudHNbaV0ubV9y
ZXN1bHQpKTsKLSAgICAgICAgfQorICAgIFJlZlB0cjxJREJBbnk+IHJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2UoKTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBtX2Vycm9y
LnJlbGVhc2UoKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgICBBU1NFUlQoIXJlc3VsdCk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnQoSURCRXJyb3JFdmVudDo6Y3JlYXRlKG1fc291cmNlLCAq
ZXJyb3IpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQocmVzdWx0LT50eXBlKCkgIT0g
SURCQW55OjpVbmRlZmluZWRUeXBlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChJREJTdWNjZXNz
RXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgcmVzdWx0KSk7CiAgICAgfQorCiAgICAgaWYgKHRyYW5z
YWN0aW9uKSB7CiAgICAgICAgIC8vIE5vdyB0aGF0IHdlIHByb2Nlc3NlZCBhbGwgcGVuZGluZyBl
dmVudHMsIGxldCB0aGUgdHJhbnNhY3Rpb24gbW9uaXRvciBjaGVjayBpZgogICAgICAgICAvLyBp
dCBjYW4gY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIG9yIGlmIHRoZXJlJ3MgYW55dGhp
bmcgbmV3IHBlbmRpbmcuCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIHdvcmtlcnMgY2Fz
ZS4KICAgICAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogICAgIH0K
IH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8SURCQW55PiBy
ZXN1bHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiB7CisgICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA8IERP
TkUpOwotICAgIEFTU0VSVCghIW1fc2VsZlJlZiA9PSBtX3RpbWVyLmlzQWN0aXZlKCkpOwotCi0g
ICAgUGVuZGluZ0V2ZW50IHBlbmRpbmdFdmVudDsKLSAgICBwZW5kaW5nRXZlbnQubV9yZXN1bHQg
PSByZXN1bHQ7Ci0gICAgcGVuZGluZ0V2ZW50Lm1fZXJyb3IgPSBlcnJvcjsKLSAgICBtX3BlbmRp
bmdFdmVudHMuYXBwZW5kKHBlbmRpbmdFdmVudCk7CisgICAgQVNTRVJUKG1fc2VsZlJlZik7Cisg
ICAgQVNTRVJUKCFtX3Jlc3VsdCk7CisgICAgQVNTRVJUKCFtX2Vycm9yKTsKIAogICAgIG1fcmVh
ZHlTdGF0ZSA9IERPTkU7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAg
bV9zZWxmUmVmID0gdGhpczsKLSAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAg
fQorICAgIG1fcmVzdWx0ID0gcmVzdWx0OworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX3Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0Ojpl
dmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisK
K0V2ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sK
KyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCmluZGV4IGZhNjgyMDhjYzU4NTkxZGJm
NzYzMzFlYTNjMTA0ZmMxZDM2ZDRlNjIuLmVhZmRiNzBlNjk4ZGNiYmRhYmZmZTAwZWY4MzA3ZGQw
NzNkOThmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCkBAIC0zMSwxMCArMzEs
MTAgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIklEQkFjdGl2ZURP
TU9iamVjdC5oIgogI2luY2x1ZGUgIklEQkFueS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC00NCw5ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogCi1jbGFzcyBJREJS
ZXF1ZXN0IDogcHVibGljIElEQkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tz
LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBJREJBY3RpdmVET01PYmplY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
SURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OwogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAogICAgIC8vIERlZmluZWQgaW4gdGhlIElE
TApAQCAtNzMsMTAgKzczLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAg
dmlydHVhbCBJREJSZXF1ZXN0KiB0b0lEQlJlcXVlc3QoKSB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3Q7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAg
ICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElEQkNhbGxiYWNrcz46OnJlZjsKICAgICB1c2luZyBU
aHJlYWRTYWZlU2hhcmVkPElEQkNhbGxiYWNrcz46OmRlcmVmOwpAQCAtOTYsMTcgKzk3LDE0IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7CiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKIAotICAgIHN0cnVjdCBQ
ZW5kaW5nRXZlbnQgewotICAgICAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKLSAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IG1fZXJyb3I7Ci0gICAgfTsKLSAgICBWZWN0b3I8UGVu
ZGluZ0V2ZW50PiBtX3BlbmRpbmdFdmVudHM7Ci0KICAgICAvLyBVc2VkIHRvIGZpcmUgZXZlbnRz
IGFzeW5jaHJvbm91c2x5LgogICAgIFRpbWVyPElEQlJlcXVlc3Q+IG1fdGltZXI7Ci0gICAgUmVm
UHRyPElEQlJlcXVlc3Q+IG1fc2VsZlJlZjsgLy8gVGhpcyBpcyBzZXQgdG8gdXMgaWZmIHRoZXJl
J3MgYW4gZXZlbnQgcGVuZGluZy4KKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKKyAgICBS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gbV9lcnJvcjsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4g
bV9zZWxmUmVmOwogCiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisKICAgICBFdmVudFRh
cmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRpbWVvdXRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRpbWVvdXRFdmVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MWVl
NDc0NDQ4NTdlZTYxN2I1MzEzMDdlMGE1NzMzY2Q1NmE3YWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUaW1l
b3V0RXZlbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJREJUaW1lb3V0RXZlbnQuaCIKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIklEQkFu
eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8SURCVGltZW91dEV2ZW50
PiBJREJUaW1lb3V0RXZlbnQ6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJUaW1lb3V0RXZlbnQoKSk7Ci19Ci0KLUlEQlRpbWVvdXRFdmVudDo6SURCVGltZW91dEV2ZW50
KCkKLSAgICA6IElEQkV2ZW50KGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCAwKSAvLyBGSVhNRTog
c2V0IHRoZSBzb3VyY2UgdG8gdGhlIHRyYW5zYWN0aW9uCi17Ci19Ci0KLUlEQlRpbWVvdXRFdmVu
dDo6fklEQlRpbWVvdXRFdmVudCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IGUz
NjI1ZDRiNWJkN2Q3NDFmOWQ5OTk0YTQyZWQ0ODQ0OWZiMGJkNjYuLjg2Nzc5NGZjNmViYTg2MzE5
MzIyYzRiYTI4NGRmNDZiZTA3ZGE4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb24uY3BwCkBAIC0zOCwxOSArMzgsMjMgQEAKICNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1
ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKLSNpbmNsdWRlICJJREJUaW1lb3V0
RXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQoreyAK
KyAgICByZXR1cm4gbmV3IElEQlRyYW5zYWN0aW9uKGNvbnRleHQsIGJhY2tlbmQsIGRiKTsgLy8g
VGhpcyBhZG9wdHMgaXRzZWxmIGluIHRoZSBjb25zdHJ1Y3Rvci4KK30KKwogSURCVHJhbnNhY3Rp
b246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFz
ZSogZGIpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICA6IElEQkFj
dGl2ZURPTU9iamVjdChjb250ZXh0KQogICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCisgICAgLCBt
X3NlbGZSZWYoYWRvcHRSZWYodGhpcykpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwgbV9t
b2RlKG1fYmFja2VuZC0+bW9kZSgpKQogICAgICwgbV9vbkFib3J0VGltZXIodGhpcywgJklEQlRy
YW5zYWN0aW9uOjpvbkFib3J0VGltZXJGaXJlZCkKICAgICAsIG1fb25Db21wbGV0ZVRpbWVyKHRo
aXMsICZJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX29uVGlt
ZW91dFRpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbjo6b25UaW1lb3V0VGltZXJGaXJlZCkKIHsK
ICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5nVHJhbnNhY3Rpb24o
bV9iYWNrZW5kLmdldCgpKTsKIH0KQEAgLTkyLDgyICs5Niw3MCBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uOjphYm9ydCgpCiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlRyYW5zYWN0aW9uOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgcmV0dXJuIElEQkFjdGl2ZURPTU9i
amVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9u
OjpvbkFib3J0KCkKIHsKICAgICBBU1NFUlQoIW1fb25BYm9ydFRpbWVyLmlzQWN0aXZlKCkpOwog
ICAgIEFTU0VSVCghbV9vbkNvbXBsZXRlVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFt
X29uVGltZW91dFRpbWVyLmlzQWN0aXZlKCkpOwotICAgIG1fc2VsZlJlZiA9IHRoaXM7CisgICAg
aWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX29u
QWJvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgbV9iYWNrZW5kLmNsZWFyKCk7IC8vIFJl
bGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMgYSAoY2lyY3VsYXIpIHJlZmVyZW5jZSBiYWNr
IHRvIHVzLgogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKIHsKICAgICBB
U1NFUlQoIW1fb25BYm9ydFRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVCghbV9vbkNvbXBs
ZXRlVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uVGltZW91dFRpbWVyLmlzQWN0
aXZlKCkpOwotICAgIG1fc2VsZlJlZiA9IHRoaXM7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX29uQ29tcGxldGVUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci0gICAgbV9iYWNrZW5kLmNsZWFyKCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQg
YXMgaXQgaG9sZHMgYSAoY2lyY3VsYXIpIHJlZmVyZW5jZSBiYWNrIHRvIHVzLgotfQotCi12b2lk
IElEQlRyYW5zYWN0aW9uOjpvblRpbWVvdXQoKQotewotICAgIEFTU0VSVCghbV9vbkFib3J0VGlt
ZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uQ29tcGxldGVUaW1lci5pc0FjdGl2ZSgp
KTsKLSAgICBBU1NFUlQoIW1fb25UaW1lb3V0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9zZWxm
UmVmID0gdGhpczsKLSAgICBtX29uVGltZW91dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICBt
X2JhY2tlbmQuY2xlYXIoKTsgLy8gUmVsZWFzZSB0aGUgYmFja2VuZCBhcyBpdCBob2xkcyBhIChj
aXJjdWxhcikgcmVmZXJlbmNlIGJhY2sgdG8gdXMuCiB9CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246
OmNhblN1c3BlbmQoKSBjb25zdAogewotICAgIC8vIFdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9m
IGEgdHJhbnNhY3Rpb24gc28gd2UgY2Fubm90IHN1c3BlbmQgb3VyIG9iamVjdC4KLSAgICAvLyBJ
bnN0ZWFkLCB3ZSBzaW1wbHkgZG9uJ3QgYWxsb3cgdGhlIG93bmVyIHBhZ2UgdG8gZ28gaW50byB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGSVhNRTog
SW4gdGhlb3J5LCB3ZSBjb3VsZCBhbGxvdyBzdXNwZW5zaW9uIGFzIHNvb24gYXMgb25BYm9ydC9v
bkNvbXBsZXRlIGlzCisgICAgLy8gICAgICAgIGNhbGxlZCAobm90IGp1c3Qgd2hlbiB3ZSBmaXJl
IHRoZSBldmVudCkuCisgICAgcmV0dXJuICFtX3NlbGZSZWY7CiB9CiAKIHZvaWQgSURCVHJhbnNh
Y3Rpb246OnN0b3AoKQogewotICAgIGlmIChtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZC0+
YWJvcnQoKTsKLX0KKyAgICBtX29uQ29tcGxldGVUaW1lci5zdG9wKCk7CisgICAgbV9vbkFib3J0
VGltZXIuc3RvcCgpOworICAgIG1fYmFja2VuZC5jbGVhcigpOworICAgIG1fc2VsZlJlZi5jbGVh
cigpOwogCi1FdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERhdGEo
KQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0
YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICBJREJBY3RpdmVET01PYmplY3Q6OnN0b3AoKTsKIH0K
IAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNh
Y3Rpb24+KiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9zZWxmUmVmKTsKKyAgICBBU1NF
UlQobV9zZWxmUmVmICYmIG1fYmFja2VuZCk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBz
ZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKKwog
ICAgIGRpc3BhdGNoRXZlbnQoSURCQWJvcnRFdmVudDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIElE
QlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4q
IHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVChtX3NlbGZSZWYpOworICAgIEFTU0VSVChtX3Nl
bGZSZWYgJiYgbV9iYWNrZW5kKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYg
PSBtX3NlbGZSZWYucmVsZWFzZSgpOworICAgIG1fYmFja2VuZC5jbGVhcigpOworCiAgICAgZGlz
cGF0Y2hFdmVudChJREJDb21wbGV0ZUV2ZW50OjpjcmVhdGUoKSk7CiB9CiAKK0V2ZW50VGFyZ2V0
RGF0YSogSURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKK30KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25UaW1lb3V0VGlt
ZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qIHRyYW5zYWN0aW9uKQorRXZlbnRUYXJnZXRE
YXRhKiBJREJUcmFuc2FjdGlvbjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICBBU1NF
UlQobV9zZWxmUmVmKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSBtX3Nl
bGZSZWYucmVsZWFzZSgpOwotICAgIGRpc3BhdGNoRXZlbnQoSURCVGltZW91dEV2ZW50OjpjcmVh
dGUoKSk7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGQwYTlmMGZkNmYxOTAwMjA2YTQ2NTFk
NzdmNGVjM2U2MTYyZjlmYTQuLjI0MzI3Y2IzMWU3YjIyNGU1MmM3Zjg5ZDFkMjU5NDcwNTBhMzVi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTI4LDExICsy
OCwxMSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIklEQkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ2Fs
bGJhY2tzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTQzLDEyICs0Myw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCT2JqZWN0U3RvcmU7CiAK
LWNsYXNzIElEQlRyYW5zYWN0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLCBw
dWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSURCVHJh
bnNhY3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25DYWxsYmFja3MsIHB1YmxpYyBFdmVudFRh
cmdldCwgcHVibGljIElEQkFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCwgSURCRGF0YWJhc2UqIGRiKQotICAgIHsgCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwgZGIpKTsgCi0gICAgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJh
c2UqKTsKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbigpOwogCiAgICAgZW51bSBNb2RlIHsK
QEAgLTY0LDE4ICs2MSwxNiBAQCBwdWJsaWM6CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGFib3J0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNv
bXBsZXRlKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRpbWVvdXQpOwog
CiAgICAgLy8gSURCVHJhbnNhY3Rpb25DYWxsYmFja3MKICAgICB2aXJ0dWFsIHZvaWQgb25BYm9y
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9u
VGltZW91dCgpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIElEQlRyYW5zYWN0
aW9uKiB0b0lEQlRyYW5zYWN0aW9uKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAg
ICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCkBAIC04NSwyNSArODAs
MjYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJEYXRhYmFzZSopOwogCisgICAgdm9pZCBvbkFib3J0VGltZXJGaXJlZChUaW1lcjxJREJUcmFu
c2FjdGlvbj4qKTsKKyAgICB2b2lkIG9uQ29tcGxldGVUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5z
YWN0aW9uPiopOworCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQo
KSB7IGRlcmVmKCk7IH0KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXRE
YXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSgpOwogCi0gICAgdm9pZCBvbkFib3J0VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4q
KTsKLSAgICB2b2lkIG9uQ29tcGxldGVUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiop
OwotICAgIHZvaWQgb25UaW1lb3V0VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsK
LQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICAvLyBFaXRoZXIg
Ym90aCBzaG91bGQgYmUgbnVsbCBvciBib3RoIHNob3VsZCBiZSBub24tbnVsbC4KICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBtX3NlbGZSZWY7CisKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1f
ZGF0YWJhc2U7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwogCiAgICAgVGltZXI8SURCVHJh
bnNhY3Rpb24+IG1fb25BYm9ydFRpbWVyOwogICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBtX29u
Q29tcGxldGVUaW1lcjsKLSAgICBUaW1lcjxJREJUcmFuc2FjdGlvbj4gbV9vblRpbWVvdXRUaW1l
cjsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fc2VsZlJlZjsgLy8gVGhpcyBpcyBzZXQg
dG8gdXMgaWZmIHRoZXJlJ3MgYW4gZXZlbnQgcGVuZGluZy4KKworICAgIEV2ZW50VGFyZ2V0RGF0
YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKaW5kZXggYjU3YWM0YTk4NmM4ZTJh
NDhhYzYzNTNlOWEzNmZlNzI0ZDNhZTQwNC4uY2YzYjFjZTgzNjVkMWYwNjE1ODI5YzY2ZGQ5MmQ1
MmM2NzBkYmJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwK
QEAgLTQ0LDcgKzQ0LDYgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAgICAvLyBFdmVudHMKICAg
ICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKICAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb250aW1lb3V0OwogICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICAgICAg
dm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaAppbmRleCAzNDg2MDhkYTNl
YzYyMTUzMWIwNTVhNmM3NTgwNzc5ZWIwY2JmNmJhLi44ZDkwNmE2ZWI4MmM1OTEzYjZjMDBlMWRj
Y2VlNGU3OGVjMmZmZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkNhbGxiYWNrcy5oCkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBvbkFib3J0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVvdXQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQ1ZmQxODQwZjY4OTE0NWQz
YzgwMWUxMTQ5NjMzNjRmMGI3ZDkwYjQuLmJmY2MwMzBmNDUzMzc5Y2FmODY5YmU5ODc0ZjI3ODFm
ZDFhYTkyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTEtMDEtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCIHNob3VsZCBv
bmx5IGhhdmUgb25lIGFjdGl2ZSBkb20gb2JqZWN0IHBlciBzY3JpcHQgZXhlY3V0aW9uIGNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzIy
CisKKyAgICAgICAgUmVtb3ZlIG9udGltZW91dCB3aGljaCB3YXMgbmV2ZXIgdXNlZCBhbmQgaGFz
IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzcGVjLgorCisgICAgICAgICogcHVibGljL1dlYklEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9u
Q2FsbGJhY2tzOjpvblRpbWVvdXQpOgorICAgICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkNhbGxi
YWNrc1Byb3h5LmNwcDoKKyAgICAgICAgKiBzcmMvSURCVHJhbnNhY3Rpb25DYWxsYmFja3NQcm94
eS5oOgorICAgICAgICAqIHNyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrc0ltcGwuY3BwOgor
ICAgICAgICAqIHNyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrc0ltcGwuaDoKKwogMjAxMS0w
MS0yNCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgKaW5kZXggYzliNmIwNWU3ODM2MmYyZjY0
NjFiMDEwYzRlMDE5NGRmMmIzMTVlMy4uYTVkOGM1MGEzZGY1NzZjMDU2YzE2N2FiNTdlOTlhNzJj
NDE0ZTNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURC
VHJhbnNhY3Rpb25DYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBvbkFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uVGltZW91dCgpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVGltZW91dCgpIHsgfSAvLyBG
SVhNRTogUmVtb3ZlLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxiYWNrc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJv
eHkuY3BwCmluZGV4IDNhMTlmZTJlZGY2OGZjZjFiOWIyMmYxM2I5ZDJlYTQ5NTAyMDFlM2UuLmEw
MWRjMDIwZGFmNDIwYjkzMGIzM2MxM2YzZTcxY2U5NjA3Mjk3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJv
eHkuY3BwCkBAIC02MSwxMiArNjEsNiBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJv
eHk6Om9uQ29tcGxldGUoKQogICAgIG1fY2FsbGJhY2tzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSURC
VHJhbnNhY3Rpb25DYWxsYmFja3NQcm94eTo6b25UaW1lb3V0KCkKLXsKLSAgICBtX2NhbGxiYWNr
cy0+b25UaW1lb3V0KCk7Ci0gICAgbV9jYWxsYmFja3MuY2xlYXIoKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxiYWNr
c1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxi
YWNrc1Byb3h5LmgKaW5kZXggODkxZDVjOTBlYzg1MWVlMWZjODY1ZTgyZjBiMmI2YWY3YzZjMmQ0
OC4uNzljMzJmNjk2YzhjZDAzMDE5OTcxOTVkNTMwYTc0NjNlNTRlMTBmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25DYWxsYmFja3NQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tz
UHJveHkuaApAQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgb25B
Ym9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7Ci0gICAgdmlydHVhbCB2b2lk
IG9uVGltZW91dCgpOwogCiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJv
eHkoUGFzc093blB0cjxXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxi
YWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rp
b25DYWxsYmFja3NJbXBsLmNwcAppbmRleCA5NjkyNGNmMWI3ZGFjODMzMjFlZGY5M2I4MTJlYWM5
YTQ1YTQ5ZGRiLi44NDgxODJlMTU0MjdiOThkNDFjYzY3Y2Q2MjJmNDdkNTE5NjY3MDEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxi
YWNrc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzSW1wbC5jcHAKQEAgLTUxLDExICs1MSw2IEBAIHZvaWQgV2ViSURCVHJh
bnNhY3Rpb25DYWxsYmFja3NJbXBsOjpvbkNvbXBsZXRlKCkKICAgICBtX2NhbGxiYWNrcy0+b25D
b21wbGV0ZSgpOwogfQogCi12b2lkIFdlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzSW1wbDo6b25U
aW1lb3V0KCkKLXsKLSAgICBtX2NhbGxiYWNrcy0+b25UaW1lb3V0KCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxs
YmFja3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlv
bkNhbGxiYWNrc0ltcGwuaAppbmRleCA4OWI5Y2JlMmMxYWNkYTFhNDRkYjg0MTkwNGQwY2I4ZjRh
YzliYjU0Li40MTZhYzNjNTg1ZTJlY2EyMjBlMzZkZGVhMjVlOTc4MGJkM2NmNTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNr
c0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlv
bkNhbGxiYWNrc0ltcGwuaApAQCAtNDMsNyArNDMsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgb25BYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIG9uVGltZW91dCgpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80207</attachid>
            <date>2011-01-26 10:20:04 -0800</date>
            <delta_ts>2011-02-01 18:28:31 -0800</delta_ts>
            <desc>new</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>42068</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjLi41YzU0YWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTEtMDEtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCIHNo
b3VsZCBvbmx5IGhhdmUgb25lIGFjdGl2ZSBkb20gb2JqZWN0IHBlciBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyNzIyCisKKyAgICAgICAgSURCVHJhbnNhY3Rpb24gYW5kIElEQlJlcXVlc3Qgbm93IGltcGxl
bWVudCBJREJBY3RpdmVET01PYmplY3QgcmF0aGVyIHRoYW4KKyAgICAgICAgQWN0aXZlRE9NT2Jq
ZWN0LiBUaGUgZm9ybWVyIGhhcyBsZXNzIGltcGxpY2F0aW9ucyB0aGFuIHRoZSBsYXR0ZXIgYW5k
IGl0ZXJhdGVzCisgICAgICAgIG1vcmUgc2FmZWx5LgorCisgICAgICAgIEluIGFkZGl0aW9uLCB0
aGlzIHBhdGNoIGNsZWFucyB1cCBhIGxvdC4gVGhlIHdheSB3ZSBzZWxmLXJlZmZlZCBiZWZvcmUg
d2FzCisgICAgICAgIHRvdGFsbHkgYnJva2VuLCBmb3IgZXhhbXBsZS4KKworICAgICAgICBObyBj
aGFuZ2UgaW4gZnVuY3Rpb25hbGl0eSwgc28gbm8gdGVzdC4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkFjdGl2ZURPTU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OklEQkFjdGl2ZURPTU9iamVjdFByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6fklEQkFj
dGl2ZURPTU9iamVjdFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9NT2Jq
ZWN0UHJpdmF0ZTo6c3Vic2NyaWJlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURPTU9i
amVjdFByaXZhdGU6OnVuc3Vic2NyaWJlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2ZURP
TU9iamVjdFByaXZhdGU6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJBY3RpdmVET01PYmplY3RQcml2YXRlOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFjdGl2
ZURPTU9iamVjdDo6SURCQWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFj
dGl2ZURPTU9iamVjdDo6fklEQkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJBY3RpdmVET01PYmplY3Q6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQWN0aXZlRE9NT2JqZWN0OjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFj
dGl2ZURPTU9iamVjdDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJBY3RpdmVET01P
YmplY3Q6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBY3RpdmVET01PYmplY3Q6OnN0
b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjYW5TdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3Q6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzY2hlZHVsZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVGltZW91
dEV2ZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0VGltZXJGaXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNhbGxiYWNr
cy5oOgorCiAyMDExLTAxLTI0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCA2MTk4YzFmLi40ZmQxZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zOTk3LDYgKzM5OTcsOCBA
QAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCQWJvcnRFdmVudC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCQWJvcnRFdmVudC5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQkFjdGl2ZURPTU9iamVj
dC5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCQWN0aXZlRE9NT2JqZWN0LmgnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCQW55LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJB
bnkuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJDYWxsYmFja3MuaCcsCkBAIC00MDUwLDgg
KzQwNTIsNiBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCU1FMaXRlRGF0YWJhc2UuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJTdWNjZXNzRXZlbnQuY3BwJywKICAgICAgICAgICAgICdz
dG9yYWdlL0lEQlN1Y2Nlc3NFdmVudC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlRpbWVv
dXRFdmVudC5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVGltZW91dEV2ZW50LmgnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAgICAgICdz
dG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBmNDE4ZWI1Li42YTVlODYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpA
QCAtMjU2NCw3ICsyNTY0LDYgQEAgc3ViIElzQWN0aXZlRG9tVHlwZQogICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJXZWJTb2NrZXQiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXb3JrZXIi
OwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFyZWRXb3JrZXIiOwotICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJJREJSZXF1ZXN0IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmls
ZVJlYWRlciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0ZXIiOwogICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBY3RpdmVET01P
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBY3RpdmVET01PYmplY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWZhY2QKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFjdGl2ZURPTU9iamVjdC5jcHAKQEAg
LTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURC
QWN0aXZlRE9NT2JqZWN0LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgb25lIGFjdHVhbCBBY3RpdmVET01PYmpl
Y3Qgd2hpY2ggdGhlbiBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlIG9iamVjdHMgdGhhdCBpbXBsZW1l
bnQgSURCQWN0aXZlRE9NT2JqZWN0LgorY2xhc3MgSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSA6
IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBSZWZDb3VudGVkPElEQkFjdGl2ZURPTU9i
amVjdFByaXZhdGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJBY3RpdmVE
T01PYmplY3RQcml2YXRlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIH5J
REJBY3RpdmVET01PYmplY3RQcml2YXRlKCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlPiBzdWJzY3JpYmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IElEQkFjdGl2ZURPTU9iamVjdCopOworICAgIHZvaWQgdW5zdWJzY3JpYmUoSURCQWN0aXZlRE9N
T2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAgIHZp
cnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQo
QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworcHJpdmF0ZToKKyAgICBJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIEhh
c2hTZXQ8SURCQWN0aXZlRE9NT2JqZWN0Kj4gbV9zdWJzY3JpYmVyczsKKworICAgIC8vIFdlYWsg
cG9pbnRlciB0byB0aGUgb25lIGFuZCBvbmx5IElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGUgZm9y
IGEgcGFydGljdWxhciBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIHN0YXRpYyBIYXNoTWFw
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJBY3RpdmVET01PYmplY3RQcml2YXRlKj4gc19h
Y3RpdmVET01PYmplY3RzOworfTsKKworSGFzaE1hcDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
SURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSo+IElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OnNf
YWN0aXZlRE9NT2JqZWN0czsKKworUGFzc1JlZlB0cjxJREJBY3RpdmVET01PYmplY3RQcml2YXRl
PiBJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFjdGl2ZURPTU9iamVj
dFByaXZhdGUoY29udGV4dCkpOworfQorCitJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjpJREJB
Y3RpdmVET01PYmplY3RQcml2YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisg
ICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKK3sKKyAgICBBU1NFUlQoIXNfYWN0
aXZlRE9NT2JqZWN0cy5jb250YWlucyhjb250ZXh0KSk7CisgICAgc19hY3RpdmVET01PYmplY3Rz
LnNldChjb250ZXh0LCB0aGlzKTsKK30KKworSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6fklE
QkFjdGl2ZURPTU9iamVjdFByaXZhdGUoKQoreworfQorCitQYXNzUmVmUHRyPElEQkFjdGl2ZURP
TU9iamVjdFByaXZhdGU+IElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OnN1YnNjcmliZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJBY3RpdmVET01PYmplY3QqIHN1YnNjcmli
ZXIpCit7CisgICAgUmVmUHRyPElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU+IG9iamVjdDsKKyAg
ICBpZiAoc19hY3RpdmVET01PYmplY3RzLmNvbnRhaW5zKGNvbnRleHQpKQorICAgICAgICBvYmpl
Y3QgPSBzX2FjdGl2ZURPTU9iamVjdHMuZ2V0KGNvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAg
b2JqZWN0ID0gSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6Y3JlYXRlKGNvbnRleHQpOworCisg
ICAgb2JqZWN0LT5tX3N1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTsKKyAgICByZXR1cm4gb2Jq
ZWN0LnJlbGVhc2UoKTsKK30KKwordm9pZCBJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjp1bnN1
YnNjcmliZShJREJBY3RpdmVET01PYmplY3QqIHN1YnNjcmliZXIpCit7CisgICAgQVNTRVJUKG1f
c3Vic2NyaWJlcnMuY29udGFpbnMoc3Vic2NyaWJlcikpOworICAgIG1fc3Vic2NyaWJlcnMucmVt
b3ZlKHN1YnNjcmliZXIpOworfQorCit2b2lkIElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OmNv
bnRleHREZXN0cm95ZWQoKQoreworICAgIFZlY3RvcjxJREJBY3RpdmVET01PYmplY3QqPiBzdWJz
Y3JpYmVyczsKKyAgICBjb3B5VG9WZWN0b3IobV9zdWJzY3JpYmVycywgc3Vic2NyaWJlcnMpOwor
CisgICAgVmVjdG9yPElEQkFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBzdWJzY3Jp
YmVycy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxJREJBY3RpdmVET01PYmplY3QqPjo6aXRlcmF0
b3IgaXRlciA9IHN1YnNjcmliZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgaWYgKG1fc3Vic2NyaWJlcnMuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgKCpp
dGVyKS0+Y29udGV4dERlc3Ryb3llZCgpOworICAgIH0KKworICAgIEFTU0VSVChzX2FjdGl2ZURP
TU9iamVjdHMuY29udGFpbnMoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSk7CisgICAgc19hY3Rp
dmVET01PYmplY3RzLnJlbW92ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworCisgICAgQWN0
aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7IC8vIFdpbGwgY2xlYXIgdGhlIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS4KK30KKworYm9vbCBJREJBY3RpdmVET01PYmplY3RQcml2YXRl
OjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj4g
c3Vic2NyaWJlcnM7CisgICAgY29weVRvVmVjdG9yKG1fc3Vic2NyaWJlcnMsIHN1YnNjcmliZXJz
KTsKKworICAgIFZlY3RvcjxJREJBY3RpdmVET01PYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gc3Vi
c2NyaWJlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0
ZXJhdG9yIGl0ZXIgPSBzdWJzY3JpYmVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgIGlmIChtX3N1YnNjcmliZXJzLmNvbnRhaW5zKCppdGVyKSAmJiAhKCppdGVyKS0+
Y2FuU3VzcGVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIElEQkFjdGl2ZURPTU9iamVjdFByaXZhdGU6OnN1c3BlbmQo
QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKK3sKKyAgICBWZWN0
b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj4gc3Vic2NyaWJlcnM7CisgICAgY29weVRvVmVjdG9yKG1f
c3Vic2NyaWJlcnMsIHN1YnNjcmliZXJzKTsKKworICAgIFZlY3RvcjxJREJBY3RpdmVET01PYmpl
Y3QqPjo6aXRlcmF0b3IgZW5kID0gc3Vic2NyaWJlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBzdWJzY3JpYmVycy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmIChtX3N1YnNjcmliZXJzLmNvbnRh
aW5zKCppdGVyKSkKKyAgICAgICAgICAgICgqaXRlciktPnN1c3BlbmQocmVhc29uKTsKKyAgICB9
Cit9CisKK3ZvaWQgSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6cmVzdW1lKCkKK3sKKyAgICBW
ZWN0b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj4gc3Vic2NyaWJlcnM7CisgICAgY29weVRvVmVjdG9y
KG1fc3Vic2NyaWJlcnMsIHN1YnNjcmliZXJzKTsKKworICAgIFZlY3RvcjxJREJBY3RpdmVET01P
YmplY3QqPjo6aXRlcmF0b3IgZW5kID0gc3Vic2NyaWJlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8SURCQWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBzdWJzY3JpYmVycy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmIChtX3N1YnNjcmliZXJzLmNv
bnRhaW5zKCppdGVyKSkKKyAgICAgICAgICAgICgqaXRlciktPnJlc3VtZSgpOworICAgIH0KK30K
Kwordm9pZCBJREJBY3RpdmVET01PYmplY3RQcml2YXRlOjpzdG9wKCkKK3sKKyAgICBWZWN0b3I8
SURCQWN0aXZlRE9NT2JqZWN0Kj4gc3Vic2NyaWJlcnM7CisgICAgY29weVRvVmVjdG9yKG1fc3Vi
c2NyaWJlcnMsIHN1YnNjcmliZXJzKTsKKworICAgIFZlY3RvcjxJREJBY3RpdmVET01PYmplY3Qq
Pjo6aXRlcmF0b3IgZW5kID0gc3Vic2NyaWJlcnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8SURC
QWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBzdWJzY3JpYmVycy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmIChtX3N1YnNjcmliZXJzLmNvbnRhaW5z
KCppdGVyKSkKKyAgICAgICAgICAgICgqaXRlciktPnN0b3AoKTsKKyAgICB9Cit9CisKK0lEQkFj
dGl2ZURPTU9iamVjdDo6SURCQWN0aXZlRE9NT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgbV9wcml2YXRlID0gSURCQWN0aXZlRE9NT2JqZWN0UHJpdmF0ZTo6
c3Vic2NyaWJlKGNvbnRleHQsIHRoaXMpOworICAgIEFTU0VSVChtX3ByaXZhdGUpOworfQorCitJ
REJBY3RpdmVET01PYmplY3Q6On5JREJBY3RpdmVET01PYmplY3QoKQoreworICAgIG1fcHJpdmF0
ZS0+dW5zdWJzY3JpYmUodGhpcyk7Cit9CisKK3ZvaWQgSURCQWN0aXZlRE9NT2JqZWN0Ojpjb250
ZXh0RGVzdHJveWVkKCkKK3sKK30KKworYm9vbCBJREJBY3RpdmVET01PYmplY3Q6OmNhblN1c3Bl
bmQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJREJBY3RpdmVET01P
YmplY3Q6OnN1c3BlbmQoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKQorewor
fQorCit2b2lkIElEQkFjdGl2ZURPTU9iamVjdDo6cmVzdW1lKCkKK3sKK30KKwordm9pZCBJREJB
Y3RpdmVET01PYmplY3Q6OnN0b3AoKQoreworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJ
REJBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQWN0aXZlRE9NT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFj
dGl2ZURPTU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZjdm
ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFjdGl2ZURP
TU9iamVjdC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkFjdGl2ZURPTU9i
amVjdF9oCisjZGVmaW5lIElEQkFjdGl2ZURPTU9iamVjdF9oCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJBY3RpdmVET01P
YmplY3RQcml2YXRlOworCisvLyBTaW1pbGFyIHRvIEFjdGl2ZURPTU9iamVjdCBleGNlcHQgdGhh
dCBpdCBjYW4gaGFuZGxlIG9iamVjdHMgYmVpbmcgZGVzdHJveWVkCisvLyB3aGlsZSBpdGVyYXRp
bmcgKGFuZCBtYWtpbmcgY2FsbHMgdG8gc3RvcC9yZXN1bWUvc3VzcGVuZC9ldGMpLgorY2xhc3Mg
SURCQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERl
c3Ryb3llZCgpOworICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHN1c3BlbmQoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIElEQkFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CisgICAgdmlydHVhbCB+SURCQWN0aXZlRE9NT2JqZWN0KCk7CisKK3ByaXZhdGU6
CisgICAgSURCQWN0aXZlRE9NT2JqZWN0KCk7IC8vIERvbid0IHVzZS4KKworICAgIFJlZlB0cjxJ
REJBY3RpdmVET01PYmplY3RQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCQWN0aXZlRE9NT2JqZWN0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAppbmRleCA0NDRjMTA5Li40YmU2ZjRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSURC
Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgIGlmIChtX3JlcXVlc3QtPnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0
aW9uLmdldCgpKSkKICAgICAgICAgbV9iYWNrZW5kLT5jb250aW51ZUZ1bmN0aW9uKGtleSwgbV9y
ZXF1ZXN0LCBlYyk7CiAgICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogfQogCiBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmNwcAppbmRleCBjYmQ2MzVjLi4yYjBmMDdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKQEAgLTQ2LDExICs0NiwxNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2Us
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgcmV0
dXJuIG5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgdHJhbnNhY3Rpb24pOyAvLyBUaGlz
IGFkb3B0cyBpdHNlbGYgaW4gdGhlIGNvbnN0cnVjdG9yLgorfQorCiBJREJSZXF1ZXN0OjpJREJS
ZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55
PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi0g
ICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICA6IElEQkFjdGl2ZURPTU9i
amVjdChjb250ZXh0KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKICAgICAsIG1fdGltZXIodGhpcywgJklEQlJlcXVlc3Q6OnRpbWVyRmly
ZWQpCisgICAgLCBtX3NlbGZSZWYoYWRvcHRSZWYodGhpcykpCiAgICAgLCBtX3JlYWR5U3RhdGUo
TE9BRElORykKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbikKQEAgLTYzLDUyICs2OSw3NiBAQCBJ
REJSZXF1ZXN0Ojp+SURCUmVxdWVzdCgpCiAKIGJvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAg
QVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5H
OworICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgdGhlIHNlbGYtcmVmLCB0aGVuIHRoZSBsYXN0IHJl
cXVlc3QgaGFzIG5vdCB0cmllZCB0byBmaXJlIGl0cworICAgIC8vIGV2ZW50IGhhbmRsZXIgeWV0
LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBmaXJlIGFuIGV4Y2VwdGlvbi4KKyAgICBpZiAobV9zZWxm
UmVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwogICAgIG1fdHJhbnNhY3Rp
b24gPSB0cmFuc2FjdGlvbjsKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworICAgIG1fcmVhZHlTdGF0
ZSA9IExPQURJTkc7CisKICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQ
ZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi5nZXQoKSk7CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCiB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
ICAgIHJldHVybjsKICAgICBzY2hlZHVsZUV2ZW50KDAsIGVycm9yKTsKIH0KIAogdm9pZCBJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoKQogeworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICAgICByZXR1cm47CiAgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZU51bGwo
KSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxlRXZlbnQoSURCQW55Ojpj
cmVhdGUoSURCQ3Vyc29yOjpjcmVhdGUoYmFja2VuZCwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQo
KSkpLCAwKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7CisgICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKICAgICBzY2hlZHVsZUV2ZW50KElEQkFu
eTo6Y3JlYXRlKElEQkRhdGFiYXNlOjpjcmVhdGUoYmFja2VuZCkpLCAwKTsKIH0KIAogdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQpCiB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQkluZGV4OjpjcmVh
dGUoYmFja2VuZCwgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKIH0KIAogdm9pZCBJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSkKIHsKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxlRXZl
bnQoSURCQW55OjpjcmVhdGUoaWRiS2V5KSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5k
KQogewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBhd2F5IG9uY2UgY3Jl
YXRlT2JqZWN0U3RvcmUgaXMgc3luYy4KKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTog
VGhpcyBtZXRob2Qgc2hvdWxkIGdvIGF3YXkuCiAgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNy
ZWF0ZShJREJPYmplY3RTdG9yZTo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
KSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kKQogeworICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CiAgICAgLy8gVGhp
cyBpcyBvbmx5IHVzZWQgYnkgc2V0VmVyc2lvbiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIGEgc291
cmNlIHRoYXQncyBhbiBJREJEYXRhYmFzZS4KICAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS0+
c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKGJhY2tlbmQuZ2V0KCkpOwpAQCAtMTIxLDg0ICsxNTEs
ODMgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHBycEJhY2tlbmQKIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSkKIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoc2VyaWFsaXplZFNjcmlwdFZhbHVl
KSwgMCk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlJlcXVlc3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICByZXR1cm4gSURCQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAKIGJvb2wgSURCUmVxdWVzdDo6Y2FuU3VzcGVu
ZCgpIGNvbnN0CiB7Ci0gICAgLy8gSURCVHJhbnNhY3Rpb25zIGNhbm5vdCBiZSBzdXNwZW5kZWQg
YXQgdGhlIG1vbWVudC4gV2UgdGhlcmVmb3JlCi0gICAgLy8gZGlzYWxsb3cgdGhlIGJhY2svZm9y
d2FyZCBjYWNoZSBmb3IgcGFnZXMgdGhhdCB1c2UgSW5kZXhlZERhdGFiYXNlLgotICAgIHJldHVy
biBmYWxzZTsKKyAgICAvLyBJREJUcmFuc2FjdGlvbiB3aWxsIGJsb2NrIHN1c3BlbnNpb24gaWYg
bmVjZXNzYXJ5LgorICAgIHJldHVybiB0cnVlOwogfQogCi1FdmVudFRhcmdldERhdGEqIElEQlJl
cXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSgpCit2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQogewotICAg
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBf
Yml0XyBvdmVybHkgYnJvYWQuIFdlIGNvdWxkIHRpZ2h0ZW4gdGhlIGNvbmRpdGlvbnMgaWYgd2Ug
cmVhbGx5IHdhbnRlZCB0by4KKyAgICBpZiAobV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFu
c2FjdGlvbi0+YWJvcnQoKTsKIAotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjplbnN1cmVF
dmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CisgICAg
bV90aW1lci5zdG9wKCk7CisgICAgbV9zZWxmUmVmLmNsZWFyKCk7CisgICAgbV90cmFuc2FjdGlv
bi5jbGVhcigpOworCisgICAgSURCQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiB9CiAKIHZvaWQg
SURCUmVxdWVzdDo6dGltZXJGaXJlZChUaW1lcjxJREJSZXF1ZXN0PiopCiB7CiAgICAgQVNTRVJU
KG1fc2VsZlJlZik7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cy5zaXplKCkpOwotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoZSBzdG9wIGV2ZW50IGFuZCBzdG9wIGFueSB0aW1l
cnMgd2hlbiB3ZSBzZWUgaXQuIFdlIGNhbiB0aGVuIGFzc2VydCBoZXJlIHRoYXQgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBpcyBub24tbnVsbC4KKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKIAotICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBzZWxmLXJlZmVyZW5jaW5nIG91cnNl
bGYsIG90aGVyd2lzZSBpdCdzIHBvc3NpYmxlIHdlJ2xsIGJlIGRlbGV0ZWQuCi0gICAgLy8gQnV0
IGluIHNvbWUgY2FzZXMsIHN1c3BlbmQoKSBjb3VsZCBiZSBjYWxsZWQgd2hpbGUgd2UncmUgZGlz
cGF0Y2hpbmcgYW4gZXZlbnQsIHNvIHdlCi0gICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBy
ZXN1bWUoKSBkb2Vzbid0IHJlLXN0YXJ0IHRoZSB0aW1lciBiYXNlZCBvbiBtX3NlbGZSZWYgYmVp
bmcgc2V0LgorICAgIC8vIHJlc2V0UmVhZHlTdGF0ZSBjYW4gYmUgY2FsbGVkIHdoaWxlIHdlJ3Jl
IGZpcmluZyB0aGlzLCBzbyBzYXZlIGV2ZXJ5dGhpbmcgb2ZmIHRvIHRoZSBzaWRlLgorICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbi5yZWxlYXNlKCk7CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHNlbGZSZWYgPSBtX3Nl
bGZSZWYucmVsZWFzZSgpOwotCi0gICAgLy8gcmVhZHlTdGF0ZVJlc2V0IGNhbiBiZSBjYWxsZWQg
c3luY2hyb25vdXNseSB3aGlsZSB3ZSdyZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQuCi0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9uOwotICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKLQotICAgIFZlY3RvcjxQZW5kaW5n
RXZlbnQ+IHBlbmRpbmdFdmVudHM7Ci0gICAgcGVuZGluZ0V2ZW50cy5zd2FwKG1fcGVuZGluZ0V2
ZW50cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nRXZlbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIC8vIEl0J3MgcG9zc2libGUgd2UndmUgbmF2aWdhdGVkIGluIHdoaWNo
IGNhc2Ugd2UnbGwgY3Jhc2guCi0gICAgICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwZW5kaW5nRXZlbnRzW2ldLm1f
ZXJyb3IpIHsKLSAgICAgICAgICAgIEFTU0VSVCghcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCk7
Ci0gICAgICAgICAgICBkaXNwYXRjaEV2ZW50KElEQkVycm9yRXZlbnQ6OmNyZWF0ZShtX3NvdXJj
ZSwgKnBlbmRpbmdFdmVudHNbaV0ubV9lcnJvcikpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKHBlbmRpbmdFdmVudHNbaV0ubV9yZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6
OlVuZGVmaW5lZFR5cGUpOwotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChJREJTdWNjZXNzRXZl
bnQ6OmNyZWF0ZShtX3NvdXJjZSwgcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCkpOwotICAgICAg
ICB9CisgICAgUmVmUHRyPElEQkFueT4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZSgpOworICAg
IFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IG1fZXJyb3IucmVsZWFzZSgpOworCisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgZGlzcGF0
Y2hFdmVudChJREJFcnJvckV2ZW50OjpjcmVhdGUobV9zb3VyY2UsICplcnJvcikpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChyZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6OlVuZGVmaW5l
ZFR5cGUpOworICAgICAgICBkaXNwYXRjaEV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1f
c291cmNlLCByZXN1bHQpKTsKICAgICB9CisKICAgICBpZiAodHJhbnNhY3Rpb24pIHsKICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgcHJvY2Vzc2VkIGFsbCBwZW5kaW5nIGV2ZW50cywgbGV0IHRoZSB0
cmFuc2FjdGlvbiBtb25pdG9yIGNoZWNrIGlmCiAgICAgICAgIC8vIGl0IGNhbiBjb21taXQgdGhl
IGN1cnJlbnQgdHJhbnNhY3Rpb24gb3IgaWYgdGhlcmUncyBhbnl0aGluZyBuZXcgcGVuZGluZy4K
LSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgd29ya2VycyBjYXNlLgogICAgICAgICB0cmFu
c2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiAgICAgfQogfQogCiB2b2lkIElEQlJl
cXVlc3Q6OnNjaGVkdWxlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKIHsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7Ci0gICAgQVNTRVJU
KCEhbV9zZWxmUmVmID09IG1fdGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICBQZW5kaW5nRXZlbnQg
cGVuZGluZ0V2ZW50OwotICAgIHBlbmRpbmdFdmVudC5tX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICBw
ZW5kaW5nRXZlbnQubV9lcnJvciA9IGVycm9yOwotICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQo
cGVuZGluZ0V2ZW50KTsKKyAgICBBU1NFUlQobV9zZWxmUmVmKTsKKyAgICBBU1NFUlQoIW1fcmVz
dWx0KTsKKyAgICBBU1NFUlQoIW1fZXJyb3IpOwogCiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsK
LSAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBtX3NlbGZSZWYgPSB0aGlz
OwotICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9CisgICAgbV9yZXN1bHQg
PSByZXN1bHQ7CisgICAgbV9lcnJvciA9IGVycm9yOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KDApOworfQorCitFdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSgp
Cit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXREYXRh
KiBJREJSZXF1ZXN0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmgKaW5kZXggZmE2ODIwOC4uZWFmZGI3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmgKQEAgLTMxLDEwICszMSwxMCBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiSURC
QW55LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAg
LTQ0LDkgKzQ0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U7CiAKLWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJh
Y2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3Mg
SURCUmVxdWVzdCA6IHB1YmxpYyBJREJDYWxsYmFja3MsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVi
bGljIElEQkFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJj
ZSwgdHJhbnNhY3Rpb24pKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB+SURCUmVxdWVz
dCgpOwogCiAgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCkBAIC03MywxMCArNzMsMTEgQEAgcHVi
bGljOgogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIElEQlJlcXVlc3QqIHRvSURC
UmVxdWVzdCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIEFjdGl2ZURP
TU9iamVjdAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAogICAgIHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8
SURCQ2FsbGJhY2tzPjo6cmVmOwogICAgIHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8SURCQ2FsbGJh
Y2tzPjo6ZGVyZWY7CkBAIC05NiwxNyArOTcsMTQgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURC
QW55PiBtX3NvdXJjZTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBtX3RyYW5zYWN0aW9uOwogCi0gICAgc3RydWN0IFBlbmRpbmdFdmVudCB7Ci0gICAgICAgIFJl
ZlB0cjxJREJBbnk+IG1fcmVzdWx0OwotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
bV9lcnJvcjsKLSAgICB9OwotICAgIFZlY3RvcjxQZW5kaW5nRXZlbnQ+IG1fcGVuZGluZ0V2ZW50
czsKLQogICAgIC8vIFVzZWQgdG8gZmlyZSBldmVudHMgYXN5bmNocm9ub3VzbHkuCiAgICAgVGlt
ZXI8SURCUmVxdWVzdD4gbV90aW1lcjsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gbV9zZWxmUmVm
OyAvLyBUaGlzIGlzIHNldCB0byB1cyBpZmYgdGhlcmUncyBhbiBldmVudCBwZW5kaW5nLgorICAg
IFJlZlB0cjxJREJBbnk+IG1fcmVzdWx0OworICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBt
X2Vycm9yOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3NlbGZSZWY7CiAKICAgICBSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKKwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0
YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVGltZW91dEV2
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVGltZW91dEV2ZW50LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYxZWU0Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRpbWVvdXRFdmVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRpbWVvdXRFdmVu
dC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c1JlZlB0cjxJREJUaW1lb3V0RXZlbnQ+IElEQlRpbWVvdXRFdmVudDo6Y3JlYXRlKCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRpbWVvdXRFdmVudCgpKTsKLX0KLQotSURCVGltZW91
dEV2ZW50OjpJREJUaW1lb3V0RXZlbnQoKQotICAgIDogSURCRXZlbnQoZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQsIDApIC8vIEZJWE1FOiBzZXQgdGhlIHNvdXJjZSB0byB0aGUgdHJhbnNhY3Rpb24K
LXsKLX0KLQotSURCVGltZW91dEV2ZW50Ojp+SURCVGltZW91dEV2ZW50KCkKLXsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVGltZW91dEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRp
bWVvdXRFdmVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM5YmE0Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVGltZW91dEV2ZW50LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUaW1lb3V0RXZlbnRfaAotI2Rl
ZmluZSBJREJUaW1lb3V0RXZlbnRfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJJREJFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVGltZW91dEV2ZW50IDogcHVibGljIElEQkV2ZW50
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUaW1lb3V0RXZlbnQ+IGNyZWF0
ZSgpOwotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFsbG93IGNyZWF0aW9uIG9mIHRoZXNlIGV2ZW50
cyBmcm9tIEpTLgotICAgIHZpcnR1YWwgfklEQlRpbWVvdXRFdmVudCgpOwotCi0gICAgdmlydHVh
bCBib29sIGlzSURCVGltZW91dEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2
YXRlOgotICAgIElEQlRpbWVvdXRFdmVudCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJU
aW1lb3V0RXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcApp
bmRleCBlMzYyNWQ0Li44Njc3OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtMzgsMTkgKzM4LDIzIEBACiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRl
ICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0jaW5jbHVkZSAiSURCVGltZW91dEV2
ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFiYXNlKiBkYikKK3sgCisg
ICAgcmV0dXJuIG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBkYik7IC8vIFRo
aXMgYWRvcHRzIGl0c2VsZiBpbiB0aGUgY29uc3RydWN0b3IuCit9CisKIElEQlRyYW5zYWN0aW9u
OjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2Uq
IGRiKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgOiBJREJBY3Rp
dmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV9z
ZWxmUmVmKGFkb3B0UmVmKHRoaXMpKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fbW9k
ZShtX2JhY2tlbmQtPm1vZGUoKSkKICAgICAsIG1fb25BYm9ydFRpbWVyKHRoaXMsICZJREJUcmFu
c2FjdGlvbjo6b25BYm9ydFRpbWVyRmlyZWQpCiAgICAgLCBtX29uQ29tcGxldGVUaW1lcih0aGlz
LCAmSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGVUaW1lckZpcmVkKQotICAgICwgbV9vblRpbWVv
dXRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb246Om9uVGltZW91dFRpbWVyRmlyZWQpCiB7CiAg
ICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9uKG1f
YmFja2VuZC5nZXQoKSk7CiB9CkBAIC05Miw4MiArOTYsNzAgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bjo6YWJvcnQoKQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJUcmFuc2FjdGlvbjo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHJldHVybiBJREJBY3RpdmVET01PYmpl
Y3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6
b25BYm9ydCgpCiB7CiAgICAgQVNTRVJUKCFtX29uQWJvcnRUaW1lci5pc0FjdGl2ZSgpKTsKICAg
ICBBU1NFUlQoIW1fb25Db21wbGV0ZVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9v
blRpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBtX3NlbGZSZWYgPSB0aGlzOworICAgIGlm
ICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9vbkFi
b3J0VGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIG1fYmFja2VuZC5jbGVhcigpOyAvLyBSZWxl
YXNlIHRoZSBiYWNrZW5kIGFzIGl0IGhvbGRzIGEgKGNpcmN1bGFyKSByZWZlcmVuY2UgYmFjayB0
byB1cy4KIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCiB7CiAgICAgQVNT
RVJUKCFtX29uQWJvcnRUaW1lci5pc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIW1fb25Db21wbGV0
ZVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vblRpbWVvdXRUaW1lci5pc0FjdGl2
ZSgpKTsKLSAgICBtX3NlbGZSZWYgPSB0aGlzOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9vbkNvbXBsZXRlVGltZXIuc3RhcnRPbmVT
aG90KDApOwotICAgIG1fYmFja2VuZC5jbGVhcigpOyAvLyBSZWxlYXNlIHRoZSBiYWNrZW5kIGFz
IGl0IGhvbGRzIGEgKGNpcmN1bGFyKSByZWZlcmVuY2UgYmFjayB0byB1cy4KLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbjo6b25UaW1lb3V0KCkKLXsKLSAgICBBU1NFUlQoIW1fb25BYm9ydFRpbWVy
LmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vbkNvbXBsZXRlVGltZXIuaXNBY3RpdmUoKSk7
Ci0gICAgQVNTRVJUKCFtX29uVGltZW91dFRpbWVyLmlzQWN0aXZlKCkpOwotICAgIG1fc2VsZlJl
ZiA9IHRoaXM7Ci0gICAgbV9vblRpbWVvdXRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgbV9i
YWNrZW5kLmNsZWFyKCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMgYSAoY2ly
Y3VsYXIpIHJlZmVyZW5jZSBiYWNrIHRvIHVzLgogfQogCiBib29sIElEQlRyYW5zYWN0aW9uOjpj
YW5TdXNwZW5kKCkgY29uc3QKIHsKLSAgICAvLyBXZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBh
IHRyYW5zYWN0aW9uIHNvIHdlIGNhbm5vdCBzdXNwZW5kIG91ciBvYmplY3QuCi0gICAgLy8gSW5z
dGVhZCwgd2Ugc2ltcGx5IGRvbid0IGFsbG93IHRoZSBvd25lciBwYWdlIHRvIGdvIGludG8gdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IElu
IHRoZW9yeSwgd2UgY291bGQgYWxsb3cgc3VzcGVuc2lvbiBhcyBzb29uIGFzIG9uQWJvcnQvb25D
b21wbGV0ZSBpcworICAgIC8vICAgICAgICBjYWxsZWQgKG5vdCBqdXN0IHdoZW4gd2UgZmlyZSB0
aGUgZXZlbnQpLgorICAgIHJldHVybiAhbV9zZWxmUmVmOwogfQogCiB2b2lkIElEQlRyYW5zYWN0
aW9uOjpzdG9wKCkKIHsKLSAgICBpZiAobV9iYWNrZW5kKQotICAgICAgICBtX2JhY2tlbmQtPmFi
b3J0KCk7Ci19CisgICAgbV9vbkNvbXBsZXRlVGltZXIuc3RvcCgpOworICAgIG1fb25BYm9ydFRp
bWVyLnN0b3AoKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKKyAgICBtX3NlbGZSZWYuY2xlYXIo
KTsKIAotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkK
LXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQotCi1FdmVudFRhcmdldERhdGEq
IElEQlRyYW5zYWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7CisgICAgSURCQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiB9CiAK
IHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0
aW9uPiogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fc2VsZlJlZik7CisgICAgQVNTRVJU
KG1fc2VsZlJlZiAmJiBtX2JhY2tlbmQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2Vs
ZlJlZiA9IG1fc2VsZlJlZi5yZWxlYXNlKCk7CisgICAgbV9iYWNrZW5kLmNsZWFyKCk7CisKICAg
ICBkaXNwYXRjaEV2ZW50KElEQkFib3J0RXZlbnQ6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBJREJU
cmFuc2FjdGlvbjo6b25Db21wbGV0ZVRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0
cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9zZWxmUmVmKTsKKyAgICBBU1NFUlQobV9zZWxm
UmVmICYmIG1fYmFja2VuZCk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0g
bV9zZWxmUmVmLnJlbGVhc2UoKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKKwogICAgIGRpc3Bh
dGNoRXZlbnQoSURCQ29tcGxldGVFdmVudDo6Y3JlYXRlKCkpOwogfQogCitFdmVudFRhcmdldERh
dGEqIElEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7Cit9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246Om9uVGltZW91dFRpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0cmFuc2FjdGlvbikKK0V2ZW50VGFyZ2V0RGF0
YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJU
KG1fc2VsZlJlZik7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gbV9zZWxm
UmVmLnJlbGVhc2UoKTsKLSAgICBkaXNwYXRjaEV2ZW50KElEQlRpbWVvdXRFdmVudDo6Y3JlYXRl
KCkpOworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAppbmRleCBkMGE5ZjBmLi4yNDMyN2NiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCkBAIC0yOCwxMSArMjgsMTEgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJJREJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCkBAIC00MywxMiArNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogCi1jbGFzcyBJREJU
cmFuc2FjdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50
VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIElEQlRyYW5zYWN0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1Ymxp
YyBJREJBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFi
YXNlKiBkYikKLSAgICB7IAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0
aW9uKGNvbnRleHQsIGJhY2tlbmQsIGRiKSk7IAotICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7CiAgICAg
dmlydHVhbCB+SURCVHJhbnNhY3Rpb24oKTsKIAogICAgIGVudW0gTW9kZSB7CkBAIC02NCwxOCAr
NjEsMTYgQEAgcHVibGljOgogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihh
Ym9ydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0ZSk7Ci0g
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih0aW1lb3V0KTsKIAogICAgIC8vIElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzCiAgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVvdXQoKTsK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBJREJUcmFuc2FjdGlvbiogdG9JREJU
cmFuc2FjdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIEFjdGl2
ZURPTU9iamVjdAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIApAQCAtODUsMjUgKzgwLDI2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2Uq
KTsKIAorICAgIHZvaWQgb25BYm9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7
CisgICAgdm9pZCBvbkNvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsK
KwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigp
OyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotICAg
IHZvaWQgb25BYm9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7Ci0gICAgdm9p
ZCBvbkNvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsKLSAgICB2b2lk
IG9uVGltZW91dFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7Ci0KLSAgICBFdmVu
dFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgLy8gRWl0aGVyIGJvdGggc2hvdWxk
IGJlIG51bGwgb3IgYm90aCBzaG91bGQgYmUgbm9uLW51bGwuCiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gbV9zZWxmUmVmOworCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOwog
ICAgIHVuc2lnbmVkIHNob3J0IG1fbW9kZTsKIAogICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBt
X29uQWJvcnRUaW1lcjsKICAgICBUaW1lcjxJREJUcmFuc2FjdGlvbj4gbV9vbkNvbXBsZXRlVGlt
ZXI7Ci0gICAgVGltZXI8SURCVHJhbnNhY3Rpb24+IG1fb25UaW1lb3V0VGltZXI7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBtX3NlbGZSZWY7IC8vIFRoaXMgaXMgc2V0IHRvIHVzIGlmZiB0
aGVyZSdzIGFuIGV2ZW50IHBlbmRpbmcuCisKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCmluZGV4IGI1N2FjNGEuLmNmM2IxY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCkBAIC00NCw3ICs0NCw2IEBAIG1v
ZHVsZSBzdG9yYWdlIHsKICAgICAgICAgLy8gRXZlbnRzCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uYWJvcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY29t
cGxldGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udGltZW91dDsKICAgICAg
ICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2
ZW50TGlzdGVuZXIgbGlzdGVuZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQ2FsbGJhY2tzLmgKaW5kZXggMzQ4NjA4ZC4uOGQ5MDZhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaApAQCAtNDIsNyAr
NDIsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydCgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb25UaW1lb3V0
KCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBkNWZkMTg0Li5iZmNjMDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDExLTAxLTI1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluZGV4ZWREQiBzaG91bGQgb25seSBoYXZlIG9uZSBhY3RpdmUgZG9tIG9iamVjdCBwZXIgc2Ny
aXB0IGV4ZWN1dGlvbiBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MjcyMgorCisgICAgICAgIFJlbW92ZSBvbnRpbWVvdXQgd2hpY2ggd2Fz
IG5ldmVyIHVzZWQgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3BlYy4KKworICAgICAg
ICAqIHB1YmxpYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrczo6b25UaW1lb3V0KToKKyAgICAgICAgKiBzcmMv
SURCVHJhbnNhY3Rpb25DYWxsYmFja3NQcm94eS5jcHA6CisgICAgICAgICogc3JjL0lEQlRyYW5z
YWN0aW9uQ2FsbGJhY2tzUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25D
YWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFj
a3NJbXBsLmg6CisKIDIwMTEtMDEtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oCmluZGV4
IGM5YjZiMDUuLmE1ZDhjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaApAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydCgpIHsgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVvdXQoKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvblRpbWVvdXQo
KSB7IH0gLy8gRklYTUU6IFJlbW92ZS4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25DYWxsYmFj
a3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNh
bGxiYWNrc1Byb3h5LmNwcAppbmRleCAzYTE5ZmUyLi5hMDFkYzAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxiYWNrc1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxiYWNrc1By
b3h5LmNwcApAQCAtNjEsMTIgKzYxLDYgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkNhbGxiYWNrc1By
b3h5OjpvbkNvbXBsZXRlKCkKICAgICBtX2NhbGxiYWNrcy5jbGVhcigpOwogfQogCi12b2lkIElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJveHk6Om9uVGltZW91dCgpCi17Ci0gICAgbV9jYWxsYmFj
a3MtPm9uVGltZW91dCgpOwotICAgIG1fY2FsbGJhY2tzLmNsZWFyKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25DYWxsYmFj
a3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25DYWxs
YmFja3NQcm94eS5oCmluZGV4IDg5MWQ1YzkuLjc5YzMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkNhbGxiYWNrc1Byb3h5LmgK
QEAgLTQ3LDcgKzQ3LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVv
dXQoKTsKIAogcHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbkNhbGxiYWNrc1Byb3h5KFBhc3NP
d25QdHI8V2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz4pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3NJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJh
Y2tzSW1wbC5jcHAKaW5kZXggOTY5MjRjZi4uODQ4MTgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3NJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrc0lt
cGwuY3BwCkBAIC01MSwxMSArNTEsNiBAQCB2b2lkIFdlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tz
SW1wbDo6b25Db21wbGV0ZSgpCiAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoKTsKIH0KIAot
dm9pZCBXZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrc0ltcGw6Om9uVGltZW91dCgpCi17Ci0gICAg
bV9jYWxsYmFja3MtPm9uVGltZW91dCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzSW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3NJbXBsLmgK
aW5kZXggODliOWNiZS4uNDE2YWMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3NJbXBsLmgKQEAgLTQzLDcg
KzQzLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG9uQWJvcnQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgb25Db21wbGV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBvblRpbWVvdXQoKTsKIAog
cHJpdmF0ZToKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IG1fY2FsbGJhY2tz
Owo=
</data>
<flag name="review"
          id="71673"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80871</attachid>
            <date>2011-02-01 18:28:31 -0800</date>
            <delta_ts>2011-02-02 12:40:15 -0800</delta_ts>
            <desc>reposting my original solution to this problem</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>6735</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YmYxMDczZjllYTA3ZTFmYTA1YjcwZDlkYzk3ODAzZWUwNzkyYzU1Li5h
OGQ4MDA4MWVjNTViZGEyM2YzM2UzNTIxYmM0MDU4MDk4NGFhNmU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTEtMDEtMTMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIG5lZWRzIHRvIGl0ZXJhdGUgb3ZlciBhIGNvcHkgb2YgYWxsIGFj
dGl2ZSBkb20gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTIzNjYKKworICAgICAgICBJREJSZXF1ZXN0IGFuZCBJREJUcmFuc2FjdGlvbiBh
cmUgYm90aCBBY3RpdmVET01PYmplY3RzIGFuZCBhcmUgYm90aCBoZWxkIGJ5CisgICAgICAgIEpT
IHdyYXBwZXJzIGFuZCBpbnRlcm5hbCBXZWJDb3JlIG9iamVjdHMuIFdoZW4gdGhlIHNjcmlwdCBl
eGVjdXRpb24gY29udGV4dAorICAgICAgICBpcyBiZWluZyBzdG9wcGVkLCB3ZSBuZWVkIHRvIGFi
b3J0IGV4aXN0aW5nIHRyYW5zYWN0aW9ucy4gVGhpcyByZXN1bHRzIGluCisgICAgICAgIGxpbmtz
IGJldHdlZW4gcmVmIGNvdW50ZWQgb2JqZWN0cyBiZWluZyBicm9rZW4gd2hpY2ggY2FuIHNvbWV0
aW1lcyByZXN1bHQgaW4KKyAgICAgICAgb3RoZXIgbGlua3MgYmVpbmcgYnJva2VuIHdoaWNoIGNh
biByZXN1bHQgaW4gYW4gSURCVHJhbnNhY3Rpb24ncyByZWYgY291bnQKKyAgICAgICAgZ29pbmcg
dG8gMC4gV2hlbiB0aGlzIGhhcHBlbnMsIGl0IHJlbW92ZXMgaXRzZWxmIGZyb20gdGhlIGxpc3Qg
b2YgQWN0aXZlRE9NT2JqZWN0cworICAgICAgICBhbmQgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0
J3MgaXRlcmF0b3IgYmVjb21lcyBpbnZhbGlkLgorCisgICAgICAgIFByb2JhYmx5IHRoZSBiZXN0
IHNvbHV0aW9uIGlzIHRvIGNvcHkgYWxsIHRoZSBrZXlzIChpLmUuIEFjdGl2ZURPTU9iamVjdCop
IHRvIGEKKyAgICAgICAgdGVtcG9yYXJ5IHZlY3RvciBvZiBSZWZQdHJzLiBVbmZvcnR1YW50ZWx5
LCBBY3RpdmVET01PYmplY3QgZG9lcyBub3QgaW1wbGVtZW50CisgICAgICAgIFJlZkNvdW50ZWQg
KG9yIHNpbWlsYXIpIGFuZCBpdCdzIGEgcmVhbGx5IG1lc3N5IChpZiBwb3NzaWJsZSBhdCBhbGwp
IHRvIGhhdmUKKyAgICAgICAgQWN0aXZlRE9NT2JqZWN0IHJlZGlyZWN0IHJlZi9kZXJlZiBjYWxs
cyBwcm9wZXJseS4gU28gdGhpcyBwYXRjaCBpbnN0ZWFkIGhhcworICAgICAgICB0byBkb3VibGUg
Y2hlY2sgdGhhdCBlYWNoIGVsZW1lbnQgaW4gdGhlIHZlY3RvciBpcyBzdGlsbCBpbiB0aGUgSGFz
aE1hcCBiZWZvcmUKKyAgICAgICAgZGlzcGF0Y2hpbmcuCisKKyAgICAgICAgVGhpcyBmaXhlcyBm
bGFraW5lc3MgaW4gZXhpc3RpbmcgdGVzdHMgYW5kIEkgZG9uJ3Qgc2VlIGFueSB3YXkgdG8gbW9y
ZSBkZXRlcm1pbmlzdGljYWxseQorICAgICAgICB0ZXN0IHRoaXMgaXNzdWUgKGV2ZW4gdXNpbmcg
d2luZG93LmdjKCkpLgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisKIDIwMTAtMTIt
MjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcAppbmRleCBiZmRhMTdiM2YxYjRkOTNkYWJkOGY2NDEwZGI3NjViNTAz
NjdkZWM4Li42MTU2MGY2ZmNiYTI0MjhkOGM3MmM3ZTFiZjg4NWI1Y2M3OTQ2NjI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC03MCwxMCAr
NzAsMTQgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5TY3JpcHRFeGVjdXRpb25Db250ZXh0KCkKIHsK
LSAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2Jq
ZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8QWN0
aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3Rz
LmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFT
U0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAg
ICAgICBpdGVyLT5maXJzdC0+Y29udGV4dERlc3Ryb3llZCgpOworICAgIFZlY3RvcjxBY3RpdmVE
T01PYmplY3QqPiBvYmplY3RzOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9hY3RpdmVET01PYmpl
Y3RzLCBvYmplY3RzKTsKKyAgICBWZWN0b3I8QWN0aXZlRE9NT2JqZWN0Kj46Oml0ZXJhdG9yIG9i
amVjdHNFbmQgPSBvYmplY3RzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEFjdGl2ZURPTU9iamVj
dCo+OjppdGVyYXRvciBpdGVyID0gb2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IG9iamVjdHNFbmQ7
ICsraXRlcikgeworICAgICAgICBpZiAoIW1fYWN0aXZlRE9NT2JqZWN0cy5jb250YWlucygqaXRl
cikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgKCppdGVyKS0+Y29udGV4dERl
c3Ryb3llZCgpOwogICAgIH0KIAogICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6aXRlcmF0b3Ig
bWVzc2FnZVBvcnRzRW5kID0gbV9tZXNzYWdlUG9ydHMuZW5kKCk7CkBAIC04MSwxMiArODUsMTQg
QEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogICAg
ICAgICBBU1NFUlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwog
ICAgICAgICAoKml0ZXIpLT5jb250ZXh0RGVzdHJveWVkKCk7CiAgICAgfQorCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogICAgIGlmIChtX2RhdGFiYXNlVGhyZWFkKSB7CiAgICAgICAgIEFTU0VSVCht
X2RhdGFiYXNlVGhyZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKTsKICAgICAgICAgbV9kYXRh
YmFzZVRocmVhZCA9IDA7CiAgICAgfQogI2VuZGlmCisKICNpZiBFTkFCTEUoQkxPQikgfHwgRU5B
QkxFKEZJTEVfU1lTVEVNKQogICAgIGlmIChtX2ZpbGVUaHJlYWQpIHsKICAgICAgICAgbV9maWxl
VGhyZWFkLT5zdG9wKCk7CkBAIC0xODYsMzEgKzE5Miw0MyBAQCBib29sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkKIAogdm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJl
YXNvbkZvclN1c3BlbnNpb24gd2h5KQogewotICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBt
X2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgpIHNo
b3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0
cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVy
YXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2Jq
ZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3VzcGVuZCh3
aHkpOworICAgIFZlY3RvcjxBY3RpdmVET01PYmplY3QqPiBvYmplY3RzOworICAgIGNvcHlLZXlz
VG9WZWN0b3IobV9hY3RpdmVET01PYmplY3RzLCBvYmplY3RzKTsKKworICAgIFZlY3RvcjxBY3Rp
dmVET01PYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gb2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKFZl
Y3RvcjxBY3RpdmVET01PYmplY3QqPjo6aXRlcmF0b3IgaXRlciA9IG9iamVjdHMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpZiAoIW1fYWN0aXZlRE9NT2JqZWN0cy5j
b250YWlucygqaXRlcikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKCgq
aXRlciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgKCppdGVy
KS0+c3VzcGVuZCh3aHkpOwogICAgIH0KIH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKCkKIHsKLSAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWlu
c3QgbV9hY3RpdmVET01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IHJlc3VtZSgp
IHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBIYXNoTWFwPEFjdGl2ZURPTU9i
amVjdCosIHZvaWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+Ojpp
dGVyYXRvciBpdGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZl
T2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBpdGVyLT5maXJzdC0+cmVzdW1l
KCk7CisgICAgVmVjdG9yPEFjdGl2ZURPTU9iamVjdCo+IG9iamVjdHM7CisgICAgY29weUtleXNU
b1ZlY3RvcihtX2FjdGl2ZURPTU9iamVjdHMsIG9iamVjdHMpOworCisgICAgVmVjdG9yPEFjdGl2
ZURPTU9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBvYmplY3RzLmVuZCgpOworICAgIGZvciAoVmVj
dG9yPEFjdGl2ZURPTU9iamVjdCo+OjppdGVyYXRvciBpdGVyID0gb2JqZWN0cy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmICghbV9hY3RpdmVET01PYmplY3RzLmNv
bnRhaW5zKCppdGVyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQoKCpp
dGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICAoKml0ZXIp
LT5yZXN1bWUoKTsKICAgICB9CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3Rv
cEFjdGl2ZURPTU9iamVjdHMoKQogewotICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2Fj
dGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3RvcCgpIHNob3VsZG4n
dCBleGVjdXRlIGFyYml0cmFyeSBKUy4KLSAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZv
aWQqPjo6aXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQo
KTsKLSAgICBmb3IgKEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBp
dGVyID0gbV9hY3RpdmVET01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0Vu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpID09IHRoaXMpOwotICAgICAgICBpdGVyLT5maXJzdC0+c3RvcCgpOworICAgIFZl
Y3RvcjxBY3RpdmVET01PYmplY3QqPiBvYmplY3RzOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9h
Y3RpdmVET01PYmplY3RzLCBvYmplY3RzKTsKKworICAgIFZlY3RvcjxBY3RpdmVET01PYmplY3Qq
Pjo6aXRlcmF0b3IgZW5kID0gb2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxBY3RpdmVE
T01PYmplY3QqPjo6aXRlcmF0b3IgaXRlciA9IG9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgeworICAgICAgICBpZiAoIW1fYWN0aXZlRE9NT2JqZWN0cy5jb250YWlucygqaXRl
cikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKCgqaXRlciktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgKCppdGVyKS0+c3RvcCgpOwog
ICAgIH0KIAogICAgIC8vIEFsc28gY2xvc2UgTWVzc2FnZVBvcnRzLiBJZiB0aGV5IHdlcmUgQWN0
aXZlRE9NT2JqZWN0cyAodGhleSBjb3VsZCBiZSkgdGhlbiB0aGV5IGNvdWxkIGJlIHN0b3BwZWQg
aW5zdGVhZC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80952</attachid>
            <date>2011-02-02 12:40:18 -0800</date>
            <delta_ts>2011-02-02 15:47:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52722-20110202124017.patch</filename>
            <type>text/plain</type>
            <size>8154</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li4w
MTE1ODM2ODA2N2Q3NTVkODU2OTZjMzU3ZWVhNTFmODQzNzhhYWRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTEtMDItMDIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSURC
VHJhbnNhY3Rpb24gYW5kIElEQlJlcXVlc3QgY2FuIGJlIGRlbGV0ZWQgd2hpbGUgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBpcyBpdGVyYXRpbmcuLi4ud2hpY2ggaXMgYmFkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjcyMgorCisgICAgICAgIFRoZSBz
b2x1dGlvbiBpcyB0byBjaGFuZ2UgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCdzIGRlc3RydWN0b3Ig
dG8gaXRlcmF0ZSBvdmVyCisgICAgICAgIHRoZSBsaXN0IGluIGEgd2F5IHRoYXQgaGFuZGxlcyB0
aGUgbXV0YXRpb25zLiBUaGlzIG5ldyBtZXRob2QgaXMgZGVzdHJ1Y3RpdmUsCisgICAgICAgIGJ1
dCB0aGF0J3MgT0sgc2luY2UgdGhlIG9iamVjdCBpcyBnb2luZyBhd2F5LiBJJ3ZlIGFsc28gYWRk
ZWQgYSBzZXZlcmFsIGFzc2VydHMuCisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZl
RE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpj
cmVhdGVkQWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6CisKIDIwMTEtMDEtMjQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCmluZGV4IDhmNGNhMDcwNDNjYTNmNzA0N2MwOTE3MWIxMTI0OGQ4NjY0NDVlODkuLmI1
MjAyZjVkYzUyZjRkODU0YTYxZjExNGZmYTUwZDg5YTBjNzIzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTgzLDcgKzgzLDkgQEAgcHVi
bGljOgogfTsKIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpCi0gICAgOiBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQorICAgIDogbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzKGZhbHNlKQorICAgICwgbV9pbkRlc3RydWN0b3IoZmFsc2UpCisg
ICAgLCBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICAsIG1faGFzT3BlbkRhdGFiYXNlcyhmYWxzZSkKICNlbmRpZgpAQCAtOTIsMTAgKzk0LDEy
IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCiB7Ci0gICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
aXRlci0+Zmlyc3QtPmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICBtX2luRGVzdHJ1Y3RvciA9IHRy
dWU7CisgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5lbmQoKTsgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpKSB7CisgICAgICAg
IEFjdGl2ZURPTU9iamVjdCogb2JqZWN0ID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIG1fYWN0aXZl
RE9NT2JqZWN0cy5yZW1vdmUoaXRlcik7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgb2JqZWN0LT5jb250ZXh0RGVzdHJv
eWVkKCk7CiAgICAgfQogCiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBtZXNz
YWdlUG9ydHNFbmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKQEAgLTE5Nyw0MyArMjAxLDUzIEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVzc2Fn
ZVBvcnQqIHBvcnQpCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKCkKIHsKICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVE
T01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRu
J3QgZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
YWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVE
T01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7CiAg
ICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRo
aXMpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkpCisgICAgICAgIGlm
ICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgICAgICB9CisgICAgfSAgICAKKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMg
PSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1
c3BlbnNpb24gd2h5KQogewogICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2FjdGl2ZURP
TU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgpIHNob3VsZG4ndCBl
eGVjdXRlIGFyYml0cmFyeSBKUy4KKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0
cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3Rp
dmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9i
amVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKICAgICAg
ICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7
CiAgICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CiAgICAgfQorICAgIG1faXRlcmF0
aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQogewogICAgIC8vIE5vIHByb3RlY3Rpb24g
YWdhaW5zdCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogcmVz
dW1lKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRlcmF0aW5nQWN0
aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lk
Kj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7
ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3VtZSgpOwogICAgIH0K
KyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KIAogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8g
cHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRl
cmF0aW9uOiBzdG9wKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9i
amVjdHNFbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsK
ICAgICB9CisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKICAgICAv
LyBBbHNvIGNsb3NlIE1lc3NhZ2VQb3J0cy4gSWYgdGhleSB3ZXJlIEFjdGl2ZURPTU9iamVjdHMg
KHRoZXkgY291bGQgYmUpIHRoZW4gdGhleSBjb3VsZCBiZSBzdG9wcGVkIGluc3RlYWQuCiAgICAg
Y2xvc2VNZXNzYWdlUG9ydHMoKTsKQEAgLTI0MywxMiArMjU3LDE1IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Y3JlYXRlZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9i
amVjdCwgdm9pCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKHVwY2FzdFBvaW50
ZXIpOworICAgIEFTU0VSVCghbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKTsKKyAgICBBU1NF
UlQoIW1faW5EZXN0cnVjdG9yKTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKG9iamVjdCwg
dXBjYXN0UG9pbnRlcik7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJv
eWVkQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCogb2JqZWN0KQogewogICAgIEFTU0VS
VChvYmplY3QpOworICAgIEFTU0VSVCghbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKTsKICAg
ICBtX2FjdGl2ZURPTU9iamVjdHMucmVtb3ZlKG9iamVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IGI1N2I3NWEwMGJmMDFhMTk0MTQ4
YzMwMTI5NjAxM2EzMjJmYzMzZmIuLjU4NTM3ZTlkODJlMjM2NTZiYjFiODE1ZTk3ZWU0YWI2YTY1
YmNhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApA
QCAtMTY2LDYgKzE2Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOwogCiAgICAgICAgIEhhc2hNYXA8QWN0aXZlRE9N
T2JqZWN0Kiwgdm9pZCo+IG1fYWN0aXZlRE9NT2JqZWN0czsKKyAgICAgICAgYm9vbCBtX2l0ZXJh
dGluZ0FjdGl2ZURPTU9iamVjdHM7CisgICAgICAgIGJvb2wgbV9pbkRlc3RydWN0b3I7CiAKICAg
ICAgICAgSGFzaE1hcDxpbnQsIERPTVRpbWVyKj4gbV90aW1lb3V0czsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBlMzYyNWQ0YjViZDdkNzQxZjlkOTk5
NGE0MmVkNDg0NDlmYjBiZDY2Li5mNjkwMmRhNjRjZTk4YmU4MzEzNzFiNzEzZDQ2ZjljMTU0YjVj
YzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTMy
LDggKzEzMiw5IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit2b2lkIElE
QlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKCkKIHsKKyAgICBBY3RpdmVET01PYmplY3Q6
OmNvbnRleHREZXN0cm95ZWQoKTsKICAgICBpZiAobV9iYWNrZW5kKQogICAgICAgICBtX2JhY2tl
bmQtPmFib3J0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5k
ZXggZDBhOWYwZmQ2ZjE5MDAyMDZhNDY1MWQ3N2Y0ZWMzZTYxNjJmOWZhNC4uMjllMzBmYTRlYTVh
YzEyNGI2ZjU4NjgyZWZlZWRhOWE5NmExYzcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uaApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWN0aXZlRE9N
T2JqZWN0CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJv
eWVkKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6
cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpkZXJl
ZjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80984</attachid>
            <date>2011-02-02 15:47:22 -0800</date>
            <delta_ts>2011-02-02 15:57:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52722-20110202154721.patch</filename>
            <type>text/plain</type>
            <size>8154</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li4w
MTE1ODM2ODA2N2Q3NTVkODU2OTZjMzU3ZWVhNTFmODQzNzhhYWRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTEtMDItMDIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSURC
VHJhbnNhY3Rpb24gYW5kIElEQlJlcXVlc3QgY2FuIGJlIGRlbGV0ZWQgd2hpbGUgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBpcyBpdGVyYXRpbmcuLi4ud2hpY2ggaXMgYmFkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjcyMgorCisgICAgICAgIFRoZSBz
b2x1dGlvbiBpcyB0byBjaGFuZ2UgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCdzIGRlc3RydWN0b3Ig
dG8gaXRlcmF0ZSBvdmVyCisgICAgICAgIHRoZSBsaXN0IGluIGEgd2F5IHRoYXQgaGFuZGxlcyB0
aGUgbXV0YXRpb25zLiBUaGlzIG5ldyBtZXRob2QgaXMgZGVzdHJ1Y3RpdmUsCisgICAgICAgIGJ1
dCB0aGF0J3MgT0sgc2luY2UgdGhlIG9iamVjdCBpcyBnb2luZyBhd2F5LiBJJ3ZlIGFsc28gYWRk
ZWQgYSBzZXZlcmFsIGFzc2VydHMuCisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZl
RE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpj
cmVhdGVkQWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6CisKIDIwMTEtMDEtMjQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCmluZGV4IDhmNGNhMDcwNDNjYTNmNzA0N2MwOTE3MWIxMTI0OGQ4NjY0NDVlODkuLmI1
MjAyZjVkYzUyZjRkODU0YTYxZjExNGZmYTUwZDg5YTBjNzIzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTgzLDcgKzgzLDkgQEAgcHVi
bGljOgogfTsKIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpCi0gICAgOiBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQorICAgIDogbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzKGZhbHNlKQorICAgICwgbV9pbkRlc3RydWN0b3IoZmFsc2UpCisg
ICAgLCBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICAsIG1faGFzT3BlbkRhdGFiYXNlcyhmYWxzZSkKICNlbmRpZgpAQCAtOTIsMTAgKzk0LDEy
IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCiB7Ci0gICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
aXRlci0+Zmlyc3QtPmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICBtX2luRGVzdHJ1Y3RvciA9IHRy
dWU7CisgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5lbmQoKTsgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpKSB7CisgICAgICAg
IEFjdGl2ZURPTU9iamVjdCogb2JqZWN0ID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIG1fYWN0aXZl
RE9NT2JqZWN0cy5yZW1vdmUoaXRlcik7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgb2JqZWN0LT5jb250ZXh0RGVzdHJv
eWVkKCk7CiAgICAgfQogCiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBtZXNz
YWdlUG9ydHNFbmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKQEAgLTE5Nyw0MyArMjAxLDUzIEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVzc2Fn
ZVBvcnQqIHBvcnQpCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKCkKIHsKICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVE
T01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRu
J3QgZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
YWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVE
T01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7CiAg
ICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRo
aXMpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkpCisgICAgICAgIGlm
ICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgICAgICB9CisgICAgfSAgICAKKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMg
PSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1
c3BlbnNpb24gd2h5KQogewogICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2FjdGl2ZURP
TU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgpIHNob3VsZG4ndCBl
eGVjdXRlIGFyYml0cmFyeSBKUy4KKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0
cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3Rp
dmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9i
amVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKICAgICAg
ICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7
CiAgICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CiAgICAgfQorICAgIG1faXRlcmF0
aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQogewogICAgIC8vIE5vIHByb3RlY3Rpb24g
YWdhaW5zdCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogcmVz
dW1lKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRlcmF0aW5nQWN0
aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lk
Kj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7
ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3VtZSgpOwogICAgIH0K
KyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KIAogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8g
cHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRl
cmF0aW9uOiBzdG9wKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9i
amVjdHNFbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsK
ICAgICB9CisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKICAgICAv
LyBBbHNvIGNsb3NlIE1lc3NhZ2VQb3J0cy4gSWYgdGhleSB3ZXJlIEFjdGl2ZURPTU9iamVjdHMg
KHRoZXkgY291bGQgYmUpIHRoZW4gdGhleSBjb3VsZCBiZSBzdG9wcGVkIGluc3RlYWQuCiAgICAg
Y2xvc2VNZXNzYWdlUG9ydHMoKTsKQEAgLTI0MywxMiArMjU3LDE1IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Y3JlYXRlZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9i
amVjdCwgdm9pCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKHVwY2FzdFBvaW50
ZXIpOworICAgIEFTU0VSVCghbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKTsKKyAgICBBU1NF
UlQoIW1faW5EZXN0cnVjdG9yKTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKG9iamVjdCwg
dXBjYXN0UG9pbnRlcik7CiB9CiAKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJv
eWVkQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCogb2JqZWN0KQogewogICAgIEFTU0VS
VChvYmplY3QpOworICAgIEFTU0VSVCghbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzKTsKICAg
ICBtX2FjdGl2ZURPTU9iamVjdHMucmVtb3ZlKG9iamVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IGI1N2I3NWEwMGJmMDFhMTk0MTQ4
YzMwMTI5NjAxM2EzMjJmYzMzZmIuLjU4NTM3ZTlkODJlMjM2NTZiYjFiODE1ZTk3ZWU0YWI2YTY1
YmNhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApA
QCAtMTY2LDYgKzE2Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOwogCiAgICAgICAgIEhhc2hNYXA8QWN0aXZlRE9N
T2JqZWN0Kiwgdm9pZCo+IG1fYWN0aXZlRE9NT2JqZWN0czsKKyAgICAgICAgYm9vbCBtX2l0ZXJh
dGluZ0FjdGl2ZURPTU9iamVjdHM7CisgICAgICAgIGJvb2wgbV9pbkRlc3RydWN0b3I7CiAKICAg
ICAgICAgSGFzaE1hcDxpbnQsIERPTVRpbWVyKj4gbV90aW1lb3V0czsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBlMzYyNWQ0YjViZDdkNzQxZjlkOTk5
NGE0MmVkNDg0NDlmYjBiZDY2Li5mNjkwMmRhNjRjZTk4YmU4MzEzNzFiNzEzZDQ2ZjljMTU0YjVj
YzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTMy
LDggKzEzMiw5IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit2b2lkIElE
QlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKCkKIHsKKyAgICBBY3RpdmVET01PYmplY3Q6
OmNvbnRleHREZXN0cm95ZWQoKTsKICAgICBpZiAobV9iYWNrZW5kKQogICAgICAgICBtX2JhY2tl
bmQtPmFib3J0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5k
ZXggZDBhOWYwZmQ2ZjE5MDAyMDZhNDY1MWQ3N2Y0ZWMzZTYxNjJmOWZhNC4uMjllMzBmYTRlYTVh
YzEyNGI2ZjU4NjgyZWZlZWRhOWE5NmExYzcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uaApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWN0aXZlRE9N
T2JqZWN0CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJv
eWVkKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPjo6
cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpkZXJl
ZjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80990</attachid>
            <date>2011-02-02 15:57:38 -0800</date>
            <delta_ts>2011-02-02 18:24:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52722-20110202155737.patch</filename>
            <type>text/plain</type>
            <size>8180</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li4w
MTE1ODM2ODA2N2Q3NTVkODU2OTZjMzU3ZWVhNTFmODQzNzhhYWRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTEtMDItMDIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSURC
VHJhbnNhY3Rpb24gYW5kIElEQlJlcXVlc3QgY2FuIGJlIGRlbGV0ZWQgd2hpbGUgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBpcyBpdGVyYXRpbmcuLi4ud2hpY2ggaXMgYmFkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjcyMgorCisgICAgICAgIFRoZSBz
b2x1dGlvbiBpcyB0byBjaGFuZ2UgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCdzIGRlc3RydWN0b3Ig
dG8gaXRlcmF0ZSBvdmVyCisgICAgICAgIHRoZSBsaXN0IGluIGEgd2F5IHRoYXQgaGFuZGxlcyB0
aGUgbXV0YXRpb25zLiBUaGlzIG5ldyBtZXRob2QgaXMgZGVzdHJ1Y3RpdmUsCisgICAgICAgIGJ1
dCB0aGF0J3MgT0sgc2luY2UgdGhlIG9iamVjdCBpcyBnb2luZyBhd2F5LiBJJ3ZlIGFsc28gYWRk
ZWQgYSBzZXZlcmFsIGFzc2VydHMuCisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZl
RE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpj
cmVhdGVkQWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjb250ZXh0RGVzdHJveWVkKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmg6CisKIDIwMTEtMDEtMjQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCmluZGV4IDhmNGNhMDcwNDNjYTNmNzA0N2MwOTE3MWIxMTI0OGQ4NjY0NDVlODkuLmY4
MTFmNGEzODhlYjMwMzE2NjAxYjczZDFmZDBhN2M4YmI0YmQ2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTgzLDcgKzgzLDkgQEAgcHVi
bGljOgogfTsKIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpCi0gICAgOiBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQorICAgIDogbV9pdGVyYXRp
bmdBY3RpdmVET01PYmplY3RzKGZhbHNlKQorICAgICwgbV9pbkRlc3RydWN0b3IoZmFsc2UpCisg
ICAgLCBtX2luRGlzcGF0Y2hFcnJvckV2ZW50KGZhbHNlKQogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICAsIG1faGFzT3BlbkRhdGFiYXNlcyhmYWxzZSkKICNlbmRpZgpAQCAtOTIsMTAgKzk0LDEy
IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCiB7Ci0gICAg
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNF
bmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEFjdGl2ZURP
TU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdp
bigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQo
aXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKLSAgICAgICAg
aXRlci0+Zmlyc3QtPmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICBtX2luRGVzdHJ1Y3RvciA9IHRy
dWU7CisgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IG1fYWN0aXZlRE9NT2Jq
ZWN0cy5lbmQoKTsgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpKSB7CisgICAgICAg
IEFjdGl2ZURPTU9iamVjdCogb2JqZWN0ID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIG1fYWN0aXZl
RE9NT2JqZWN0cy5yZW1vdmUoaXRlcik7CisgICAgICAgIEFTU0VSVChvYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgb2JqZWN0LT5jb250ZXh0RGVzdHJv
eWVkKCk7CiAgICAgfQogCiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBtZXNz
YWdlUG9ydHNFbmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKQEAgLTE5Nyw0MyArMjAxLDUzIEBA
IHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQoTWVzc2Fn
ZVBvcnQqIHBvcnQpCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKCkKIHsKICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVE
T01PYmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRu
J3QgZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3Rz
ID0gdHJ1ZTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
YWN0aXZlT2JqZWN0c0VuZCA9IG1fYWN0aXZlRE9NT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBpdGVyID0gbV9hY3RpdmVE
T01PYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7CiAg
ICAgICAgIEFTU0VSVChpdGVyLT5maXJzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRo
aXMpOwotICAgICAgICBpZiAoIWl0ZXItPmZpcnN0LT5jYW5TdXNwZW5kKCkpCisgICAgICAgIGlm
ICghaXRlci0+Zmlyc3QtPmNhblN1c3BlbmQoKSkgeworICAgICAgICAgICAgbV9pdGVyYXRpbmdB
Y3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgICAgICB9CisgICAgfSAgICAKKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMg
PSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1
c3BlbnNpb24gd2h5KQogewogICAgIC8vIE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2FjdGl2ZURP
TU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogc3VzcGVuZCgpIHNob3VsZG4ndCBl
eGVjdXRlIGFyYml0cmFyeSBKUy4KKyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSB0
cnVlOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+OjppdGVyYXRvciBhY3Rp
dmVPYmplY3RzRW5kID0gbV9hY3RpdmVET01PYmplY3RzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjdGl2ZURPTU9i
amVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKICAgICAg
ICAgQVNTRVJUKGl0ZXItPmZpcnN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gdGhpcyk7
CiAgICAgICAgIGl0ZXItPmZpcnN0LT5zdXNwZW5kKHdoeSk7CiAgICAgfQorICAgIG1faXRlcmF0
aW5nQWN0aXZlRE9NT2JqZWN0cyA9IGZhbHNlOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQogewogICAgIC8vIE5vIHByb3RlY3Rpb24g
YWdhaW5zdCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlvbjogcmVz
dW1lKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRlcmF0aW5nQWN0
aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lk
Kj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5kKCk7
CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7
ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnJlc3VtZSgpOwogICAgIH0K
KyAgICBtX2l0ZXJhdGluZ0FjdGl2ZURPTU9iamVjdHMgPSBmYWxzZTsKIH0KIAogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8g
cHJvdGVjdGlvbiBhZ2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRl
cmF0aW9uOiBzdG9wKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgorICAgIG1faXRl
cmF0aW5nQWN0aXZlRE9NT2JqZWN0cyA9IHRydWU7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmpl
Y3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVj
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9i
amVjdHNFbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKICAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsK
ICAgICB9CisgICAgbV9pdGVyYXRpbmdBY3RpdmVET01PYmplY3RzID0gZmFsc2U7CiAKICAgICAv
LyBBbHNvIGNsb3NlIE1lc3NhZ2VQb3J0cy4gSWYgdGhleSB3ZXJlIEFjdGl2ZURPTU9iamVjdHMg
KHRoZXkgY291bGQgYmUpIHRoZW4gdGhleSBjb3VsZCBiZSBzdG9wcGVkIGluc3RlYWQuCiAgICAg
Y2xvc2VNZXNzYWdlUG9ydHMoKTsKQEAgLTI0MywxMiArMjU3LDE3IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Y3JlYXRlZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9i
amVjdCwgdm9pCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKHVwY2FzdFBvaW50
ZXIpOworICAgIEFTU0VSVCghbV9pbkRlc3RydWN0b3IpOworICAgIGlmIChtX2l0ZXJhdGluZ0Fj
dGl2ZURPTU9iamVjdHMpCisgICAgICAgIENSQVNIKCk7CiAgICAgbV9hY3RpdmVET01PYmplY3Rz
LmFkZChvYmplY3QsIHVwY2FzdFBvaW50ZXIpOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9iamVjdCkK
IHsKICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBpZiAobV9pdGVyYXRpbmdBY3RpdmVET01PYmpl
Y3RzKQorICAgICAgICBDUkFTSCgpOwogICAgIG1fYWN0aXZlRE9NT2JqZWN0cy5yZW1vdmUob2Jq
ZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgK
aW5kZXggYjU3Yjc1YTAwYmYwMWExOTQxNDhjMzAxMjk2MDEzYTMyMmZjMzNmYi4uNTg1MzdlOWQ4
MmUyMzY1NmJiMWI4MTVlOTdlZTRhYjZhNjViY2FiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC0xNjYsNiArMTY2LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4gbV9tZXNzYWdlUG9ydHM7CiAK
ICAgICAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj4gbV9hY3RpdmVET01PYmpl
Y3RzOworICAgICAgICBib29sIG1faXRlcmF0aW5nQWN0aXZlRE9NT2JqZWN0czsKKyAgICAgICAg
Ym9vbCBtX2luRGVzdHJ1Y3RvcjsKIAogICAgICAgICBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBt
X3RpbWVvdXRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCmlu
ZGV4IGUzNjI1ZDRiNWJkN2Q3NDFmOWQ5OTk0YTQyZWQ0ODQ0OWZiMGJkNjYuLmY2OTAyZGE2NGNl
OThiZTgzMTM3MWI3MTNkNDZmOWMxNTRiNWNjMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xMzIsOCArMTMyLDkgQEAgYm9vbCBJREJUcmFuc2FjdGlv
bjo6Y2FuU3VzcGVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpzdG9wKCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmNvbnRleHREZXN0cm95ZWQo
KQogeworICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwogICAgIGlmICht
X2JhY2tlbmQpCiAgICAgICAgIG1fYmFja2VuZC0+YWJvcnQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAppbmRleCBkMGE5ZjBmZDZmMTkwMDIwNmE0NjUxZDc3ZjRl
YzNlNjE2MmY5ZmE0Li4yOWUzMGZhNGVhNWFjMTI0YjZmNTg2ODJlZmVlZGE5YTk2YTFjNzAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCkBAIC03Nyw3ICs3Nyw3IEBA
IHB1YmxpYzoKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAg
dmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJU
cmFuc2FjdGlvbkNhbGxiYWNrcz46OmRlcmVmOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>