<?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>56131</bug_id>
          
          <creation_ts>2011-03-10 12:07:34 -0800</creation_ts>
          <short_desc>[chromium] Compositor thread infrastructure</short_desc>
          <delta_ts>2011-04-08 10:28:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nat Duca">nduca</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>nduca</cc>
    
    <cc>tkent</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>365400</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-10 12:07:34 -0800</bug_when>
    <thetext>[chromium] Compositor thread infrastructure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365401</commentid>
    <comment_count>1</comment_count>
      <attachid>85364</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-10 12:07:50 -0800</bug_when>
    <thetext>Created attachment 85364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365404</commentid>
    <comment_count>2</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-10 12:10:25 -0800</bug_when>
    <thetext>Early version of the compositor thread infrastructure. I&apos;m open to any and all feedback, but would be especially interested in feedback on the ViewManager and CCThread system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365412</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-10 12:16:13 -0800</bug_when>
    <thetext>Attachment 85364 did not build on chromium:
Build output: http://queues.webkit.org/results/8055022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365544</commentid>
    <comment_count>4</comment_count>
      <attachid>85364</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-10 14:35:39 -0800</bug_when>
    <thetext>Comment on attachment 85364
Patch

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

Cool start.  Left comments and cleared the review bit so it doesn&apos;t show up in the review queue.

At a design level I think it&apos;s a bit weird that the message objects themselves implement run().  The chrome model is that messages are essentially enums with parameters and the receiving code has to switch on the message type in order to figure out what to run.  Tasks in chrome-land are data bags and pointers to functions that execute the task itself.

I think that the message model would be a better model to follow here since it more clearly separates what one thread wants to say to the other (for example &quot;begin paint with this timestamp parameter&quot;) from how the thread responds to that message.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:70
&gt; +// Callback interface for CCViews
&gt;  // Class that handles drawing of composited render layers using GL.
&gt; -class LayerRendererChromium : public RefCounted&lt;LayerRendererChromium&gt; {
&gt; +class LayerRendererChromium : public CCView {

not sure what the comment means here. do you need it?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:72
&gt;      static PassRefPtr&lt;LayerRendererChromium&gt; create(PassRefPtr&lt;GraphicsContext3D&gt; graphicsContext3D);

since you are editing lines close by...this parameter shouldn&apos;t be named

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:81
&gt; +    // sets viewport parameters
&gt; +    void setViewport(const IntRect&amp; visibleRect, const IntRect&amp; contentRect,

this comment doesn&apos;t really add anything - i&apos;d say kill it

&gt; Source/WebCore/platform/graphics/chromium/cc/CCHeadsUpDisplay.h:16
&gt; - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY
&gt; + * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY
&gt;   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt;   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; - * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY

don&apos;t change this

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:13
&gt; + * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY

nope - this should say APPLE INC.  use this header exactly: http://trac.webkit.org/browser/trunk/Source/WebCore/LICENSE-APPLE changing only the top line and not anything else

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:61
&gt; +    void* unused;
&gt; +    waitForThreadCompletion(m_threadId, &amp;unused);

you can pass NULL as the second parameter

this is a little scary actually since the value of &apos;unused&apos; will be some random garbage from the stack and waitForThreadCompletion may try to write to the memory at that location.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:78
&gt; +void CCThread::postMessage(CCThreadMessage* msg)
&gt; +{
&gt; +    m_messageQueue.append(msg);

is the idea that this will only be called from the main thread to post a message to the compositor thread? could use some ASSERT()s to that effect.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:13
&gt; + * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY

nope

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:56
&gt; +    // Called just before run... Allows an opportunity to convert
&gt; +    // MainThread objects, e.g. LayerRenderChromium, to their
&gt; +    // compositor thread counterpart.
&gt; +    virtual void beforeRun() { }

Not sure I totally understand why this needs to be separate - couldn&apos;t all the logic in beforeRun() also happen at the top of the subclass&apos;s run() implementation?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:84
&gt; +    void postMessage(CCThreadMessage* msg);
&gt; +    void postMessage(CCMainThreadMessage* msg);

nit: no need to name these params

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewImpl.cpp:48
&gt; +    m_frameNumber += 1;

++ ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCViewManager.cpp:204
&gt; +    // Right now, this condition variable is build using a simple
&gt; +    // Mutex object, exploiting the fact that WTF Mutex lock calls

in general you can&apos;t build a condition variable with a mutex so this comment is pretty confusing.

in general i&apos;d rather we just use the textbook synchronization techniques instead of trying to be clever unless we know that something is going to be a performance bottleneck. synchronization is hard and i want to try to spend as few brain cells on it as possible while we bootstrap everything else

&gt; Source/WebCore/platform/graphics/chromium/cc/NonThreadSafe.h:33
&gt; +template &lt;class T&gt;
&gt; +class NonThreadSafe {

this looks nifty, but it really probably belongs in wtf/. can you make a patch to add it there?

&gt; Source/WebKit/chromium/public/WebWidget.h:84
&gt; +    // Temporary (do not commit) hack until Darin can land his inversion code
&gt; +    virtual void scheduleComposite()  { }

should this be guarded by the #if?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1060
&gt; +#if USE(THREADED_COMPOSITING)
&gt; +        return;
&gt; +#endif

this seems wrong - we still need a way to implement WebViewImpl::paint() even in the threaded case so we can handle thumbnails and whatnot. is this just temporary?

&gt; Source/WebKit/chromium/src/WebViewImpl.h:338
&gt; +    void doUpdateAndComposite();

we don&apos;t normally put &quot;do&quot; in functions like this as it doesn&apos;t really convey any information. I think updateAndComposite() would be a good name for this

&gt; Source/WebKit/chromium/src/WebViewImpl.h:402
&gt; +    void doAnimate(double frameBeginTime);

what&apos;s the difference between animate() and doAnimate()? just the provided frame time?  in that case it might make more sense to have animate() take a double param with a default value of 0 meaning &apos;use whatever time you want&apos;.  the &quot;do&quot; is not super informative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366298</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-11 13:54:14 -0800</bug_when>
    <thetext>Thanks James.

(In reply to comment #4)
&gt; At a design level I think it&apos;s a bit weird that the message objects themselves implement run().  The chrome model is that messages are essentially enums with parameters and the receiving code has to switch on the message type in order to figure out what to run.  Tasks in chrome-land are data bags and pointers to functions that execute the task itself.

I&apos;m confused about the &quot;Chrome model&quot; you&apos;re talking about. Chrome&apos;s MessageLoop model is totally not as you describe... MessageLoop is built on processing Tasks, which have exactly 1 method: Run(). Posting tasks to specific methods is done via RunnableMethod, which derives from Task and does (considerable) method binding work. I would vastly prefer to have a RunnableMethod, but I&apos;m not seeing equivalent code in WebKit that provides something similar. If you have a suggestion for doing this, I&apos;d love ideas...

Maybe you&apos;re talking about the IPC model? That is based on more of an enum design, but the thing to note there is that IPC messages are layered on top of the Tasks model.

The postMessage are callable from any thread, fwiw. E.g. I think it likely that the compositor will post messages to itself in the near future.

&gt; this looks nifty, but it really probably belongs in wtf/. can you make a patch to add it there?

&lt;whining&gt;But I dont wanna do that.&lt;/whining&gt;

;)

&gt; We still need a way to implement WebViewImpl::paint() even in the threaded case so we can handle thumbnails and whatnot. is this just temporary?
Temporary, but won&apos;t be an easy fix. This, and lost context, are both going to be tricky to implement.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.h:402
&gt; &gt; +    void doAnimate(double frameBeginTime);
&gt; 
&gt; what&apos;s the difference between animate() and doAnimate()? just the provided frame time?  in that case it might make more sense to have animate() take a double param with a default value of 0 meaning &apos;use whatever time you want&apos;.  the &quot;do&quot; is not super informative.

I, too, have an allergic reaction to these various do-prefixed methods (see also, doComposite, or RenderWidget&apos;s doDeferredUpdate, which has been around for a while), but  defaulting is just a bandaid on a larger issue: the public API of the WebWidget and the actual implementation vary wildly depending on which of the three render loops is active. Darin&apos;s &quot;inversion&quot; patch will help here, but more work will be necessary. I propose we leave the &quot;do&quot; trick as it emphasizes the ugliness, and forage ahead with the inversion &amp; related cleanup as the proper solution here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377005</commentid>
    <comment_count>6</comment_count>
      <attachid>87683</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-31 02:27:42 -0700</bug_when>
    <thetext>Created attachment 87683
RunnableMethods and ViewManagerImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377007</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-31 02:37:02 -0700</bug_when>
    <thetext>Attachment 87683 did not build on chromium:
Build output: http://queues.webkit.org/results/8306259</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377013</commentid>
    <comment_count>8</comment_count>
      <attachid>87683</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-31 02:45:43 -0700</bug_when>
    <thetext>Comment on attachment 87683
RunnableMethods and ViewManagerImpl

This architecture of this patch is getting closer to something I like. I&apos;m 85% sure I&apos;ll be breaking this up into a few bugs: an thread infrastructure + unit tests, and subsequent implementations of the commit algorithm.

So, this is largely a checkpoint, to get feedback on the new approach before I start breaking into the infrastructure commits and everything else.

At a high level:
1. The Messaging between threads is built on, which is just a class with a run().

2. On top of this, we add CCRunnableMethods, which are similar to Chrome&apos;s NewRunnableMethod system. These are method pointers with bound arguments, and derive from CCTask. This lets you call a method on a class without as much fuss.

3a. CCViewManager and CCViewManagerImpl manage the collection of active views for the main and impl thread respectively. These classes have callAsyncOImpl/Main functions that allow you to call methods on the other side of the fence. This is used for managing the view-&gt;viewImpl correspondences. This is built on the task system and RunnableMethods.

3b. We prevent accidental access of the impl pointer on the main thread using the CCNonThreadSafeMember&lt;T&gt;.

4. CCView and CCViewImpl have a callAsyncOnMain/Impl functions that call a method on the other side of the fence. These two functions become the workhorse for the commit algorithm.

5. The commit algorithm is implemented entirely in CCView and CCViewImpl and should be pretty easy to read. Compared to the previous patch:
5a. We now can trigger a redraw without a commit
5b. drawing is initiated on the impl thread, but then we perfom a blocking call to the MainThread to do the actual draw.

That should be it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377017</commentid>
    <comment_count>9</comment_count>
      <attachid>87686</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-03-31 02:50:29 -0700</bug_when>
    <thetext>Created attachment 87686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379174</commentid>
    <comment_count>10</comment_count>
      <attachid>88149</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-04 16:15:13 -0700</bug_when>
    <thetext>Created attachment 88149
Thread infrastructure only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379176</commentid>
    <comment_count>11</comment_count>
      <attachid>88149</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-04 16:18:00 -0700</bug_when>
    <thetext>Comment on attachment 88149
Thread infrastructure only.

This patch is trimmed down to just be the CCThread,   infrastructure for talking with the CCThread, and associated tests.

task system portion of the</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379191</commentid>
    <comment_count>12</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-04 16:27:22 -0700</bug_when>
    <thetext>Hmm, re-stating comments in a non-truncated way:

This patch is trimmed down to just be the CCThread, infrastructure for talking with the CCThread, and associated tests.
 
Once this gets landed, the next patch will be to introduce the CCView and CCViewImpl, and associated unit tests.

The final patch will be to tie the LayerRendererChromium and WebView into the CCView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379199</commentid>
    <comment_count>13</comment_count>
      <attachid>88149</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-04 16:37:18 -0700</bug_when>
    <thetext>Comment on attachment 88149
Thread infrastructure only.

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

R- because the waitForThreadCompletion() param scares me, but everything else looks pretty good.

The nonthreadsafe types aren&apos;t used yet so it&apos;s hard to say how generally useful they are.  They probably will make more sense in the context of stuff that uses them.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTask.h:76
&gt; +template &lt;typename C, typename M, typename ARG0, typename ARG1&gt;

in chrome we use T for the type of object, Method instead of M, and A/B/C/D/... instead of ARG0/ARG1/ARG2/...  which I find a bit more readable.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:41
&gt; +#define COMMIT_SLOWLY 0

seems unnecessary

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:46
&gt; +PassRefPtr&lt;CCThread&gt; CCThread::getInstance()
&gt; +{
&gt; +    if (!ccThread)
&gt; +        return adoptRef(new CCThread());
&gt; +    return PassRefPtr&lt;CCThread&gt;(ccThread);

this should ASSERT() that it&apos;s called from the main thread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:60
&gt; +    void* unused;
&gt; +    waitForThreadCompletion(m_threadId, &amp;unused);

just pass 0 as the second param to waitForThreadCompletion(). this might actually attempt to write to some random location pointed to by whatever&apos;s on the stack here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:85
&gt; +    // If the thread is dead, then this task is stale, e.g. posted
&gt; +    // during or slightly before compositor shutdown.
&gt; +    if (!ccThread)
&gt; +        return;

This check seems a bit strange - if the compositor thread is going down it seems that we still may want to run any already-enqueued tasks on the main thread.  It&apos;s a little hard to reason about this in the abstract.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379250</commentid>
    <comment_count>14</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-04 17:29:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; The nonthreadsafe types aren&apos;t used yet so it&apos;s hard to say how generally useful they are.  They probably will make more sense in the context of stuff that uses them.

Yeah. They get used in the CCViewManager. I tried the proxy suggestion but it doesn&apos;t work very well in practice, so I kept NonThreadSafe around.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:60
&gt; &gt; +    void* unused;
&gt; &gt; +    waitForThreadCompletion(m_threadId, &amp;unused);
&gt; 
&gt; just pass 0 as the second param to waitForThreadCompletion(). this might actually attempt to write to some random location pointed to by whatever&apos;s on the stack here.

The 2nd arg for waitForThreadCompletion is an outparam --- the return value of the thread function is void* and the signature is waitForThreadCompletion(..., void** retval).

Looking at the various implementations waitForThreadCompletion, I don&apos;t think it is wise to pass NULL to this.

I renamed this to exitCode to clarify.


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:85
&gt; &gt; +    // If the thread is dead, then this task is stale, e.g. posted
&gt; &gt; +    // during or slightly before compositor shutdown.
&gt; &gt; +    if (!ccThread)
&gt; &gt; +        return;
&gt; 
&gt; This check seems a bit strange - if the compositor thread is going down it seems that we still may want to run any already-enqueued tasks on the main thread.  It&apos;s a little hard to reason about this in the abstract.

This is stale code from an older implementation. Deleting it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379252</commentid>
    <comment_count>15</comment_count>
      <attachid>88172</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-04 17:31:06 -0700</bug_when>
    <thetext>Created attachment 88172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380078</commentid>
    <comment_count>16</comment_count>
      <attachid>88172</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-05 20:44:52 -0700</bug_when>
    <thetext>Comment on attachment 88172
Patch

This appears to be re-inventing stuff that is already done in WebKit (see all of the post task infrastructure).

Also CCNonThreadSafeMember is unused and hopefully won&apos;t have a need to be used -- better to split your object into two pieces that have items that can be accessed from multiple threads and shouldn&apos;t be.

Also what does cc stand for? I see that it is a directory name but that doesn&apos;t help. WebKit typically avoids abbreviations so this is unusual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380502</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-06 09:46:08 -0700</bug_when>
    <thetext>Can you point me at the &quot;post task&quot; infrastructure? I looked for existing infrastructure before doing this myself, but the precident I saw was for individual sytems to build their own abstraction on top of MessageQueue. For example, I see fileapi/FileThread implements a FileThread::Task abstraction on top of WTF::MessageQueue. Or, similarly ScriptExecutionContext itself defines a task abstraction.

The NonThreadSafeMember is used in the context of a larger patch (See the 3rd path) to guard a member on ViewManager. I am happy to pull that out to a later  patch if it helps focus discussion here.

The CC folder is where we are putting compositor-specific code that concerns itself with rendering and animating a generic layer tree. This is roughly equivalent to core animation, with CC being chrome compositor. James might be able to offer additional comments on this...


(In reply to comment #16)
&gt; (From update of attachment 88172 [details])
&gt; This appears to be re-inventing stuff that is already done in WebKit (see all of the post task infrastructure).
&gt; 
&gt; Also CCNonThreadSafeMember is unused and hopefully won&apos;t have a need to be used -- better to split your object into two pieces that have items that can be accessed from multiple threads and shouldn&apos;t be.
&gt; 
&gt; Also what does cc stand for? I see that it is a directory name but that doesn&apos;t help. WebKit typically avoids abbreviations so this is unusual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380617</commentid>
    <comment_count>18</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-06 10:54:31 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Can you point me at the &quot;post task&quot; infrastructure? I looked for existing infrastructure before doing this myself, but the precident I saw was for individual sytems to build their own abstraction on top of MessageQueue. For example, I see fileapi/FileThread implements a FileThread::Task abstraction on top of WTF::MessageQueue. Or, similarly ScriptExecutionContext itself defines a task abstraction.

Good point :) However, I believe they are all written in a similar manner if you look closely, and this one doesn&apos;t follow that pattern, so it is missing some important safety aspects: see FileThreadTask.h for example.

As well as common naming like performTask. (Instead of following WebKit practices, this one decides to use Chromium conventions.)

Why do I care? It is on my agenda to pull out the WebKit stuff into a common place but if you do something totally different here it may be harder to convert this code over. (Also it is better to match the codebase you are in if it has conventions.)



&gt; 
&gt; The NonThreadSafeMember is used in the context of a larger patch (See the 3rd path) to guard a member on ViewManager. I am happy to pull that out to a later  patch if it helps focus discussion here.

I would remove it since it isn&apos;t used here. I would still get the design reviewed by someone who has done these things in WebKit.


&gt; The CC folder is where we are putting compositor-specific code that concerns itself with rendering and animating a generic layer tree. This is roughly equivalent to core animation, with CC being chrome compositor. James might be able to offer additional comments on this...

compositor would have been a better name for the directory (since it is already under the chromium direction the chromium part is implied), and still seems a better name if you must prefix things. Of course an alternative is a namespace.


Note: It would be much better to have someone who has tackled similar issues in WebKit review this rather than folks who haven&apos;t. (Just like I wouldn&apos;t consider myself good at looking at patches for graphics acceleration related items.) Please take advantage of any of these folks who are willing.

dimich, ap, kinuko, jianli, or myself have all had to deal with this are a bit.


PS Here&apos;s a few impl details:
CompositorTask should have a virtual destructor.
CompositorThread is RefCounted (which isn&apos;t threadsafe) but it appears to be used on multiple threads. (fwiw, I getting near to landing a change which will detect that better.) The singleton pattern seems odd, in that it creates the object on the fly in a ref counted fashion (and may create the thread on the fly as a result of this). I think there is clearer ownership than is implied here by the api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380922</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-06 15:53:02 -0700</bug_when>
    <thetext>Thanks, David. Will give some of these approaches a try and see what happens.

(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Can you point me at the &quot;post task&quot; infrastructure? I looked for existing infrastructure before doing this myself, but the precident I saw was for individual sytems to build their own abstraction on top of MessageQueue. For example, I see fileapi/FileThread implements a FileThread::Task abstraction on top of WTF::MessageQueue. Or, similarly ScriptExecutionContext itself defines a task abstraction.
&gt; 
&gt; Good point :) However, I believe they are all written in a similar manner if you look closely, and this one doesn&apos;t follow that pattern, so it is missing some important safety aspects: see FileThreadTask.h for example.
&gt; 
&gt; As well as common naming like performTask. (Instead of following WebKit practices, this one decides to use Chromium conventions.)
&gt; 
&gt; Why do I care? It is on my agenda to pull out the WebKit stuff into a common place but if you do something totally different here it may be harder to convert this code over. (Also it is better to match the codebase you are in if it has conventions.)
&gt; 
&gt; 
&gt; 
&gt; &gt; 
&gt; &gt; The NonThreadSafeMember is used in the context of a larger patch (See the 3rd path) to guard a member on ViewManager. I am happy to pull that out to a later  patch if it helps focus discussion here.
&gt; 
&gt; I would remove it since it isn&apos;t used here. I would still get the design reviewed by someone who has done these things in WebKit.
&gt; 
&gt; 
&gt; &gt; The CC folder is where we are putting compositor-specific code that concerns itself with rendering and animating a generic layer tree. This is roughly equivalent to core animation, with CC being chrome compositor. James might be able to offer additional comments on this...
&gt; 
&gt; compositor would have been a better name for the directory (since it is already under the chromium direction the chromium part is implied), and still seems a better name if you must prefix things. Of course an alternative is a namespace.
&gt; 
&gt; 
&gt; Note: It would be much better to have someone who has tackled similar issues in WebKit review this rather than folks who haven&apos;t. (Just like I wouldn&apos;t consider myself good at looking at patches for graphics acceleration related items.) Please take advantage of any of these folks who are willing.
&gt; 
&gt; dimich, ap, kinuko, jianli, or myself have all had to deal with this are a bit.
&gt; 
&gt; 
&gt; PS Here&apos;s a few impl details:
&gt; CompositorTask should have a virtual destructor.
&gt; CompositorThread is RefCounted (which isn&apos;t threadsafe) but it appears to be used on multiple threads. (fwiw, I getting near to landing a change which will detect that better.) The singleton pattern seems odd, in that it creates the object on the fly in a ref counted fashion (and may create the thread on the fly as a result of this). I think there is clearer ownership than is implied here by the api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380941</commentid>
    <comment_count>20</comment_count>
      <attachid>87686</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-06 16:09:34 -0700</bug_when>
    <thetext>Comment on attachment 87686
Patch

I&apos;m not sure I understand the significance of creating and destroying the CCViewManager&apos;s m_impl on the ccthread.  At the time the CCViewManager is destroyed all views it manages must have been removed, right?  If so it seems equally valid to create/destroy it on the thread the CCViewManager is created on given the member variables CCViewManagerImpl has.  Then m_impl could be a normal OwnPtr&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380955</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-06 16:25:32 -0700</bug_when>
    <thetext>In general, I was trying to keep all impl code on the compositor thread because of TLS-related complications. I was thinking in particular about the gl context, which is thread specific.

This seemed particularly hinky when you consider that Impl has various ownptrs, like the TextureManager, that might themselves frees up gl resources with an implicit or explicit assumption about the current context.

It seems to me simpler to just make impl code always run on the thread. Even for construction &amp; destruction.


(In reply to comment #20)
&gt; (From update of attachment 87686 [details])
&gt; I&apos;m not sure I understand the significance of creating and destroying the CCViewManager&apos;s m_impl on the ccthread.  At the time the CCViewManager is destroyed all views it manages must have been removed, right?  If so it seems equally valid to create/destroy it on the thread the CCViewManager is created on given the member variables CCViewManagerImpl has.  Then m_impl could be a normal OwnPtr&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381153</commentid>
    <comment_count>22</comment_count>
      <attachid>88583</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 00:24:42 -0700</bug_when>
    <thetext>Created attachment 88583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381154</commentid>
    <comment_count>23</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 00:25:49 -0700</bug_when>
    <thetext>OK, here&apos;s a new patch that uses the WebKitty approach. Thanks again for steering me to look at these in more detail... it wasn&apos;t obvious to me the first time I looked through the code that there would be a FileThreadTask.h that came along with the FileThread.

Anyways, one open question in my new patch is the postTask path from CCThread back to the main thread. In the FileThread case, this flow is based on a ScriptExecutionContext. However, the compositor doesn&apos;t have access to this sort of thing. I opted to make a CCMainThread. I&apos;m open to suggestions.

With regard to cc/compositor/namespace discussion, I do understand where you&apos;re coming from. createCompositorThreadTask sounds a lot nicer than createCCThreadTask. It may be that as we get a bit more done, a change might make sense. Namespacing + folders might work. But, that&apos;s another changelist...

I&apos;m not sure of a cleaner way to deal with the singleton design pattern you&apos;re poking at. Whereas it seems there can be multiple FileThreads in a single renderprocess, we want CCThread to truly be a singleton --- if someone (a WebViewImpl in accelerated rendering mode) owns a reference to the CCThread, then the thread should be on and started. If nobody owns a reference to the singleton, it turns off in a blocking fashion. Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381158</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 00:31:10 -0700</bug_when>
    <thetext>Attachment 88583 did not build on chromium:
Build output: http://queues.webkit.org/results/8348474</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381176</commentid>
    <comment_count>25</comment_count>
      <attachid>88590</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 01:27:08 -0700</bug_when>
    <thetext>Created attachment 88590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381188</commentid>
    <comment_count>26</comment_count>
      <attachid>88594</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 01:43:23 -0700</bug_when>
    <thetext>Created attachment 88594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381189</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 01:46:08 -0700</bug_when>
    <thetext>Attachment 88590 did not build on chromium:
Build output: http://queues.webkit.org/results/8347517</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381488</commentid>
    <comment_count>28</comment_count>
      <attachid>88594</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-07 10:53:18 -0700</bug_when>
    <thetext>Comment on attachment 88594
Patch

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

Just a few things to address. Thanks for making it fit in better. (I will be starting my effort to clean up threading soon, and having this fit the patterns should make it easier to change more quickly and get rid of boilerplate code -- it may take a while to complete this clean up.)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCMainThread.h:32
&gt; +// CC doesn&apos;t have access to ScriptExecutionContxt so we have to duplicate this

If you want to say this, the best place is the ChangeLog. typo: ScriptExecutionContxt

&gt; Source/WebCore/platform/graphics/chromium/cc/CCMainThread.h:33
&gt; +// functionality. These tasks route to the webkit main loop

The last sentence is incomplete.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:56
&gt; +CCThread::~CCThread()

I feel like the ownership model for CCThread isn&apos;t as clear as it should be.

For example, suppose that the ref counts when away completely on the main thread and the only ref count was on the thread, then this destructor would be called on the compositor thread, which is clearly wrong.

This implies that really CCThread should be owned on the main thread and I suspect there is one place. Looking at your overall patch, I suspect that CCViewManager is the real owner of CCThread.

So I would change getInstance to return a CCThread* and make CCViewManager own it.  May there be multiple instances of CCViewManager? (If so, perhaps that is what you are trying to handle, but in that case it still feels like giving out PassRefPtr from getInstance feels like overkill.)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:65
&gt; +    // Slear singleton.

typo: Slear

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:92
&gt; +        MutexLocker lock(m_threadCreationMutex);

Nice. I was about to flag this issue above.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:46
&gt; +    // These functions are thread safe and can be called from anywhere.

This comment appears misplaced.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:74
&gt; +class CCCompletionEvent {

Seems deserving of its own header.

&gt; Source/WebKit/chromium/tests/CCThreadTest.cpp:27
&gt; +#include &quot;cc/CCThread.h&quot;

This cc/ shouldn&apos;t be needed. If it is, then the build should be changed so it isn&apos;t. As far as I know, directory structure is never used in includes for WebKit header files.

&gt; Source/WebKit/chromium/tests/CCThreadTest.cpp:53
&gt; +    WTF::ThreadIdentifier hitThreadID;

You shouldn&apos;t need WTF:: here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381601</commentid>
    <comment_count>29</comment_count>
      <attachid>88675</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 13:01:40 -0700</bug_when>
    <thetext>Created attachment 88675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381603</commentid>
    <comment_count>30</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 13:05:46 -0700</bug_when>
    <thetext>(In reply to comment #28)

Did most of what was suggested. For some reason, unit tests still want cc/ prefix on their includes. I&apos;ll try to poke at that at some later time.

Wrt thread lifetime, I see your point as it was written. ViewManager is a singleton.... how does this sound:
-  CCThread not be reference counted whatsoever
-  ViewManager has OwnPtr&lt;CCThread&gt;


(In reply to comment #29)
&gt; Created an attachment (id=88675) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381648</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-07 13:38:52 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; Source/WebKit/chromium/tests/CCThreadTest.cpp:27
&gt; &gt; +#include &quot;cc/CCThread.h&quot;
&gt; 
&gt; This cc/ shouldn&apos;t be needed. If it is, then the build should be changed so it isn&apos;t. As far as I know, directory structure is never used in includes for WebKit header files.


Not true.  We do use directory structure for includes in some places in WebKit and I think this is another case where it makes sense to segregate includes explicitly.  WTF and its subdirs (like wtf/text) are included with the path to emphasize that it&apos;s a separate library.  JavaScriptCore internally includes some parts by explicit path (such as runtime/ and yarr/).  The apple WebKit API levels include WebCore files via &lt;WebCore/...&gt; and WebKit2 includes API headers with #include &lt;WebKit2/...&gt;.  There is plenty of precedence for using directory structure in includes when there&apos;s a reason to maintain a clear logical distinction.

A central idea with the chromium compositor code is that it should be treated as an independent library with minimal dependencies from the rest of WebCore.  The only files in the project that should interact at all with cc/ files are parts of WebCore/platform/graphics/chromium, unit tests, and a very minimal portion of WebKit/chromium/src.  The internals of the library have a different threading model than most of webkit (in that multiple threads are used) and so by keeping the directory in the include my hope is that people will be less likely to peek into cc&apos;s guts without understanding what is going on inside.

One style question is whether we should be using &lt;&gt; style includes instead of &quot;&quot; for files outside of the cc/ directory.  I don&apos;t think it makes a large practical difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381652</commentid>
    <comment_count>32</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-07 13:40:10 -0700</bug_when>
    <thetext>Of course for files inside WebCore/platform/graphics/chromium/cc there&apos;s no need for the &quot;cc/...&quot; prefix in #includes since the current directory is always on the include lookup path.  My point was about files outside that directory including headers inside of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381679</commentid>
    <comment_count>33</comment_count>
      <attachid>88675</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-07 14:02:46 -0700</bug_when>
    <thetext>Comment on attachment 88675
Patch

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

Looks good to me. Just a few very minor nits to clean up.

&gt; Source/WebCore/ChangeLog:11
&gt; +        functionality in CCMainThread.

This second sentence would be better at a comment at the CCMainThread.cpp level.

&gt; Source/WebCore/ChangeLog:36
&gt; +        (WebCore::CCThread::getInstance):

This isn&apos;t in this patch. (I think you need to regenerate the ChangeLog.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThread.h:37
&gt; +// thread is alive as long as someone holds on to a reference to the

This comment is out of date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381681</commentid>
    <comment_count>34</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-07 14:03:10 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Wrt thread lifetime, I see your point as it was written. ViewManager is a singleton.... how does this sound:
&gt; -  CCThread not be reference counted whatsoever
&gt; -  ViewManager has OwnPtr&lt;CCThread&gt;

Exactly! I don&apos;t see getInstance anymore. I guess it will come in later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381742</commentid>
    <comment_count>35</comment_count>
      <attachid>87686</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-07 14:53:49 -0700</bug_when>
    <thetext>Comment on attachment 87686
Patch

Getting back to the ViewManager/impl relationship for a second (not relevant to the patch currently up for review) here&apos;s an idea:  Instead of having the ViewManager keep a pointer to its impl, have it request a routing ID from the CCThread and then use that routing ID to post tasks to its impl and vice versa.  The startup sequence would look something like:

1.) CCViewManager constructor requests routing ID from CCThread
2.) CCViewManager posts a task to the compositor thread requesting that a CCViewManagerImpl be created with the given routing id
3.) some time later on the compositor thread the CCViewManagerImpl is constructed

I don&apos;t see any reason why the construction has to be blocking.  From this point on if the CCViewManager wants to post a task (for example register a new view) all it only has to specify the routing ID and not an actual pointer to an object.  The point of all this is to try to avoid main thread objects and compositor thread objects from having direct pointers to each other whenever possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381756</commentid>
    <comment_count>36</comment_count>
      <attachid>88709</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-07 15:02:57 -0700</bug_when>
    <thetext>Created attachment 88709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381983</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 21:29:26 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 88709:

inspector/debugger/debugger-breakpoints-not-activated-on-reload.html bug 55551 (authors: pfeldman@chromium.org and podivilov@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381985</commentid>
    <comment_count>38</comment_count>
      <attachid>88709</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 21:32:20 -0700</bug_when>
    <thetext>Comment on attachment 88709
Patch

Clearing flags on attachment: 88709

Committed r83249: &lt;http://trac.webkit.org/changeset/83249&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381986</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 21:32:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382088</commentid>
    <comment_count>40</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-08 02:17:47 -0700</bug_when>
    <thetext>pingPongUsingCondition test has never been passed on Windows Debug.  Would you investigate on it please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382338</commentid>
    <comment_count>41</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-08 10:17:35 -0700</bug_when>
    <thetext>Looking.
(In reply to comment #40)
&gt; pingPongUsingCondition test has never been passed on Windows Debug.  Would you investigate on it please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382351</commentid>
    <comment_count>42</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-04-08 10:28:48 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; I don&apos;t see any reason why the construction has to be blocking.

I suppose construction doesn&apos;t have to be blocking, but then clean destruction is harder to deal with (&quot;are we in the process of creating ourself?&quot;). This smells like premature optimization: wiews don&apos;t get created often and the compositor thread latency is low. Sorry, but I really don&apos;t see a point in optimizing here...

Wrt using IDs instead of pointers, that&apos;s a chrome-style way of doing things that is certainly worth considering.

The thing I have to do anyway is revisit the previous implementation in light of things like FileStreamProxy, where the correspondence is containerized in a proxy class. That approach may be worth considering, too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85364</attachid>
            <date>2011-03-10 12:07:50 -0800</date>
            <delta_ts>2011-03-31 02:27:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110310120749.patch</filename>
            <type>text/plain</type>
            <size>50866</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA2NTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGVhMmYyZTU2MzA0YzRi
NjUyOTNjZDI1ZTc5MzYzMzY4ZGQ2OGE1Li5hZDhmOWJjMTQ0YWM4MGVmNTRmODAzMTNlMmNlMjdj
ODYxYjJmY2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEgQEAKKzIwMTEtMDMtMTAgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5
OjpjdXJyZW50RnJhbWVOdW1iZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkNDVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cnVuTWVzc2FnZU9uTWFpblRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cnVuKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkTWVzc2FnZTo6Q0NUaHJlYWRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkTWVzc2FnZTo6YmVmb3JlUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRo
cmVhZE1lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6OkND
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6On5DQ1ZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWV3OjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6Y29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6c2V0TmVlZHNDb21taXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlldzo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZXdJbXBsOjpDQ1ZpZXdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6
On5DQ1ZpZXdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6OmRyYXdMYXllcnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpzZXRTb3VyY2VGcmFtZU51bWJl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFu
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdFZpZXdNYW5hZ2VyTWVzc2FnZTo6SW5pdFZpZXdN
YW5hZ2VyTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbml0Vmlld01hbmFnZXJNZXNzYWdl
OjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3TWFuYWdlcjo6Q0NWaWV3TWFuYWdlcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5hZ2VyOjp+Q0NWaWV3TWFuYWdlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsTWVzc2FnZTo6Q0NWaWV3SW1wbE1lc3NhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbE1lc3NhZ2U6OmJlZm9yZVJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZXdNZXNzYWdlOjpDQ1ZpZXdNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlld01lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpBZGRWaWV3TWVz
c2FnZTo6QWRkVmlld01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWRkVmlld01lc3NhZ2U6
OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5hZ2VyOjphZGRWaWV3KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbW92ZVZpZXdNZXNzYWdlOjpSZW1vdmVWaWV3TWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW1vdmVWaWV3TWVzc2FnZTo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlld01hbmFnZXI6OnJlbW92ZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6QmVnaW5Db21t
aXRNZXNzYWdlOjpCZWdpbkNvbW1pdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmVnaW5D
b21taXRNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6QmVnaW5Db21taXRNZXNzYWdl
Ojp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCZWdpbkNvbW1pdE1lc3Nh
Z2U6OnNpZ25hbENvbXBsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmVnaW5GcmFtZU1lc3Nh
Z2U6OkJlZ2luRnJhbWVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJlZ2luRnJhbWVNZXNz
YWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6TmVlZHNDb21taXRNZXNzYWdlOjpOZWVkc0Nv
bW1pdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TmVlZHNDb21taXRNZXNzYWdlOjpydW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3TWFuYWdlcjo6c2V0TmVlZHNDb21taXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5hZ2VyOjpDb21wb3NpdG9yVGhyZWFkU3Rh
dGU6OkNvbXBvc2l0b3JUaHJlYWRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvTm9uVGhyZWFkU2FmZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
blRocmVhZFNhZmU6Ok5vblRocmVhZFNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9uVGhyZWFk
U2FmZTo6Y2FsbGVkT25WYWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpOb25UaHJlYWRT
YWZlOjpjaGFuZ2VWYWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpOb25UaHJlYWRTYWZl
OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9uVGhyZWFkU2FmZTo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vblRocmVhZFNhZmU6Om9wZXJhdG9yLT4pOgorCiAyMDExLTAzLTA5
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODc1ZDk1ZWQ5N2RmYWI0ZTQ0MzMwYjcz
YWFlNmVhODEwNTM5Zjc2MC4uNzU4YzVkM2IyNmQ3YTUxYmYwMDUzMmMzNWI1NDVkNjY4MTkzYmYz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzE1OSw2ICszMTU5LDE1IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJ
bXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmll
d01hbmFnZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXdNYW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL05vblRocmVhZFNhZmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAppbmRleCBhYzRjZmFkNWY0Mzk5NjM0ZWI1MTE4YzE2M2I1YTIxNDM5YjgzNTZiLi5h
YjlkMDZlODQ1NTMzYjE4NzEzZTFjZGU2NWQyOGUwMWZkYTJjYmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJUZXh0
dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgogI2lmIFVTRShT
S0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dFNraWEuaCIKQEAgLTk0OCw2ICs5NDksMjcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIK
ICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRTdWJsYXll
cnMoKVtpXS5nZXQoKSk7CiB9CiAKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2NoZWR1bGVDb21wb3NpdGUoKQoreworICAgIHNldE5l
ZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkZyYW1l
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBDQ1ZpZXc6OmJlZ2luRnJhbWUoZnJhbWVC
ZWdpblRpbWUpOworCisgICAgLy8gZG8gdGhlIHVwZGF0ZSBidXQgbm90IGRyYXcgaGFsZiBvZiB1
cGRhdGVBbmREcmF3TGF5ZXJzeAorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29t
bWl0KENDVmlld0ltcGwqIGltcGwpCit7CisgICAgQ0NWaWV3Ojpjb21taXQoaW1wbCk7CisgICAg
aW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIobV9oZWFkc1VwRGlzcGxheS0+Y3VycmVudEZyYW1l
TnVtYmVyKCkpOworfQorI2VuZGlmCisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCA3ZTg4NTBhZmQ1NWFhNmI5ZmM1YzZlYzg4NTA0N2IxZTlmYWI4YTVl
Li40NTUzYmUxMjAwZWRhMWNiZTk2NjY3NDdhM2JiZTI3OWM4YzE0MmRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDQsMTEgKzQ0LDEyIEBACiAjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9D
Q0hlYWRzVXBEaXNwbGF5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJj
Yy9DQ1ZpZXcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNTksMTIgKzYwLDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NWaWV3SW1wbDsKIGNs
YXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgQ0NI
ZWFkc1VwRGlzcGxheTsKIAorLy8gQ2FsbGJhY2sgaW50ZXJmYWNlIGZvciBDQ1ZpZXdzCiAvLyBD
bGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNp
bmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1
YmxpYyBDQ1ZpZXcgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNz
Q29udGV4dDNEKTsKIApAQCAtNzQsNiArNzcsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnZh
bGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICAvLyBz
ZXRzIHZpZXdwb3J0IHBhcmFtZXRlcnMKKyAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKICAgICAvLyB1cGRh
dGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgogICAg
IHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiwgVGlsZVBh
aW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCk7CkBAIC0xMzEsNiArMTM4LDEwIEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAorI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250ZXh0M0QpOwogCkBAIC0yMTcsNiArMjI4
LDEyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
CiAKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CisK
KyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgLy8gQ0NWaWV3CisgICAgdmlydHVh
bCB2b2lkIGJlZ2luRnJhbWUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0KENDVmlld0ltcGwqKTsKKyNlbmRpZgogfTsKIAogLy8gU2V0dGluZyBERUJVR19H
TF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIgYWxtb3N0IGV2ZXJ5IEdM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggZGJhYzIyYTE5MzQyYWQ3MWNkNjRj
M2Q5YzA3ZDQ5NmY0YjgzZmZiYi4uYzJmNjE2YWYyZGI1YjlmZGM4NGFlNjA1YzRkNzFiYjZmNzM3
MWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApAQCAtMTAsMTAgKzEwLDEwIEBA
CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKICAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CiAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGlj
OgogCiAgICAgfkNDSGVhZHNVcERpc3BsYXkoKTsKIAorICAgIGludCBjdXJyZW50RnJhbWVOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZU51bWJlcjsgfQorCiAgICAgdm9pZCBv
blByZXNlbnQoKTsKIAogICAgIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpIHsg
bV9zaG93RlBTQ291bnRlciA9IGVuYWJsZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU3NTM0YTMyMTVmMzllNzM3YjA2YTJkNDg4NDMzZTc1MGY1MDg5ZjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZC5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgImNjL0NDVGhy
ZWFkLmgiCisKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitzdGF0aWMg
Q0NUaHJlYWQqIGNjVGhyZWFkID0gMDsKKworI2RlZmluZSBDT01NSVRfU0xPV0xZIDAKK1Bhc3NS
ZWZQdHI8Q0NUaHJlYWQ+IENDVGhyZWFkOjpnZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKCFjY1Ro
cmVhZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1RocmVhZCgpKTsKKyAgICByZXR1
cm4gUGFzc1JlZlB0cjxDQ1RocmVhZD4oY2NUaHJlYWQpOworfQorCitDQ1RocmVhZDo6Q0NUaHJl
YWQoKQoreworICAgIGNjVGhyZWFkID0gdGhpczsKKyAgICBtX3RocmVhZElkID0gY3JlYXRlVGhy
ZWFkKENDVGhyZWFkOjpydW4sIHRoaXMsICJDaHJvbWUgQ29tcG9zaXRvciBUaHJlYWQiKTsKK30K
KworQ0NUaHJlYWQ6On5DQ1RocmVhZCgpCit7CisgICAgLy8gU3RvcCB0aHJlYWQuCisgICAgbV9t
ZXNzYWdlUXVldWUua2lsbCgpOworICAgIHZvaWQqIHVudXNlZDsKKyAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX3RocmVhZElkLCAmdW51c2VkKTsKKyAgICBtX3RocmVhZElkID0gMDsKKwor
ICAgIC8vIFNsZWFyIHNpbmdsZXRvbi4KKyAgICBjY1RocmVhZCA9IDA7Cit9CisKKy8vIHN0YXRp
YworYm9vbCBDQ1RocmVhZDo6aXNDb21wb3NpdG9yVGhyZWFkKCkKK3sKKyAgICBpZiAoIWNjVGhy
ZWFkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9
PSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKS0+bV90aHJlYWRJZDsKK30KKwordm9pZCBDQ1RocmVh
ZDo6cG9zdE1lc3NhZ2UoQ0NUaHJlYWRNZXNzYWdlKiBtc2cpCit7CisgICAgbV9tZXNzYWdlUXVl
dWUuYXBwZW5kKG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bk1lc3NhZ2VPbk1haW5UaHJlYWQo
dm9pZCogdXNlcmRhdGEpCit7CisgICAgLy8gSWYgdGhlIHRocmVhZCBpcyBkZWFkLCB0aGVuIHRo
aXMgbWVzc2FnZSBpcyBzdGFsZSwgZS5nLiBwb3N0ZWQKKyAgICAvLyBkdXJpbmcgb3Igc2xpZ2h0
bHkgYmVmb3JlIGNvbXBvc2l0b3Igc2h1dGRvd24uCisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gUnVuIHRoZSBtZXNzYWdlLgorICAgIENDTWFpblRocmVhZE1l
c3NhZ2UqIG1zZyA9IHN0YXRpY19jYXN0PENDTWFpblRocmVhZE1lc3NhZ2UqPih1c2VyZGF0YSk7
CisgICAgaWYgKG1zZy0+c2hvdWxkUnVuKCkpCisgICAgICAgIG1zZy0+cnVuKCk7CisgICAgZGVs
ZXRlIG1zZzsKK30KKwordm9pZCBDQ1RocmVhZDo6cG9zdE1lc3NhZ2UoQ0NNYWluVGhyZWFkTWVz
c2FnZSogbXNnKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQocnVuTWVzc2FnZU9uTWFpblRocmVh
ZCwgbXNnKTsKK30KKwordm9pZCogQ0NUaHJlYWQ6OnJ1bih2b2lkKiB1c2VyZGF0YSkKK3sKKyAg
ICBDQ1RocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWQqPih1c2VyZGF0YSk7Cisg
ICAgQ0NfTE9HMCgidGhyZWFkIHJ1bm5pbmciKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBPd25QdHI8Q0NUaHJlYWRNZXNzYWdlPiBtc2codGhyZWFkLT5tX21lc3NhZ2VRdWV1ZS53YWl0
Rm9yTWVzc2FnZSgpKTsKKyAgICAgICAgaWYgKCFtc2cuZ2V0KCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgbXNnLT5iZWZvcmVSdW4oKTsKKyAgICAgICAgbXNnLT5ydW4oKTsKKyAgICB9
CisgICAgQ0NfTE9HMCgidGhyZWFkIGV4aXRpbmciKTsKKyAgICByZXR1cm4gMDsKK30KKworCisK
K30KKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMGY0ZTJmM2FjNGJjOTM0YmQzOWQ0ZjM2N2Q5NjMxM2VkNDBmYjFjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NU
aHJlYWRfaAorI2RlZmluZSBDQ1RocmVhZF9oCisKKworI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVl
dWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIENDX0xPR19FTkFCTEUgMQor
CisjaWYgQ0NfTE9HX0VOQUJMRSAvLyBsb2dnaW5nIG9mIGNvbXBvc2l0b3IgdGhyZWFkaW5nIHN0
YXRlcworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIENDX0xPRzAoZm10KSBwcmludGYoIiVz
IiBmbXQgIlxuIiwgaXNNYWluVGhyZWFkKCkgPyAiTWFpbjogIiA6ICJDQzogICAiKQorI2RlZmlu
ZSBDQ19MT0cxKGZtdCwgYXJnMSkgcHJpbnRmKCIlcyIgZm10ICJcbiIsIGlzTWFpblRocmVhZCgp
ID8gIk1haW46ICIgOiAiQ0M6ICAgIiwgYXJnMSkKKyNkZWZpbmUgQ0NfTE9HMihmbXQsIGFyZzEs
IGFyZzIpIHByaW50ZigiJXMiIGZtdCAiXG4iLCBpc01haW5UaHJlYWQoKSA/ICJNYWluOiAiIDog
IkNDOiAgICIsIGFyZzEsIGFyZzIpCisjZWxzZQorI2RlZmluZSBDQ19MT0cwKGZtdCkKKyNkZWZp
bmUgQ0NfTE9HMShmbXQsIGFyZzEpCisjZGVmaW5lIENDX0xPRzIoZm10LCBhcmcxLCBhcmcyKQor
I2VuZGlmCisKKy8vIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCitjbGFz
cyBDQ1RocmVhZE1lc3NhZ2UgeworcHVibGljOgorICAgIENDVGhyZWFkTWVzc2FnZSgpIHsgfQor
CisgICAgLy8gQ2FsbGVkIGp1c3QgYmVmb3JlIHJ1bi4uLiBBbGxvd3MgYW4gb3Bwb3J0dW5pdHkg
dG8gY29udmVydAorICAgIC8vIE1haW5UaHJlYWQgb2JqZWN0cywgZS5nLiBMYXllclJlbmRlckNo
cm9taXVtLCB0byB0aGVpcgorICAgIC8vIGNvbXBvc2l0b3IgdGhyZWFkIGNvdW50ZXJwYXJ0Lgor
ICAgIHZpcnR1YWwgdm9pZCBiZWZvcmVSdW4oKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4o
KSA9IDA7Cit9OworCisvLyBNZXNzYWdlcyBzZW50IHRvIHRoZSBtYWluIHRocmVhZAorY2xhc3Mg
Q0NNYWluVGhyZWFkTWVzc2FnZSB7CitwdWJsaWM6CisgICAgLy8gQ2FsbGVkIGJlZm9yZSBydW4g
dG8gdmVyaWZ5IHRoYXQgdGhlIG1lc3NhZ2Ugc2hvdWxkIHN0aWxsIHJ1bi4gVXNlZnVsCisgICAg
Ly8gaW4gZGVhbGluZyB3aXRoIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGRlc3RpaW5hdGlvbiBvZiB0
aGUgbWVzc2FnZSBkaWVkIHdoaWxlCisgICAgLy8gdGhlIG1lc3NhZ2Ugd2FzIGluLWZsaWdodC4K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnVuKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmly
dHVhbCB2b2lkIHJ1bigpID0gMDsKK307CisKKy8vIFRoZSBDQ1RocmVhZCBzaW5nbGV0b24gb3du
cyB0aGUgY29tcG9zaXRvciB0aHJlYWQgYW5kIHByb3ZpZGVzCisvLyBiYXNpYyBpbmZyYXN0cnVj
dHVyZSBmb3IgbWVzc2FnaW5nIGJldHdlZW4gdGhlIHR3byB0aHJlYWRzLiBUaGUKKy8vIHRocmVh
ZCBpcyBhbGl2ZSBhcyBsb25nIGFzIHNvbWVvbmUgaG9sZHMgb24gdG8gYSByZWZlcmVuY2UgdG8g
dGhlCisvLyBzaW5nbGV0b24uCitjbGFzcyBDQ1RocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPEND
VGhyZWFkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+IGdldElu
c3RhbmNlKCk7CisgICAgdmlydHVhbCB+Q0NUaHJlYWQoKTsKKworICAgIHN0YXRpYyBib29sIGlz
Q29tcG9zaXRvclRocmVhZCgpOworCisgICAgdm9pZCBwb3N0TWVzc2FnZShDQ1RocmVhZE1lc3Nh
Z2UqIG1zZyk7CisgICAgdm9pZCBwb3N0TWVzc2FnZShDQ01haW5UaHJlYWRNZXNzYWdlKiBtc2cp
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gTWVzc2FnZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24KKyAg
ICBDQ1RocmVhZCgpOworICAgIHN0YXRpYyB2b2lkKiBydW4odm9pZCopOworCisgICAgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7CisgICAgTWVzc2FnZVF1ZXVlPENDVGhyZWFkTWVz
c2FnZT4gbV9tZXNzYWdlUXVldWU7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzc0ZDhjMzc0MjU2NzA2NTJlYWM5NDRkMjg3NmIxNWExYjE2ZTMyNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlldy5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiQ0NW
aWV3LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NWaWV3OjpDQ1ZpZXcoKQorICAgIDog
bV92aWV3TWFuYWdlcihDQ1ZpZXdNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpKQorICAgICwgbV9jbGll
bnQoMCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKK3sKKyNpZiBVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgbV92aWV3TWFuYWdlci0+YWRkVmlldyh0aGlzKTsKKyNlbmRpZgor
fQorCitDQ1ZpZXc6On5DQ1ZpZXcoKQoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICBtX3ZpZXdNYW5hZ2VyLT5yZW1vdmVWaWV3KHRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQg
Q0NWaWV3OjpiZWdpbkZyYW1lKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2NvbW1p
dFBlbmRpbmcgPSBmYWxzZTsKKworICAgIC8vIHRlbGwgdGhlIGNsaWVudCBhYm91dCB0aGUgZnJh
bWUKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iZWdpbkZyYW1lKGZyYW1l
QmVnaW5UaW1lKTsKK30KKwordm9pZCBDQ1ZpZXc6OmNvbW1pdChDQ1ZpZXdJbXBsKiBpbXBsKQor
eworfQorCit2b2lkIENDVmlldzo6c2V0TmVlZHNDb21taXQoKQoreworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgIHJldHVybjsKKyAgICBtX3Zp
ZXdNYW5hZ2VyLT5zZXROZWVkc0NvbW1pdCh0aGlzKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOworfQorCisKK30KKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmll
dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk4YmQ0YTNlNjk2Y2I4NjY5NzM5MmVhMDBiYjRiM2Q1NjY3NWMwM2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZXcuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NWaWV3X2gKKyNkZWZpbmUgQ0NWaWV3X2gKKworI2luY2x1ZGUgImNjL0NDVmlld01hbmFn
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENDVmlld0ltcGw7CisKK2NsYXNzIENDVmlld0NsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luRnJhbWUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7Cit9
OworCitjbGFzcyBDQ1ZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ1ZpZXc+IHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBDQ1ZpZXcoKTsKKyAgICB2aXJ0dWFsIH5DQ1ZpZXcoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkZyYW1lKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdChDQ1ZpZXdJbXBsKik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwor
ICAgIHZvaWQgc2V0Q2xpZW50KENDVmlld0NsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xp
ZW50OyB9CisKK3Byb3RlY3RlZDoKKyAgICBSZWZQdHI8Q0NWaWV3TWFuYWdlcj4gbV92aWV3TWFu
YWdlcjsKKworcHJpdmF0ZToKKyAgICBDQ1ZpZXdDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wg
bV9jb21taXRQZW5kaW5nOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3SW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTRiMzkwZDdhZGExYzFkODJjYjI1YTA3NWExMTU1NjFmNmQ3Zjc4YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld0ltcGwuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIkNDVmlld0ltcGwuaCIKKworI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1ZpZXdJbXBs
OjpDQ1ZpZXdJbXBsKCkKKyAgICA6IG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCisgICAgLCBtX2Zy
YW1lTnVtYmVyKDApCit7Cit9CisKK0NDVmlld0ltcGw6On5DQ1ZpZXdJbXBsKCkKK3sKK30KKwor
dm9pZCBDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICBtX2ZyYW1lTnVtYmVyICs9IDE7
Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjYwODkwZWNlZWQ2NDU1ZDYwZDY3MjRmNjIzMmM3ZGQ5Y2Q2YWRk
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlld0ltcGwuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NWaWV3SW1wbF9oCisjZGVmaW5lIENDVmlld0ltcGxfaAorCisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworCisv
LyBDQ1ZpZXdJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lh
dGVkIHJlbmRlcmluZyBzdGF0ZQorY2xhc3MgQ0NWaWV3SW1wbCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NWaWV3SW1wbCk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NWaWV3SW1wbCgp
OworICAgIHZpcnR1YWwgfkNDVmlld0ltcGwoKTsKKworICAgIHZvaWQgc2V0U291cmNlRnJhbWVO
dW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJl
cjsgfQorICAgIHZvaWQgZHJhd0xheWVycygpOworCitwcm90ZWN0ZWQ6CisgICAgaW50IG1fc291
cmNlRnJhbWVOdW1iZXI7CisgICAgaW50IG1fZnJhbWVOdW1iZXI7Cit9OworCit9OworCisjZW5k
aWYgLy8gVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
TWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQwYjJmZGY4YjE1YmFjZTY2MTQ3OWZjZTYxNTBhODcy
OTc0OTQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjkyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBHT09HTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKKyNpbmNsdWRlICJjYy9DQ1ZpZXdNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJjYy9D
Q1ZpZXcuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXdJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsK
Kworc3RhdGljIENDVmlld01hbmFnZXIqIGNjVmlld01hbmFnZXIgPSAwOworCitQYXNzUmVmUHRy
PENDVmlld01hbmFnZXI+IENDVmlld01hbmFnZXI6OmdldEluc3RhbmNlKCkKK3sKKyAgICBpZiAo
IWNjVmlld01hbmFnZXIpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NWaWV3TWFuYWdl
cigpKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxDQ1ZpZXdNYW5hZ2VyPihjY1ZpZXdNYW5hZ2Vy
KTsKK30KKworY2xhc3MgSW5pdFZpZXdNYW5hZ2VyTWVzc2FnZSA6IHB1YmxpYyBDQ1RocmVhZE1l
c3NhZ2UgeworcHVibGljOgorICAgIEluaXRWaWV3TWFuYWdlck1lc3NhZ2UoQ0NWaWV3TWFuYWdl
ciogbWdyKSA6IG1fdmlld01hbmFnZXIobWdyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkK
KyAgICB7CisgICAgICAgIG1fdmlld01hbmFnZXItPm1fY29tcG9zaXRvclRocmVhZFN0YXRlLmNo
YW5nZVZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBD
Q1ZpZXdNYW5hZ2VyKiBtX3ZpZXdNYW5hZ2VyOworfTsKKworQ0NWaWV3TWFuYWdlcjo6Q0NWaWV3
TWFuYWdlcigpCisgICAgOiBtX3RocmVhZChDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKSkKK3sKKyAg
ICBjY1ZpZXdNYW5hZ2VyID0gdGhpczsKKyAgICBtX3RocmVhZC0+cG9zdE1lc3NhZ2UobmV3IElu
aXRWaWV3TWFuYWdlck1lc3NhZ2UodGhpcykpOworfQorCitDQ1ZpZXdNYW5hZ2VyOjp+Q0NWaWV3
TWFuYWdlcigpCit7CisgICAgQVNTRVJUKCFtX21haW5UaHJlYWRTdGF0ZS0+dmlld3Muc2l6ZSgp
KTsKKworICAgIG1fdGhyZWFkLmNsZWFyKCk7CisKKyAgICBjY1ZpZXdNYW5hZ2VyID0gMDsKK30K
KworCisvLyBBIG1lc3NhZ2Ugc2VudCB0byBhIHNwZWNpZmljIENDVmlld0ltcGwuIFlvdSBjb25z
dHJ1Y3QgdGhlIG1lc3NhZ2UKKy8vIHdpdGggYSBDQ1ZpZXcqIGJ1dCB0aGUgcnVuIG1ldGhvZCBn
aXZlcyB5b3UgYWNjZXNzIHRvIGEKKy8vIENDVmlld0ltcGwqLgorLy8KKy8vIFRoaXMgbWVzc2Fn
ZSBjYW4gb25seSBiZSBzZW50IGZyb20gdGhlIG1haW4gdGhyZWFkLgorLy8KKy8vIFRoZSBtYXBw
aW5nIG9mIENDVmlldyB0byBDQ1ZpZXdJbXBsIGlzIGJhc2VkIG9uIHRoZSBDQ1ZpZXcKKy8vIHBv
aW50ZXIuIEludGVyYWxseSwgd2Uga2VlcCB0aGUgVmlldy0+Vmlld0ltcGwgbWFwIG9ubHkgb24g
dGhlCisvLyBjb21wb3NpdG9yIHRocmVhZCwgdGhlcmVieSBhdm9pZGluZyBhbnkgbG9ja2luZyB3
aGVuCisvLyBjcmVhdGluZy9kZWxldGluZyB2aWV3cy4gV2hlbiB0aGlzIG1lc3NhZ2UgaXMgY3Jl
YXRlZCwgd2Ugc3RvcmUgdGhlCisvLyBDQ1ZpZXcsIGJ1dCB0aGVuIGluIHRoZSBwcmUtcnVuIHN0
ZXAgW3doaWNoIGhhcHBlbnMgb24gdGhlCisvLyBjb21wb3NpdG9yLXRocmVhZF0sIHdlIGRvIHRo
ZSBjb252ZXJzaW9uIHRvIGEgVmlld0ltcGwuCitjbGFzcyBDQ1ZpZXdJbXBsTWVzc2FnZSA6IHB1
YmxpYyBDQ1RocmVhZE1lc3NhZ2UgeworcHVibGljOgorICAgIENDVmlld0ltcGxNZXNzYWdlKEND
VmlldyogdmlldykKKyAgICAgICAgOiBtX3ZpZXdJbXBsKDApCisgICAgICAgICwgbV92aWV3KHZp
ZXcpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgYmVmb3JlUnVuKCkKKyAgICB7CisgICAgICAgIENDVmlld01hbmFnZXI6OkNv
bXBvc2l0b3JUaHJlYWRTdGF0ZSYgc3RhdGUgPSAqQ0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2Uo
KS0+bV9jb21wb3NpdG9yVGhyZWFkU3RhdGU7CisgICAgICAgIEFTU0VSVChzdGF0ZS52aWV3VG9J
bXBsTWFwLmdldChtX3ZpZXcpKTsKKyAgICAgICAgbV92aWV3SW1wbCA9IHN0YXRlLnZpZXdUb0lt
cGxNYXAuZ2V0KG1fdmlldyk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBydW4oKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgQ0NWaWV3SW1wbCogbV92aWV3SW1wbDsKK3ByaXZhdGU6CisgICAgQ0NW
aWV3KiBtX3ZpZXc7Cit9OworCisvLyBBIG1lc3NhZ2Ugc2VudCB0byBhIHNwZWNpZmljIENDVmll
dy4gWW91IGNvbnN0cnVjdCB0aGUgbWVzc2FnZQorLy8gdXNpbmcgYSBDQ1ZpZXdJbXBsIGJ1dCB0
aGUgcnVuIG1ldGhvZCBwcm92aWRlcyB5b3Ugd2l0aCBhIGEgQ0NWaWV3CisvLyBwb2ludGVyLgor
Ly8KKy8vIFRoaXMgbWVzc2FnZSBjYW4gb25seSBiZSBzZW50IGZyb20gdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkLgorLy8KKy8vIFdlIHJlc29sdmUgdGhlIHByb3ZpZGVkIENDVmlld0ltcGwgdG8gYSBD
Q1ZpZXcgb24KKy8vIGNyZWF0aW9uLiBIb3dldmVyLCB3aGlsZSB0aGUgbWVzc2FnZSBpcyBpbiBm
bGlnaHQsIHRoZSBDQ1ZpZXcgbWlnaHQKKy8vIGdldCBkZXN0cm95ZWQuIFNvLCBiZWZvcmUgcnVu
bmluZyB0aGUgbWVzc2FnZSwgd2UgZmlyc3QgY2hlY2sgZm9yCisvLyB0aGUgdmlldyBzdGlsbCBi
ZWluZyByZWdpc3RlcmVkIG9uIHRoZSBWaWV3TWFuYWdlci4gSWYgaXQgaXNuJ3QKKy8vIHJlZ2lz
dGVyZWQsIHRoZSBtZXNzYWdlIGRvZXMgbm90IHJ1bi4KK2NsYXNzIENDVmlld01lc3NhZ2UgOiBw
dWJsaWMgQ0NNYWluVGhyZWFkTWVzc2FnZSB7CitwdWJsaWM6CisgICAgQ0NWaWV3TWVzc2FnZShD
Q1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICB7CisgICAgICAgIENDVmlld01hbmFnZXI6OkNvbXBv
c2l0b3JUaHJlYWRTdGF0ZSYgc3RhdGUgPSAqQ0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS0+
bV9jb21wb3NpdG9yVGhyZWFkU3RhdGU7CisgICAgICAgIEFTU0VSVChzdGF0ZS5pbXBsVG9WaWV3
TWFwLmNvbnRhaW5zKHZpZXdJbXBsKSk7CisgICAgICAgIG1fdmlldyA9IHN0YXRlLmltcGxUb1Zp
ZXdNYXAuZ2V0KHZpZXdJbXBsKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnVu
KCkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSB2aWV3IHdhcyByZW1vdmVkLCBkb24ndCBydW4u
CisgICAgICAgIENDVmlld01hbmFnZXI6Ok1haW5UaHJlYWRTdGF0ZSYgc3RhdGUgPSAqQ0NWaWV3
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS0+bV9tYWluVGhyZWFkU3RhdGU7CisgICAgICAgIHJldHVy
biBzdGF0ZS52aWV3cy5jb250YWlucyhtX3ZpZXcpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBydW4oKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgQ0NWaWV3KiBtX3ZpZXc7Cit9OworCisvLyBB
ZGRzIGEgdmlldyB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQncyB2aWV3LT5pbXBsIG1hcC4KK2Ns
YXNzIEFkZFZpZXdNZXNzYWdlIDogcHVibGljIENDVGhyZWFkTWVzc2FnZSB7CitwdWJsaWM6Cisg
ICAgQWRkVmlld01lc3NhZ2UoQ0NWaWV3KiB2aWV3KSA6IG1fdmlldyh2aWV3KSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIENDVmlld01hbmFnZXI6OkNvbXBvc2l0
b3JUaHJlYWRTdGF0ZSYgc3RhdGUgPSAqQ0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS0+bV9j
b21wb3NpdG9yVGhyZWFkU3RhdGU7CisgICAgICAgIEFTU0VSVCghc3RhdGUudmlld1RvSW1wbE1h
cC5jb250YWlucyhtX3ZpZXcpKTsKKyAgICAgICAgQ0NfTE9HMSgiVmlld0ltcGwgJXAgY3JlYXRl
ZCBmb3IgJXAiLCBtX3ZpZXcpOworICAgICAgICBDQ1ZpZXdJbXBsKiBpbXBsID0gbmV3IENDVmll
d0ltcGwoKTsKKyAgICAgICAgc3RhdGUudmlld1RvSW1wbE1hcC5hZGQobV92aWV3LCBpbXBsKTsK
KyAgICAgICAgc3RhdGUuaW1wbFRvVmlld01hcC5hZGQoaW1wbCwgbV92aWV3KTsKKyAgICB9Citw
cml2YXRlOgorICAgIENDVmlldyogbV92aWV3OworfTsKKwordm9pZCBDQ1ZpZXdNYW5hZ2VyOjph
ZGRWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IG1fbWFpblRocmVhZFN0YXRlLT52aWV3cy5hZGQodmlldyk7CisgICAgbV90aHJlYWQtPnBvc3RN
ZXNzYWdlKG5ldyBBZGRWaWV3TWVzc2FnZSh2aWV3KSk7Cit9CisKKy8vIFJlbW92ZXMgYSB2aWV3
IGZyb20gdGhlIGNvbXBvc2l0b3IgdGhyZWFkJ3Mgdmlldy0+aW1wbCBtYXAKK2NsYXNzIFJlbW92
ZVZpZXdNZXNzYWdlIDogcHVibGljIENDVGhyZWFkTWVzc2FnZSB7CitwdWJsaWM6CisgICAgUmVt
b3ZlVmlld01lc3NhZ2UoQ0NWaWV3KiB2aWV3KSA6IG1fdmlldyh2aWV3KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIENDVmlld01hbmFnZXI6OkNvbXBvc2l0b3JU
aHJlYWRTdGF0ZSYgc3RhdGUgPSAqQ0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS0+bV9jb21w
b3NpdG9yVGhyZWFkU3RhdGU7CisgICAgICAgIEFTU0VSVChzdGF0ZS52aWV3VG9JbXBsTWFwLmNv
bnRhaW5zKG1fdmlldykpOworICAgICAgICBDQ1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHN0YXRlLnZp
ZXdUb0ltcGxNYXAuZ2V0KG1fdmlldyk7CisgICAgICAgIHN0YXRlLmltcGxUb1ZpZXdNYXAucmVt
b3ZlKHZpZXdJbXBsKTsKKyAgICAgICAgc3RhdGUudmlld1RvSW1wbE1hcC5yZW1vdmUobV92aWV3
KTsKKyAgICAgICAgZGVsZXRlIHZpZXdJbXBsOworICAgICAgICBDQ19MT0cxKCJWaWV3SW1wbCAl
cCByZW1vdmVkIiwgdmlld0ltcGwpOworICAgIH0KK3ByaXZhdGU6CisgICAgQ0NWaWV3KiBtX3Zp
ZXc7Cit9OworCit2b2lkIENDVmlld01hbmFnZXI6OnJlbW92ZVZpZXcoQ0NWaWV3KiB2aWV3KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbWFpblRocmVhZFN0
YXRlLT52aWV3cy5jb250YWlucyh2aWV3KSk7CisgICAgbV9tYWluVGhyZWFkU3RhdGUtPnZpZXdz
LnJlbW92ZSh2aWV3KTsKKyAgICBtX3RocmVhZC0+cG9zdE1lc3NhZ2UobmV3IFJlbW92ZVZpZXdN
ZXNzYWdlKHZpZXcpKTsKK30KKworLy8gVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFuZCBtZXRob2Rz
IGltcGxlbWVudCB0aGUKKy8vIG5lZWRzVXBkYXRlL0JlZ2luRnJhbWUvQ29tbWl0IGFsZ29yaXRo
bQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgQmVnaW5Db21taXRNZXNzYWdlIDog
cHVibGljIENDVmlld0ltcGxNZXNzYWdlIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgY29tbWl0IG1l
c3NhZ2UgaXMgc2VudCBmcm9tIHRoZSBtYWluIHRocmVhZCB0byB0aGUgY29tcG9zaXRvciB0aHJl
YWQKKyAgICAvLyB0byBjb21taXQgQ0NMYXllciBjaGFuZ2VzIHRvIHRoZSBDQ0xheWVySW1wbCB0
cmVlLgorICAgIC8vCisgICAgLy8gV2hpbGUgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGlzIHByb2Nl
c3NpbmcgdGhlIGNvbW1pdCBtZXNzYWdlIHRoZSBtYWluIHRocmVhZAorICAgIC8vIG11c3QgYmxv
Y2suIFdlIGltcGxlbWVudCB0aGlzIGJ5IHdhaXRpbmcgb24gYSBjb25kaXRpb24gdmFyYWlibGUg
dGhhdCB0aGUKKyAgICAvLyBjb21wb3NpdG9yIHRocmVhZCB3aWxsIHNpZ25hbC4KKyAgICAvLwor
ICAgIC8vIFJpZ2h0IG5vdywgdGhpcyBjb25kaXRpb24gdmFyaWFibGUgaXMgYnVpbGQgdXNpbmcg
YSBzaW1wbGUKKyAgICAvLyBNdXRleCBvYmplY3QsIGV4cGxvaXRpbmcgdGhlIGZhY3QgdGhhdCBX
VEYgTXV0ZXggbG9jayBjYWxscworICAgIC8vIGFyZW4ndCByZWVudHJhbnQuIFNvLCB3ZSBpc3N1
ZSB0d28gbG9jayBjYWxscyBpbiBhIHJvdyBvbiB0aGUKKyAgICAvLyBtYWluIHRocmVhZCB0byBi
bG9jayBpdCwgdGhlbiBpc3N1ZSBhbiB1bmxvY2sgb24gdGhlIGNvbXBvc2l0b3IKKyAgICAvLyB0
aHJlYWQgdG8gdW5sb2NrIHRoZSBzZWNvbmQgbG9jayBjYWxsLiBXZSBzaG91bGQgY291bGQgcHJv
YmFibHkKKyAgICAvLyByZXBsYWNlIHRoaXMgd2l0aCBhIHJlYWwgY29uZGl0aW9uIHZhcmlhYmxl
IGJ1dCB0aGlzIHdvcmtzIGp1c3QgZmluZS4KKyAgICBCZWdpbkNvbW1pdE1lc3NhZ2UoQ0NWaWV3
KiB2aWV3VG9Db21taXQpCisgICAgICAgIDogQ0NWaWV3SW1wbE1lc3NhZ2Uodmlld1RvQ29tbWl0
KQorICAgICAgICAsIG1fdmlld1RvQ29tbWl0KHZpZXdUb0NvbW1pdCkKKyAgICB7CisgICAgICAg
IC8vIEZpcnN0IGxvY2sgY2FsbC4gSW1tZWRpYXRlbHkgc3VjY2VlZHMuCisgICAgICAgIG1fbXV0
ZXgubG9jaygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgQ0NfTE9HMigiY2M6IGNvbW1pdHRpbmcgJXAgdG8gJXAiLCBtX3ZpZXdUb0NvbW1pdCwgbV92
aWV3SW1wbCk7CisgICAgICAgIG1fdmlld1RvQ29tbWl0LT5jb21taXQobV92aWV3SW1wbCk7Cisj
aWYgQ09NTUlUX1NMT1dMWQorICAgICAgICB1c2xlZXAoMjUwMDAwKTsKKyNlbmRpZgorICAgICAg
ICBDQ19MT0cwKCJjYzogY29tbWl0IGRvbmUiKTsKKyAgICAgICAgc2lnbmFsQ29tcGxldGlvbigp
OworICAgIH0KKworICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKQorICAgIHsKKyAgICAgICAg
Ly8gU2Vjb25kIGxvY2sgY2FsbC4gQmVjYXVzZSB3ZSBsb2NrZWQgdGhlIG11dGV4IGluIHRoZSBj
b25zdHJ1Y3RvciwKKyAgICAgICAgLy8gdGhpcyBsb2NrIHdpbGwgaG9sZCB3YWl0aW5nIGZvciBh
bm90aGVyIHRocmVhZCB0byBwb3N0IGFuIHVubG9jay4KKyAgICAgICAgbV9tdXRleC5sb2NrKCk7
CisKKyAgICAgICAgLy8gVW5sb2NrIHRoZSBtdXRleCB0byBsZWF2ZSB0aGluZ3MgaW4gYSBzYW5l
IHN0YXRlLgorICAgICAgICBtX211dGV4LnVubG9jaygpOworICAgIH0KK3ByaXZhdGU6CisgICAg
dm9pZCBzaWduYWxDb21wbGV0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFVubG9jayB0aGUgbXV0
ZXgsIGNhdXNpbmcgdGhlIHNlY29uZCBsb2NrIGNhbGwgcG9zdGVkIGFib3ZlCisgICAgICAgIC8v
IHRvIHJldHVybi4KKyAgICAgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICB9CisgICAgTXV0ZXgg
bV9tdXRleDsKKyAgICBDQ1ZpZXcqIG1fdmlld1RvQ29tbWl0OworfTsKKworY2xhc3MgQmVnaW5G
cmFtZU1lc3NhZ2UgOiBwdWJsaWMgQ0NWaWV3TWVzc2FnZSB7CitwdWJsaWM6CisgICAgQmVnaW5G
cmFtZU1lc3NhZ2UoQ0NWaWV3SW1wbCogdmlld0ltcGwsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSkK
KyAgICAgICAgICAgIDogQ0NWaWV3TWVzc2FnZSh2aWV3SW1wbCkKKyAgICAgICAgICAgICwgbV9m
cmFtZUJlZ2luVGltZShmcmFtZUJlZ2luVGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICAvLyBQYWludCBwaGFzZQorICAgICAgICBDQ19MT0cwKCJiZWdpbm5p
bmcgZnJhbWUiKTsKKyAgICAgICAgbV92aWV3LT5iZWdpbkZyYW1lKG1fZnJhbWVCZWdpblRpbWUp
OworCisgICAgICAgIC8vIENvbW1pdCBwaGFzZQorICAgICAgICBCZWdpbkNvbW1pdE1lc3NhZ2Uq
IG1zZyA9IG5ldyBCZWdpbkNvbW1pdE1lc3NhZ2UobV92aWV3KTsKKyAgICAgICAgQ0NUaHJlYWQ6
OmdldEluc3RhbmNlKCktPnBvc3RNZXNzYWdlKG1zZyk7CisKKyAgICAgICAgQ0NfTE9HMCgid2Fp
dGluZyBmb3IgY29tbWl0Iik7CisgICAgICAgIG1zZy0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAg
ICAgICAgQ0NfTE9HMCgiY29tbWl0IGRvbmUiKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgZG91
YmxlIG1fZnJhbWVCZWdpblRpbWU7Cit9OworCitjbGFzcyBOZWVkc0NvbW1pdE1lc3NhZ2UgOiBw
dWJsaWMgQ0NWaWV3SW1wbE1lc3NhZ2UgeworcHVibGljOgorICAgIE5lZWRzQ29tbWl0TWVzc2Fn
ZShDQ1ZpZXcqIHZpZXcpIDogQ0NWaWV3SW1wbE1lc3NhZ2UodmlldykgeyB9CisgICAgdmlydHVh
bCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBDQ19MT0cwKCJDb21taXQgcmVxdWVzdGVkIik7
CisgICAgICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAg
IENDVGhyZWFkOjpnZXRJbnN0YW5jZSgpLT5wb3N0TWVzc2FnZShuZXcgQmVnaW5GcmFtZU1lc3Nh
Z2UobV92aWV3SW1wbCwgZnJhbWVCZWdpblRpbWUpKTsKKyAgICB9Cit9OworCit2b2lkIENDVmll
d01hbmFnZXI6OnNldE5lZWRzQ29tbWl0KENDVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX21haW5UaHJlYWRTdGF0ZS0+dmlld3MuY29udGFp
bnModmlldykpOworICAgIENDX0xPRzAoIlJlcXVlc3RpbmcgY29tbWl0Iik7CisgICAgbV90aHJl
YWQtPnBvc3RNZXNzYWdlKG5ldyBOZWVkc0NvbW1pdE1lc3NhZ2UodmlldykpOworfQorCit9CisK
KyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDdjZmE0YWYyNGY4NTUzZTRjOTUyMjUxOTYxYjBiMDEyYjUwNGMyYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlld01hbmFnZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NWaWV3TWFuYWdlcl9oCisjZGVmaW5lIENDVmlld01hbmFnZXJfaAorCisjaW5j
bHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9Ob25UaHJlYWRTYWZlLmgiCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVmlldzsKK2NsYXNzIENDVmlld0ltcGw7CisK
Ky8vIE1hbmFnZXMgdGhlIENDVmlld3MgYW5kIENDVmlld0ltcGwgY29ycmVzcG9uZGVuY2UsIHBy
b3ZpZGluZworLy8gbWVzc2FnaW5nIGJldHdlZW4gdGhlIHR3byBjbGFzc2VzIGFuZCBpbXBsZW1l
bnRpbmcgdGhlIHRvcGxldmVsCisvLyBwYXJ0cyBvZiB0aGUgY29tbWl0IGFsZ29yaXRobS4KK2Ns
YXNzIENDVmlld01hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ1ZpZXdNYW5hZ2VyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWV3TWFuYWdlcj4gZ2V0SW5zdGFuY2Uo
KTsKKyAgICB2aXJ0dWFsIH5DQ1ZpZXdNYW5hZ2VyKCk7CisKKyAgICB2b2lkIGFkZFZpZXcoQ0NW
aWV3Kik7CisgICAgdm9pZCByZW1vdmVWaWV3KENDVmlldyopOworICAgIHZvaWQgc2V0TmVlZHND
b21taXQoQ0NWaWV3Kik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NWaWV3TWFuYWdlcigp
OworICAgIFJlZlB0cjxDQ1RocmVhZD4gbV90aHJlYWQ7CisKKyAgICBzdHJ1Y3QgTWFpblRocmVh
ZFN0YXRlIHsKKyAgICAgICAgSGFzaFNldDxDQ1ZpZXcqPiB2aWV3czsKKyAgICB9OworICAgIE5v
blRocmVhZFNhZmU8TWFpblRocmVhZFN0YXRlPiBtX21haW5UaHJlYWRTdGF0ZTsKKworICAgIHN0
cnVjdCBDb21wb3NpdG9yVGhyZWFkU3RhdGUgeworICAgICAgICBDb21wb3NpdG9yVGhyZWFkU3Rh
dGUoKSA6IGluaXRpYWxpemVkKGZhbHNlKSB7IH0KKyAgICAgICAgYm9vbCBpbml0aWFsaXplZDsK
KyAgICAgICAgSGFzaE1hcDxDQ1ZpZXcqLCBDQ1ZpZXdJbXBsKiA+IHZpZXdUb0ltcGxNYXA7Cisg
ICAgICAgIEhhc2hNYXA8Q0NWaWV3SW1wbCosIENDVmlldyo+IGltcGxUb1ZpZXdNYXA7CisgICAg
fTsKKyAgICBOb25UaHJlYWRTYWZlPENvbXBvc2l0b3JUaHJlYWRTdGF0ZT4gbV9jb21wb3NpdG9y
VGhyZWFkU3RhdGU7CisKKyAgICAvLyBDb250cm9sIG1lc3NhZ2VzIHRoYXQgYXJlIGFsbG93ZWQg
dG8gcG9rZSBhdCB0aHJlYWQtc3BlY2lmaWMgc3RhdGUuCisgICAgZnJpZW5kIGNsYXNzIEluaXRW
aWV3TWFuYWdlck1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIEFkZFZpZXdNZXNzYWdlOworICAg
IGZyaWVuZCBjbGFzcyBSZW1vdmVWaWV3TWVzc2FnZTsKKyAgICBmcmllbmQgY2xhc3MgQ0NWaWV3
SW1wbE1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIENDVmlld01lc3NhZ2U7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvTm9uVGhyZWFkU2FmZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvTm9uVGhyZWFkU2FmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNWUzMmYyZjdmMDdk
YjhlMjYzZTM2Y2E1MGE1NDE0MjVkY2IzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9Ob25UaHJlYWRTYWZlLmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5vblRocmVhZFNhZmVfaAorI2Rl
ZmluZSBOb25UaHJlYWRTYWZlX2gKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIE5vblRocmVhZFNh
ZmUgeworcHVibGljOgorICAgIE5vblRocmVhZFNhZmUoKSA6IG1fdmFsaWRUaHJlYWQoY3VycmVu
dFRocmVhZCgpKSB7IH0KKyAgICBOb25UaHJlYWRTYWZlKGNvbnN0IFQmIHZhbHVlKQorICAgICAg
ICAgICAgOiBtX3ZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkKKyAgICAgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdCB7
IHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gbV92YWxpZFRocmVhZDsgfQorICAgIHZvaWQgY2hh
bmdlVmFsaWRUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyIGlkKSB7IG1fdmFsaWRUaHJlYWQg
PSBpZDsgfQorCisgICAgVCYgZ2V0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsZWRPblZh
bGlkVGhyZWFkKCkpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisgICAgY29uc3Qg
VCYgZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBUJiBvcGVyYXRvcioo
KSB7IHJldHVybiBnZXQoKTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CisKKyAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJmdldCgpOyB9Cisg
ICAgY29uc3QgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZnZXQoKTsgfQorCitwcml2
YXRlOgorICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3ZhbGlkVGhyZWFkOworICAgIFQgbV92
YWx1ZTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwY2Jh
NDE5NjI1ZGJjYTMxOWExN2QyOGU1M2U2ZGFmMGRkMzc5ZTY3Li5kOTVlZWMwMDUzOGJmODM0Zjkw
ZmZlMzRlNDMxMjA0NDFjOWExZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIzIEBACisyMDExLTAzLTEwICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1d
IENvbXBvc2l0b3IgdGhyZWFkIGluZnJhc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjEzMQorCisgICAgICAgICogcHVibGljL1dlYldp
ZGdldC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXQ6OnNjaGVkdWxlQ29tcG9zaXRlKToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0FuaW1hdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6YmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRS
b290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6
CisKIDIwMTEtMDMtMDggIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldC5oCmluZGV4IDM2ZmJmMzEzYWQxNzQ2NGM0MWQ4ZDkyN2NiMjEzMmFkYWI2
YWU4ODEuLmY4ZWQ3ODI2NjRlZTFhYWY3OTdkNTE5MzIwZDE3YTg2ZGJkNjlhMjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC04MCw2ICs4MCwxMCBAQCBw
dWJsaWM6CiAgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KICAgICB2aXJ0dWFsIHZvaWQg
Y29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CiAKKyAgICAvLyBUZW1wb3JhcnkgKGRvIG5vdCBj
b21taXQpIGhhY2sgdW50aWwgRGFyaW4gY2FuIGxhbmQgaGlzIGludmVyc2lvbiBjb2RlCisgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgIHsgfQorCisKICAgICAvLyBDYWxsZWQg
dG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUuCiAgICAgLy8gSW1w
bGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdldHMgbmVlZCB0byBy
ZS1yZW5kZXIKICAgICAvLyBvbiByZWNlaXZpbmcgdGhpcyBtZXNzYWdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNmFlNGYzNTg4NzY2MDhkODRiYzNl
ODMzODU5Zjk1ZDAzMmIzZTBlNi4uNzZmZDAxNWRmYWNlN2U3NTQ0MzBiYzU4NjFhMDFjNTkyMTFh
Mjg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAt
OTgxLDEyICs5ODEsMTcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUm
IG5ld1NpemUpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoKQogeworICAgIGRvQW5pbWF0
ZShjdXJyZW50VGltZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBpZiAo
d2ViZnJhbWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmll
dygpOwogICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRl
ZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7
CisgICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNv
bmRzVG9ET01UaW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAg
LTEwNTAsNiArMTA1NSw5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2Fu
dmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAgICAg
ICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBwYXNzZWQgaW4s
IHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTEwNzgsNiArMTA4NiwyNyBAQCB2
b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKIH0KIAorCit2b2lkIFdlYlZpZXdJbXBsOjpiZWdpbkZyYW1lKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
ZG9BbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKworICAgIGxheW91dCgpOworCisgICAgLy8gRklY
TUU6IE1vdmUgZXZlcnl0aGluZyBiZWxvdyBpbnRvIHRoZSBjb21wb3NpdG9yLgorICAgIGRvQ29t
cG9zaXRlKCk7CisKKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAg
aWYgKGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgcmVhbGxvY2F0ZVJlbmRl
cmVyKCk7CisKKyAgICAvLyBGSVhNRTogU2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1lc3NhZ2UgdXAg
dG8gdGhlIFJlbmRlcldpZGdldC4KKyNlbmRpZgorfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpjb21w
b3NpdGUoYm9vbCBmaW5pc2gpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpA
QCAtMjI3MSw5ICsyMzAwLDIzIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xh
eWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgICAgICBtX2NsaWVudC0+ZGlk
SW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCisjaWYgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQoreworCisgICAg
aWYgKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zY2hl
ZHVsZUNvbXBvc2l0ZSgpOworfQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RM
YXllck5lZWRzRGlzcGxheSgpCiB7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChtX2xheWVyUmVuZGVyZXIuZ2V0KCkpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2No
ZWR1bGVDb21wb3NpdGUoKTsKKyNlbHNlCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7CisjZW5kaWYKIH0KIAogCkBAIC0yMzI1LDYgKzIzNjgsOSBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCBtX3NpemUud2lkdGgpLCBzdGQ6
Om1heCgxLCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAgIH0KICAgICAgICAgbV9sYXllclJlbmRl
cmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCkpOwor
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRDbGllbnQodGhpcyk7CisjZW5kaWYKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewog
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0
cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1
ZTsKQEAgLTI0MTcsNiArMjQ2Myw5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5k
ZXJlcigpCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBuZXdDb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShjb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLCBtX3Bh
Z2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOwogICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0
dXJuIDAsIGluIHRoYXQgY2FzZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSB3aWxsIGFs
c28gcmV0dXJuIDAuCiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5k
ZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG5ld0NvbnRleHQpOworI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBsYXllclJlbmRlcmVyLT5zZXRDbGllbnQodGhp
cyk7CisjZW5kaWYKIAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQgbGF5
ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNS
ZWN1cnNpdmUuCiAgICAgaWYgKGxheWVyUmVuZGVyZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCAyMTYzNzI1MWMxN2FjODA5YzA3MTU3MGE1YTU4NDNlNzVi
YzY3MzU2Li41ZmVkMGU2MzNjMTMwMDk3NDkzNDE3MzU1MTU3NjZjMjVkMjYyZTU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTg2LDcgKzg2LDcgQEAgY2xh
c3MgV2ViTW91c2VXaGVlbEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2Vi
VG91Y2hFdmVudDsKIAotY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGlj
IFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2NsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdl
YlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ1ZpZXdDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdl
YlZpZXdJbXBsPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCk7CkBAIC05Nyw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9p
ZCB0aGVtZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBl
bmFibGUpOwpAQCAtMTk0LDYgKzE5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9yKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlv
bik7CiAKKyAgICAvLyBDQ1ZpZXdDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5GcmFtZShk
b3VibGUgZnJhbWVCZWdpblRpbWUpOworCiAgICAgLy8gV2ViVmlld0ltcGwKIAogICAgIHZvaWQg
c2V0SWdub3JlSW5wdXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7CkBAIC0zMzEsNiArMzM1LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBz
Y3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUm9v
dExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBkb1VwZGF0ZUFu
ZENvbXBvc2l0ZSgpOwogI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIHRoZSBvbnNjcmVlbiAzRCBj
b250ZXh0IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuIFRoaXMgaXMKQEAgLTM5NCw2ICszOTksOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERyYWdBY3Rpb24pOwogCisgICAgdm9pZCBkb0FuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sKTsKICAg
ICB2b2lkIGRvQ29tcG9zaXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87683</attachid>
            <date>2011-03-31 02:27:42 -0700</date>
            <delta_ts>2011-03-31 02:50:26 -0700</delta_ts>
            <desc>RunnableMethods and ViewManagerImpl</desc>
            <filename>bug-56131-20110331022741.patch</filename>
            <type>text/plain</type>
            <size>64434</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI1MDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDRmNTQwMDZjZWMxZWUz
MGEzYjA5OTE0OGY0YTk0NTYzNTcyNGM2Li41NGRkM2I5ZTUyOTZmOGJkNDc1NTMwODk3N2M0OWFk
N2FmODY1MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDMtMTAgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpjdXJyZW50RnJhbWVOdW1iZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWQ6OkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6cnVuTWVzc2FnZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
cnVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkTWVzc2FnZTo6Q0NUaHJlYWRNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkTWVzc2FnZTo6YmVmb3JlUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZE1lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZXc6OkNDVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6
On5DQ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjpiZWdpbkZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6
c2V0TmVlZHNDb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6c2V0Q2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpDQ1ZpZXdJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6On5DQ1ZpZXdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlld0ltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlld0ltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJ
bXBsOjpzZXRTb3VyY2VGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdFZpZXdN
YW5hZ2VyTWVzc2FnZTo6SW5pdFZpZXdNYW5hZ2VyTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbml0Vmlld01hbmFnZXJNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3
TWFuYWdlcjo6Q0NWaWV3TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5hZ2Vy
Ojp+Q0NWaWV3TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsTWVzc2FnZTo6
Q0NWaWV3SW1wbE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbE1lc3NhZ2U6
OmJlZm9yZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNZXNzYWdlOjpDQ1ZpZXdNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld01lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAg
ICAgIChXZWJDb3JlOjpBZGRWaWV3TWVzc2FnZTo6QWRkVmlld01lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWRkVmlld01lc3NhZ2U6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdN
YW5hZ2VyOjphZGRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZVZpZXdNZXNzYWdlOjpS
ZW1vdmVWaWV3TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVWaWV3TWVzc2FnZTo6
cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld01hbmFnZXI6OnJlbW92ZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjpCZWdpbkNvbW1pdE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2Vi
Q29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpCZWdpbkNvbW1pdE1lc3NhZ2U6OnNpZ25hbENvbXBsZXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QmVnaW5GcmFtZU1lc3NhZ2U6OkJlZ2luRnJhbWVNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJlZ2luRnJhbWVNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6TmVl
ZHNDb21taXRNZXNzYWdlOjpOZWVkc0NvbW1pdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
TmVlZHNDb21taXRNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3TWFuYWdl
cjo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld01hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5h
Z2VyOjpDb21wb3NpdG9yVGhyZWFkU3RhdGU6OkNvbXBvc2l0b3JUaHJlYWRTdGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvTm9uVGhyZWFkU2FmZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vblRocmVhZFNhZmU6Ok5vblRocmVhZFNhZmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9uVGhyZWFkU2FmZTo6Y2FsbGVkT25WYWxpZFRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb25UaHJlYWRTYWZlOjpjaGFuZ2VWYWxpZFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpOb25UaHJlYWRTYWZlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9uVGhy
ZWFkU2FmZTo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vblRocmVhZFNhZmU6Om9w
ZXJhdG9yLT4pOgorCiAyMDExLTAzLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRoZSBFRkwgYnVpbGQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMjkwYjkzYTUzZDNjMjVmNzViOTg4NjYxOWQwYTQ2NTA4ZTgxZGY0Mi4uMTNiNGE4
MTk3NGZkOGQ1ZjBhYWU5MzcwMzZlNDU1NGE2ZTFkYmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NDAxOSw4ICs0MDE5LDE4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBs
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZXdNYW5hZ2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3TWFuYWdlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZXdNYW5hZ2VySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmMxNWFiZDU0ZmFjNjUxODMxODg4ZWNkZjgzM2QzOTI5ZjQy
MTI3Yi4uNTk0OGZmZjc0MmVhOGUyZDg3ZmYxMDMxM2JiZTNjNTNjMmE0N2E3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgogI2lmIFVT
RShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKQEAgLTI1MiwxMCArMjUzLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWMKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogewot
ICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCisgICAgQ0NWaWV3Ojp1cGRhdGVM
YXllcnMoKTsKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI2
OCwxMCArMjY4LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
TGF5ZXJzKCkKIAogICAgIHVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMoKTsKIAotICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgdXBkYXRlTGF5ZXJz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxDQ0xheWVySW1wbCo+KCkpOworICAgIHVwZGF0
ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCit7CisgICAgQVNTRVJUKG1f
aGFyZHdhcmVDb21wb3NpdGluZyAmJiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5n
ZXQoKSk7CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGRy
YXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgpKTsKIAogICAg
IGlmIChpc0NvbXBvc2l0aW5nT2Zmc2NyZWVuKCkpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CkBAIC0xMDM2LDYgKzEwNDEsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwg
TGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRT
dWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
b21taXQoQ0NWaWV3SW1wbCogaW1wbCkKK3sKKyAgICBDQ1ZpZXc6OmNvbW1pdChpbXBsKTsKKyAg
ICBpbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihtX2hlYWRzVXBEaXNwbGF5LT5jdXJyZW50RnJh
bWVOdW1iZXIoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCA2NjdlZGUyMzkyNDFkYWI5OTE3NDQ1YmI4MmU4MWVjMzJhOWE0YmM3Li5iYzhm
MTFkNTNiZmNkNWQyMzdlNGU3YTJkODg5Yzc2NTY3MDg2ZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtNDQsMTIgKzQ0LDEzIEBACiAjaW5jbHVkZSAiY2MvQ0NDYW52
YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXcuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lm
IFBMQVRGT1JNKENHKQpAQCAtNjAsMTIgKzYxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NWaWV3SW1wbDsKIGNsYXNzIEdlb21ldHJ5Qmlu
ZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsK
IAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5
ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW0gOiBwdWJsaWMgQ0NWaWV3IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwg
UGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCwgUGFzc093blB0cjxU
aWxlUGFpbnRJbnRlcmZhY2U+IHNjcm9sbGJhclBhaW50KTsKIApAQCAtNzgsNyArODAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bik7CiAKICAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0
aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8v
IHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTE0
MSw2ICsxNDQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3Vyc2l2ZShM
YXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJz
aXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1w
bCopOworCiAgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCos
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCkBAIC0xODEsNiArMTg2LDggQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3duUHRyPFZlY3RvcjxD
Q0xheWVySW1wbCo+ID4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXgg
ZDU2ZjhhYjg4NjcxOTQ1ZWFkY2U1Y2IzNDk0NWJlMjExYWIzOTY5NC4uMzZmYzFiN2ZhMDhiZTEz
OWNiNTc3OWRiOGMyMGE5YTYxZTk1MDZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
aApAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB+Q0NIZWFkc1VwRGlzcGxheSgpOwog
CisgICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZy
YW1lTnVtYmVyOyB9CisKICAgICB2b2lkIG9uUHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRTaG93
RlBTQ291bnRlcihib29sIGVuYWJsZSkgeyBtX3Nob3dGUFNDb3VudGVyID0gZW5hYmxlOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q05vblRocmVhZFNhZmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTm9uVGhyZWFkU2FmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmNGY1NmEzOWMwYTFiZDc2YzZi
YmVjNTI4YjAyMWQ2YmFiMWU1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ05vblRocmVhZFNhZmUuaApAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTm9uVGhyZWFkU2FmZV9oCisjZGVmaW5l
IENDTm9uVGhyZWFkU2FmZV9oCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NOb25UaHJlYWRTYWZlIHsKK3B1YmxpYzoKKyAgICBD
Q05vblRocmVhZFNhZmUoKSA6IG1fdmFsaWRUaHJlYWQoY3VycmVudFRocmVhZCgpKSB7IH0KKyAg
ICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGhyZWFk
KCkgPT0gbV92YWxpZFRocmVhZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRocmVhZFZhbGlkKCkg
eyBtX3ZhbGlkVGhyZWFkID0gY3VycmVudFRocmVhZCgpOyB9CisKK3ByaXZhdGU6CisgICAgV1RG
OjpUaHJlYWRJZGVudGlmaWVyIG1fdmFsaWRUaHJlYWQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK2NsYXNzIENDTm9uVGhyZWFkU2FmZU1lbWJlciB7CitwdWJsaWM6CisgICAgQ0NOb25UaHJl
YWRTYWZlTWVtYmVyKCkgOiBtX3ZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkgeyB9CisgICAg
Q0NOb25UaHJlYWRTYWZlTWVtYmVyKGNvbnN0IFQmIHZhbHVlKSA6IG1fdmFsaWRUaHJlYWQoY3Vy
cmVudFRocmVhZCgpKSwgbV92YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBib29sIGNhbGxlZE9uVmFs
aWRUaHJlYWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gbV92YWxpZFRocmVh
ZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRocmVhZFZhbGlkKCkgeyBtX3ZhbGlkVGhyZWFkID0g
Y3VycmVudFRocmVhZCgpOyB9CisKKyAgICBUJiBnZXQoKSB7IEFTU0VSVChjYWxsZWRPblZhbGlk
VGhyZWFkKCkpOyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsg
QVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBU
JiBnZXRVbnNhZmUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgY29uc3QgVCYgZ2V0VW5zYWZl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1
cm4gZ2V0KCk7IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBnZXQo
KTsgfQorCisgICAgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuICZnZXQoKTsgfQorICAgIGNvbnN0
IFQqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZnZXQoKTsgfQorCisgICAgVCYgb3BlcmF0
b3I9KGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CisgICAgfQorCisgcHJpdmF0ZToKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV92YWxp
ZFRocmVhZDsKKyAgICBUIG1fdmFsdWU7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUYXNrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rhc2suaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYzE4NmQyMjhlNzBkY2JmZjljNjAyMmRhYWNiYzgyODgwNjk4NTJlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUYXNrLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUYXNr
X2gKKyNkZWZpbmUgQ0NUYXNrX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBmaWxlIHByb3ZpZGVzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIENocm9tZSdzIHRhc2tzIGFuZCBSdW5uYWJsZSBtZXRob2RzIHN5c3RlbS4KK2Ns
YXNzIENDVGFzayB7CitwdWJsaWM6CisgICAgQ0NUYXNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJ1bigpID0gMDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNPgorY2xh
c3MgQ0NSdW5uYWJsZU1ldGhvZDAgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1YmxpYzoKKyAgICBDQ1J1
bm5hYmxlTWV0aG9kMChDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCkKKyAgICAgICAgOiBtX29i
amVjdChvYmplY3QpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0
aG9kKSgpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0
aG9kOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFS
RzA+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kMSA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgor
ICAgIENDUnVubmFibGVNZXRob2QxKEMqIG9iamVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBB
UkcwJiBhcmcwKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhv
ZChtZXRob2QpCisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgeworICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0aG9kKShtX2Fy
ZzApOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0aG9k
OworICAgIEFSRzAgbV9hcmcwOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1l
IE0sIHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzE+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9k
MiA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVNZXRob2QyKEMqIG9i
amVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcx
KQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2Qp
CisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAgewor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+
Km1fbWV0aG9kKShtX2FyZzAsIG1fYXJnMSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEMqIG1f
b2JqZWN0OworICAgIE0gbV9tZXRob2Q7CisgICAgQVJHMCBtX2FyZzA7CisgICAgQVJHMSBtX2Fy
ZzE7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJH
MCwgdHlwZW5hbWUgQVJHMSwgdHlwZW5hbWUgQVJHMj4KK2NsYXNzIENDUnVubmFibGVNZXRob2Qz
IDogcHVibGljIENDVGFzayB7CitwdWJsaWM6CisgICAgQ0NSdW5uYWJsZU1ldGhvZDMoQyogb2Jq
ZWN0LCBjb25zdCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEs
IGNvbnN0IEFSRzImIGFyZzIpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX2FyZzAoYXJnMCkKKyAgICAgICAgLCBtX2Fy
ZzEoYXJnMSkKKyAgICAgICAgLCBtX2FyZzIoYXJnMikKKyAgICB7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgKG1fb2JqZWN0LT4qbV9tZXRob2QpKG1fYXJn
MCwgbV9hcmcxLCBtX2FyZzIpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsK
KyAgICBNIG1fbWV0aG9kOworICAgIEFSRzAgbV9hcmcwOworICAgIEFSRzEgbV9hcmcxOworICAg
IEFSRzIgbV9hcmcyOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5
cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzEsIHR5cGVuYW1lIEFSRzIsIHR5cGVuYW1lIEFSRzM+
CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kNCA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAg
IENDUnVubmFibGVNZXRob2Q0KEMqIG9iamVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcw
JiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxLCBjb25zdCBBUkcyJiBhcmcyLCBjb25zdCBBUkczJiBh
cmczKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRo
b2QpCisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAg
ICAgICwgbV9hcmcyKGFyZzIpCisgICAgICAgICwgbV9hcmczKGFyZzMpCisgICAgeworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0
aG9kKShtX2FyZzAsIG1fYXJnMSwgbV9hcmcyLCBtX2FyZzMpOworICAgIH0KK3Byb3RlY3RlZDoK
KyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0aG9kOworICAgIEFSRzAgbV9hcmcwOworICAg
IEFSRzEgbV9hcmcxOworICAgIEFSRzIgbV9hcmcyOworICAgIEFSRzMgbV9hcmczOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3
Q0NSdW5uYWJsZU1ldGhvZChDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRob2QwPEMsIE0+KG9iamVjdCwgbWV0aG9kKSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwPgor
UGFzc093blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyogb2JqZWN0LCBjb25zdCBN
JiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzApCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1J1bm5hYmxlTWV0aG9kMTxDLCBNLCBBUkcwPihvYmplY3QsIG1ldGhvZCwgYXJnMCkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlwZW5h
bWUgQVJHMT4KK1Bhc3NPd25QdHI8Q0NUYXNrPiBOZXdDQ1J1bm5hYmxlTWV0aG9kKEMqIG9iamVj
dCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSdW5uYWJsZU1ldGhvZDI8QywgTSwgQVJHMCwg
QVJHMT4ob2JqZWN0LCBtZXRob2QsIGFyZzAsIGFyZzEpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzEsIHR5cGVuYW1l
IEFSRzI+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3Q0NSdW5uYWJsZU1ldGhvZChDKiBvYmplY3Qs
IGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCwgY29uc3QgQVJHMSYgYXJnMSwgY29u
c3QgQVJHMiYgYXJnMikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRo
b2QzPEMsIE0sIEFSRzAsIEFSRzEsIEFSRzI+KG9iamVjdCwgbWV0aG9kLCBhcmcwLCBhcmcxLCBh
cmcyKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBB
UkcwLCB0eXBlbmFtZSBBUkcxLCB0eXBlbmFtZSBBUkcyLCB0eXBlbmFtZSBBUkczPgorUGFzc093
blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyogb2JqZWN0LCBjb25zdCBNJiBtZXRo
b2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEsIGNvbnN0IEFSRzImIGFyZzIs
IGNvbnN0IEFSRzMmIGFyZzMpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1J1bm5hYmxl
TWV0aG9kNDxDLCBNLCBBUkcwLCBBUkcxLCBBUkcyLCBBUkczPihvYmplY3QsIG1ldGhvZCwgYXJn
MCwgYXJnMSwgYXJnMiwgYXJnMykpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjMzZjllZTIxNWY4YTE2NzMxYzFjZjVlNjY4MDNmMTZiN2IyNTZmYjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZC5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyNpbmNsdWRl
ICJjYy9DQ1RocmVhZC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmlt
aXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsK
Kworc3RhdGljIENDVGhyZWFkKiBjY1RocmVhZCA9IDA7CisKKyNkZWZpbmUgQ09NTUlUX1NMT1dM
WSAwCitQYXNzUmVmUHRyPENDVGhyZWFkPiBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKQoreworICAg
IGlmICghY2NUaHJlYWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaHJlYWQoKSk7
CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+KGNjVGhyZWFkKTsKK30KKworQ0NUaHJl
YWQ6OkNDVGhyZWFkKCkKK3sKKyAgICBjY1RocmVhZCA9IHRoaXM7CisgICAgbV90aHJlYWRJZCA9
IGNyZWF0ZVRocmVhZChDQ1RocmVhZDo6cnVuLCB0aGlzLCAiQ2hyb21lIENvbXBvc2l0b3IgVGhy
ZWFkIik7Cit9CisKK0NDVGhyZWFkOjp+Q0NUaHJlYWQoKQoreworICAgIC8vIFN0b3AgdGhyZWFk
LgorICAgIG1fbWVzc2FnZVF1ZXVlLmtpbGwoKTsKKyAgICB2b2lkKiB1bnVzZWQ7CisgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCwgJnVudXNlZCk7CisgICAgbV90aHJlYWRJ
ZCA9IDA7CisKKyAgICAvLyBTbGVhciBzaW5nbGV0b24uCisgICAgY2NUaHJlYWQgPSAwOworfQor
CisvLyBzdGF0aWMKK2Jvb2wgQ0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCgpCit7CisgICAg
aWYgKCFjY1RocmVhZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjdXJyZW50
VGhyZWFkKCkgPT0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCktPm1fdGhyZWFkSWQ7Cit9CisKK3Zv
aWQgQ0NUaHJlYWQ6OnBvc3RUYXNrT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNrPiB0YXNr
KQoreworICAgIG1fbWVzc2FnZVF1ZXVlLmFwcGVuZCh0YXNrKTsKK30KKworc3RhdGljIHZvaWQg
cnVuVGFza09uTWFpblRocmVhZCh2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICAvLyBJZiB0aGUgdGhy
ZWFkIGlzIGRlYWQsIHRoZW4gdGhpcyB0YXNrIGlzIHN0YWxlLCBlLmcuIHBvc3RlZAorICAgIC8v
IGR1cmluZyBvciBzbGlnaHRseSBiZWZvcmUgY29tcG9zaXRvciBzaHV0ZG93bi4KKyAgICBpZiAo
IWNjVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSdW4gdGhlIHRhc2suCisgICAg
Q0NUYXNrKiB0YXNrID0gc3RhdGljX2Nhc3Q8Q0NUYXNrKj4odXNlcmRhdGEpOworICAgIHRhc2st
PnJ1bigpOworICAgIGRlbGV0ZSB0YXNrOworfQorCit2b2lkIENDVGhyZWFkOjpwb3N0VGFza09u
TWFpblRocmVhZChQYXNzT3duUHRyPENDVGFzaz4gdGFzaykKK3sKKyAgICBjYWxsT25NYWluVGhy
ZWFkKHJ1blRhc2tPbk1haW5UaHJlYWQsIHRhc2subGVha1B0cigpKTsKK30KKwordm9pZCogQ0NU
aHJlYWQ6OnJ1bih2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBDQ1RocmVhZCogdGhyZWFkID0gc3Rh
dGljX2Nhc3Q8Q0NUaHJlYWQqPih1c2VyZGF0YSk7CisgICAgQ0NfTE9HMCgidGhyZWFkIHJ1bm5p
bmciKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBPd25QdHI8Q0NUYXNrPiB0YXNrKHRo
cmVhZC0+bV9tZXNzYWdlUXVldWUud2FpdEZvck1lc3NhZ2UoKSk7CisgICAgICAgIGlmICghdGFz
ay5nZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0YXNrLT5ydW4oKTsKKyAgICB9
CisgICAgQ0NfTE9HMCgidGhyZWFkIGV4aXRpbmciKTsKKyAgICByZXR1cm4gMDsKK30KKworCisK
K30KKyNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMzE0Y2RiOTRlNTM1YzdmMjQwYmJiZjhlZGY2OTUzZWI5YmVjZmNiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhy
ZWFkX2gKKyNkZWZpbmUgQ0NUaHJlYWRfaAorCisjaW5jbHVkZSAiY2MvQ0NUYXNrLmgiCisKKyNp
bmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIENDX0xPR19FTkFCTEUgMQorCisjaWYg
Q0NfTE9HX0VOQUJMRSAvLyBsb2dnaW5nIG9mIGNvbXBvc2l0b3IgdGhyZWFkaW5nIHN0YXRlcwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIENDX0xPRzAoZm10KSBwcmludGYoIm9uIHRpZD0l
cyIgZm10ICJcbiIsIGlzTWFpblRocmVhZCgpID8gIk1haW46ICIgOiAiSW1wbDogICAiKQorI2Rl
ZmluZSBDQ19MT0cxKGZtdCwgYXJnMSkgcHJpbnRmKCJPbiB0aWQ9JXMiIGZtdCAiXG4iLCBpc01h
aW5UaHJlYWQoKSA/ICJNYWluOiAiIDogIkltcGw6ICAgIiwgYXJnMSkKKyNkZWZpbmUgQ0NfTE9H
MihmbXQsIGFyZzEsIGFyZzIpIHByaW50ZigiQXQgdGlkPSVzIiBmbXQgIlxuIiwgaXNNYWluVGhy
ZWFkKCkgPyAiTWFpbjogIiA6ICJJbXBsOiAgICIsIGFyZzEsIGFyZzIpCisjZWxzZQorI2RlZmlu
ZSBDQ19MT0cwKGZtdCkKKyNkZWZpbmUgQ0NfTE9HMShmbXQsIGFyZzEpCisjZGVmaW5lIENDX0xP
RzIoZm10LCBhcmcxLCBhcmcyKQorI2VuZGlmCisKKy8vIFRoZSBDQ1RocmVhZCBzaW5nbGV0b24g
b3ducyB0aGUgY29tcG9zaXRvciB0aHJlYWQgYW5kIHByb3ZpZGVzCisvLyBiYXNpYyBpbmZyYXN0
cnVjdHVyZSBmb3IgbWVzc2FnaW5nIGJldHdlZW4gdGhlIHR3byB0aHJlYWRzLiBUaGUKKy8vIHRo
cmVhZCBpcyBhbGl2ZSBhcyBsb25nIGFzIHNvbWVvbmUgaG9sZHMgb24gdG8gYSByZWZlcmVuY2Ug
dG8gdGhlCisvLyBzaW5nbGV0b24uCitjbGFzcyBDQ1RocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVk
PENDVGhyZWFkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+IGdl
dEluc3RhbmNlKCk7CisgICAgdmlydHVhbCB+Q0NUaHJlYWQoKTsKKworICAgIHN0YXRpYyBib29s
IGlzQ29tcG9zaXRvclRocmVhZCgpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aHJl
YWQgc2FmZSBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLgorICAgIHZvaWQgcG9zdFRh
c2tPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ1Rhc2s+KTsKKyAgICB2b2lkIHBvc3RUYXNrT25N
YWluVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNrPik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZElkOyB9CisKK3Byb3RlY3RlZDoK
KyAgICAvLyBNZXNzYWdlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbgorICAgIENDVGhyZWFkKCk7Cisg
ICAgc3RhdGljIHZvaWQqIHJ1bih2b2lkKik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJZDsKKyAgICBNZXNzYWdlUXVldWU8Q0NUYXNrPiBtX21lc3NhZ2VRdWV1ZTsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzg3M2M5ZGVjNTY0Y2Zm
ZTE1OTA4ODM3YjZmNjRlMDk5ZmQyM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcApAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1Zp
ZXcuaCIKKworI2luY2x1ZGUgIkNDVmlld0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDQ1ZpZXc6OkNDVmlldygpCisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV9jb21taXRQZW5k
aW5nKGZhbHNlKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAsIG1fdmlld01h
bmFnZXIoQ0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKSkKKyNlbmRpZgoreworI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3ZpZXdNYW5hZ2VyLT5hZGRWaWV3KHRoaXMpOwor
I2VuZGlmCit9CisKK0NDVmlldzo6fkNDVmlldygpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQorICAgIG1fdmlld01hbmFnZXItPnJlbW92ZVZpZXcodGhpcyk7CisjZW5kaWYKK30K
Kwordm9pZCBDQ1ZpZXc6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQor
eworICAgIC8vIFJlcXVlc3QgdGhlIGNsaWVudCB0byBkbyBwcm9jZXNzaW5nIG9mIHRoZSBmcmFt
ZS4KKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0
KGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBDQ1ZpZXc6OnVwZGF0ZUxheWVycygpCit7Cisg
ICAgLy8gQWxsIHdvcmsgaXMgZG9uZSBpbiB0aGUgc3ViY2xhc3MuCit9CisKK3ZvaWQgQ0NWaWV3
OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEND
X0xPRzEoInJlcXVlc3RGcmFtZUFuZENvbW1pdCAlcCIsIHRoaXMpOworICAgIGFuaW1hdGVBbmRM
YXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAg
IHVwZGF0ZUxheWVycygpOworCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1ZpZXdJbXBsOjpw
ZXJmb3JtQ29tbWl0IHVzaW5nIGEgY29uZGl0aW9uIHZhcmlhYmxlLgorICAgIE11dGV4IG11dGV4
OworICAgIFRocmVhZENvbmRpdGlvbiBjb25kaXRpb247CisgICAgTXV0ZXhMb2NrZXIgbG9jayht
dXRleCk7CisgICAgY2FsbEFzeW5jT25JbXBsKCZDQ1ZpZXdJbXBsOjpwZXJmb3JtQ29tbWl0LCB0
aGlzLCAmY29uZGl0aW9uKTsKKyAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisgICAgQ0NfTE9H
MSgicmVxdWVzdEZyYW1lQW5kQ29tbWl0IGRvbmUgJXAiLCB0aGlzKTsKK30KKwordm9pZCBDQ1Zp
ZXc6OmNvbW1pdChDQ1ZpZXdJbXBsKiBpbXBsKQoreworICAgIENDX0xPRzEoImNvbW1pdCAlcCIs
IHRoaXMpOworfQorCit2b2lkIENDVmlldzo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQorewor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgIHJl
dHVybjsKKyAgICBjYWxsQXN5bmNPbkltcGwoJkNDVmlld0ltcGw6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworfQorCit2b2lkIENDVmlldzo6
c2V0TmVlZHNSZWRyYXcoKQoreworICAgIGNhbGxBc3luY09uSW1wbCgmQ0NWaWV3SW1wbDo6c2V0
TmVlZHNSZWRyYXcpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZmQxZWNhNGE4MTI4
NjgzZGRiMWYyOTkyNTI2NDI4NTYyMGQxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaApAQCAtMCwwICsxLDg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVmlld19oCisjZGVmaW5lIENDVmlld19oCisK
KyNpbmNsdWRlICJjYy9DQ1ZpZXdNYW5hZ2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3TWFuYWdl
ckltcGwuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NWaWV3SW1wbDsKKworY2xhc3MgQ0NWaWV3Q2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRp
bWUpID0gMDsKK307CisKK2NsYXNzIENDVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPENDVmlldz4g
eworcHVibGljOgorICAgIGV4cGxpY2l0IENDVmlldygpOworICAgIHZpcnR1YWwgfkNDVmlldygp
OworCisgICAgdm9pZCBzZXRDbGllbnQoQ0NWaWV3Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQg
PSBjbGllbnQ7IH0KKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9p
ZCBzZXROZWVkc1JlZHJhdygpOworCisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgcHVibGljIGJ1dCBpbnRlcm5hbC1mYWNpbmcKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFu
ZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXllcnMoKTsKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdp
blRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1wbCopOworCitwcml2YXRl
OgorICAgIC8vIEZ1bmN0aW9ucyB0byBjYWxsIGEgbWV0aG9kIG9uIENDVmlld0ltcGwqCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE0+CisgICAgdm9pZCBjYWxsQXN5bmNPbkltcGwoY29uc3QgTSYg
bWV0aG9kKQorICAgIHsKKyAgICAgICAgbV92aWV3TWFuYWdlci0+Y2FsbEFzeW5jT25JbXBsKCZD
Q1ZpZXdNYW5hZ2VySW1wbDo6ZGlzcGF0Y2hUb1ZpZXdJbXBsPE0+LCB0aGlzLCBtZXRob2QpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwPgorICAgIHZv
aWQgY2FsbEFzeW5jT25JbXBsKGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCkKKyAg
ICB7CisgICAgICAgIG1fdmlld01hbmFnZXItPmNhbGxBc3luY09uSW1wbCgmQ0NWaWV3TWFuYWdl
ckltcGw6OmRpc3BhdGNoVG9WaWV3SW1wbDxNLCBBUkcwPiwgdGhpcywgbWV0aG9kLCBhcmcwKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlwZW5h
bWUgQVJHMT4KKyAgICB2b2lkIGNhbGxBc3luY09uSW1wbChjb25zdCBNJiBtZXRob2QsIGNvbnN0
IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEpCisgICAgeworICAgICAgICBtX3ZpZXdNYW5h
Z2VyLT5jYWxsQXN5bmNPbkltcGwoJkNDVmlld01hbmFnZXJJbXBsOjpkaXNwYXRjaFRvVmlld0lt
cGw8TSwgQVJHMCwgQVJHMT4sIHRoaXMsIG1ldGhvZCwgYXJnMCwgYXJnMSk7CisgICAgfQorCisg
ICAgQ0NWaWV3Q2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAg
ICBSZWZQdHI8Q0NWaWV3TWFuYWdlcj4gbV92aWV3TWFuYWdlcjsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlld0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ZlODdiZjBkNTA2NGExNzI1OWJj
MzI4NDBjNzY2MDA0NWE3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDEyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NWaWV3
SW1wbC5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NWaWV3SW1wbDo6Q0NWaWV3
SW1wbChDQ1ZpZXdNYW5hZ2VySW1wbCogdmlld01hbmFnZXJJbXBsKQorICAgIDogbV9zb3VyY2VG
cmFtZU51bWJlcigtMSkKKyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fbGF5ZXJSZW5k
ZXJlcigwKQorICAgICwgbV9yZWRyYXdFbnF1ZXVlZChmYWxzZSkKKyAgICAsIG1fdmlld01hbmFn
ZXJJbXBsKHZpZXdNYW5hZ2VySW1wbCkKK3sKK30KKworQ0NWaWV3SW1wbDo6fkNDVmlld0ltcGwo
KQoreworfQorCit2b2lkIENDVmlld0ltcGw6OmRyYXdMYXllcnMoKQoreworICAgIENDX0xPRzEo
ImRyYXdMYXllcnMgJXAiLCB0aGlzKTsKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV9yZWRyYXdFbnF1ZXVlZCk7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7CisgICAgbV9yZWRyYXdFbnF1ZXVlZCA9IGZhbHNlOworICAgIG1fZnJhbWVOdW1iZXIg
Kz0gMTsKKworICAgIC8vIEZJWE1FOiBtb3ZlIGxheWVyUmVuZGVyZXIgdG8gTGF5ZXJSZW5kZXJl
ckltcGwuCisgICAgLy8gRklYTUU6IGRvIHRoZSBkcmF3bGF5ZXJzIG9uIHRoZSBpbXBsIHRocmVh
ZAorICAgIHsKKyAgICAgICAgTXV0ZXggbXV0ZXg7CisgICAgICAgIFRocmVhZENvbmRpdGlvbiBj
b25kaXRpb247CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobXV0ZXgpOworICAgICAgICBtX3Zp
ZXdNYW5hZ2VySW1wbC0+Y2NUaHJlYWQoKS0+cG9zdFRhc2tPbk1haW5UaHJlYWQoTmV3Q0NSdW5u
YWJsZU1ldGhvZCh0aGlzLCAmQ0NWaWV3SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwgJmNv
bmRpdGlvbikpOworICAgICAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisgICAgfQorICAgIEND
X0xPRzEoImRyYXdMYXllcnMgZG9uZSAlcCIsIHRoaXMpOworfQorCit2b2lkIENDVmlld0ltcGw6
OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoVGhyZWFkQ29uZGl0aW9uKiBjb21wbGV0aW9uQ29uZGl0
aW9uKQoreworICAgIENDX0xPRzEoImRyYXdMYXllcnNPbk1haW5UaHJlYWQgJXAiLCB0aGlzKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xh
eWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworCisgICAgLy8gRklYTUU6
IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29y
IG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIEZBVEFMKCJPTUdCQlEiKTsKKyAgICAgICAgLy8gRklY
TUU6IHJlYWxsb2NhdGVSZW5kZXJlcigpIGlzIG5lY2Vzc2FyeQorICAgIH0KKworICAgIGNvbXBs
ZXRpb25Db25kaXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDVmlld0ltcGw6OnBlcmZvcm1D
b21taXQoQ0NWaWV3KiB2aWV3LCBUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24p
Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgQ0NfTE9HMSgicGVy
Zm9ybUNvbW1pdCAlcCIsIHZpZXcpOworICAgIHZpZXctPmNvbW1pdCh0aGlzKTsKKyAgICBtX2xh
eWVyUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21pdW0qPih2aWV3KTsK
KyAgICBjb21wbGV0aW9uQ29uZGl0aW9uLT5zaWduYWwoKTsKKworICAgIHNldE5lZWRzUmVkcmF3
KCk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQorewor
ICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIENDX0xPRzEoInNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3ICVwIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuIHRoZSByZXF1ZXN0RnJh
bWVBbmRDb21taXQgZnJvbSBoZXJlIHRvIGxhdGVyIGlmIHdlIGFyZSB0aHJvdHRsaW5nIG9yIG90
aGVyd2lzZQorICAgIC8vIHRyeWluZyB0byBjb250cm9sIHBhaW50aW5nIHJhdGUuCisgICAgZG91
YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBjYWxsQXN5bmNPblZpZXco
JkNDVmlldzo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSk7Cit9CisKK3Zv
aWQgQ0NWaWV3SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZh
bGlkVGhyZWFkKCkpOworICAgIGlmIChtX3JlZHJhd0VucXVldWVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBDQ19MT0cxKCJzZXROZWVkc1JlZHJhdyAlcCIsIHRoaXMpOworICAgIG1fcmVkcmF3
RW5xdWV1ZWQgPSB0cnVlOworICAgIG1fdmlld01hbmFnZXJJbXBsLT5jY1RocmVhZCgpLT5wb3N0
VGFza09uSW1wbFRocmVhZChOZXdDQ1J1bm5hYmxlTWV0aG9kKHRoaXMsICZDQ1ZpZXdJbXBsOjpk
cmF3TGF5ZXJzKSk7Cit9CisKKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM0
YjM1MTJkNzI0NTE0NDQ5NDcxMTg5ZDFhMzYyYTIzMzlhYTU0NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwu
aApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVmlld0ltcGxfaAor
I2RlZmluZSBDQ1ZpZXdJbXBsX2gKKworI2luY2x1ZGUgImNjL0NDTm9uVGhyZWFkU2FmZS5oIgor
I2luY2x1ZGUgImNjL0NDVmlld01hbmFnZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NWaWV3TWFuYWdlckltcGw7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07
CisKKy8vIENDVmlld0ltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFz
c29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCitjbGFzcyBDQ1ZpZXdJbXBsIDogQ0NOb25UaHJlYWRT
YWZlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1ZpZXdJbXBsKTsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBDQ1ZpZXdJbXBsKENDVmlld01hbmFnZXJJbXBsKik7CisgICAgdmlydHVhbCB+
Q0NWaWV3SW1wbCgpOworCisgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdm9pZCBwZXJmb3Jt
Q29tbWl0KENDVmlldyosIFRocmVhZENvbmRpdGlvbiogY29tcGxldGlvbkNvbmRpdGlvbik7Cisg
ICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKKyAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBt
X3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJpdmF0ZToKKyAgICAvLyBG
dW5jdGlvbnMgdG8gY2FsbCBhIG1ldGhvZCBvbiB0aGlzIGltcGxzIGFzc29jaWF0ZWQgQ0NWaWV3
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzA+CisgICAgdm9pZCBjYWxs
QXN5bmNPblZpZXcoY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwKQorICAgIHsKKyAg
ICAgICAgbV92aWV3TWFuYWdlckltcGwtPmNhbGxBc3luY09uVmlldyh0aGlzLCBtZXRob2QsIGFy
ZzApOworICAgIH0KKworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChUaHJlYWRDb25k
aXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pOworCisgICAgaW50IG1fc291cmNlRnJhbWVOdW1i
ZXI7CisgICAgaW50IG1fZnJhbWVOdW1iZXI7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGEg
YmFja3BvaW50ZXIgdG8gdGhlIHZpZXcgc3RvcmVkIGR1cmluZyBjb21taXQuIFRoaXMgaXMgc28g
d2UgY2FuIGRyYXcuCisgICAgLy8gVGhpcyB3aWxsIGdvIGF3YXkgaW4gYSBmb2xsb3dvbiBjb21t
aXQgdGhhdCBtb3ZlcyBkcmF3aW5nIHRvIHRoZSBpbXBsLgorICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbV9sYXllclJlbmRlcmVyOworCisgICAgYm9vbCBtX3JlZHJhd0VucXVldWVkOworCisg
ICAgQ0NWaWV3TWFuYWdlckltcGwqIG1fdmlld01hbmFnZXJJbXBsOworfTsKKworfTsKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZXdNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMjU3M2YzYjA1NTY2
M2I3ZDMzMTE5NTcwYTI0NTQwYzM4NDVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VyLmNwcApAQCAt
MCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiY2MvQ0NWaWV3TWFuYWdlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NWaWV3LmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworc3RhdGljIENDVmlld01hbmFnZXIqIGNjVmlld01hbmFnZXIgPSAw
OworCitQYXNzUmVmUHRyPENDVmlld01hbmFnZXI+IENDVmlld01hbmFnZXI6OmdldEluc3RhbmNl
KCkKK3sKKyAgICBpZiAoIWNjVmlld01hbmFnZXIpIHsKKyAgICAgICAgY2NWaWV3TWFuYWdlciA9
IG5ldyBDQ1ZpZXdNYW5hZ2VyKCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihjY1ZpZXdNYW5h
Z2VyKTsKKyAgICB9CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Q0NWaWV3TWFuYWdlcj4oY2NWaWV3
TWFuYWdlcik7Cit9CisKK0NDVmlld01hbmFnZXI6OkNDVmlld01hbmFnZXIoKQorICAgIDogbV9j
Y1RocmVhZChDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKSkKKyAgICAsIG1faW1wbCgwKQoreworICAg
IC8vIEJsb2NraW5nbHkgaW5pdCB0aGUgQ0NWaWV3TWFuYWdlckltcGwKKyAgICBNdXRleCBtdXRl
eDsKKyAgICBUaHJlYWRDb25kaXRpb24gY29uZGl0aW9uOworCisgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtdXRleCk7CisgICAgbV9jY1RocmVhZC0+cG9zdFRhc2tPbkltcGxUaHJlYWQoTmV3Q0NSdW5u
YWJsZU1ldGhvZCh0aGlzLCAmQ0NWaWV3TWFuYWdlcjo6aW5pdEltcGwsICZjb25kaXRpb24pKTsK
KyAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisgICAgQ0NfTE9HMCgiSW5pdCBkb25lIik7Cit9
CisKKworQ0NWaWV3TWFuYWdlcjo6fkNDVmlld01hbmFnZXIoKQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV92aWV3cy5zaXplKCkpOworICAgIC8v
IEJsb2NraW5nbHkga2lsbCB0aGUgQ0NWaWV3TWFuYWdlckltcGwuCisgICAgTXV0ZXggbXV0ZXg7
CisgICAgVGhyZWFkQ29uZGl0aW9uIGNvbmRpdGlvbjsKKworICAgIE11dGV4TG9ja2VyIGxvY2so
bXV0ZXgpOworICAgIG1fY2NUaHJlYWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVubmFi
bGVNZXRob2QodGhpcywgJkNDVmlld01hbmFnZXI6OmRlbGV0ZUltcGwsICZjb25kaXRpb24pKTsK
KyAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisKKyAgICBjY1ZpZXdNYW5hZ2VyID0gMDsKK30K
Kwordm9pZCBDQ1ZpZXdNYW5hZ2VyOjphZGRWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBtX3ZpZXdzLmFkZCh2aWV3KTsKKyAgICBj
YWxsQXN5bmNPbkltcGwoJkNDVmlld01hbmFnZXJJbXBsOjphZGRWaWV3LCB2aWV3KTsKK30KKwor
dm9pZCBDQ1ZpZXdNYW5hZ2VyOjpyZW1vdmVWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV92aWV3cy5jb250YWlucyh2
aWV3KSk7CisgICAgbV92aWV3cy5yZW1vdmUodmlldyk7CisgICAgY2FsbEFzeW5jT25JbXBsKCZD
Q1ZpZXdNYW5hZ2VySW1wbDo6cmVtb3ZlVmlldywgdmlldyk7Cit9CisKK3ZvaWQgQ0NWaWV3TWFu
YWdlcjo6ZGVsZXRlSW1wbChUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pCit7
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2NjVGhyZWFkLT50aHJlYWRJZCgpKTsK
KyAgICBkZWxldGUgbV9pbXBsLmdldCgpOworICAgIG1faW1wbCA9IDA7CisgICAgY29tcGxldGlv
bkNvbmRpdGlvbi0+c2lnbmFsKCk7Cit9CisKK3ZvaWQgQ0NWaWV3TWFuYWdlcjo6aW5pdEltcGwo
VGhyZWFkQ29uZGl0aW9uKiBjb21wbGV0aW9uQ29uZGl0aW9uKQoreworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9jY1RocmVhZC0+dGhyZWFkSWQoKSk7CisgICAgQ0NfTE9HMSgiSW5p
dEltcGwgYmVnaW4gb24gJWkiLCBjdXJyZW50VGhyZWFkKCkpOworICAgIG1faW1wbC5zZXRDdXJy
ZW50VGhyZWFkVmFsaWQoKTsKKyAgICBtX2ltcGwgPSBuZXcgQ0NWaWV3TWFuYWdlckltcGwobV9j
Y1RocmVhZC5nZXQoKSk7CisgICAgY29tcGxldGlvbkNvbmRpdGlvbi0+c2lnbmFsKCk7CisgICAg
Q0NfTE9HMSgiSW5pdEltcGwgZG9uZSAlaSIsIGN1cnJlbnRUaHJlYWQoKSk7Cit9CisKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWV3TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWV3TWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkN2NhN2FlZjBjODYxYWI2ZWJjODAx
ZTY0NWEwNGM4YjkyOGQ5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NWaWV3TWFuYWdlcl9oCisjZGVmaW5lIENDVmll
d01hbmFnZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NOb25UaHJlYWRTYWZlLmgiCisjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NW
aWV3OworY2xhc3MgQ0NWaWV3TWFuYWdlckltcGw7CisKKy8vIE1haW4gdGhyZWFkIGludGVyZmFj
ZSBmb3IgbWFuYWdpbmcgbWVzc2FnaW5nIGJldHdlZW4gQ0NWaWV3IGFuZCBDQ1ZpZXdJbXBscwor
Y2xhc3MgQ0NWaWV3TWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPENDVmlld01hbmFnZXI+LCBD
Q05vblRocmVhZFNhZmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlld01h
bmFnZXI+IGdldEluc3RhbmNlKCk7CisgICAgfkNDVmlld01hbmFnZXIoKTsKKworICAgIHZvaWQg
YWRkVmlldyhDQ1ZpZXcqKTsKKyAgICB2b2lkIHJlbW92ZVZpZXcoQ0NWaWV3Kik7CisgICAgdm9p
ZCBzZXROZWVkc0NvbW1pdChDQ1ZpZXcqKTsKKworICAgIENDVGhyZWFkKiBjY1RocmVhZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2NUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIEZ1bmN0aW9ucyB0byBj
YWxsIGEgbWV0aG9kIG9uIENDVmlld01hbmFnZXJJbXBsKgorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBNPgorICAgIHZvaWQgY2FsbEFzeW5jT25JbXBsKGNvbnN0IE0mIG1ldGhvZCkKKyAgICB7Cisg
ICAgICAgIG1fY2NUaHJlYWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRo
b2QobV9pbXBsLmdldFVuc2FmZSgpLCBtZXRob2QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMD4KKyAgICB2b2lkIGNhbGxBc3luY09uSW1wbChjb25z
dCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzApCisgICAgeworICAgICAgICBtX2NjVGhyZWFk
LT5wb3N0VGFza09uSW1wbFRocmVhZChOZXdDQ1J1bm5hYmxlTWV0aG9kKG1faW1wbC5nZXRVbnNh
ZmUoKSwgbWV0aG9kLCBhcmcwKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0s
IHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzE+CisgICAgdm9pZCBjYWxsQXN5bmNPbkltcGwo
Y29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQorICAg
IHsKKyAgICAgICAgbV9jY1RocmVhZC0+cG9zdFRhc2tPbkltcGxUaHJlYWQoTmV3Q0NSdW5uYWJs
ZU1ldGhvZChtX2ltcGwuZ2V0VW5zYWZlKCksIG1ldGhvZCwgYXJnMCwgYXJnMSkpOworICAgIH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwLCB0eXBlbmFtZSBBUkcx
LCB0eXBlbmFtZSBBUkcyPgorICAgIHZvaWQgY2FsbEFzeW5jT25JbXBsKGNvbnN0IE0mIG1ldGhv
ZCwgY29uc3QgQVJHMCYgYXJnMCwgY29uc3QgQVJHMSYgYXJnMSwgY29uc3QgQVJHMiYgYXJnMikK
KyAgICB7CisgICAgICAgIG1fY2NUaHJlYWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVu
bmFibGVNZXRob2QobV9pbXBsLmdldFVuc2FmZSgpLCBtZXRob2QsIGFyZzAsIGFyZzEsIGFyZzIp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlw
ZW5hbWUgQVJHMSwgdHlwZW5hbWUgQVJHMiwgdHlwZW5hbWUgQVJHMz4KKyAgICB2b2lkIGNhbGxB
c3luY09uSW1wbChjb25zdCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEm
IGFyZzEsIGNvbnN0IEFSRzImIGFyZzIsIGNvbnN0IEFSRzMmIGFyZzMpCisgICAgeworICAgICAg
ICBtX2NjVGhyZWFkLT5wb3N0VGFza09uSW1wbFRocmVhZChOZXdDQ1J1bm5hYmxlTWV0aG9kKG1f
aW1wbC5nZXRVbnNhZmUoKSwgbWV0aG9kLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDVmlld01hbmFnZXIoKTsKKworICAgIHZvaWQg
ZGVsZXRlSW1wbChUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pOworICAgIHZv
aWQgaW5pdEltcGwoVGhyZWFkQ29uZGl0aW9uKiBjb21wbGV0aW9uQ29uZGl0aW9uKTsKKworICAg
IFJlZlB0cjxDQ1RocmVhZD4gbV9jY1RocmVhZDsKKyAgICBDQ05vblRocmVhZFNhZmVNZW1iZXI8
Q0NWaWV3TWFuYWdlckltcGwqPiBtX2ltcGw7IC8vIFRoaXMgcG9pbnRlciBpcyBleHBsaWNpdGx5
IG1hbmFnZWQgaW4gQ0NWaWV3TWFuYWdlciBhbmQgfkNDVmlld01hbmFnZXIgc28gaXQgaW5pdGlh
bGl6ZXMgYW5kIGRpZXMgb24gdGhlIENDVGhyZWFkIHJhdGhlciB0aGFuIG9uIHRoZSBtYWluIHRo
cmVhZC4KKworICAgIGZyaWVuZCBjbGFzcyBDQ1ZpZXc7IC8vIHRlbXBvcmFyeSBoYWNrIGkgZm9y
Z290IHdoeQorCisgICAgSGFzaFNldDxDQ1ZpZXcqPiBtX3ZpZXdzOworfTsKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld01hbmFnZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWEzOGZi
ZDQzMmRjOWY2OWY1NzY2MTAzZTY3YjQwOGVlOGU1NzNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlcklt
cGwuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgImNjL0NDVmlld01hbmFnZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVmll
dy5oIgorI2luY2x1ZGUgImNjL0NDVmlld0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitDQ1ZpZXdNYW5hZ2VySW1wbDo6Q0NWaWV3TWFuYWdl
ckltcGwoQ0NUaHJlYWQqIHRocmVhZCkKKyAgICA6IG1fdGhyZWFkKHRocmVhZCkKK3sKK30KKwor
Q0NWaWV3TWFuYWdlckltcGw6On5DQ1ZpZXdNYW5hZ2VySW1wbCgpCit7CisgICAgQVNTRVJUKGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX3ZpZXdUb0ltcGxNYXAuc2l6ZSgp
KTsKKyAgICBBU1NFUlQoIW1faW1wbFRvVmlld01hcC5zaXplKCkpOworfQorCisKK3ZvaWQgQ0NW
aWV3TWFuYWdlckltcGw6OmFkZFZpZXcoQ0NWaWV3KiB2aWV3KQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworICAgIENDX0xPRzEoImFkZFZpZXcgJXAiLCB2aWV3KTsKKyAg
ICBBU1NFUlQoIW1fdmlld1RvSW1wbE1hcC5jb250YWlucyh2aWV3KSk7CisgICAgQ0NWaWV3SW1w
bCogaW1wbCA9IG5ldyBDQ1ZpZXdJbXBsKHRoaXMpOworICAgIG1fdmlld1RvSW1wbE1hcC5hZGQo
dmlldywgaW1wbCk7CisgICAgbV9pbXBsVG9WaWV3TWFwLmFkZChpbXBsLCB2aWV3KTsKKworfQor
Cit2b2lkIENDVmlld01hbmFnZXJJbXBsOjpyZW1vdmVWaWV3KENDVmlldyogdmlldykKK3sKKyAg
ICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBDQ19MT0cxKCJyZW1vdmVWaWV3
ICVwIiwgdmlldyk7CisgICAgQVNTRVJUKG1fdmlld1RvSW1wbE1hcC5jb250YWlucyh2aWV3KSk7
CisgICAgQ0NWaWV3SW1wbCogaW1wbCA9IG1fdmlld1RvSW1wbE1hcC5nZXQodmlldyk7CisgICAg
bV92aWV3VG9JbXBsTWFwLnJlbW92ZSh2aWV3KTsKKyAgICBtX2ltcGxUb1ZpZXdNYXAucmVtb3Zl
KGltcGwpOworICAgIGRlbGV0ZSBpbXBsOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdl
ckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNzI0MmJhZTliNjBhMDM3NzI4MjRhMTYwZGU2MTNlOGQwMWYz
ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlckltcGwuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ1ZpZXdNYW5hZ2VySW1wbF9oCisjZGVmaW5lIENDVmlld01hbmFn
ZXJJbXBsX2gKKworI2luY2x1ZGUgImNjL0NDTm9uVGhyZWFkU2FmZS5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7CitjbGFz
cyBDQ1ZpZXc7CitjbGFzcyBDQ1ZpZXdJbXBsOworY2xhc3MgQ0NWaWV3TWFuYWdlclByb3h5Owor
CisvLyBDb21wb3NpdG9yLXRocmVhZC1vbmx5IGNsYXNzOyBtYW5hZ2VzIGFsbCBhY3RpdmUgQ0NW
aWV3SW1wbHMKK2NsYXNzIENDVmlld01hbmFnZXJJbXBsIDogQ0NOb25UaHJlYWRTYWZlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1ZpZXdNYW5hZ2VySW1wbCk7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ0NWaWV3TWFuYWdlckltcGwoQ0NUaHJlYWQqKTsKKyAgICB2aXJ0dWFsIH5DQ1Zp
ZXdNYW5hZ2VySW1wbCgpOworCisgICAgdm9pZCBhZGRWaWV3KENDVmlldyopOworCisgICAgLy8g
RnVuY3Rpb25zIHRvIGNhbGwgYSBtZXRob2Qgb24gYSBDQ1ZpZXcqIGdpdmVuIGEgQ0NWaWV3SW1w
bCoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTT4KKyAgICB2b2lkIGNhbGxBc3luY09uVmlldyhD
Q1ZpZXdJbXBsKiBpbXBsLCBjb25zdCBNJiBtKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGxl
ZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChtX2ltcGxUb1ZpZXdNYXAuY29udGFp
bnMoaW1wbCkpOworICAgICAgICBtX3RocmVhZC0+cG9zdFRhc2tPbk1haW5UaHJlYWQoTmV3Q0NS
dW5uYWJsZU1ldGhvZChtX2ltcGxUb1ZpZXdNYXAuZ2V0KGltcGwpLCBtKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzA+CisgICAgdm9pZCBjYWxsQXN5
bmNPblZpZXcoQ0NWaWV3SW1wbCogaW1wbCwgY29uc3QgTSYgbSwgY29uc3QgQVJHMCYgYXJnMCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgICAgICBB
U1NFUlQobV9pbXBsVG9WaWV3TWFwLmNvbnRhaW5zKGltcGwpKTsKKyAgICAgICAgbV90aHJlYWQt
PnBvc3RUYXNrT25NYWluVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QobV9pbXBsVG9WaWV3TWFw
LmdldChpbXBsKSwgbSwgYXJnMCkpOworICAgIH0KKworICAgIENDVGhyZWFkKiBjY1RocmVhZCgp
IHsgcmV0dXJuIG1fdGhyZWFkOyB9CisKKyAgICAvLyBGdW5jdGlvbnMgdG8gY2FsbCBhIG1ldGhv
ZCBvbiBDQ1ZpZXdJbXBsKiBnaXZlbiBhIENDVmlldyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TT4KKyAgICB2b2lkIGRpc3BhdGNoVG9WaWV3SW1wbChDQ1ZpZXcqIHZpZXcsIGNvbnN0IE0mIG0p
CisgICAgeworICAgICAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICAgICAg
QVNTRVJUKG1fdmlld1RvSW1wbE1hcC5jb250YWlucyh2aWV3KSk7CisgICAgICAgIChtX3ZpZXdU
b0ltcGxNYXAuZ2V0KHZpZXcpLT4qbSkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTSwgdHlwZW5hbWUgQVJHMD4KKyAgICB2b2lkIGRpc3BhdGNoVG9WaWV3SW1wbChDQ1ZpZXcq
IHZpZXcsIGNvbnN0IE0mIG0sIGNvbnN0IEFSRzAmIGFyZzApCisgICAgeworICAgICAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fdmlld1RvSW1wbE1h
cC5jb250YWlucyh2aWV3KSk7CisgICAgICAgIChtX3ZpZXdUb0ltcGxNYXAuZ2V0KHZpZXcpLT4q
bSkoYXJnMCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFS
RzAsIHR5cGVuYW1lIEFSRzE+CisgICAgdm9pZCBkaXNwYXRjaFRvVmlld0ltcGwoQ0NWaWV3KiB2
aWV3LCBjb25zdCBNJiBtLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VS
VChtX3ZpZXdUb0ltcGxNYXAuY29udGFpbnModmlldykpOworICAgICAgICAobV92aWV3VG9JbXBs
TWFwLmdldCh2aWV3KS0+Km0pKGFyZzAsIGFyZzEpOworICAgIH0KKworICAgIHZvaWQgcmVtb3Zl
VmlldyhDQ1ZpZXcqKTsKKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZCogbV90aHJlYWQ7CisgICAg
SGFzaE1hcDxDQ1ZpZXcqLCBDQ1ZpZXdJbXBsKj4gbV92aWV3VG9JbXBsTWFwOworICAgIEhhc2hN
YXA8Q0NWaWV3SW1wbCosIENDVmlldyo+IG1faW1wbFRvVmlld01hcDsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDhiZWNkYmE4NDVjY2U4MGU0Zjk0YjU1
OTkxM2I2MGVkNWNjOThmOTcuLjdjYjI0MDVhYTg4MTY5N2ZiM2MxNjM3NTI1MGEzNDQxOWEyYjc1
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMt
MTAgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQg
aW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU2MTMxCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYldpZGdldDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpiZWdp
bkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJl
bmRlcmVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wMy0yOSAgSm9o
biBBYmQtRWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmlu
ZGV4IDM2ZmJmMzEzYWQxNzQ2NGM0MWQ4ZDkyN2NiMjEzMmFkYWI2YWU4ODEuLjI4NGZmYzE1NTk5
MDFiMjM4MzEzNmViOTQxZDZmNjZmMTk0OGZjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldC5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhl
IHBhaW50IG1ldGhvZCBhYm92ZS4KICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKSA9IDA7CiAKKyAgICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0
ZXMgdGhhdCB0aGUgd2lkZ2V0IHNob3VsZCByZWRyYXcKKyAgICAvLyBpdHNlbGYsIGZvciBleGFt
cGxlIGR1ZSB0byB3aW5kb3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBh
c3luY2hyb25vdXNseS4KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSAgeyB9
CisKICAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4g
dGhlbWUuCiAgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9m
IHdpZGdldHMgbmVlZCB0byByZS1yZW5kZXIKICAgICAvLyBvbiByZWNlaXZpbmcgdGhpcyBtZXNz
YWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNGVm
YTg4MDU0Nzk2YTQyMTI2OGI5YWMzMzc1NTI1OTk1Zjc1MDY0MC4uNTQ2NzNmM2M3OGU4MzA2NGQ2
OTY2ZTQwYmYxMjAxNWZmNzNmZTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcApAQCAtOTk3LDEyICs5OTcsMTcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVz
aXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUo
KQogeworICAgIGRvQW5pbWF0ZShjdXJyZW50VGltZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1w
bDo6ZG9BbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKICNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFt
ZUltcGwoKTsKICAgICBpZiAod2ViZnJhbWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
d2ViZnJhbWUtPmZyYW1lVmlldygpOwogICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHZp
ZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFt
cChjdXJyZW50VGltZSgpKSk7CisgICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmlt
YXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKICAg
ICB9CiAjZW5kaWYKIH0KQEAgLTEwNzIsNiArMTA3Nyw5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBh
aW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewogICAgIGlmIChp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgIHJldHVy
bjsKKyNlbmRpZgogICAgICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2Fu
dmFzIHdhcyBwYXNzZWQgaW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTEx
MDAsOSArMTEwOCwxOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZp
ZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAorCit2b2lkIFdlYlZpZXdJbXBs
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBkb0FuaW1h
dGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxheW91dCgpOworfQorCiB2b2lkIFdlYlZpZXdJbXBs
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICByZXR1cm47IC8vIEZJWE1F
OiB3aGVuIHRoZSBSZW5kZXJXaWRnZXQgaXMgdXBkYXRlZCwgc3dpdGNoIHRvIEFTU0VSVF9OT1Rf
UkVBQ0hFRC4KKyNlbHNlCiAgICAgVFJBQ0VfRVZFTlQoIldlYlZpZXdJbXBsOjpjb21wb3NpdGUi
LCB0aGlzLCAwKTsKICAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CiAgICAg
ICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIg
b3Igbm90IGl0IHN1Y2NlZWRlZApAQCAtMTEzMiw2ICsxMTUwLDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKICAgICB9CiAjZW5kaWYKKyNlbmRpZgogfQogCiBjb25zdCBXZWJJbnB1dEV2ZW50KiBX
ZWJWaWV3SW1wbDo6bV9jdXJyZW50SW5wdXRFdmVudCA9IDA7CkBAIC0yMzE1LDkgKzIzMzQsMjQg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZv
cm1MYXllciogbGF5ZXIpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1h
Z2VkUmVjdCk7CiB9CiAKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sK
KyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci5n
ZXQoKSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworI2Vsc2UK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQogeworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLmdldCgpKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisjZWxzZQogICAgIG1fY2xpZW50LT5z
Y2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiB9CiAKIApAQCAtMjQyNiw2ICsyNDYwLDkgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wg
YWN0aXZlKQogICAgICAgICB9CiAKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVu
dFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludGVyOjpjcmVh
dGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgdXBkYXRl
TGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZyh0cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlID0gdHJ1ZTsKQEAgLTI0NTIsMTMgKzI0ODksOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0Nv
bXBvc2l0ZSgpCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5
ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRv
VGV4dHVyZUVuYWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVy
UmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihz
ZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxh
eWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7Ci0KLSAgICBtX2xh
eWVyUmVuZGVyZXItPnVwZGF0ZUFuZERyYXdMYXllcnMoKTsKKyAgICB1cGRhdGVMYXllclJlbmRl
cmVyU2V0dGluZ3MoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworICAg
IG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpy
ZWFsbG9jYXRlUmVuZGVyZXIoKQpAQCAtMjQ2Nyw2ICsyNTAwLDkgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKICAgICAgICAgICAgIGdldENvbXBvc2l0b3JDb250ZXh0
QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUg
bWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2FzZSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSB3aWxsIGFsc28gcmV0dXJuIDAuCiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG5l
d0NvbnRleHQsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgV2ViVmll
d0ltcGxTY3JvbGxiYXJQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKKyAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgog
CiAgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQg
cmVhdHRhY2hlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAg
ICBpZiAobGF5ZXJSZW5kZXJlcikgewpAQCAtMjQ4Nyw5ICsyNTIzLDIzIEBAIHZvaWQgV2ViVmll
d0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCiB9CiAjZW5kaWYKIAordm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDbGllbnQo
dGhpcyk7CisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGlu
Z3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKKworICAgIENDSGVhZHNVcERpc3Bs
YXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNl
dFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+
c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSgpKTsKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0
KCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDY2YjI5MDgx
YmM0MDc2ZmU3MjUwYjFlYzZiZGU2MzNmYzU2NzdkMjIuLjY1OTQ3YTQ5NDEyYTk1ZWQ1MTYxNzRl
YWIxMmI1NDliOTAwYzYxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBX
ZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1w
bCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xh
c3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDVmlld0Ns
aWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBX
ZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKQEAgLTk3LDYgKzk3
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBX
ZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwg
dm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNv
bXBvc2l0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklu
cHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0yMDAsNiArMjAxLDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3Rp
dmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4
dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKIAorICAgIC8vIENDVmlld0NsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisK
ICAgICAvLyBXZWJWaWV3SW1wbAogCiAgICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29s
IG5ld1ZhbHVlKTsKQEAgLTM0Myw2ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2b2lkIGRvVXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAjZW5kaWYKIAog
ICAgIC8vIFJldHVybnMgdGhlIG9uc2NyZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0aGUgY29tcG9z
aXRvci4gVGhpcyBpcwpAQCAtNDA2LDExICs0MTEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVl
blBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
cmFnQWN0aW9uKTsKIAorICAgIHZvaWQgZG9BbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwog
ICAgIHZvaWQgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwogICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CisgICAgdm9pZCB1
cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVy
ZXJWaWV3cG9ydCgpOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87686</attachid>
            <date>2011-03-31 02:50:29 -0700</date>
            <delta_ts>2011-04-07 14:53:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110331025028.patch</filename>
            <type>text/plain</type>
            <size>64362</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI1MDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDRmNTQwMDZjZWMxZWUz
MGEzYjA5OTE0OGY0YTk0NTYzNTcyNGM2Li41NGRkM2I5ZTUyOTZmOGJkNDc1NTMwODk3N2M0OWFk
N2FmODY1MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDMtMTAgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpjdXJyZW50RnJhbWVOdW1iZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWQ6OkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6cnVuTWVzc2FnZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
cnVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkTWVzc2FnZTo6Q0NUaHJlYWRNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkTWVzc2FnZTo6YmVmb3JlUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZE1lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZXc6OkNDVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXc6
On5DQ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3OjpiZWdpbkZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlldzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6
c2V0TmVlZHNDb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVmlldzo6c2V0Q2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsOjpDQ1ZpZXdJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlld0ltcGw6On5DQ1ZpZXdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlld0ltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlld0ltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJ
bXBsOjpzZXRTb3VyY2VGcmFtZU51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWV3TWFuYWdlcjo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdFZpZXdN
YW5hZ2VyTWVzc2FnZTo6SW5pdFZpZXdNYW5hZ2VyTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbml0Vmlld01hbmFnZXJNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3
TWFuYWdlcjo6Q0NWaWV3TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5hZ2Vy
Ojp+Q0NWaWV3TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdJbXBsTWVzc2FnZTo6
Q0NWaWV3SW1wbE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3SW1wbE1lc3NhZ2U6
OmJlZm9yZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNZXNzYWdlOjpDQ1ZpZXdNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld01lc3NhZ2U6OnNob3VsZFJ1bik6CisgICAg
ICAgIChXZWJDb3JlOjpBZGRWaWV3TWVzc2FnZTo6QWRkVmlld01lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWRkVmlld01lc3NhZ2U6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdN
YW5hZ2VyOjphZGRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZVZpZXdNZXNzYWdlOjpS
ZW1vdmVWaWV3TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVWaWV3TWVzc2FnZTo6
cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlld01hbmFnZXI6OnJlbW92ZVZpZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjpCZWdpbkNvbW1pdE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2Vi
Q29yZTo6QmVnaW5Db21taXRNZXNzYWdlOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpCZWdpbkNvbW1pdE1lc3NhZ2U6OnNpZ25hbENvbXBsZXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QmVnaW5GcmFtZU1lc3NhZ2U6OkJlZ2luRnJhbWVNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJlZ2luRnJhbWVNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6TmVl
ZHNDb21taXRNZXNzYWdlOjpOZWVkc0NvbW1pdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
TmVlZHNDb21taXRNZXNzYWdlOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWV3TWFuYWdl
cjo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlld01hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZXdNYW5h
Z2VyOjpDb21wb3NpdG9yVGhyZWFkU3RhdGU6OkNvbXBvc2l0b3JUaHJlYWRTdGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvTm9uVGhyZWFkU2FmZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vblRocmVhZFNhZmU6Ok5vblRocmVhZFNhZmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9uVGhyZWFkU2FmZTo6Y2FsbGVkT25WYWxpZFRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb25UaHJlYWRTYWZlOjpjaGFuZ2VWYWxpZFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpOb25UaHJlYWRTYWZlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9uVGhy
ZWFkU2FmZTo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vblRocmVhZFNhZmU6Om9w
ZXJhdG9yLT4pOgorCiAyMDExLTAzLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRoZSBFRkwgYnVpbGQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMjkwYjkzYTUzZDNjMjVmNzViOTg4NjYxOWQwYTQ2NTA4ZTgxZGY0Mi4uMTNiNGE4
MTk3NGZkOGQ1ZjBhYWU5MzcwMzZlNDU1NGE2ZTFkYmIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NDAxOSw4ICs0MDE5LDE4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlldy5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBs
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3
SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZXdNYW5hZ2VyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3TWFuYWdlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZXdNYW5hZ2VySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFnZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmMxNWFiZDU0ZmFjNjUxODMxODg4ZWNkZjgzM2QzOTI5ZjQy
MTI3Yi4uNTk0OGZmZjc0MmVhOGUyZDg3ZmYxMDMxM2JiZTNjNTNjMmE0N2E3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3SW1wbC5oIgogI2lmIFVT
RShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKQEAgLTI1MiwxMCArMjUzLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWMKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
TGF5ZXJzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogewot
ICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotCisgICAgQ0NWaWV3Ojp1cGRhdGVM
YXllcnMoKTsKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI2
OCwxMCArMjY4LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
TGF5ZXJzKCkKIAogICAgIHVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMoKTsKIAotICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgdXBkYXRlTGF5ZXJz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxDQ0xheWVySW1wbCo+KCkpOworICAgIHVwZGF0
ZUxheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCit7CisgICAgQVNTRVJUKG1f
aGFyZHdhcmVDb21wb3NpdGluZyAmJiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdC5n
ZXQoKSk7CiAKLSAgICBkcmF3TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGRy
YXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgpKTsKIAogICAg
IGlmIChpc0NvbXBvc2l0aW5nT2Zmc2NyZWVuKCkpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CkBAIC0xMDM2LDYgKzEwNDEsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwg
TGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5nZXRT
dWJsYXllcnMoKVtpXS5nZXQoKSk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
b21taXQoQ0NWaWV3SW1wbCogaW1wbCkKK3sKKyAgICBDQ1ZpZXc6OmNvbW1pdChpbXBsKTsKKyAg
ICBpbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihtX2hlYWRzVXBEaXNwbGF5LT5jdXJyZW50RnJh
bWVOdW1iZXIoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCA2NjdlZGUyMzkyNDFkYWI5OTE3NDQ1YmI4MmU4MWVjMzJhOWE0YmM3Li5iYzhm
MTFkNTNiZmNkNWQyMzdlNGU3YTJkODg5Yzc2NTY3MDg2ZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtNDQsMTIgKzQ0LDEzIEBACiAjaW5jbHVkZSAiY2MvQ0NDYW52
YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZXcuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lm
IFBMQVRGT1JNKENHKQpAQCAtNjAsMTIgKzYxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NWaWV3SW1wbDsKIGNsYXNzIEdlb21ldHJ5Qmlu
ZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsK
IAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5
ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW0gOiBwdWJsaWMgQ0NWaWV3IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwg
UGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCwgUGFzc093blB0cjxU
aWxlUGFpbnRJbnRlcmZhY2U+IHNjcm9sbGJhclBhaW50KTsKIApAQCAtNzgsNyArODAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bik7CiAKICAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0
aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlQW5kRHJhd0xheWVycygpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAogICAgIC8v
IHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTE0
MSw2ICsxNDQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3Vyc2l2ZShM
YXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJz
aXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1w
bCopOworCiAgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCos
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCkBAIC0xODEsNiArMTg2LDggQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCisgICAgT3duUHRyPFZlY3RvcjxD
Q0xheWVySW1wbCo+ID4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKICAgICB1
bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXgg
ZDU2ZjhhYjg4NjcxOTQ1ZWFkY2U1Y2IzNDk0NWJlMjExYWIzOTY5NC4uMzZmYzFiN2ZhMDhiZTEz
OWNiNTc3OWRiOGMyMGE5YTYxZTk1MDZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
aApAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB+Q0NIZWFkc1VwRGlzcGxheSgpOwog
CisgICAgaW50IGN1cnJlbnRGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZy
YW1lTnVtYmVyOyB9CisKICAgICB2b2lkIG9uUHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRTaG93
RlBTQ291bnRlcihib29sIGVuYWJsZSkgeyBtX3Nob3dGUFNDb3VudGVyID0gZW5hYmxlOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q05vblRocmVhZFNhZmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTm9uVGhyZWFkU2FmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmNGY1NmEzOWMwYTFiZDc2YzZi
YmVjNTI4YjAyMWQ2YmFiMWU1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ05vblRocmVhZFNhZmUuaApAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTm9uVGhyZWFkU2FmZV9oCisjZGVmaW5l
IENDTm9uVGhyZWFkU2FmZV9oCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NOb25UaHJlYWRTYWZlIHsKK3B1YmxpYzoKKyAgICBD
Q05vblRocmVhZFNhZmUoKSA6IG1fdmFsaWRUaHJlYWQoY3VycmVudFRocmVhZCgpKSB7IH0KKyAg
ICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGhyZWFk
KCkgPT0gbV92YWxpZFRocmVhZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRocmVhZFZhbGlkKCkg
eyBtX3ZhbGlkVGhyZWFkID0gY3VycmVudFRocmVhZCgpOyB9CisKK3ByaXZhdGU6CisgICAgV1RG
OjpUaHJlYWRJZGVudGlmaWVyIG1fdmFsaWRUaHJlYWQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK2NsYXNzIENDTm9uVGhyZWFkU2FmZU1lbWJlciB7CitwdWJsaWM6CisgICAgQ0NOb25UaHJl
YWRTYWZlTWVtYmVyKCkgOiBtX3ZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkgeyB9CisgICAg
Q0NOb25UaHJlYWRTYWZlTWVtYmVyKGNvbnN0IFQmIHZhbHVlKSA6IG1fdmFsaWRUaHJlYWQoY3Vy
cmVudFRocmVhZCgpKSwgbV92YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBib29sIGNhbGxlZE9uVmFs
aWRUaHJlYWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gbV92YWxpZFRocmVh
ZDsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRocmVhZFZhbGlkKCkgeyBtX3ZhbGlkVGhyZWFkID0g
Y3VycmVudFRocmVhZCgpOyB9CisKKyAgICBUJiBnZXQoKSB7IEFTU0VSVChjYWxsZWRPblZhbGlk
VGhyZWFkKCkpOyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGNvbnN0IFQmIGdldCgpIGNvbnN0IHsg
QVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBU
JiBnZXRVbnNhZmUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgY29uc3QgVCYgZ2V0VW5zYWZl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1
cm4gZ2V0KCk7IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBnZXQo
KTsgfQorCisgICAgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuICZnZXQoKTsgfQorICAgIGNvbnN0
IFQqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZnZXQoKTsgfQorCisgICAgVCYgb3BlcmF0
b3I9KGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CisgICAgfQorCisgcHJpdmF0ZToKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV92YWxp
ZFRocmVhZDsKKyAgICBUIG1fdmFsdWU7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUYXNrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rhc2suaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYzE4NmQyMjhlNzBkY2JmZjljNjAyMmRhYWNiYzgyODgwNjk4NTJlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUYXNrLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUYXNr
X2gKKyNkZWZpbmUgQ0NUYXNrX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBmaWxlIHByb3ZpZGVzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIENocm9tZSdzIHRhc2tzIGFuZCBSdW5uYWJsZSBtZXRob2RzIHN5c3RlbS4KK2Ns
YXNzIENDVGFzayB7CitwdWJsaWM6CisgICAgQ0NUYXNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJ1bigpID0gMDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNPgorY2xh
c3MgQ0NSdW5uYWJsZU1ldGhvZDAgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1YmxpYzoKKyAgICBDQ1J1
bm5hYmxlTWV0aG9kMChDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCkKKyAgICAgICAgOiBtX29i
amVjdChvYmplY3QpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0
aG9kKSgpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0
aG9kOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFS
RzA+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kMSA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgor
ICAgIENDUnVubmFibGVNZXRob2QxKEMqIG9iamVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBB
UkcwJiBhcmcwKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhv
ZChtZXRob2QpCisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgeworICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0aG9kKShtX2Fy
ZzApOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0aG9k
OworICAgIEFSRzAgbV9hcmcwOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1l
IE0sIHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzE+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9k
MiA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVNZXRob2QyKEMqIG9i
amVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcx
KQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2Qp
CisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAgewor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+
Km1fbWV0aG9kKShtX2FyZzAsIG1fYXJnMSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEMqIG1f
b2JqZWN0OworICAgIE0gbV9tZXRob2Q7CisgICAgQVJHMCBtX2FyZzA7CisgICAgQVJHMSBtX2Fy
ZzE7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJH
MCwgdHlwZW5hbWUgQVJHMSwgdHlwZW5hbWUgQVJHMj4KK2NsYXNzIENDUnVubmFibGVNZXRob2Qz
IDogcHVibGljIENDVGFzayB7CitwdWJsaWM6CisgICAgQ0NSdW5uYWJsZU1ldGhvZDMoQyogb2Jq
ZWN0LCBjb25zdCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEs
IGNvbnN0IEFSRzImIGFyZzIpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX2FyZzAoYXJnMCkKKyAgICAgICAgLCBtX2Fy
ZzEoYXJnMSkKKyAgICAgICAgLCBtX2FyZzIoYXJnMikKKyAgICB7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgKG1fb2JqZWN0LT4qbV9tZXRob2QpKG1fYXJn
MCwgbV9hcmcxLCBtX2FyZzIpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBDKiBtX29iamVjdDsK
KyAgICBNIG1fbWV0aG9kOworICAgIEFSRzAgbV9hcmcwOworICAgIEFSRzEgbV9hcmcxOworICAg
IEFSRzIgbV9hcmcyOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5
cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzEsIHR5cGVuYW1lIEFSRzIsIHR5cGVuYW1lIEFSRzM+
CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kNCA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAg
IENDUnVubmFibGVNZXRob2Q0KEMqIG9iamVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcw
JiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxLCBjb25zdCBBUkcyJiBhcmcyLCBjb25zdCBBUkczJiBh
cmczKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRo
b2QpCisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgICAgICwgbV9hcmcxKGFyZzEpCisgICAg
ICAgICwgbV9hcmcyKGFyZzIpCisgICAgICAgICwgbV9hcmczKGFyZzMpCisgICAgeworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0
aG9kKShtX2FyZzAsIG1fYXJnMSwgbV9hcmcyLCBtX2FyZzMpOworICAgIH0KK3Byb3RlY3RlZDoK
KyAgICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0aG9kOworICAgIEFSRzAgbV9hcmcwOworICAg
IEFSRzEgbV9hcmcxOworICAgIEFSRzIgbV9hcmcyOworICAgIEFSRzMgbV9hcmczOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3
Q0NSdW5uYWJsZU1ldGhvZChDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRob2QwPEMsIE0+KG9iamVjdCwgbWV0aG9kKSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwPgor
UGFzc093blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyogb2JqZWN0LCBjb25zdCBN
JiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzApCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1J1bm5hYmxlTWV0aG9kMTxDLCBNLCBBUkcwPihvYmplY3QsIG1ldGhvZCwgYXJnMCkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlwZW5h
bWUgQVJHMT4KK1Bhc3NPd25QdHI8Q0NUYXNrPiBOZXdDQ1J1bm5hYmxlTWV0aG9kKEMqIG9iamVj
dCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSdW5uYWJsZU1ldGhvZDI8QywgTSwgQVJHMCwg
QVJHMT4ob2JqZWN0LCBtZXRob2QsIGFyZzAsIGFyZzEpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFSRzEsIHR5cGVuYW1l
IEFSRzI+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3Q0NSdW5uYWJsZU1ldGhvZChDKiBvYmplY3Qs
IGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCwgY29uc3QgQVJHMSYgYXJnMSwgY29u
c3QgQVJHMiYgYXJnMikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRo
b2QzPEMsIE0sIEFSRzAsIEFSRzEsIEFSRzI+KG9iamVjdCwgbWV0aG9kLCBhcmcwLCBhcmcxLCBh
cmcyKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBB
UkcwLCB0eXBlbmFtZSBBUkcxLCB0eXBlbmFtZSBBUkcyLCB0eXBlbmFtZSBBUkczPgorUGFzc093
blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyogb2JqZWN0LCBjb25zdCBNJiBtZXRo
b2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEsIGNvbnN0IEFSRzImIGFyZzIs
IGNvbnN0IEFSRzMmIGFyZzMpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1J1bm5hYmxl
TWV0aG9kNDxDLCBNLCBBUkcwLCBBUkcxLCBBUkcyLCBBUkczPihvYmplY3QsIG1ldGhvZCwgYXJn
MCwgYXJnMSwgYXJnMiwgYXJnMykpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMyM2I5MTc0NTkwZjMyNzZhNTc1NTA2MDQwM2QzOTEwZGNkZDkwZDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZC5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisKKyNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitzdGF0aWMgQ0NUaHJlYWQqIGNjVGhyZWFkID0g
MDsKKworI2RlZmluZSBDT01NSVRfU0xPV0xZIDAKK1Bhc3NSZWZQdHI8Q0NUaHJlYWQ+IENDVGhy
ZWFkOjpnZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDQ1RocmVhZCgpKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxDQ1RocmVh
ZD4oY2NUaHJlYWQpOworfQorCitDQ1RocmVhZDo6Q0NUaHJlYWQoKQoreworICAgIGNjVGhyZWFk
ID0gdGhpczsKKyAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKENDVGhyZWFkOjpydW4sIHRo
aXMsICJDaHJvbWUgQ29tcG9zaXRvciBUaHJlYWQiKTsKK30KKworQ0NUaHJlYWQ6On5DQ1RocmVh
ZCgpCit7CisgICAgLy8gU3RvcCB0aHJlYWQuCisgICAgbV9tZXNzYWdlUXVldWUua2lsbCgpOwor
ICAgIHZvaWQqIHVudXNlZDsKKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElk
LCAmdW51c2VkKTsKKyAgICBtX3RocmVhZElkID0gMDsKKworICAgIC8vIFNsZWFyIHNpbmdsZXRv
bi4KKyAgICBjY1RocmVhZCA9IDA7Cit9CisKKy8vIHN0YXRpYworYm9vbCBDQ1RocmVhZDo6aXND
b21wb3NpdG9yVGhyZWFkKCkKK3sKKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBDQ1RocmVhZDo6Z2V0SW5zdGFu
Y2UoKS0+bV90aHJlYWRJZDsKK30KKwordm9pZCBDQ1RocmVhZDo6cG9zdFRhc2tPbkltcGxUaHJl
YWQoUGFzc093blB0cjxDQ1Rhc2s+IHRhc2spCit7CisgICAgbV9tZXNzYWdlUXVldWUuYXBwZW5k
KHRhc2spOworfQorCitzdGF0aWMgdm9pZCBydW5UYXNrT25NYWluVGhyZWFkKHZvaWQqIHVzZXJk
YXRhKQoreworICAgIC8vIElmIHRoZSB0aHJlYWQgaXMgZGVhZCwgdGhlbiB0aGlzIHRhc2sgaXMg
c3RhbGUsIGUuZy4gcG9zdGVkCisgICAgLy8gZHVyaW5nIG9yIHNsaWdodGx5IGJlZm9yZSBjb21w
b3NpdG9yIHNodXRkb3duLgorICAgIGlmICghY2NUaHJlYWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFJ1biB0aGUgdGFzay4KKyAgICBDQ1Rhc2sqIHRhc2sgPSBzdGF0aWNfY2FzdDxDQ1Rh
c2sqPih1c2VyZGF0YSk7CisgICAgdGFzay0+cnVuKCk7CisgICAgZGVsZXRlIHRhc2s7Cit9CisK
K3ZvaWQgQ0NUaHJlYWQ6OnBvc3RUYXNrT25NYWluVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNrPiB0
YXNrKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQocnVuVGFza09uTWFpblRocmVhZCwgdGFzay5s
ZWFrUHRyKCkpOworfQorCit2b2lkKiBDQ1RocmVhZDo6cnVuKHZvaWQqIHVzZXJkYXRhKQorewor
ICAgIENDVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxDQ1RocmVhZCo+KHVzZXJkYXRhKTsK
KyAgICBDQ19MT0cwKCJ0aHJlYWQgcnVubmluZyIpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIE93blB0cjxDQ1Rhc2s+IHRhc2sodGhyZWFkLT5tX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVz
c2FnZSgpKTsKKyAgICAgICAgaWYgKCF0YXNrLmdldCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHRhc2stPnJ1bigpOworICAgIH0KKyAgICBDQ19MT0cwKCJ0aHJlYWQgZXhpdGluZyIp
OworICAgIHJldHVybiAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzE0Y2Ri
OTRlNTM1YzdmMjQwYmJiZjhlZGY2OTUzZWI5YmVjZmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkX2gKKyNkZWZpbmUg
Q0NUaHJlYWRfaAorCisjaW5jbHVkZSAiY2MvQ0NUYXNrLmgiCisKKyNpbmNsdWRlIDx3dGYvTWVz
c2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjZGVmaW5lIENDX0xPR19FTkFCTEUgMQorCisjaWYgQ0NfTE9HX0VOQUJMRSAv
LyBsb2dnaW5nIG9mIGNvbXBvc2l0b3IgdGhyZWFkaW5nIHN0YXRlcworI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjZGVmaW5lIENDX0xPRzAoZm10KSBwcmludGYoIm9uIHRpZD0lcyIgZm10ICJcbiIsIGlz
TWFpblRocmVhZCgpID8gIk1haW46ICIgOiAiSW1wbDogICAiKQorI2RlZmluZSBDQ19MT0cxKGZt
dCwgYXJnMSkgcHJpbnRmKCJPbiB0aWQ9JXMiIGZtdCAiXG4iLCBpc01haW5UaHJlYWQoKSA/ICJN
YWluOiAiIDogIkltcGw6ICAgIiwgYXJnMSkKKyNkZWZpbmUgQ0NfTE9HMihmbXQsIGFyZzEsIGFy
ZzIpIHByaW50ZigiQXQgdGlkPSVzIiBmbXQgIlxuIiwgaXNNYWluVGhyZWFkKCkgPyAiTWFpbjog
IiA6ICJJbXBsOiAgICIsIGFyZzEsIGFyZzIpCisjZWxzZQorI2RlZmluZSBDQ19MT0cwKGZtdCkK
KyNkZWZpbmUgQ0NfTE9HMShmbXQsIGFyZzEpCisjZGVmaW5lIENDX0xPRzIoZm10LCBhcmcxLCBh
cmcyKQorI2VuZGlmCisKKy8vIFRoZSBDQ1RocmVhZCBzaW5nbGV0b24gb3ducyB0aGUgY29tcG9z
aXRvciB0aHJlYWQgYW5kIHByb3ZpZGVzCisvLyBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3IgbWVz
c2FnaW5nIGJldHdlZW4gdGhlIHR3byB0aHJlYWRzLiBUaGUKKy8vIHRocmVhZCBpcyBhbGl2ZSBh
cyBsb25nIGFzIHNvbWVvbmUgaG9sZHMgb24gdG8gYSByZWZlcmVuY2UgdG8gdGhlCisvLyBzaW5n
bGV0b24uCitjbGFzcyBDQ1RocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPENDVGhyZWFkPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+IGdldEluc3RhbmNlKCk7Cisg
ICAgdmlydHVhbCB+Q0NUaHJlYWQoKTsKKworICAgIHN0YXRpYyBib29sIGlzQ29tcG9zaXRvclRo
cmVhZCgpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aHJlYWQgc2FmZSBhbmQgY2Fu
IGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLgorICAgIHZvaWQgcG9zdFRhc2tPbkltcGxUaHJlYWQo
UGFzc093blB0cjxDQ1Rhc2s+KTsKKyAgICB2b2lkIHBvc3RUYXNrT25NYWluVGhyZWFkKFBhc3NP
d25QdHI8Q0NUYXNrPik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSWQoKSBj
b25zdCB7IHJldHVybiBtX3RocmVhZElkOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBNZXNzYWdl
IHN5c3RlbSBpbXBsZW1lbnRhdGlvbgorICAgIENDVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQq
IHJ1bih2b2lkKik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAg
ICBNZXNzYWdlUXVldWU8Q0NUYXNrPiBtX21lc3NhZ2VRdWV1ZTsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzg3M2M5ZGVjNTY0Y2ZmZTE1OTA4ODM3YjZmNjRl
MDk5ZmQyM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3LmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1ZpZXcuaCIKKworI2luY2x1
ZGUgIkNDVmlld0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1ZpZXc6OkNDVmll
dygpCisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorI2lm
IFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAsIG1fdmlld01hbmFnZXIoQ0NWaWV3TWFu
YWdlcjo6Z2V0SW5zdGFuY2UoKSkKKyNlbmRpZgoreworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICBtX3ZpZXdNYW5hZ2VyLT5hZGRWaWV3KHRoaXMpOworI2VuZGlmCit9CisKK0ND
Vmlldzo6fkNDVmlldygpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1f
dmlld01hbmFnZXItPnJlbW92ZVZpZXcodGhpcyk7CisjZW5kaWYKK30KKwordm9pZCBDQ1ZpZXc6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIC8vIFJlcXVl
c3QgdGhlIGNsaWVudCB0byBkbyBwcm9jZXNzaW5nIG9mIHRoZSBmcmFtZS4KKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1l
KTsKK30KKwordm9pZCBDQ1ZpZXc6OnVwZGF0ZUxheWVycygpCit7CisgICAgLy8gQWxsIHdvcmsg
aXMgZG9uZSBpbiB0aGUgc3ViY2xhc3MuCit9CisKK3ZvaWQgQ0NWaWV3OjpyZXF1ZXN0RnJhbWVB
bmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIENDX0xPRzEoInJlcXVlc3RG
cmFtZUFuZENvbW1pdCAlcCIsIHRoaXMpOworICAgIGFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdp
blRpbWUpOworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworICAgIHVwZGF0ZUxheWVycygp
OworCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1ZpZXdJbXBsOjpwZXJmb3JtQ29tbWl0IHVz
aW5nIGEgY29uZGl0aW9uIHZhcmlhYmxlLgorICAgIE11dGV4IG11dGV4OworICAgIFRocmVhZENv
bmRpdGlvbiBjb25kaXRpb247CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtdXRleCk7CisgICAgY2Fs
bEFzeW5jT25JbXBsKCZDQ1ZpZXdJbXBsOjpwZXJmb3JtQ29tbWl0LCB0aGlzLCAmY29uZGl0aW9u
KTsKKyAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisgICAgQ0NfTE9HMSgicmVxdWVzdEZyYW1l
QW5kQ29tbWl0IGRvbmUgJXAiLCB0aGlzKTsKK30KKwordm9pZCBDQ1ZpZXc6OmNvbW1pdChDQ1Zp
ZXdJbXBsKiBpbXBsKQoreworICAgIENDX0xPRzEoImNvbW1pdCAlcCIsIHRoaXMpOworfQorCit2
b2lkIENDVmlldzo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgIHJldHVybjsKKyAgICBjYWxs
QXN5bmNPbkltcGwoJkNDVmlld0ltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KTsKKyAgICBt
X2NvbW1pdFBlbmRpbmcgPSB0cnVlOworfQorCit2b2lkIENDVmlldzo6c2V0TmVlZHNSZWRyYXco
KQoreworICAgIGNhbGxBc3luY09uSW1wbCgmQ0NWaWV3SW1wbDo6c2V0TmVlZHNSZWRyYXcpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZmQxZWNhNGE4MTI4NjgzZGRiMWYyOTkyNTI2
NDI4NTYyMGQxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXcuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDVmlld19oCisjZGVmaW5lIENDVmlld19oCisKKyNpbmNsdWRlICJjYy9D
Q1ZpZXdNYW5hZ2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWV3TWFuYWdlckltcGwuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NWaWV3SW1wbDsKKworY2xhc3MgQ0NWaWV3Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKK307CisK
K2NsYXNzIENDVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPENDVmlldz4geworcHVibGljOgorICAg
IGV4cGxpY2l0IENDVmlldygpOworICAgIHZpcnR1YWwgfkNDVmlldygpOworCisgICAgdm9pZCBz
ZXRDbGllbnQoQ0NWaWV3Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyAg
ICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJh
dygpOworCisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcHVibGljIGJ1dCBp
bnRlcm5hbC1mYWNpbmcKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoKTsKKyAgICB2
b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZp
cnR1YWwgdm9pZCBjb21taXQoQ0NWaWV3SW1wbCopOworCitwcml2YXRlOgorICAgIC8vIEZ1bmN0
aW9ucyB0byBjYWxsIGEgbWV0aG9kIG9uIENDVmlld0ltcGwqCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE0+CisgICAgdm9pZCBjYWxsQXN5bmNPbkltcGwoY29uc3QgTSYgbWV0aG9kKQorICAgIHsK
KyAgICAgICAgbV92aWV3TWFuYWdlci0+Y2FsbEFzeW5jT25JbXBsKCZDQ1ZpZXdNYW5hZ2VySW1w
bDo6ZGlzcGF0Y2hUb1ZpZXdJbXBsPE0+LCB0aGlzLCBtZXRob2QpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwPgorICAgIHZvaWQgY2FsbEFzeW5jT25J
bXBsKGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCkKKyAgICB7CisgICAgICAgIG1f
dmlld01hbmFnZXItPmNhbGxBc3luY09uSW1wbCgmQ0NWaWV3TWFuYWdlckltcGw6OmRpc3BhdGNo
VG9WaWV3SW1wbDxNLCBBUkcwPiwgdGhpcywgbWV0aG9kLCBhcmcwKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlwZW5hbWUgQVJHMT4KKyAgICB2
b2lkIGNhbGxBc3luY09uSW1wbChjb25zdCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNv
bnN0IEFSRzEmIGFyZzEpCisgICAgeworICAgICAgICBtX3ZpZXdNYW5hZ2VyLT5jYWxsQXN5bmNP
bkltcGwoJkNDVmlld01hbmFnZXJJbXBsOjpkaXNwYXRjaFRvVmlld0ltcGw8TSwgQVJHMCwgQVJH
MT4sIHRoaXMsIG1ldGhvZCwgYXJnMCwgYXJnMSk7CisgICAgfQorCisgICAgQ0NWaWV3Q2xpZW50
KiBtX2NsaWVudDsKKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBSZWZQdHI8Q0NWaWV3
TWFuYWdlcj4gbV92aWV3TWFuYWdlcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0lt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ZlODdiZjBkNTA2NGExNzI1OWJjMzI4NDBjNzY2MDA0NWE3
ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NWaWV3SW1wbC5oIgorCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NWaWV3SW1wbDo6Q0NWaWV3SW1wbChDQ1ZpZXdNYW5h
Z2VySW1wbCogdmlld01hbmFnZXJJbXBsKQorICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkK
KyAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorICAgICwg
bV9yZWRyYXdFbnF1ZXVlZChmYWxzZSkKKyAgICAsIG1fdmlld01hbmFnZXJJbXBsKHZpZXdNYW5h
Z2VySW1wbCkKK3sKK30KKworQ0NWaWV3SW1wbDo6fkNDVmlld0ltcGwoKQoreworfQorCit2b2lk
IENDVmlld0ltcGw6OmRyYXdMYXllcnMoKQoreworICAgIENDX0xPRzEoImRyYXdMYXllcnMgJXAi
LCB0aGlzKTsKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBBU1NFUlQo
bV9yZWRyYXdFbnF1ZXVlZCk7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgbV9y
ZWRyYXdFbnF1ZXVlZCA9IGZhbHNlOworICAgIG1fZnJhbWVOdW1iZXIgKz0gMTsKKworICAgIC8v
IEZJWE1FOiBtb3ZlIGxheWVyUmVuZGVyZXIgdG8gTGF5ZXJSZW5kZXJlckltcGwuCisgICAgLy8g
RklYTUU6IGRvIHRoZSBkcmF3bGF5ZXJzIG9uIHRoZSBpbXBsIHRocmVhZAorICAgIHsKKyAgICAg
ICAgTXV0ZXggbXV0ZXg7CisgICAgICAgIFRocmVhZENvbmRpdGlvbiBjb25kaXRpb247CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2sobXV0ZXgpOworICAgICAgICBtX3ZpZXdNYW5hZ2VySW1wbC0+
Y2NUaHJlYWQoKS0+cG9zdFRhc2tPbk1haW5UaHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCh0aGlz
LCAmQ0NWaWV3SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwgJmNvbmRpdGlvbikpOworICAg
ICAgICBjb25kaXRpb24ud2FpdChtdXRleCk7CisgICAgfQorICAgIENDX0xPRzEoImRyYXdMYXll
cnMgZG9uZSAlcCIsIHRoaXMpOworfQorCit2b2lkIENDVmlld0ltcGw6OmRyYXdMYXllcnNPbk1h
aW5UaHJlYWQoVGhyZWFkQ29uZGl0aW9uKiBjb21wbGV0aW9uQ29uZGl0aW9uKQoreworICAgIEND
X0xPRzEoImRyYXdMYXllcnNPbk1haW5UaHJlYWQgJXAiLCB0aGlzKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgIG1f
bGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworCisgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRh
dGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1
aXZhbGVudHMuLi5dCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVu
ZGVyZXItPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRH
cmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
CisgICAgICAgIEZBVEFMKCJPTUdCQlEiKTsKKyAgICAgICAgLy8gRklYTUU6IHJlYWxsb2NhdGVS
ZW5kZXJlcigpIGlzIG5lY2Vzc2FyeQorICAgIH0KKworICAgIGNvbXBsZXRpb25Db25kaXRpb24t
PnNpZ25hbCgpOworfQorCit2b2lkIENDVmlld0ltcGw6OnBlcmZvcm1Db21taXQoQ0NWaWV3KiB2
aWV3LCBUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pCit7CisgICAgQVNTRVJU
KGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgQ0NfTE9HMSgicGVyZm9ybUNvbW1pdCAlcCIs
IHZpZXcpOworICAgIHZpZXctPmNvbW1pdCh0aGlzKTsKKyAgICBtX2xheWVyUmVuZGVyZXIgPSBz
dGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21pdW0qPih2aWV3KTsKKyAgICBjb21wbGV0aW9u
Q29uZGl0aW9uLT5zaWduYWwoKTsKKworICAgIHNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQg
Q0NWaWV3SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworICAgIENDX0xPRzEoInNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
ICVwIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuIHRoZSByZXF1ZXN0RnJhbWVBbmRDb21taXQgZnJv
bSBoZXJlIHRvIGxhdGVyIGlmIHdlIGFyZSB0aHJvdHRsaW5nIG9yIG90aGVyd2lzZQorICAgIC8v
IHRyeWluZyB0byBjb250cm9sIHBhaW50aW5nIHJhdGUuCisgICAgZG91YmxlIGZyYW1lQmVnaW5U
aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBjYWxsQXN5bmNPblZpZXcoJkNDVmlldzo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgQ0NWaWV3SW1wbDo6
c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
ICAgIGlmIChtX3JlZHJhd0VucXVldWVkKQorICAgICAgICByZXR1cm47CisKKyAgICBDQ19MT0cx
KCJzZXROZWVkc1JlZHJhdyAlcCIsIHRoaXMpOworICAgIG1fcmVkcmF3RW5xdWV1ZWQgPSB0cnVl
OworICAgIG1fdmlld01hbmFnZXJJbXBsLT5jY1RocmVhZCgpLT5wb3N0VGFza09uSW1wbFRocmVh
ZChOZXdDQ1J1bm5hYmxlTWV0aG9kKHRoaXMsICZDQ1ZpZXdJbXBsOjpkcmF3TGF5ZXJzKSk7Cit9
CisKKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZXdJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM0YjM1MTJkNzI0NTE0NDQ5
NDcxMTg5ZDFhMzYyYTIzMzlhYTU0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld0ltcGwuaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVmlld0ltcGxfaAorI2RlZmluZSBDQ1ZpZXdJ
bXBsX2gKKworI2luY2x1ZGUgImNjL0NDTm9uVGhyZWFkU2FmZS5oIgorI2luY2x1ZGUgImNjL0ND
Vmlld01hbmFnZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NWaWV3
TWFuYWdlckltcGw7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CisKKy8vIENDVmlld0lt
cGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVy
aW5nIHN0YXRlCitjbGFzcyBDQ1ZpZXdJbXBsIDogQ0NOb25UaHJlYWRTYWZlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ1ZpZXdJbXBsKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDQ1Zp
ZXdJbXBsKENDVmlld01hbmFnZXJJbXBsKik7CisgICAgdmlydHVhbCB+Q0NWaWV3SW1wbCgpOwor
CisgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CisgICAgdm9pZCBwZXJmb3JtQ29tbWl0KENDVmlldyos
IFRocmVhZENvbmRpdGlvbiogY29tcGxldGlvbkNvbmRpdGlvbik7CisgICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2b2lk
IHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVt
YmVyID0gZnJhbWVOdW1iZXI7IH0KKworcHJpdmF0ZToKKyAgICAvLyBGdW5jdGlvbnMgdG8gY2Fs
bCBhIG1ldGhvZCBvbiB0aGlzIGltcGxzIGFzc29jaWF0ZWQgQ0NWaWV3CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzA+CisgICAgdm9pZCBjYWxsQXN5bmNPblZpZXcoY29u
c3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwKQorICAgIHsKKyAgICAgICAgbV92aWV3TWFu
YWdlckltcGwtPmNhbGxBc3luY09uVmlldyh0aGlzLCBtZXRob2QsIGFyZzApOworICAgIH0KKwor
ICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRp
b25Db25kaXRpb24pOworCisgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CisgICAgaW50IG1f
ZnJhbWVOdW1iZXI7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGEgYmFja3BvaW50ZXIgdG8g
dGhlIHZpZXcgc3RvcmVkIGR1cmluZyBjb21taXQuIFRoaXMgaXMgc28gd2UgY2FuIGRyYXcuCisg
ICAgLy8gVGhpcyB3aWxsIGdvIGF3YXkgaW4gYSBmb2xsb3dvbiBjb21taXQgdGhhdCBtb3ZlcyBk
cmF3aW5nIHRvIHRoZSBpbXBsLgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJl
bmRlcmVyOworCisgICAgYm9vbCBtX3JlZHJhd0VucXVldWVkOworCisgICAgQ0NWaWV3TWFuYWdl
ckltcGwqIG1fdmlld01hbmFnZXJJbXBsOworfTsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Vmlld01hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMjU3M2YzYjA1NTY2M2I3ZDMzMTE5NTcwYTI0
NTQwYzM4NDVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDExMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NWaWV3
TWFuYWdlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NWaWV3LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsK
Kworc3RhdGljIENDVmlld01hbmFnZXIqIGNjVmlld01hbmFnZXIgPSAwOworCitQYXNzUmVmUHRy
PENDVmlld01hbmFnZXI+IENDVmlld01hbmFnZXI6OmdldEluc3RhbmNlKCkKK3sKKyAgICBpZiAo
IWNjVmlld01hbmFnZXIpIHsKKyAgICAgICAgY2NWaWV3TWFuYWdlciA9IG5ldyBDQ1ZpZXdNYW5h
Z2VyKCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihjY1ZpZXdNYW5hZ2VyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8Q0NWaWV3TWFuYWdlcj4oY2NWaWV3TWFuYWdlcik7Cit9CisK
K0NDVmlld01hbmFnZXI6OkNDVmlld01hbmFnZXIoKQorICAgIDogbV9jY1RocmVhZChDQ1RocmVh
ZDo6Z2V0SW5zdGFuY2UoKSkKKyAgICAsIG1faW1wbCgwKQoreworICAgIC8vIEJsb2NraW5nbHkg
aW5pdCB0aGUgQ0NWaWV3TWFuYWdlckltcGwKKyAgICBNdXRleCBtdXRleDsKKyAgICBUaHJlYWRD
b25kaXRpb24gY29uZGl0aW9uOworCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtdXRleCk7CisgICAg
bV9jY1RocmVhZC0+cG9zdFRhc2tPbkltcGxUaHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCh0aGlz
LCAmQ0NWaWV3TWFuYWdlcjo6aW5pdEltcGwsICZjb25kaXRpb24pKTsKKyAgICBjb25kaXRpb24u
d2FpdChtdXRleCk7CisgICAgQ0NfTE9HMCgiSW5pdCBkb25lIik7Cit9CisKKworQ0NWaWV3TWFu
YWdlcjo6fkNDVmlld01hbmFnZXIoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV92aWV3cy5zaXplKCkpOworICAgIC8vIEJsb2NraW5nbHkga2ls
bCB0aGUgQ0NWaWV3TWFuYWdlckltcGwuCisgICAgTXV0ZXggbXV0ZXg7CisgICAgVGhyZWFkQ29u
ZGl0aW9uIGNvbmRpdGlvbjsKKworICAgIE11dGV4TG9ja2VyIGxvY2sobXV0ZXgpOworICAgIG1f
Y2NUaHJlYWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QodGhpcywg
JkNDVmlld01hbmFnZXI6OmRlbGV0ZUltcGwsICZjb25kaXRpb24pKTsKKyAgICBjb25kaXRpb24u
d2FpdChtdXRleCk7CisKKyAgICBjY1ZpZXdNYW5hZ2VyID0gMDsKK30KKwordm9pZCBDQ1ZpZXdN
YW5hZ2VyOjphZGRWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKKyAgICBtX3ZpZXdzLmFkZCh2aWV3KTsKKyAgICBjYWxsQXN5bmNPbkltcGwo
JkNDVmlld01hbmFnZXJJbXBsOjphZGRWaWV3LCB2aWV3KTsKK30KKwordm9pZCBDQ1ZpZXdNYW5h
Z2VyOjpyZW1vdmVWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV92aWV3cy5jb250YWlucyh2aWV3KSk7CisgICAgbV92
aWV3cy5yZW1vdmUodmlldyk7CisgICAgY2FsbEFzeW5jT25JbXBsKCZDQ1ZpZXdNYW5hZ2VySW1w
bDo6cmVtb3ZlVmlldywgdmlldyk7Cit9CisKK3ZvaWQgQ0NWaWV3TWFuYWdlcjo6ZGVsZXRlSW1w
bChUaHJlYWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pCit7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX2NjVGhyZWFkLT50aHJlYWRJZCgpKTsKKyAgICBkZWxldGUgbV9p
bXBsLmdldCgpOworICAgIG1faW1wbCA9IDA7CisgICAgY29tcGxldGlvbkNvbmRpdGlvbi0+c2ln
bmFsKCk7Cit9CisKK3ZvaWQgQ0NWaWV3TWFuYWdlcjo6aW5pdEltcGwoVGhyZWFkQ29uZGl0aW9u
KiBjb21wbGV0aW9uQ29uZGl0aW9uKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9jY1RocmVhZC0+dGhyZWFkSWQoKSk7CisgICAgQ0NfTE9HMSgiSW5pdEltcGwgYmVnaW4gb24g
JWkiLCBjdXJyZW50VGhyZWFkKCkpOworICAgIG1faW1wbC5zZXRDdXJyZW50VGhyZWFkVmFsaWQo
KTsKKyAgICBtX2ltcGwgPSBuZXcgQ0NWaWV3TWFuYWdlckltcGwobV9jY1RocmVhZC5nZXQoKSk7
CisgICAgY29tcGxldGlvbkNvbmRpdGlvbi0+c2lnbmFsKCk7CisgICAgQ0NfTE9HMSgiSW5pdElt
cGwgZG9uZSAlaSIsIGN1cnJlbnRUaHJlYWQoKSk7Cit9CisKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFkN2NhN2FlZjBjODYxYWI2ZWJjODAxZTY0NWEwNGM4YjkyOGQ5
YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NWaWV3TWFuYWdlcl9oCisjZGVmaW5lIENDVmlld01hbmFnZXJfaAorCisj
aW5jbHVkZSAiY2MvQ0NOb25UaHJlYWRTYWZlLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NWaWV3OworY2xhc3MgQ0NW
aWV3TWFuYWdlckltcGw7CisKKy8vIE1haW4gdGhyZWFkIGludGVyZmFjZSBmb3IgbWFuYWdpbmcg
bWVzc2FnaW5nIGJldHdlZW4gQ0NWaWV3IGFuZCBDQ1ZpZXdJbXBscworY2xhc3MgQ0NWaWV3TWFu
YWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPENDVmlld01hbmFnZXI+LCBDQ05vblRocmVhZFNhZmUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlld01hbmFnZXI+IGdldEluc3Rh
bmNlKCk7CisgICAgfkNDVmlld01hbmFnZXIoKTsKKworICAgIHZvaWQgYWRkVmlldyhDQ1ZpZXcq
KTsKKyAgICB2b2lkIHJlbW92ZVZpZXcoQ0NWaWV3Kik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1p
dChDQ1ZpZXcqKTsKKworICAgIENDVGhyZWFkKiBjY1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2NUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIEZ1bmN0aW9ucyB0byBjYWxsIGEgbWV0aG9kIG9u
IENDVmlld01hbmFnZXJJbXBsKgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNPgorICAgIHZvaWQg
Y2FsbEFzeW5jT25JbXBsKGNvbnN0IE0mIG1ldGhvZCkKKyAgICB7CisgICAgICAgIG1fY2NUaHJl
YWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QobV9pbXBsLmdldFVu
c2FmZSgpLCBtZXRob2QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlw
ZW5hbWUgQVJHMD4KKyAgICB2b2lkIGNhbGxBc3luY09uSW1wbChjb25zdCBNJiBtZXRob2QsIGNv
bnN0IEFSRzAmIGFyZzApCisgICAgeworICAgICAgICBtX2NjVGhyZWFkLT5wb3N0VGFza09uSW1w
bFRocmVhZChOZXdDQ1J1bm5hYmxlTWV0aG9kKG1faW1wbC5nZXRVbnNhZmUoKSwgbWV0aG9kLCBh
cmcwKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzAs
IHR5cGVuYW1lIEFSRzE+CisgICAgdm9pZCBjYWxsQXN5bmNPbkltcGwoY29uc3QgTSYgbWV0aG9k
LCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQorICAgIHsKKyAgICAgICAgbV9j
Y1RocmVhZC0+cG9zdFRhc2tPbkltcGxUaHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZChtX2ltcGwu
Z2V0VW5zYWZlKCksIG1ldGhvZCwgYXJnMCwgYXJnMSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwLCB0eXBlbmFtZSBBUkcxLCB0eXBlbmFtZSBBUkcy
PgorICAgIHZvaWQgY2FsbEFzeW5jT25JbXBsKGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYg
YXJnMCwgY29uc3QgQVJHMSYgYXJnMSwgY29uc3QgQVJHMiYgYXJnMikKKyAgICB7CisgICAgICAg
IG1fY2NUaHJlYWQtPnBvc3RUYXNrT25JbXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QobV9p
bXBsLmdldFVuc2FmZSgpLCBtZXRob2QsIGFyZzAsIGFyZzEsIGFyZzIpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlwZW5hbWUgQVJHMCwgdHlwZW5hbWUgQVJHMSwgdHlw
ZW5hbWUgQVJHMiwgdHlwZW5hbWUgQVJHMz4KKyAgICB2b2lkIGNhbGxBc3luY09uSW1wbChjb25z
dCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFyZzEsIGNvbnN0IEFS
RzImIGFyZzIsIGNvbnN0IEFSRzMmIGFyZzMpCisgICAgeworICAgICAgICBtX2NjVGhyZWFkLT5w
b3N0VGFza09uSW1wbFRocmVhZChOZXdDQ1J1bm5hYmxlTWV0aG9kKG1faW1wbC5nZXRVbnNhZmUo
KSwgbWV0aG9kLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IENDVmlld01hbmFnZXIoKTsKKworICAgIHZvaWQgZGVsZXRlSW1wbChUaHJl
YWRDb25kaXRpb24qIGNvbXBsZXRpb25Db25kaXRpb24pOworICAgIHZvaWQgaW5pdEltcGwoVGhy
ZWFkQ29uZGl0aW9uKiBjb21wbGV0aW9uQ29uZGl0aW9uKTsKKworICAgIFJlZlB0cjxDQ1RocmVh
ZD4gbV9jY1RocmVhZDsKKyAgICBDQ05vblRocmVhZFNhZmVNZW1iZXI8Q0NWaWV3TWFuYWdlcklt
cGwqPiBtX2ltcGw7IC8vIFRoaXMgcG9pbnRlciBpcyBleHBsaWNpdGx5IG1hbmFnZWQgaW4gQ0NW
aWV3TWFuYWdlciBhbmQgfkNDVmlld01hbmFnZXIgc28gaXQgaW5pdGlhbGl6ZXMgYW5kIGRpZXMg
b24gdGhlIENDVGhyZWFkIHJhdGhlciB0aGFuIG9uIHRoZSBtYWluIHRocmVhZC4KKworICAgIGZy
aWVuZCBjbGFzcyBDQ1ZpZXc7IC8vIHRlbXBvcmFyeSBoYWNrIGkgZm9yZ290IHdoeQorCisgICAg
SGFzaFNldDxDQ1ZpZXcqPiBtX3ZpZXdzOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlld01hbmFn
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlld01hbmFnZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWEzOGZiZDQzMmRjOWY2OWY1NzY2
MTAzZTY3YjQwOGVlOGU1NzNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlckltcGwuY3BwCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDVmlld01hbmFnZXIuaCIKKworI2luY2x1ZGUgImNjL0NDVmlldy5oIgorI2luY2x1ZGUg
ImNjL0NDVmlld0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCitDQ1ZpZXdNYW5hZ2VySW1wbDo6Q0NWaWV3TWFuYWdlckltcGwoQ0NUaHJlYWQq
IHRocmVhZCkKKyAgICA6IG1fdGhyZWFkKHRocmVhZCkKK3sKK30KKworQ0NWaWV3TWFuYWdlcklt
cGw6On5DQ1ZpZXdNYW5hZ2VySW1wbCgpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7CisgICAgQVNTRVJUKCFtX3ZpZXdUb0ltcGxNYXAuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IW1faW1wbFRvVmlld01hcC5zaXplKCkpOworfQorCisKK3ZvaWQgQ0NWaWV3TWFuYWdlckltcGw6
OmFkZFZpZXcoQ0NWaWV3KiB2aWV3KQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworICAgIENDX0xPRzEoImFkZFZpZXcgJXAiLCB2aWV3KTsKKyAgICBBU1NFUlQoIW1fdmll
d1RvSW1wbE1hcC5jb250YWlucyh2aWV3KSk7CisgICAgQ0NWaWV3SW1wbCogaW1wbCA9IG5ldyBD
Q1ZpZXdJbXBsKHRoaXMpOworICAgIG1fdmlld1RvSW1wbE1hcC5hZGQodmlldywgaW1wbCk7Cisg
ICAgbV9pbXBsVG9WaWV3TWFwLmFkZChpbXBsLCB2aWV3KTsKKworfQorCit2b2lkIENDVmlld01h
bmFnZXJJbXBsOjpyZW1vdmVWaWV3KENDVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoY2FsbGVk
T25WYWxpZFRocmVhZCgpKTsKKyAgICBDQ19MT0cxKCJyZW1vdmVWaWV3ICVwIiwgdmlldyk7Cisg
ICAgQVNTRVJUKG1fdmlld1RvSW1wbE1hcC5jb250YWlucyh2aWV3KSk7CisgICAgQ0NWaWV3SW1w
bCogaW1wbCA9IG1fdmlld1RvSW1wbE1hcC5nZXQodmlldyk7CisgICAgbV92aWV3VG9JbXBsTWFw
LnJlbW92ZSh2aWV3KTsKKyAgICBtX2ltcGxUb1ZpZXdNYXAucmVtb3ZlKGltcGwpOworICAgIGRl
bGV0ZSBpbXBsOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZXdNYW5hZ2VySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWV3TWFuYWdlckltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNzI0MmJhZTliNjBhMDM3NzI4MjRhMTYwZGU2MTNlOGQwMWYzZWRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWV3TWFuYWdlckltcGwuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ1ZpZXdNYW5hZ2VySW1wbF9oCisjZGVmaW5lIENDVmlld01hbmFnZXJJbXBsX2gKKworI2lu
Y2x1ZGUgImNjL0NDTm9uVGhyZWFkU2FmZS5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7CitjbGFzcyBDQ1ZpZXc7CitjbGFz
cyBDQ1ZpZXdJbXBsOworY2xhc3MgQ0NWaWV3TWFuYWdlclByb3h5OworCisvLyBDb21wb3NpdG9y
LXRocmVhZC1vbmx5IGNsYXNzOyBtYW5hZ2VzIGFsbCBhY3RpdmUgQ0NWaWV3SW1wbHMKK2NsYXNz
IENDVmlld01hbmFnZXJJbXBsIDogQ0NOb25UaHJlYWRTYWZlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ1ZpZXdNYW5hZ2VySW1wbCk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NWaWV3
TWFuYWdlckltcGwoQ0NUaHJlYWQqKTsKKyAgICB2aXJ0dWFsIH5DQ1ZpZXdNYW5hZ2VySW1wbCgp
OworCisgICAgdm9pZCBhZGRWaWV3KENDVmlldyopOworCisgICAgLy8gRnVuY3Rpb25zIHRvIGNh
bGwgYSBtZXRob2Qgb24gYSBDQ1ZpZXcqIGdpdmVuIGEgQ0NWaWV3SW1wbCoKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTT4KKyAgICB2b2lkIGNhbGxBc3luY09uVmlldyhDQ1ZpZXdJbXBsKiBpbXBs
LCBjb25zdCBNJiBtKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQo
KSk7CisgICAgICAgIEFTU0VSVChtX2ltcGxUb1ZpZXdNYXAuY29udGFpbnMoaW1wbCkpOworICAg
ICAgICBtX3RocmVhZC0+cG9zdFRhc2tPbk1haW5UaHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCht
X2ltcGxUb1ZpZXdNYXAuZ2V0KGltcGwpLCBtKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzA+CisgICAgdm9pZCBjYWxsQXN5bmNPblZpZXcoQ0NWaWV3
SW1wbCogaW1wbCwgY29uc3QgTSYgbSwgY29uc3QgQVJHMCYgYXJnMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgICAgICBBU1NFUlQobV9pbXBsVG9W
aWV3TWFwLmNvbnRhaW5zKGltcGwpKTsKKyAgICAgICAgbV90aHJlYWQtPnBvc3RUYXNrT25NYWlu
VGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QobV9pbXBsVG9WaWV3TWFwLmdldChpbXBsKSwgbSwg
YXJnMCkpOworICAgIH0KKworICAgIENDVGhyZWFkKiBjY1RocmVhZCgpIHsgcmV0dXJuIG1fdGhy
ZWFkOyB9CisKKyAgICAvLyBGdW5jdGlvbnMgdG8gY2FsbCBhIG1ldGhvZCBvbiBDQ1ZpZXdJbXBs
KiBnaXZlbiBhIENDVmlldyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTT4KKyAgICB2b2lkIGRp
c3BhdGNoVG9WaWV3SW1wbChDQ1ZpZXcqIHZpZXcsIGNvbnN0IE0mIG0pCisgICAgeworICAgICAg
ICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fdmlld1Rv
SW1wbE1hcC5jb250YWlucyh2aWV3KSk7CisgICAgICAgIChtX3ZpZXdUb0ltcGxNYXAuZ2V0KHZp
ZXcpLT4qbSkoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTSwgdHlwZW5hbWUg
QVJHMD4KKyAgICB2b2lkIGRpc3BhdGNoVG9WaWV3SW1wbChDQ1ZpZXcqIHZpZXcsIGNvbnN0IE0m
IG0sIGNvbnN0IEFSRzAmIGFyZzApCisgICAgeworICAgICAgICBBU1NFUlQoY2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fdmlld1RvSW1wbE1hcC5jb250YWlucyh2aWV3
KSk7CisgICAgICAgIChtX3ZpZXdUb0ltcGxNYXAuZ2V0KHZpZXcpLT4qbSkoYXJnMCk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzAsIHR5cGVuYW1lIEFS
RzE+CisgICAgdm9pZCBkaXNwYXRjaFRvVmlld0ltcGwoQ0NWaWV3KiB2aWV3LCBjb25zdCBNJiBt
LCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChtX3ZpZXdUb0ltcGxN
YXAuY29udGFpbnModmlldykpOworICAgICAgICAobV92aWV3VG9JbXBsTWFwLmdldCh2aWV3KS0+
Km0pKGFyZzAsIGFyZzEpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlVmlldyhDQ1ZpZXcqKTsK
KworcHJpdmF0ZToKKyAgICBDQ1RocmVhZCogbV90aHJlYWQ7CisgICAgSGFzaE1hcDxDQ1ZpZXcq
LCBDQ1ZpZXdJbXBsKj4gbV92aWV3VG9JbXBsTWFwOworICAgIEhhc2hNYXA8Q0NWaWV3SW1wbCos
IENDVmlldyo+IG1faW1wbFRvVmlld01hcDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDhiZWNkYmE4NDVjY2U4MGU0Zjk0YjU1OTkxM2I2MGVkNWNjOThm
OTcuLjdjYjI0MDVhYTg4MTY5N2ZiM2MxNjM3NTI1MGEzNDQxOWEyYjc1YjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMTAgIE5hdCBEdWNhICA8
bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1Y3R1cmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTMxCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdl
dDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRvQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpw
YWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpiZWdpbkZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wMy0yOSAgSm9obiBBYmQtRWwtTWFsZWsg
IDxqYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDM2ZmJmMzEzYWQx
NzQ2NGM0MWQ4ZDkyN2NiMjEzMmFkYWI2YWU4ODEuLjI4NGZmYzE1NTk5MDFiMjM4MzEzNmViOTQx
ZDZmNjZmMTk0OGZjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdl
dC5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBh
Ym92ZS4KICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CiAKKyAg
ICAvLyBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgd2lk
Z2V0IHNob3VsZCByZWRyYXcKKyAgICAvLyBpdHNlbGYsIGZvciBleGFtcGxlIGR1ZSB0byB3aW5k
b3cgZGFtYWdlLiBUaGUgcmVkcmF3IHdpbGwgYmVnaW4KKyAgICAvLyBhc3luY2hyb25vdXNseS4K
KyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSAgeyB9CisKICAgICAvLyBDYWxs
ZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhlbWUuCiAgICAgLy8g
SW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdpZGdldHMgbmVlZCB0
byByZS1yZW5kZXIKICAgICAvLyBvbiByZWNlaXZpbmcgdGhpcyBtZXNzYWdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNGVmYTg4MDU0Nzk2YTQyMTI2
OGI5YWMzMzc1NTI1OTk1Zjc1MDY0MC4uNTQ2NzNmM2M3OGU4MzA2NGQ2OTY2ZTQwYmYxMjAxNWZm
NzNmZTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtOTk3LDEyICs5OTcsMTcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNp
emUmIG5ld1NpemUpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGUoKQogeworICAgIGRvQW5p
bWF0ZShjdXJyZW50VGltZSgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6ZG9BbmltYXRlKGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBp
ZiAod2ViZnJhbWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1l
VmlldygpOwogICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3Jp
cHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgp
KSk7CisgICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRT
ZWNvbmRzVG9ET01UaW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKICAgICB9CiAjZW5kaWYKIH0K
QEAgLTEwNzIsNiArMTA3Nyw5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyog
Y2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
ZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAg
ICAgICBkb0NvbXBvc2l0ZSgpOwogCiAgICAgICAgIC8vIElmIGEgY2FudmFzIHdhcyBwYXNzZWQg
aW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKQEAgLTExMDAsOSArMTEwOCwxOSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAorCit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBkb0FuaW1hdGUoZnJhbWVCZWdpblRp
bWUpOworICAgIGxheW91dCgpOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9v
bCBmaW5pc2gpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICByZXR1cm47IC8vIEZJWE1FOiB3aGVuIHRoZSBSZW5k
ZXJXaWRnZXQgaXMgdXBkYXRlZCwgc3dpdGNoIHRvIEFTU0VSVF9OT1RfUkVBQ0hFRC4KKyNlbHNl
CiAgICAgVFJBQ0VfRVZFTlQoIldlYlZpZXdJbXBsOjpjb21wb3NpdGUiLCB0aGlzLCAwKTsKICAg
ICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CiAgICAgICAgIC8vIHJlYWxsb2Nh
dGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2Nl
ZWRlZApAQCAtMTEzMiw2ICsxMTUwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJv
b2wgZmluaXNoKQogICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAgICB9CiAj
ZW5kaWYKKyNlbmRpZgogfQogCiBjb25zdCBXZWJJbnB1dEV2ZW50KiBXZWJWaWV3SW1wbDo6bV9j
dXJyZW50SW5wdXRFdmVudCA9IDA7CkBAIC0yMzE1LDkgKzIzMzQsMjQgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIp
CiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiB9CiAK
K3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyNpZiBVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSkKKyAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJO
ZWVkc0Rpc3BsYXkoKQogeworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAo
bV9sYXllclJlbmRlcmVyLmdldCgpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CisjZWxzZQogICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0
ZSgpOworI2VuZGlmCiB9CiAKIApAQCAtMjQyNiw2ICsyNDYwLDkgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAg
ICB9CiAKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0
ZSh0aGlzKSwgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludGVyOjpjcmVhdGUodGhpcykpOworI2lm
IFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNl
dHRpbmdzKCk7CisjZW5kaWYKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewogICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsK
ICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKQEAg
LTI0NTIsMTMgKzI0ODksOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAg
aWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQo
KSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBodWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRz
VXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93
RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5n
cygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7Ci0KLSAgICBtX2xheWVyUmVuZGVyZXItPnVw
ZGF0ZUFuZERyYXdMYXllcnMoKTsKKyAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsK
KyAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJl
ci0+ZHJhd0xheWVycygpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVy
ZXIoKQpAQCAtMjQ2Nyw2ICsyNTAwLDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJl
bmRlcmVyKCkKICAgICAgICAgICAgIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBt
X3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpOwogICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQg
cmV0dXJuIDAsIGluIHRoYXQgY2FzZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSB3aWxs
IGFsc28gcmV0dXJuIDAuCiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJS
ZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG5ld0NvbnRleHQsIFdlYlZp
ZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgV2ViVmlld0ltcGxTY3JvbGxiYXJQ
YWludGVyOjpjcmVhdGUodGhpcykpOworI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAg
ICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyNlbmRpZgogCiAgICAgLy8gUmVhdHRh
Y2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2lsbCBnZXQgcmVhdHRhY2hlZCBhcyBh
IHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZS4KICAgICBpZiAobGF5ZXJSZW5k
ZXJlcikgewpAQCAtMjQ4Nyw5ICsyNTIzLDIzIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2Nh
dGVSZW5kZXJlcigpCiB9CiAjZW5kaWYKIAordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJS
ZW5kZXJlclNldHRpbmdzKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDbGllbnQodGhpcyk7CisgICAgbV9s
YXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRl
VG9UZXh0dXJlRW5hYmxlZCgpKTsKKworICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5
ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKKyAgICBodWQtPnNldFNob3dGUFNDb3VudGVy
KHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOworICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKK30KKwogdm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKIHsKLSAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDY2YjI5MDgxYmM0MDc2ZmU3MjUwYjFl
YzZiZGU2MzNmYzU2NzdkMjIuLjY1OTQ3YTQ5NDEyYTk1ZWQ1MTYxNzRlYWIxMmI1NDliOTAwYzYx
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtODYsNyAr
ODYsNyBAQCBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBXZWJTZXR0aW5nc0ltcGw7
CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJW
aWV3LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4geworY2xhc3MgV2ViVmlld0ltcGwg
OiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDVmlld0NsaWVudCwgcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9k
czoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKQEAgLTk3LDYgKzk3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUo
Ym9vbCBmaW5pc2gpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwogICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1cyhib29sIGVuYWJsZSk7CkBAIC0yMDAsNiArMjAxLDkgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29s
b3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5z
aWduZWQgYWN0aW9uKTsKIAorICAgIC8vIENDVmlld0NsaWVudAorICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKICAgICAvLyBXZWJWaWV3
SW1wbAogCiAgICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKQEAg
LTM0Myw2ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2
b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2b2lkIGRvVXBkYXRlQW5kQ29tcG9zaXRlKCk7CiAjZW5kaWYKIAogICAgIC8vIFJldHVybnMg
dGhlIG9uc2NyZWVuIDNEIGNvbnRleHQgdXNlZCBieSB0aGUgY29tcG9zaXRvci4gVGhpcyBpcwpA
QCAtNDA2LDExICs0MTEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uKTsKIAor
ICAgIHZvaWQgZG9BbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoYm9vbCk7CiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogICAgIHZvaWQgZG9QaXhl
bFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwog
ICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclJlbmRl
cmVyU2V0dGluZ3MoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOwog
I2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88149</attachid>
            <date>2011-04-04 16:15:13 -0700</date>
            <delta_ts>2011-04-04 17:31:03 -0700</delta_ts>
            <desc>Thread infrastructure only.</desc>
            <filename>bug-56131-20110404161512.patch</filename>
            <type>text/plain</type>
            <size>29129</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI1MDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDRmNTQwMDZjZWMxZWUz
MGEzYjA5OTE0OGY0YTk0NTYzNTcyNGM2Li44MjQwNGI0YmU2MjNhMjcyNDdhYzkzMjYxM2EyZmE0
YjlmMzFlOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDQtMDQgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIENDVGhyZWFkIGFzIHdlbGwgYXMgY29tbXVuaWNhdGlv
biBwcmltaXRpdmVzIGJldHdlZW4gQ0NUaHJlYWQKKyAgICAgICAgYW5kIHRoZSBtYWluIHRocmVh
ZC4gQ29tbXVuaWNhdGlvbiBtb2RlbHMgQ2hyb21lJ3MgYmFzZTo6VGFzaywgd2l0aCBDQ1Rhc2sg
cmVwcmVzZW50aW5nCisgICAgICAgIGFuIGFyYml0cmFyaWx5IHJ1bm5hYmxlIHRhc2ssIGFuZCBO
ZXdDQ1J1bm5hYmxlTWV0aG9kIGJlaW5nIHVzZWQgdG8gd3JhcCBjbGFzcyBtZXRob2QKKyAgICAg
ICAgaW52b2NhdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NOb25UaHJlYWRTYWZlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlOjpDQ05vblRocmVhZFNhZmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZTo6c2V0Q3VycmVudFRocmVhZFZhbGlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZU1lbWJlcjo6Q0NOb25UaHJlYWRTYWZlTWVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZU1lbWJlcjo6Y2FsbGVkT25W
YWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6OnNl
dEN1cnJlbnRUaHJlYWRWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVN
ZW1iZXI6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Omdl
dFVuc2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Om9wZXJh
dG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Om9wZXJhdG9y
LT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlTWVtYmVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGFzay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGFzazo6Q0NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUnVubmFibGVNZXRob2QwOjpDQ1J1bm5hYmxlTWV0aG9kMCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1J1bm5hYmxlTWV0aG9kMDo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVN
ZXRob2QxOjpDQ1J1bm5hYmxlTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxl
TWV0aG9kMTo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2QyOjpDQ1J1
bm5hYmxlTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kMjo6cnVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2QzOjpDQ1J1bm5hYmxlTWV0aG9k
Myk6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kMzo6cnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2Q0OjpDQ1J1bm5hYmxlTWV0aG9kNCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kNDo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
d0NDUnVubmFibGVNZXRob2QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6Z2V0
SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkNDVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
cG9zdFRhc2tPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6cnVuVGFza09uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cG9zdFRhc2tPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OnJ1bik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZDo6dGhyZWFkSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZl
bnQ6OkNDQ29tcGxldGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2
ZW50Ojp+Q0NDb21wbGV0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9u
RXZlbnQ6OndhaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6OnNpZ25h
bCk6CisKIDIwMTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFRyeSB0byBmaXggdGhlIEVGTCBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAyOTBiOTNhNTNkM2MyNWY3NWI5ODg2NjE5ZDBhNDY1MDhlODFkZjQyLi5iYmNjMWRmMDliNmI5
ZjlmZjU3OThlMjY0NjlmODFmNDFkZTczYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDE5LDYg
KzQwMTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NOb25UaHJlYWRTYWZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ05vblRocmVhZFNhZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjRmNTZhMzljMGEx
YmQ3NmM2YmJlYzUyOGIwMjFkNmJhYjFlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NOb25UaHJlYWRTYWZlLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ05vblRocmVhZFNhZmVfaAor
I2RlZmluZSBDQ05vblRocmVhZFNhZmVfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTm9uVGhyZWFkU2FmZSB7CitwdWJsaWM6
CisgICAgQ0NOb25UaHJlYWRTYWZlKCkgOiBtX3ZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkg
eyB9CisgICAgYm9vbCBjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dFRocmVhZCgpID09IG1fdmFsaWRUaHJlYWQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRUaHJlYWRW
YWxpZCgpIHsgbV92YWxpZFRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsgfQorCitwcml2YXRlOgor
ICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3ZhbGlkVGhyZWFkOworfTsKKwordGVtcGxhdGUg
PGNsYXNzIFQ+CitjbGFzcyBDQ05vblRocmVhZFNhZmVNZW1iZXIgeworcHVibGljOgorICAgIEND
Tm9uVGhyZWFkU2FmZU1lbWJlcigpIDogbV92YWxpZFRocmVhZChjdXJyZW50VGhyZWFkKCkpIHsg
fQorICAgIENDTm9uVGhyZWFkU2FmZU1lbWJlcihjb25zdCBUJiB2YWx1ZSkgOiBtX3ZhbGlkVGhy
ZWFkKGN1cnJlbnRUaHJlYWQoKSksIG1fdmFsdWUodmFsdWUpIHsgfQorCisgICAgYm9vbCBjYWxs
ZWRPblZhbGlkVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFRocmVhZCgpID09IG1fdmFs
aWRUaHJlYWQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRUaHJlYWRWYWxpZCgpIHsgbV92YWxpZFRo
cmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsgfQorCisgICAgVCYgZ2V0KCkgeyBBU1NFUlQoY2FsbGVk
T25WYWxpZFRocmVhZCgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBjb25zdCBUJiBnZXQoKSBj
b25zdCB7IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOyByZXR1cm4gbV92YWx1ZTsgfQor
CisgICAgVCYgZ2V0VW5zYWZlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGNvbnN0IFQmIGdl
dFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIFQmIG9wZXJhdG9yKigp
IHsgcmV0dXJuIGdldCgpOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KKworICAgIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmZ2V0KCk7IH0KKyAg
ICBjb25zdCBUKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmZ2V0KCk7IH0KKworICAgIFQm
IG9wZXJhdG9yPShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOworICAgIH0KKworIHByaXZhdGU6CisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVy
IG1fdmFsaWRUaHJlYWQ7CisgICAgVCBtX3ZhbHVlOworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGFz
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUYXNr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWMxODZkMjI4ZTcwZGNiZmY5YzYwMjJkYWFjYmM4Mjg4MDY5ODUyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGFzay5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDVGFza19oCisjZGVmaW5lIENDVGFza19oCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgZmlsZSBwcm92aWRlcyBhIHNpbXBs
aWZpZWQgdmVyc2lvbiBvZiBDaHJvbWUncyB0YXNrcyBhbmQgUnVubmFibGUgbWV0aG9kcyBzeXN0
ZW0uCitjbGFzcyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDVGFzaygpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBydW4oKSA9IDA7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUg
TT4KK2NsYXNzIENDUnVubmFibGVNZXRob2QwIDogcHVibGljIENDVGFzayB7CitwdWJsaWM6Cisg
ICAgQ0NSdW5uYWJsZU1ldGhvZDAoQyogb2JqZWN0LCBjb25zdCBNJiBtZXRob2QpCisgICAgICAg
IDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAobV9vYmplY3Qt
PiptX21ldGhvZCkoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgQyogbV9vYmplY3Q7CisgICAg
TSBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBl
bmFtZSBBUkcwPgorY2xhc3MgQ0NSdW5uYWJsZU1ldGhvZDEgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1
YmxpYzoKKyAgICBDQ1J1bm5hYmxlTWV0aG9kMShDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCwg
Y29uc3QgQVJHMCYgYXJnMCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwg
bV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fYXJnMChhcmcwKQorICAgIHsKKyAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAobV9vYmplY3QtPiptX21ldGhv
ZCkobV9hcmcwKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgQyogbV9vYmplY3Q7CisgICAgTSBt
X21ldGhvZDsKKyAgICBBUkcwIG1fYXJnMDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0
eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwLCB0eXBlbmFtZSBBUkcxPgorY2xhc3MgQ0NSdW5uYWJs
ZU1ldGhvZDIgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1YmxpYzoKKyAgICBDQ1J1bm5hYmxlTWV0aG9k
MihDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCwgY29uc3QgQVJH
MSYgYXJnMSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9tZXRob2Qo
bWV0aG9kKQorICAgICAgICAsIG1fYXJnMChhcmcwKQorICAgICAgICAsIG1fYXJnMShhcmcxKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAobV9v
YmplY3QtPiptX21ldGhvZCkobV9hcmcwLCBtX2FyZzEpOworICAgIH0KK3Byb3RlY3RlZDoKKyAg
ICBDKiBtX29iamVjdDsKKyAgICBNIG1fbWV0aG9kOworICAgIEFSRzAgbV9hcmcwOworICAgIEFS
RzEgbV9hcmcxOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVu
YW1lIEFSRzAsIHR5cGVuYW1lIEFSRzEsIHR5cGVuYW1lIEFSRzI+CitjbGFzcyBDQ1J1bm5hYmxl
TWV0aG9kMyA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVNZXRob2Qz
KEMqIG9iamVjdCwgY29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcx
JiBhcmcxLCBjb25zdCBBUkcyJiBhcmcyKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9hcmcwKGFyZzApCisgICAgICAg
ICwgbV9hcmcxKGFyZzEpCisgICAgICAgICwgbV9hcmcyKGFyZzIpCisgICAgeworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIChtX29iamVjdC0+Km1fbWV0aG9k
KShtX2FyZzAsIG1fYXJnMSwgbV9hcmcyKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgQyogbV9v
YmplY3Q7CisgICAgTSBtX21ldGhvZDsKKyAgICBBUkcwIG1fYXJnMDsKKyAgICBBUkcxIG1fYXJn
MTsKKyAgICBBUkcyIG1fYXJnMjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFt
ZSBNLCB0eXBlbmFtZSBBUkcwLCB0eXBlbmFtZSBBUkcxLCB0eXBlbmFtZSBBUkcyLCB0eXBlbmFt
ZSBBUkczPgorY2xhc3MgQ0NSdW5uYWJsZU1ldGhvZDQgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1Ymxp
YzoKKyAgICBDQ1J1bm5hYmxlTWV0aG9kNChDKiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCwgY29u
c3QgQVJHMCYgYXJnMCwgY29uc3QgQVJHMSYgYXJnMSwgY29uc3QgQVJHMiYgYXJnMiwgY29uc3Qg
QVJHMyYgYXJnMykKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9tZXRo
b2QobWV0aG9kKQorICAgICAgICAsIG1fYXJnMChhcmcwKQorICAgICAgICAsIG1fYXJnMShhcmcx
KQorICAgICAgICAsIG1fYXJnMihhcmcyKQorICAgICAgICAsIG1fYXJnMyhhcmczKQorICAgIHsK
KyAgICB9CisgICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAobV9vYmplY3Qt
PiptX21ldGhvZCkobV9hcmcwLCBtX2FyZzEsIG1fYXJnMiwgbV9hcmczKTsKKyAgICB9Citwcm90
ZWN0ZWQ6CisgICAgQyogbV9vYmplY3Q7CisgICAgTSBtX21ldGhvZDsKKyAgICBBUkcwIG1fYXJn
MDsKKyAgICBBUkcxIG1fYXJnMTsKKyAgICBBUkcyIG1fYXJnMjsKKyAgICBBUkczIG1fYXJnMzsK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNPgorUGFzc093blB0cjxDQ1Rh
c2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyogb2JqZWN0LCBjb25zdCBNJiBtZXRob2QpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1J1bm5hYmxlTWV0aG9kMDxDLCBNPihvYmplY3QsIG1l
dGhvZCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlwZW5hbWUg
QVJHMD4KK1Bhc3NPd25QdHI8Q0NUYXNrPiBOZXdDQ1J1bm5hYmxlTWV0aG9kKEMqIG9iamVjdCwg
Y29uc3QgTSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NSdW5uYWJsZU1ldGhvZDE8QywgTSwgQVJHMD4ob2JqZWN0LCBtZXRob2QsIGFyZzAp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIEFSRzAs
IHR5cGVuYW1lIEFSRzE+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3Q0NSdW5uYWJsZU1ldGhvZChD
KiBvYmplY3QsIGNvbnN0IE0mIG1ldGhvZCwgY29uc3QgQVJHMCYgYXJnMCwgY29uc3QgQVJHMSYg
YXJnMSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRob2QyPEMsIE0s
IEFSRzAsIEFSRzE+KG9iamVjdCwgbWV0aG9kLCBhcmcwLCBhcmcxKSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBBUkcwLCB0eXBlbmFtZSBBUkcxLCB0
eXBlbmFtZSBBUkcyPgorUGFzc093blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFibGVNZXRob2QoQyog
b2JqZWN0LCBjb25zdCBNJiBtZXRob2QsIGNvbnN0IEFSRzAmIGFyZzAsIGNvbnN0IEFSRzEmIGFy
ZzEsIGNvbnN0IEFSRzImIGFyZzIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1J1bm5h
YmxlTWV0aG9kMzxDLCBNLCBBUkcwLCBBUkcxLCBBUkcyPihvYmplY3QsIG1ldGhvZCwgYXJnMCwg
YXJnMSwgYXJnMikpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQywgdHlwZW5hbWUgTSwgdHlw
ZW5hbWUgQVJHMCwgdHlwZW5hbWUgQVJHMSwgdHlwZW5hbWUgQVJHMiwgdHlwZW5hbWUgQVJHMz4K
K1Bhc3NPd25QdHI8Q0NUYXNrPiBOZXdDQ1J1bm5hYmxlTWV0aG9kKEMqIG9iamVjdCwgY29uc3Qg
TSYgbWV0aG9kLCBjb25zdCBBUkcwJiBhcmcwLCBjb25zdCBBUkcxJiBhcmcxLCBjb25zdCBBUkcy
JiBhcmcyLCBjb25zdCBBUkczJiBhcmczKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NS
dW5uYWJsZU1ldGhvZDQ8QywgTSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMz4ob2JqZWN0LCBtZXRo
b2QsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iYTc2YTgxMWRjODQ2MWZiODAzYjAzNmY1YTIzMTBiYTI1NzJm
NzEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorCisjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworc3RhdGljIENDVGhyZWFkKiBjY1Ro
cmVhZCA9IDA7CisKKyNkZWZpbmUgQ09NTUlUX1NMT1dMWSAwCitQYXNzUmVmUHRyPENDVGhyZWFk
PiBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKQoreworICAgIGlmICghY2NUaHJlYWQpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaHJlYWQoKSk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8
Q0NUaHJlYWQ+KGNjVGhyZWFkKTsKK30KKworQ0NUaHJlYWQ6OkNDVGhyZWFkKCkKK3sKKyAgICBj
Y1RocmVhZCA9IHRoaXM7CisgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChDQ1RocmVhZDo6
cnVuLCB0aGlzLCAiQ2hyb21lIENvbXBvc2l0b3IgVGhyZWFkIik7Cit9CisKK0NDVGhyZWFkOjp+
Q0NUaHJlYWQoKQoreworICAgIC8vIFN0b3AgdGhyZWFkLgorICAgIG1fbWVzc2FnZVF1ZXVlLmtp
bGwoKTsKKyAgICB2b2lkKiB1bnVzZWQ7CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90
aHJlYWRJZCwgJnVudXNlZCk7CisgICAgbV90aHJlYWRJZCA9IDA7CisKKyAgICAvLyBTbGVhciBz
aW5nbGV0b24uCisgICAgY2NUaHJlYWQgPSAwOworfQorCisvLyBzdGF0aWMKK2Jvb2wgQ0NUaHJl
YWQ6OmlzQ29tcG9zaXRvclRocmVhZCgpCit7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gQ0NUaHJlYWQ6Omdl
dEluc3RhbmNlKCktPm1fdGhyZWFkSWQ7Cit9CisKK3ZvaWQgQ0NUaHJlYWQ6OnBvc3RUYXNrT25J
bXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNrPiB0YXNrKQoreworICAgIG1fbWVzc2FnZVF1ZXVl
LmFwcGVuZCh0YXNrKTsKK30KKworc3RhdGljIHZvaWQgcnVuVGFza09uTWFpblRocmVhZCh2b2lk
KiB1c2VyZGF0YSkKK3sKKyAgICAvLyBJZiB0aGUgdGhyZWFkIGlzIGRlYWQsIHRoZW4gdGhpcyB0
YXNrIGlzIHN0YWxlLCBlLmcuIHBvc3RlZAorICAgIC8vIGR1cmluZyBvciBzbGlnaHRseSBiZWZv
cmUgY29tcG9zaXRvciBzaHV0ZG93bi4KKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBSdW4gdGhlIHRhc2suCisgICAgQ0NUYXNrKiB0YXNrID0gc3RhdGljX2Nh
c3Q8Q0NUYXNrKj4odXNlcmRhdGEpOworICAgIHRhc2stPnJ1bigpOworICAgIGRlbGV0ZSB0YXNr
OworfQorCit2b2lkIENDVGhyZWFkOjpwb3N0VGFza09uTWFpblRocmVhZChQYXNzT3duUHRyPEND
VGFzaz4gdGFzaykKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKHJ1blRhc2tPbk1haW5UaHJlYWQs
IHRhc2subGVha1B0cigpKTsKK30KKwordm9pZCogQ0NUaHJlYWQ6OnJ1bih2b2lkKiB1c2VyZGF0
YSkKK3sKKyAgICBDQ1RocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWQqPih1c2Vy
ZGF0YSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgT3duUHRyPENDVGFzaz4gdGFzayh0
aHJlYWQtPm1fbWVzc2FnZVF1ZXVlLndhaXRGb3JNZXNzYWdlKCkpOworICAgICAgICBpZiAoIXRh
c2suZ2V0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdGFzay0+cnVuKCk7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWZjN2Mz
MjA0MmRhNTcyM2E5Yzc5N2QxZWE1MWZkODI2OTE3ZGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApAQCAt
MCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkX2gKKyNkZWZpbmUg
Q0NUaHJlYWRfaAorCisjaW5jbHVkZSAiY2MvQ0NUYXNrLmgiCisKKyNpbmNsdWRlIDx3dGYvTWVz
c2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBUaGUgQ0NUaHJlYWQgc2luZ2xldG9uIG93bnMgdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkIGFuZCBwcm92aWRlcworLy8gYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2lu
ZyBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gVGhlCisvLyB0aHJlYWQgaXMgYWxpdmUgYXMgbG9u
ZyBhcyBzb21lb25lIGhvbGRzIG9uIHRvIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gc2luZ2xldG9u
LgorY2xhc3MgQ0NUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ1RocmVhZD4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGhyZWFkPiBnZXRJbnN0YW5jZSgpOworICAgIHZp
cnR1YWwgfkNDVGhyZWFkKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0NvbXBvc2l0b3JUaHJlYWQo
KTsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhyZWFkIHNhZmUgYW5kIGNhbiBiZSBj
YWxsZWQgZnJvbSBhbnl3aGVyZS4KKyAgICB2b2lkIHBvc3RUYXNrT25JbXBsVGhyZWFkKFBhc3NP
d25QdHI8Q0NUYXNrPik7CisgICAgdm9pZCBwb3N0VGFza09uTWFpblRocmVhZChQYXNzT3duUHRy
PENDVGFzaz4pOworCisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkKCkgY29uc3Qg
eyByZXR1cm4gbV90aHJlYWRJZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gTWVzc2FnZSBzeXN0
ZW0gaW1wbGVtZW50YXRpb24KKyAgICBDQ1RocmVhZCgpOworICAgIHN0YXRpYyB2b2lkKiBydW4o
dm9pZCopOworCisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7CisgICAgTWVz
c2FnZVF1ZXVlPENDVGFzaz4gbV9tZXNzYWdlUXVldWU7Cit9OworCitjbGFzcyBDQ0NvbXBsZXRp
b25FdmVudCB7CitwdWJsaWM6CisgICAgQ0NDb21wbGV0aW9uRXZlbnQoKQorICAgIHsKKyAgICAg
ICAgbV9tdXRleC5sb2NrKCk7CisgICAgfQorCisgICAgfkNDQ29tcGxldGlvbkV2ZW50KCkKKyAg
ICB7CisgICAgICAgIG1fbXV0ZXgudW5sb2NrKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0KCkK
KyAgICB7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCk7CisgICAgfQorCisgICAg
dm9pZCBzaWduYWwoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
KyAgICAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE11
dGV4IG1fbXV0ZXg7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOGJlY2RiYTg0NWNjZTgwZTRm
OTRiNTU5OTEzYjYwZWQ1Y2M5OGY5Ny4uYmNkMmYzYjllNDBkZGUyMDk2N2E1Zjc4ZDg1NzAzNDIz
ZmE0ZTI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAx
MS0wNC0wNCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBDb21wb3NpdG9yIHRo
cmVhZCBpbmZyYXN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTYxMzEKKworICAgICAgICBBZGQgR01vY2sgYXMgZGVwZW5kZW5jeSBvZiB3
ZWJraXRfdW5pdF90ZXN0cy4gQWRkIHVuaXQgdGVzdHMgZm9yCisgICAgICAgIGNvbXBvc2l0b3Ig
dGhyZWFkIGluZnJhc3RydWN0dXJlLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1Rhc2tUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2ViQ29yZTo6UGlu
Z1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQaW5nUG9uZ1Rl
c3RVc2luZ1Rhc2tzOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBpbmdQb25nVGVzdFVzaW5n
VGFza3M6OnBvbmcpOgorICAgICAgICAqIHRlc3RzL1J1bkFsbFRlc3RzLmNwcDoKKyAgICAgICAg
KG1haW4pOgorCiAyMDExLTAzLTI5ICBKb2huIEFiZC1FbC1NYWxlayAgPGphbUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBkNDcyNDhlNGY1MjlkNDA4MzQzZWFlMTQwOGRkN2I2ZDZjYzEyNzU0Li5m
ZmE2ZDc3YzhiNGRjNTRiMmUxZDU4ZjZmYTQzZjE1NTU4MDY0ZmM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCkBAIC01OTcsNiArNTk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRf
YmFzZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9ndGVzdC5n
eXA6Z3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOion
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90
aGlyZF9wYXJ0eS9saWJqcGVnL2xpYmpwZWcuZ3lwOmxpYmpwZWcnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9saWJwbmcv
bGlicG5nLmd5cDpsaWJwbmcnLApAQCAtNzg4LDYgKzc4OSw3IEBACiAgICAgICAgICAgICAgICAg
J3dlYmtpdCcsCiAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6d2ViY29yZScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3Ny
Y19kaXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThuJywKICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDAxNmNmMWExYWJhZDMwNDM3MDljMjhl
MDZhMThmMTMxYmQ3NTYxNGYuLjI0OGQ3OTY2OTA2YmE0ZTQwZmYyYWVmNzlmZDZlMmQyYmE5MjE5
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsOCBAQAogICAg
ICAgICBdLAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAg
J3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUYXNrVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5k
aW5nVXRpbGl0aWVzVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGFza1Rl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Rhc2tUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZWY5YjQ2NGRkY2I0NDE1MjA0ZDdmOWNjMjdiNDhmYWQ0ZGNjODhlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Rhc2tUZXN0LmNwcApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ1Rhc2suaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrIHsKK3B1YmxpYzoKKyAgICBN
T0NLX01FVEhPRDAobWV0aG9kMCwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDEobWV0aG9kMSwg
dm9pZChpbnQgYTEpKTsKKyAgICBNT0NLX01FVEhPRDIobWV0aG9kMiwgdm9pZChpbnQgYTEsIGlu
dCBhMikpOworICAgIE1PQ0tfTUVUSE9EMyhtZXRob2QzLCB2b2lkKGludCBhMSwgaW50IGEyLCBp
bnQgYTMpKTsKKyAgICBNT0NLX01FVEhPRDQobWV0aG9kNCwgdm9pZChpbnQgYTEsIGludCBhMiwg
aW50IGEzLCBpbnQgYTQpKTsKK307CisKK1RFU1QoQ0NUYXNrVGVzdCwgcnVubmFibGVNZXRob2Rz
KQoreworICAgIE1vY2sgbW9jazsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QwKCkpLlRp
bWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDEoOSkpLlRpbWVzKDEpOworICAg
IEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOworICAgIEVYUEVDVF9D
QUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwgNykpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1v
Y2ssIG1ldGhvZDQoOSwgOCwgNywgNikpLlRpbWVzKDEpOworCisgICAgTmV3Q0NSdW5uYWJsZU1l
dGhvZCgmbW9jaywgJk1vY2s6Om1ldGhvZDApLT5ydW4oKTsKKyAgICBOZXdDQ1J1bm5hYmxlTWV0
aG9kKCZtb2NrLCAmTW9jazo6bWV0aG9kMSwgOSktPnJ1bigpOworICAgIE5ld0NDUnVubmFibGVN
ZXRob2QoJm1vY2ssICZNb2NrOjptZXRob2QyLCA5LCA4KS0+cnVuKCk7CisgICAgTmV3Q0NSdW5u
YWJsZU1ldGhvZCgmbW9jaywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5ydW4oKTsKKyAgICBO
ZXdDQ1J1bm5hYmxlTWV0aG9kKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnJ1
bigpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RocmVhZFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4Y2E0NDlkMTdiMTM5MmE3ZDY3MTkzNTU2
OTU1Y2YyMGEwYWNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKworI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBv
cnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK1RFU1Qo
Q0NUaHJlYWRUZXN0LCBvbmx5T25lVGhyZWFkKQoreworICAgIFJlZlB0cjxDQ1RocmVhZD4gdGhy
ZWFkID0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCk7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJl
YWQyID0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCk7CisgICAgRVhQRUNUX0VRKHRocmVhZC0+dGhy
ZWFkSWQoKSwgdGhyZWFkMi0+dGhyZWFkSWQoKSk7Cit9CisKK2NsYXNzIFBpbmdQb25nVXNpbmdD
b25kaXRpb24geworcHVibGljOgorICAgIHZvaWQgcGluZyhDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbikKKyAgICB7CisgICAgICAgIGhpdFRocmVhZElkID0gY3VycmVudFRocmVhZCgpOwor
ICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICB9CisKKyAgICBXVEY6OlRocmVhZElk
ZW50aWZpZXIgaGl0VGhyZWFkSWQ7Cit9OworCisKK1RFU1QoQ0NUaHJlYWRUZXN0LCBwaW5nUG9u
Z1VzaW5nQ29uZGl0aW9uKQoreworICAgIFJlZlB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJl
YWQ6OmdldEluc3RhbmNlKCk7CisgICAgUGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB0YXJnZXQ7Cisg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICB0aHJlYWQtPnBvc3RUYXNrT25J
bXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QoJnRhcmdldCwgJlBpbmdQb25nVXNpbmdDb25k
aXRpb246OnBpbmcsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAg
ICBFWFBFQ1RfRVEodGhyZWFkLT50aHJlYWRJZCgpLCB0YXJnZXQuaGl0VGhyZWFkSWQpOworfQor
CitjbGFzcyBQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzIHsKK3B1YmxpYzoKKyAgICB2b2lkIHBpbmco
KQorICAgIHsKKyAgICAgICAgQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCktPnBvc3RUYXNrT25NYWlu
VGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QodGhpcywgJlBpbmdQb25nVGVzdFVzaW5nVGFza3M6
OnBvbmcpKTsKKyAgICAgICAgaGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHBvbmcoKQor
ICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoaXNNYWluVGhyZWFkKCkpOworICAgICAgICB3ZWJr
aXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAgYm9vbCBoaXQ7Cit9
OworCitURVNUKENDVGhyZWFkVGVzdCwgc3RhcnRQb3N0QW5kV2FpdE9uQ29uZGl0aW9uKQorewor
ICAgIFJlZlB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCk7CisK
KyAgICBQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzIHRhcmdldDsKKyAgICB0aHJlYWQtPnBvc3RUYXNr
T25JbXBsVGhyZWFkKE5ld0NDUnVubmFibGVNZXRob2QoJnRhcmdldCwgJlBpbmdQb25nVGVzdFVz
aW5nVGFza3M6OnBpbmcpKTsKKyAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsK
KworICAgIEVYUEVDVF9UUlVFKHRhcmdldC5oaXQpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0cy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcAppbmRleCBiMjEzZGU3
OTMzYTViYzU3Mjg3ZjAxNzZhYTAzYzQ0MDc1NjAxNWVhLi41MDBjM2RjOGU1YTAxNTAzY2Y5NjEw
M2MwMjI1MjFiNzRlYTc3NzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1J1bkFsbFRlc3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1
bkFsbFRlc3RzLmNwcApAQCAtMzksOCArMzksMTEgQEAKICNpbmNsdWRlICJXZWJVbml0VGVzdHMu
aCIKICNlbmRpZgogCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKwogaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogeworICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZU1vY2soJmFyZ2Ms
IGFyZ3YpOwogICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUoYXJnYywgYXJndik7CiAgICAgLy8gVGVz
dFN1aXRlIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgU2V0VXBUZXN0RW52aXJvbm1lbnQgc28gaXQg
cGVyZm9ybXMKICAgICAvLyBpbml0aWFsaXphdGlvbnMgbmVlZGVkIGJ5IFdlYktpdCBzdXBwb3J0
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88172</attachid>
            <date>2011-04-04 17:31:06 -0700</date>
            <delta_ts>2011-04-07 00:24:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110404173105.patch</filename>
            <type>text/plain</type>
            <size>28726</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI1MDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDRmNTQwMDZjZWMxZWUz
MGEzYjA5OTE0OGY0YTk0NTYzNTcyNGM2Li44MjQwNGI0YmU2MjNhMjcyNDdhYzkzMjYxM2EyZmE0
YjlmMzFlOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDQtMDQgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIENDVGhyZWFkIGFzIHdlbGwgYXMgY29tbXVuaWNhdGlv
biBwcmltaXRpdmVzIGJldHdlZW4gQ0NUaHJlYWQKKyAgICAgICAgYW5kIHRoZSBtYWluIHRocmVh
ZC4gQ29tbXVuaWNhdGlvbiBtb2RlbHMgQ2hyb21lJ3MgYmFzZTo6VGFzaywgd2l0aCBDQ1Rhc2sg
cmVwcmVzZW50aW5nCisgICAgICAgIGFuIGFyYml0cmFyaWx5IHJ1bm5hYmxlIHRhc2ssIGFuZCBO
ZXdDQ1J1bm5hYmxlTWV0aG9kIGJlaW5nIHVzZWQgdG8gd3JhcCBjbGFzcyBtZXRob2QKKyAgICAg
ICAgaW52b2NhdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NOb25UaHJlYWRTYWZlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlOjpDQ05vblRocmVhZFNhZmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZTo6c2V0Q3VycmVudFRocmVhZFZhbGlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZU1lbWJlcjo6Q0NOb25UaHJlYWRTYWZlTWVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTm9uVGhyZWFkU2FmZU1lbWJlcjo6Y2FsbGVkT25W
YWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6OnNl
dEN1cnJlbnRUaHJlYWRWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVN
ZW1iZXI6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Omdl
dFVuc2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Om9wZXJh
dG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ05vblRocmVhZFNhZmVNZW1iZXI6Om9wZXJhdG9y
LT4pOgorICAgICAgICAoV2ViQ29yZTo6Q0NOb25UaHJlYWRTYWZlTWVtYmVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGFzay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGFzazo6Q0NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUnVubmFibGVNZXRob2QwOjpDQ1J1bm5hYmxlTWV0aG9kMCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1J1bm5hYmxlTWV0aG9kMDo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVN
ZXRob2QxOjpDQ1J1bm5hYmxlTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxl
TWV0aG9kMTo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2QyOjpDQ1J1
bm5hYmxlTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kMjo6cnVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2QzOjpDQ1J1bm5hYmxlTWV0aG9k
Myk6CisgICAgICAgIChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kMzo6cnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUnVubmFibGVNZXRob2Q0OjpDQ1J1bm5hYmxlTWV0aG9kNCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1J1bm5hYmxlTWV0aG9kNDo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
d0NDUnVubmFibGVNZXRob2QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6Z2V0
SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkNDVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
cG9zdFRhc2tPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6cnVuVGFza09uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cG9zdFRhc2tPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OnJ1bik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZDo6dGhyZWFkSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZl
bnQ6OkNDQ29tcGxldGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2
ZW50Ojp+Q0NDb21wbGV0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9u
RXZlbnQ6OndhaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6OnNpZ25h
bCk6CisKIDIwMTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFRyeSB0byBmaXggdGhlIEVGTCBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAyOTBiOTNhNTNkM2MyNWY3NWI5ODg2NjE5ZDBhNDY1MDhlODFkZjQyLi5iYmNjMWRmMDliNmI5
ZjlmZjU3OThlMjY0NjlmODFmNDFkZTczYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDE5LDYg
KzQwMTksOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NOb25UaHJlYWRTYWZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ05vblRocmVhZFNhZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjRmNTZhMzljMGEx
YmQ3NmM2YmJlYzUyOGIwMjFkNmJhYjFlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NOb25UaHJlYWRTYWZlLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ05vblRocmVhZFNhZmVfaAor
I2RlZmluZSBDQ05vblRocmVhZFNhZmVfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTm9uVGhyZWFkU2FmZSB7CitwdWJsaWM6
CisgICAgQ0NOb25UaHJlYWRTYWZlKCkgOiBtX3ZhbGlkVGhyZWFkKGN1cnJlbnRUaHJlYWQoKSkg
eyB9CisgICAgYm9vbCBjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dFRocmVhZCgpID09IG1fdmFsaWRUaHJlYWQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRUaHJlYWRW
YWxpZCgpIHsgbV92YWxpZFRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsgfQorCitwcml2YXRlOgor
ICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3ZhbGlkVGhyZWFkOworfTsKKwordGVtcGxhdGUg
PGNsYXNzIFQ+CitjbGFzcyBDQ05vblRocmVhZFNhZmVNZW1iZXIgeworcHVibGljOgorICAgIEND
Tm9uVGhyZWFkU2FmZU1lbWJlcigpIDogbV92YWxpZFRocmVhZChjdXJyZW50VGhyZWFkKCkpIHsg
fQorICAgIENDTm9uVGhyZWFkU2FmZU1lbWJlcihjb25zdCBUJiB2YWx1ZSkgOiBtX3ZhbGlkVGhy
ZWFkKGN1cnJlbnRUaHJlYWQoKSksIG1fdmFsdWUodmFsdWUpIHsgfQorCisgICAgYm9vbCBjYWxs
ZWRPblZhbGlkVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gY3VycmVudFRocmVhZCgpID09IG1fdmFs
aWRUaHJlYWQ7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRUaHJlYWRWYWxpZCgpIHsgbV92YWxpZFRo
cmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsgfQorCisgICAgVCYgZ2V0KCkgeyBBU1NFUlQoY2FsbGVk
T25WYWxpZFRocmVhZCgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBjb25zdCBUJiBnZXQoKSBj
b25zdCB7IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOyByZXR1cm4gbV92YWx1ZTsgfQor
CisgICAgVCYgZ2V0VW5zYWZlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGNvbnN0IFQmIGdl
dFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIFQmIG9wZXJhdG9yKigp
IHsgcmV0dXJuIGdldCgpOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KKworICAgIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmZ2V0KCk7IH0KKyAg
ICBjb25zdCBUKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmZ2V0KCk7IH0KKworICAgIFQm
IG9wZXJhdG9yPShjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOworICAgIH0KKworIHByaXZhdGU6CisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVy
IG1fdmFsaWRUaHJlYWQ7CisgICAgVCBtX3ZhbHVlOworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGFz
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUYXNr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDQyNzJmY2ViMGJkODEzMWE5N2YwYmJiYjZiZTdjZDA4Y2Y4NDQ4Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGFzay5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENDVGFza19oCisjZGVmaW5lIENDVGFza19oCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgZmlsZSBwcm92aWRlcyBhIHNpbXBs
aWZpZWQgdmVyc2lvbiBvZiBDaHJvbWUncyB0YXNrcyBhbmQgUnVubmFibGUgbWV0aG9kcyBzeXN0
ZW0uCitjbGFzcyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDVGFzaygpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBydW4oKSA9IDA7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
TWV0aG9kPgorY2xhc3MgQ0NSdW5uYWJsZU1ldGhvZDAgOiBwdWJsaWMgQ0NUYXNrIHsKK3B1Ymxp
YzoKKyAgICBDQ1J1bm5hYmxlTWV0aG9kMChUKiBvYmplY3QsIGNvbnN0IE1ldGhvZCYgbWV0aG9k
KQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2Qp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAg
KG1fb2JqZWN0LT4qbV9tZXRob2QpKCk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFQqIG1fb2Jq
ZWN0OworICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBNZXRob2QsIHR5cGVuYW1lIEE+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kMSA6IHB1
YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVNZXRob2QxKFQqIG9iamVjdCwg
Y29uc3QgTWV0aG9kJiBtZXRob2QsIGNvbnN0IEEmIGEpCisgICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX2EoYSkKKyAgICB7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgKG1fb2JqZWN0
LT4qbV9tZXRob2QpKG1fYSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFQqIG1fb2JqZWN0Owor
ICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBBIG1fYTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBNZXRob2QsIHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+CitjbGFzcyBDQ1J1
bm5hYmxlTWV0aG9kMiA6IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVN
ZXRob2QyKFQqIG9iamVjdCwgY29uc3QgTWV0aG9kJiBtZXRob2QsIGNvbnN0IEEmIGEsIGNvbnN0
IEImIGIpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fbWV0aG9kKG1l
dGhvZCkKKyAgICAgICAgLCBtX2EoYSkKKyAgICAgICAgLCBtX2IoYikKKyAgICB7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgKG1fb2JqZWN0LT4qbV9tZXRo
b2QpKG1fYSwgbV9iKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgVCogbV9vYmplY3Q7CisgICAg
TWV0aG9kIG1fbWV0aG9kOworICAgIEEgbV9hOworICAgIEIgbV9iOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1ldGhvZCwgdHlwZW5hbWUgQSwgdHlwZW5hbWUgQiwgdHlw
ZW5hbWUgQz4KK2NsYXNzIENDUnVubmFibGVNZXRob2QzIDogcHVibGljIENDVGFzayB7CitwdWJs
aWM6CisgICAgQ0NSdW5uYWJsZU1ldGhvZDMoVCogb2JqZWN0LCBjb25zdCBNZXRob2QmIG1ldGhv
ZCwgY29uc3QgQSYgYSwgY29uc3QgQiYgYiwgY29uc3QgQyYgYykKKyAgICAgICAgOiBtX29iamVj
dChvYmplY3QpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fYShhKQor
ICAgICAgICAsIG1fYihiKQorICAgICAgICAsIG1fYyhjKQorICAgIHsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICAobV9vYmplY3QtPiptX21ldGhvZCkobV9h
LCBtX2IsIG1fYyk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFQqIG1fb2JqZWN0OworICAgIE1l
dGhvZCBtX21ldGhvZDsKKyAgICBBIG1fYTsKKyAgICBCIG1fYjsKKyAgICBDIG1fYzsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBNZXRob2QsIHR5cGVuYW1lIEEsIHR5cGVu
YW1lIEIsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIEQ+CitjbGFzcyBDQ1J1bm5hYmxlTWV0aG9kNCA6
IHB1YmxpYyBDQ1Rhc2sgeworcHVibGljOgorICAgIENDUnVubmFibGVNZXRob2Q0KFQqIG9iamVj
dCwgY29uc3QgTWV0aG9kJiBtZXRob2QsIGNvbnN0IEEmIGEsIGNvbnN0IEImIGIsIGNvbnN0IEMm
IGMsIGNvbnN0IEQmIGQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1f
bWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX2EoYSkKKyAgICAgICAgLCBtX2IoYikKKyAgICAg
ICAgLCBtX2MoYykKKyAgICAgICAgLCBtX2QoZCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgKG1fb2JqZWN0LT4qbV9tZXRob2QpKG1fYSwgbV9i
LCBtX2MsIG1fZCk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIFQqIG1fb2JqZWN0OworICAgIE1l
dGhvZCBtX21ldGhvZDsKKyAgICBBIG1fYTsKKyAgICBCIG1fYjsKKyAgICBDIG1fYzsKKyAgICBE
IG1fZDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBNZXRob2Q+CitQYXNz
T3duUHRyPENDVGFzaz4gTmV3Q0NSdW5uYWJsZU1ldGhvZChUKiBvYmplY3QsIGNvbnN0IE1ldGhv
ZCYgbWV0aG9kKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSdW5uYWJsZU1ldGhvZDA8
VCwgTWV0aG9kPihvYmplY3QsIG1ldGhvZCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgTWV0aG9kLCB0eXBlbmFtZSBBPgorUGFzc093blB0cjxDQ1Rhc2s+IE5ld0NDUnVu
bmFibGVNZXRob2QoVCogb2JqZWN0LCBjb25zdCBNZXRob2QmIG1ldGhvZCwgY29uc3QgQSYgYSkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUnVubmFibGVNZXRob2QxPFQsIE1ldGhvZCwg
QT4ob2JqZWN0LCBtZXRob2QsIGEpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIE1ldGhvZCwgdHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4KK1Bhc3NPd25QdHI8Q0NUYXNrPiBO
ZXdDQ1J1bm5hYmxlTWV0aG9kKFQqIG9iamVjdCwgY29uc3QgTWV0aG9kJiBtZXRob2QsIGNvbnN0
IEEmIGEsIGNvbnN0IEImIGIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1J1bm5hYmxl
TWV0aG9kMjxULCBNZXRob2QsIEEsIEI+KG9iamVjdCwgbWV0aG9kLCBhLCBiKSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBNZXRob2QsIHR5cGVuYW1lIEEsIHR5cGVuYW1l
IEIsIHR5cGVuYW1lIEM+CitQYXNzT3duUHRyPENDVGFzaz4gTmV3Q0NSdW5uYWJsZU1ldGhvZChU
KiBvYmplY3QsIGNvbnN0IE1ldGhvZCYgbWV0aG9kLCBjb25zdCBBJiBhLCBjb25zdCBCJiBiLCBj
b25zdCBDJiBjKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSdW5uYWJsZU1ldGhvZDM8
VCwgTWV0aG9kLCBBLCBCLCBDPihvYmplY3QsIG1ldGhvZCwgYSwgYiwgYykpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTWV0aG9kLCB0eXBlbmFtZSBBLCB0eXBlbmFtZSBC
LCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBEPgorUGFzc093blB0cjxDQ1Rhc2s+IE5ld0NDUnVubmFi
bGVNZXRob2QoVCogb2JqZWN0LCBjb25zdCBNZXRob2QmIG1ldGhvZCwgY29uc3QgQSYgYSwgY29u
c3QgQiYgYiwgY29uc3QgQyYgYywgY29uc3QgRCYgZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDUnVubmFibGVNZXRob2Q0PFQsIE1ldGhvZCwgQSwgQiwgQywgRD4ob2JqZWN0LCBtZXRo
b2QsIGEsIGIsIGMsIGQpKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kYWEzM2IwY2QyNDUwODgyNjZlZmVlY2EyNTBiNmI5ZTMyYjdjNzY2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorCisjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKKworc3RhdGljIENDVGhyZWFkKiBjY1RocmVhZCA9IDA7CisK
K1Bhc3NSZWZQdHI8Q0NUaHJlYWQ+IENDVGhyZWFkOjpnZXRJbnN0YW5jZSgpCit7CisgICAgaWYg
KCFjY1RocmVhZCkgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDVGhyZWFkKCkpOworICAgIH0KKyAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxDQ1RocmVhZD4oY2NUaHJlYWQpOworfQorCitDQ1RocmVhZDo6Q0NUaHJlYWQoKQorewor
ICAgIGNjVGhyZWFkID0gdGhpczsKKyAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKENDVGhy
ZWFkOjpydW4sIHRoaXMsICJDaHJvbWUgQ29tcG9zaXRvciBUaHJlYWQiKTsKK30KKworQ0NUaHJl
YWQ6On5DQ1RocmVhZCgpCit7CisgICAgLy8gU3RvcCB0aHJlYWQuCisgICAgbV9tZXNzYWdlUXVl
dWUua2lsbCgpOworICAgIHZvaWQqIGV4aXRDb2RlOworICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKG1fdGhyZWFkSWQsICZleGl0Q29kZSk7CisgICAgbV90aHJlYWRJZCA9IDA7CisKKyAgICAv
LyBTbGVhciBzaW5nbGV0b24uCisgICAgY2NUaHJlYWQgPSAwOworfQorCisvLyBzdGF0aWMKK2Jv
b2wgQ0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCgpCit7CisgICAgaWYgKCFjY1RocmVhZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gQ0NU
aHJlYWQ6OmdldEluc3RhbmNlKCktPm1fdGhyZWFkSWQ7Cit9CisKK3ZvaWQgQ0NUaHJlYWQ6OnBv
c3RUYXNrT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNrPiB0YXNrKQoreworICAgIG1fbWVz
c2FnZVF1ZXVlLmFwcGVuZCh0YXNrKTsKK30KKworc3RhdGljIHZvaWQgcnVuVGFza09uTWFpblRo
cmVhZCh2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBDQ1Rhc2sqIHRhc2sgPSBzdGF0aWNfY2FzdDxD
Q1Rhc2sqPih1c2VyZGF0YSk7CisgICAgdGFzay0+cnVuKCk7CisgICAgZGVsZXRlIHRhc2s7Cit9
CisKK3ZvaWQgQ0NUaHJlYWQ6OnBvc3RUYXNrT25NYWluVGhyZWFkKFBhc3NPd25QdHI8Q0NUYXNr
PiB0YXNrKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQocnVuVGFza09uTWFpblRocmVhZCwgdGFz
ay5sZWFrUHRyKCkpOworfQorCit2b2lkKiBDQ1RocmVhZDo6cnVuKHZvaWQqIHVzZXJkYXRhKQor
eworICAgIENDVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxDQ1RocmVhZCo+KHVzZXJkYXRh
KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBPd25QdHI8Q0NUYXNrPiB0YXNrKHRocmVh
ZC0+bV9tZXNzYWdlUXVldWUud2FpdEZvck1lc3NhZ2UoKSk7CisgICAgICAgIGlmICghdGFzay5n
ZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0YXNrLT5ydW4oKTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZmM3YzMyMDQy
ZGE1NzIzYTljNzk3ZDFlYTUxZmQ4MjY5MTdkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCkBAIC0wLDAg
KzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUaHJlYWRfaAorI2RlZmluZSBDQ1Ro
cmVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ1Rhc2suaCIKKworI2luY2x1ZGUgPHd0Zi9NZXNzYWdl
UXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFRoZSBDQ1RocmVhZCBzaW5nbGV0b24gb3ducyB0aGUgY29tcG9zaXRvciB0aHJl
YWQgYW5kIHByb3ZpZGVzCisvLyBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3IgbWVzc2FnaW5nIGJl
dHdlZW4gdGhlIHR3byB0aHJlYWRzLiBUaGUKKy8vIHRocmVhZCBpcyBhbGl2ZSBhcyBsb25nIGFz
IHNvbWVvbmUgaG9sZHMgb24gdG8gYSByZWZlcmVuY2UgdG8gdGhlCisvLyBzaW5nbGV0b24uCitj
bGFzcyBDQ1RocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPENDVGhyZWFkPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+IGdldEluc3RhbmNlKCk7CisgICAgdmlydHVh
bCB+Q0NUaHJlYWQoKTsKKworICAgIHN0YXRpYyBib29sIGlzQ29tcG9zaXRvclRocmVhZCgpOwor
CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aHJlYWQgc2FmZSBhbmQgY2FuIGJlIGNhbGxl
ZCBmcm9tIGFueXdoZXJlLgorICAgIHZvaWQgcG9zdFRhc2tPbkltcGxUaHJlYWQoUGFzc093blB0
cjxDQ1Rhc2s+KTsKKyAgICB2b2lkIHBvc3RUYXNrT25NYWluVGhyZWFkKFBhc3NPd25QdHI8Q0NU
YXNrPik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSWQoKSBjb25zdCB7IHJl
dHVybiBtX3RocmVhZElkOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBNZXNzYWdlIHN5c3RlbSBp
bXBsZW1lbnRhdGlvbgorICAgIENDVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQqIHJ1bih2b2lk
Kik7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBNZXNzYWdl
UXVldWU8Q0NUYXNrPiBtX21lc3NhZ2VRdWV1ZTsKK307CisKK2NsYXNzIENDQ29tcGxldGlvbkV2
ZW50IHsKK3B1YmxpYzoKKyAgICBDQ0NvbXBsZXRpb25FdmVudCgpCisgICAgeworICAgICAgICBt
X211dGV4LmxvY2soKTsKKyAgICB9CisKKyAgICB+Q0NDb21wbGV0aW9uRXZlbnQoKQorICAgIHsK
KyAgICAgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXQoKQorICAg
IHsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4KTsKKyAgICB9CisKKyAgICB2b2lk
IHNpZ25hbCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAg
ICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTXV0ZXgg
bV9tdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247Cit9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4YmVjZGJhODQ1Y2NlODBlNGY5NGI1
NTk5MTNiNjBlZDVjYzk4Zjk3Li5iY2QyZjNiOWU0MGRkZTIwOTY3YTVmNzhkODU3MDM0MjNmYTRl
MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTA0
LTA0ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIENvbXBvc2l0b3IgdGhyZWFk
IGluZnJhc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NjEzMQorCisgICAgICAgIEFkZCBHTW9jayBhcyBkZXBlbmRlbmN5IG9mIHdlYmtp
dF91bml0X3Rlc3RzLiBBZGQgdW5pdCB0ZXN0cyBmb3IKKyAgICAgICAgY29tcG9zaXRvciB0aHJl
YWQgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDVGFza1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGVzdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlOjpQaW5nUG9u
Z1VzaW5nQ29uZGl0aW9uOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBpbmdQb25nVGVzdFVz
aW5nVGFza3M6OnBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGluZ1BvbmdUZXN0VXNpbmdUYXNr
czo6cG9uZyk6CisgICAgICAgICogdGVzdHMvUnVuQWxsVGVzdHMuY3BwOgorICAgICAgICAobWFp
bik6CisKIDIwMTEtMDMtMjkgIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IGQ0NzI0OGU0ZjUyOWQ0MDgzNDNlYWUxNDA4ZGQ3YjZkNmNjMTI3NTQuLmZmYTZk
NzdjOGI0ZGM1NGIyZTFkNThmNmZhNDNmMTU1NTgwNjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKQEAgLTU5Nyw2ICs1OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNl
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
YnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2d0ZXN0Lmd5cDpn
dGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6KicsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L2xpYmpwZWcvbGlianBlZy5neXA6bGlianBlZycsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2xpYnBuZy9saWJw
bmcuZ3lwOmxpYnBuZycsCkBAIC03ODgsNiArNzg5LDcgQEAKICAgICAgICAgICAgICAgICAnd2Vi
a2l0JywKICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cDp3ZWJjb3JlJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0
aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21p
dW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDpiYXNlX2kxOG4nLAogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMDE2Y2YxYTFhYmFkMzA0MzcwOWMyOGUwNmEx
OGYxMzFiZDc1NjE0Zi4uMjQ4ZDc5NjY5MDZiYTRlNDBmZjJhZWY3OWZkNmUyZDJiYTkyMTkxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2ICs1Myw4IEBACiAgICAgICAg
IF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVz
dHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1Rhc2tUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdV
dGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUYXNrVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGFza1Rlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBlZjliNDY0ZGRjYjQ0MTUyMDRkN2Y5Y2MyN2I0OGZhZDRkY2M4OGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGFza1Rlc3QuY3BwCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImNjL0NDVGFzay5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2sgeworcHVibGljOgorICAgIE1PQ0tf
TUVUSE9EMChtZXRob2QwLCB2b2lkKCkpOworICAgIE1PQ0tfTUVUSE9EMShtZXRob2QxLCB2b2lk
KGludCBhMSkpOworICAgIE1PQ0tfTUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBhMSwgaW50IGEy
KSk7CisgICAgTU9DS19NRVRIT0QzKG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBh
MykpOworICAgIE1PQ0tfTUVUSE9ENChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQg
YTMsIGludCBhNCkpOworfTsKKworVEVTVChDQ1Rhc2tUZXN0LCBydW5uYWJsZU1ldGhvZHMpCit7
CisgICAgTW9jayBtb2NrOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDAoKSkuVGltZXMo
MSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMSg5KSkuVGltZXMoMSk7CisgICAgRVhQ
RUNUX0NBTEwobW9jaywgbWV0aG9kMig5LCA4KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwo
bW9jaywgbWV0aG9kMyg5LCA4LCA3KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywg
bWV0aG9kNCg5LCA4LCA3LCA2KSkuVGltZXMoMSk7CisKKyAgICBOZXdDQ1J1bm5hYmxlTWV0aG9k
KCZtb2NrLCAmTW9jazo6bWV0aG9kMCktPnJ1bigpOworICAgIE5ld0NDUnVubmFibGVNZXRob2Qo
Jm1vY2ssICZNb2NrOjptZXRob2QxLCA5KS0+cnVuKCk7CisgICAgTmV3Q0NSdW5uYWJsZU1ldGhv
ZCgmbW9jaywgJk1vY2s6Om1ldGhvZDIsIDksIDgpLT5ydW4oKTsKKyAgICBOZXdDQ1J1bm5hYmxl
TWV0aG9kKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnJ1bigpOworICAgIE5ld0ND
UnVubmFibGVNZXRob2QoJm1vY2ssICZNb2NrOjptZXRob2Q0LCA5LCA4LCA3LCA2KS0+cnVuKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThjYTQ0OWQxN2IxMzkyYTdkNjcxOTM1NTY5NTVj
ZjIwYTBhY2ZhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorCisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworVEVTVChDQ1Ro
cmVhZFRlc3QsIG9ubHlPbmVUaHJlYWQpCit7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJlYWQg
PSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBSZWZQdHI8Q0NUaHJlYWQ+IHRocmVhZDIg
PSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBFWFBFQ1RfRVEodGhyZWFkLT50aHJlYWRJ
ZCgpLCB0aHJlYWQyLT50aHJlYWRJZCgpKTsKK30KKworY2xhc3MgUGluZ1BvbmdVc2luZ0NvbmRp
dGlvbiB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5nKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQorICAgIHsKKyAgICAgICAgaGl0VGhyZWFkSWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAg
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIH0KKworICAgIFdURjo6VGhyZWFkSWRlbnRp
ZmllciBoaXRUaHJlYWRJZDsKK307CisKKworVEVTVChDQ1RocmVhZFRlc3QsIHBpbmdQb25nVXNp
bmdDb25kaXRpb24pCit7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6
Z2V0SW5zdGFuY2UoKTsKKyAgICBQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uIHRhcmdldDsKKyAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIHRocmVhZC0+cG9zdFRhc2tPbkltcGxU
aHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCgmdGFyZ2V0LCAmUGluZ1BvbmdVc2luZ0NvbmRpdGlv
bjo6cGluZywgJmNvbXBsZXRpb24pKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEVY
UEVDVF9FUSh0aHJlYWQtPnRocmVhZElkKCksIHRhcmdldC5oaXRUaHJlYWRJZCk7Cit9CisKK2Ns
YXNzIFBpbmdQb25nVGVzdFVzaW5nVGFza3MgeworcHVibGljOgorICAgIHZvaWQgcGluZygpCisg
ICAgeworICAgICAgICBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKS0+cG9zdFRhc2tPbk1haW5UaHJl
YWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCh0aGlzLCAmUGluZ1BvbmdUZXN0VXNpbmdUYXNrczo6cG9u
ZykpOworICAgICAgICBoaXQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcG9uZygpCisgICAg
eworICAgICAgICBFWFBFQ1RfVFJVRShpc01haW5UaHJlYWQoKSk7CisgICAgICAgIHdlYmtpdF9z
dXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9CisKKyAgICBib29sIGhpdDsKK307CisK
K1RFU1QoQ0NUaHJlYWRUZXN0LCBzdGFydFBvc3RBbmRXYWl0T25Db25kaXRpb24pCit7CisgICAg
UmVmUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKworICAg
IFBpbmdQb25nVGVzdFVzaW5nVGFza3MgdGFyZ2V0OworICAgIHRocmVhZC0+cG9zdFRhc2tPbklt
cGxUaHJlYWQoTmV3Q0NSdW5uYWJsZU1ldGhvZCgmdGFyZ2V0LCAmUGluZ1BvbmdUZXN0VXNpbmdU
YXNrczo6cGluZykpOworICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisg
ICAgRVhQRUNUX1RSVUUodGFyZ2V0LmhpdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCmluZGV4IGIyMTNkZTc5MzNh
NWJjNTcyODdmMDE3NmFhMDNjNDQwNzU2MDE1ZWEuLjUwMGMzZGM4ZTVhMDE1MDNjZjk2MTAzYzAy
MjUyMWI3NGVhNzc3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
UnVuQWxsVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxs
VGVzdHMuY3BwCkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgIldlYlVuaXRUZXN0cy5oIgog
I2VuZGlmCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorCiBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlTW9jaygmYXJnYywgYXJn
dik7CiAgICAgVGVzdFN1aXRlIHRlc3RTdWl0ZShhcmdjLCBhcmd2KTsKICAgICAvLyBUZXN0U3Vp
dGUgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBTZXRVcFRlc3RFbnZpcm9ubWVudCBzbyBpdCBwZXJm
b3JtcwogICAgIC8vIGluaXRpYWxpemF0aW9ucyBuZWVkZWQgYnkgV2ViS2l0IHN1cHBvcnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88583</attachid>
            <date>2011-04-07 00:24:42 -0700</date>
            <delta_ts>2011-04-07 01:27:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110407002441.patch</filename>
            <type>text/plain</type>
            <size>40806</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmMmVhNjRmMDgyYzJhNzgz
Yzc0MDk1OGFmNzRhZTY4ZTgwYjhjMzUyLi45OWExZWZhMzFhMjM2Nzg4ODYxMTNkYjM2Nzc3ZGRk
NjAwMWUwMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDQtMDcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIENDVGhyZWFkIGFuZCBhc3NvY2lhdGVkIGNvbW11bmlj
YXRpb24gcHJpbWl0aXZlcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NNYWluVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q0NNYWluVGhyZWFkOjpUYXNrOjp+VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ01haW5UaHJl
YWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6VGFz
azo6VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWlu
VGhyZWFkVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6TWFpblRocmVhZFRh
c2swKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6cGVyZm9ybVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2sxOjpNYWluVGhyZWFkVGFzazEpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFpblRocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazI6
Ok1haW5UaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazI6OnBl
cmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6TWFpblRocmVhZFRhc2szKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlTWFpblRocmVhZFRhc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmNvbXBv
c2l0b3JUaHJlYWRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cnVuTG9vcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6VGFzazo6flRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkOjpUYXNrOjpUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp0aHJlYWRJ
RCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6Q0NDb21wbGV0aW9uRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6On5DQ0NvbXBsZXRpb25F
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6d2FpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6c2lnbmFsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFRhc2swOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRUYXNrMDo6Q0NUaHJlYWRUYXNrMCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRh
c2swOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMTo6Q0NUaHJlYWRUYXNrMSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFRhc2syOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRUYXNrMjo6Q0NUaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sy
OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMzo6Q0NUaHJlYWRUYXNrMyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDQ1RocmVhZFRhc2spOgorCiAyMDExLTA0LTA2ICBKaWEgUHUgIDxqcHVAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGE3ZTdmYmEyOTBiYTMwMDU0MTU3MmU5OTQyZDU1YzYxNDUzODBiY2IuLjc4ZTU0NGQ5
NGU1YWU2NzM5OGEzYTJjNWU5MGUwODEwODg0ZjQxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQw
MjcsOCArNDAyNywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjY5ZWE5YWExM2ZmN2FkOTUyNTNhOTI0MWNmNDgz
OTk3MmZkOTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFk
LmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ0NNYWluVGhyZWFkOjpwZXJmb3JtVGFz
ayh2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBUYXNrKiB0YXNrID0gc3RhdGljX2Nhc3Q8VGFzayo+
KHVzZXJkYXRhKTsKKyAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAgIGRlbGV0ZSB0YXNrOwor
fQorCit2b2lkIENDTWFpblRocmVhZDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKQor
eworICAgIGNhbGxPbk1haW5UaHJlYWQocGVyZm9ybVRhc2ssIHRhc2subGVha1B0cigpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzlhYTYzNmQwNGY0ZWMwMDJh
N2UxYzgxMjk1ZmIyYmI1Yzg5MmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmgKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NNYWluVGhyZWFkX2gKKyNkZWZpbmUgQ0NNYWlu
VGhyZWFkX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0MgZG9lc24ndCBoYXZl
IGFjY2VzcyB0byBTY3JpcHRFeGVjdXRpb25Db250eHQgc28gd2UgaGF2ZSB0byBkdXBsaWNhdGUg
dGhpcworLy8gZnVuY3Rpb25hbGl0eS4gVGhlc2UgdGFza3Mgcm91dGUgdG8gdGhlIHdlYmtpdCBt
YWluIGxvb3AKK2NsYXNzIENDTWFpblRocmVhZCB7CitwdWJsaWM6CisgICAgY2xhc3MgVGFzayB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2spOworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+VGFzaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KSA9IDA7CisgICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVGFzayh2b2lkKiBpbnN0YW5jZSkgOiBtX2lu
c3RhbmNlKGluc3RhbmNlKSB7IH0KKyAgICAgICAgdm9pZCogbV9pbnN0YW5jZTsKKyAgICB9Owor
CisgICAgc3RhdGljIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVz
IHRoZSB0YXNrIG9uIG1haW4gdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorcHJpdmF0ZToKKyAgICBz
dGF0aWMgdm9pZCBwZXJmb3JtVGFzayh2b2lkKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBDQ01haW5UaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdkZThkNzEzZTg4Yzg4NDIyMjQwNzkzZmYyNzdkNTlkZjUzYWRlN2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIENDTWFpblRocmVhZFRhc2tfaAorI2RlZmluZSBDQ01haW5UaHJlYWRUYXNrX2gK
KworI2luY2x1ZGUgIkNDTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVy
LmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBNYWluVGhyZWFkVGFzazAgOiBwdWJsaWMg
Q0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRo
b2QpKCk7CisgICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazA8VD4gTWFpblRocmVhZFRhc2tJbXBs
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCog
aW5zdGFuY2UsIE1ldGhvZCBtZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIE1haW5UaHJlYWRUYXNrMChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAg
ICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2Qo
bWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQor
ICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKSgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3MgTWFpblRocmVh
ZFRhc2sxIDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kKShNUDEpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2sxPFQs
IFAxLCBNUDE+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFz
c093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1l
dGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrMShUKiBpbnN0YW5jZSwgTWV0aG9k
IG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNr
KGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFt
ZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLipt
X21ldGhvZCkobV9wYXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1f
bWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+Citj
bGFzcyBNYWluVGhyZWFkVGFzazIgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVm
IE1haW5UaHJlYWRUYXNrMjxULCBQMSwgTVAxLCBQMiwgTVAyPiBNYWluVGhyZWFkVGFza0ltcGw7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5
cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAy
Pjo6UGFyYW1UeXBlIFBhcmFtMjsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRU
YXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1l
dGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJh
bWV0ZXIyKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrMihUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0
YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAg
ICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzPgorY2xhc3MgTWFpblRocmVhZFRhc2szIDogcHVibGljIENDTWFpblRocmVh
ZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1Q
MiwgTVAzKTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrMzxULCBQMSwgTVAxLCBQMiwgTVAy
LCBQMywgTVAzPiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJh
bTM7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShU
KiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVh
ZFRhc2szKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IENDTWFpblRocmVh
ZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwg
bV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRl
cjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19j
YXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIy
LCBtX3BhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3Bh
cmFtZXRlcjM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ01haW5U
aHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwK
KyAgICB2b2lkIChUOjoqbWV0aG9kKSgpKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Bhc3NP
d25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBj
b25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoKSkKK3sKKyAgICByZXR1cm4gTWFp
blRocmVhZFRhc2swPFQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9k
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4K
K1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAg
ICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxKSwKKyAgICBjb25z
dCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2sxPFQsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAgICAgICBj
YWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpj
b3B5KHBhcmFtZXRlcjEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK1Bhc3NPd25QdHI8Q0NN
YWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxs
ZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBNYWluVGhy
ZWFkVGFzazI8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAg
ICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5h
bWUgTVAzPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRU
YXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1Q
MiwgTVAzKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1l
dGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykKK3sKKyAgICByZXR1cm4gTWFpblRocmVh
ZFRhc2szPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAg
ICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NNYWluVGhyZWFkVGFza19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzUyZTJiMmNkNDA1NDEzMmMyZDg4NzQ5MGU1ZTFiNjFh
NDNkNjU0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKwor
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCitzdGF0aWMgQ0NUaHJlYWQqIGNjVGhyZWFkID0gMDsKKworUGFzc1JlZlB0cjxD
Q1RocmVhZD4gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCkKK3sKKyAgICBpZiAoIWNjVGhyZWFkKSB7
CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ0NUaHJlYWQoKSk7CisgICAgfQorICAgIHJldHVybiBQYXNzUmVmUHRyPENDVGhyZWFk
PihjY1RocmVhZCk7Cit9CisKK0NDVGhyZWFkOjpDQ1RocmVhZCgpCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOworICAgIGNjVGhyZWFkID0gdGhpczsKKyAg
ICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3Rh
cnQsIHRoaXMsICJDaHJvbWl1bSBDb21wb3NpdG9yIik7Cit9CisKK0NDVGhyZWFkOjp+Q0NUaHJl
YWQoKQoreworICAgIG1fcXVldWUua2lsbCgpOworCisgICAgLy8gU3RvcCB0aHJlYWQuCisgICAg
dm9pZCogZXhpdENvZGU7CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCwg
JmV4aXRDb2RlKTsKKyAgICBtX3RocmVhZElEID0gMDsKKworICAgIC8vIFNsZWFyIHNpbmdsZXRv
bi4KKyAgICBjY1RocmVhZCA9IDA7Cit9CisKK2Jvb2wgQ0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRo
cmVhZCgpCit7CisgICAgaWYgKCFjY1RocmVhZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCktPm1fdGhy
ZWFkSUQ7Cit9CisKK3ZvaWQgQ0NUaHJlYWQ6OnBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFz
aykKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZCh0YXNrKTsKK30KKwordm9pZCogQ0NUaHJlYWQ6OmNv
bXBvc2l0b3JUaHJlYWRTdGFydCh2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBDQ1RocmVhZCogY2NU
aHJlYWQgPSBzdGF0aWNfY2FzdDxDQ1RocmVhZCo+KHVzZXJkYXRhKTsKKyAgICByZXR1cm4gY2NU
aHJlYWQtPnJ1bkxvb3AoKTsKK30KKwordm9pZCogQ0NUaHJlYWQ6OnJ1bkxvb3AoKQoreworICAg
IHsKKyAgICAgICAgLy8gV2FpdCBmb3IgQ0NUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8g
aGF2ZSBtX3RocmVhZElECisgICAgICAgIC8vIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0
aGUgbWFpbiBsb29wLgorICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25N
dXRleCk7CisgICAgfQorCisgICAgd2hpbGUgKE93blB0cjxUYXNrPiB0YXNrID0gbV9xdWV1ZS53
YWl0Rm9yTWVzc2FnZSgpKQorICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworCisgICAgZGV0
YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJlYjc5YzRlNDczOTAzNTcwYmNiZjI3ZjIwYWUyMGIzYTc2MmU3YWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENDVGhyZWFkX2gKKyNkZWZpbmUgQ0NUaHJlYWRfaAorCisjaW5jbHVkZSA8d3RmL01lc3Nh
Z2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVGhlIENDVGhyZWFkIHNpbmdsZXRvbiBvd25zIHRoZSBjb21wb3NpdG9yIHRo
cmVhZCBhbmQgcHJvdmlkZXMKKy8vIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciBtZXNzYWdpbmcg
YmV0d2VlbiB0aGUgdHdvIHRocmVhZHMuIFRoZQorLy8gdGhyZWFkIGlzIGFsaXZlIGFzIGxvbmcg
YXMgc29tZW9uZSBob2xkcyBvbiB0byBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIHNpbmdsZXRvbi4K
K2NsYXNzIENDVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENDVGhyZWFkPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaHJlYWQ+IGdldEluc3RhbmNlKCk7
CisgICAgdmlydHVhbCB+Q0NUaHJlYWQoKTsKKworICAgIHN0YXRpYyBib29sIGlzQ29tcG9zaXRv
clRocmVhZCgpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aHJlYWQgc2FmZSBhbmQg
Y2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLgorICAgIGNsYXNzIFRhc2sgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUYXNrKTsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
flRhc2soKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkgPSAwOworICAg
ICAgICB2b2lkKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIFRhc2sodm9pZCogaW5zdGFuY2UpIDogbV9pbnN0YW5jZShpbnN0
YW5jZSkgeyB9CisgICAgICAgIHZvaWQqIG1faW5zdGFuY2U7CisgICAgfTsKKworICAgIHZvaWQg
cG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRl
eHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZElEOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBleHBsaWNpdCBDQ1RocmVhZCgpOworCisgICAgc3RhdGljIHZvaWQqIGNvbXBvc2l0b3JUaHJl
YWRTdGFydCh2b2lkKik7CisgICAgdm9pZCogcnVuTG9vcCgpOworCisgICAgV1RGOjpUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1fcXVldWU7CisK
KyAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Cit9OworCitjbGFzcyBDQ0NvbXBsZXRp
b25FdmVudCB7CitwdWJsaWM6CisgICAgQ0NDb21wbGV0aW9uRXZlbnQoKQorICAgIHsKKyAgICAg
ICAgbV9tdXRleC5sb2NrKCk7CisgICAgfQorCisgICAgfkNDQ29tcGxldGlvbkV2ZW50KCkKKyAg
ICB7CisgICAgICAgIG1fbXV0ZXgudW5sb2NrKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0KCkK
KyAgICB7CisgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCk7CisgICAgfQorCisgICAg
dm9pZCBzaWduYWwoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
KyAgICAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE11
dGV4IG1fbXV0ZXg7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE4ZmRhZTZiMjRlZDE0
ZjU4ZjY1MWE0ODE5MDIxNzIxMDQ4YjZmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0wLDAg
KzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBDQ1RocmVhZFRhc2tfaAorI2RlZmluZSBD
Q1RocmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJDcm9zc1Ro
cmVhZENvcGllci5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ0NUaHJlYWRUYXNrMCA6
IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoq
TWV0aG9kKSgpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMDxUPiBDQ1RocmVhZFRhc2tJbXBs
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGlu
c3RhbmNlLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1RocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQ0NUaHJlYWRUYXNrMChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICAgICAg
OiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAg
ICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitjbGFzcyBDQ1RocmVhZFRhc2sxIDogcHVi
bGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRo
b2QpKE1QMSk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2sxPFQsIFAxLCBNUDE+IENDVGhyZWFk
VGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+
OjpQYXJhbVR5cGUgUGFyYW0xOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNr
SW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChp
bnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEND
VGhyZWFkVGFzazEoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3Rh
dGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitjbGFzcyBDQ1RocmVhZFRhc2syIDogcHVibGljIEND
VGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1Q
MSwgTVAyKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazI8VCwgUDEsIE1QMSwgUDIsIE1QMj4g
Q0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1Ry
YWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1Ro
cmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFy
YW1ldGVyMSwgcGFyYW1ldGVyMikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRh
c2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQor
ICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxU
Kj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRl
cjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5h
bWUgUDMsIHR5cGVuYW1lIE1QMz4KK2NsYXNzIENDVGhyZWFkVGFzazMgOiBwdWJsaWMgQ0NUaHJl
YWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBN
UDIsIE1QMyk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2szPFQsIFAxLCBNUDEsIFAyLCBNUDIs
IFAzLCBNUDM+IENDVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1Ro
cmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7
CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5z
dGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVy
MiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVy
MiwgcGFyYW1ldGVyMykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2szKFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3Rh
bmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVy
Myk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3Bh
cmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVh
dGVDQ1RocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRo
b2QpKCkpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFz
az4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChU
OjoqbWV0aG9kKSgpKQoreworICAgIHJldHVybiBDQ1RocmVhZFRhc2swPFQ+OjpjcmVhdGUoCisg
ICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+
IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6
Km1ldGhvZCkoTVAxKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICByZXR1cm4g
Q0NUaHJlYWRUYXNrMTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1Q
MT46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBNUDI+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisg
ICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyKSwKKyAg
ICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMikKK3sKKyAg
ICByZXR1cm4gQ0NUaHJlYWRUYXNrMjxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+Ojpj
cmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVu
YW1lIFAzLCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVD
Q1RocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2Qp
KE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAy
JiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVybiBD
Q1RocmVhZFRhc2szPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAx
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwK
KyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFy
YW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIy
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NUaHJlYWRUYXNrX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjQyMTU2ZDVkNDI5NjQzNGVlNTIzYmVhMWRjNjU5
OWEwMWM3ZGE1My4uZjJmNzQ5YjhlMjQzNDNhOGUyZjNmNjczMmUxYmIzMWNiMDYyZjJkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wNC0wNyAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBDb21wb3NpdG9yIHRocmVhZCBpbmZyYXN0
cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTYxMzEKKworICAgICAgICBUZXN0cyBmb3IgQ0NUaHJlYWQgYW5kIGFzc29jaWF0ZWQgY29tbXVu
aWNhdGlvbiBwcmltaXRpdmVzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRlc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2ViQ29yZTo6
UGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQaW5nUG9u
Z1Rlc3RVc2luZ1Rhc2tzOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBpbmdQb25nVGVzdFVz
aW5nVGFza3M6OnBvbmcpOgorICAgICAgICAqIHRlc3RzL1J1bkFsbFRlc3RzLmNwcDoKKyAgICAg
ICAgKG1haW4pOgorCiAyMDExLTA0LTA1ICBaZWxpZHJhZyBIb3JudW5nICA8emVsaWRyYWdAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDI2M2I0OWU1NDgyNzVkMTFhNmI0Y2MwMjRlZjFiZjVjZmQw
OTY0YzcuLjAzODk2YTBmZDFjN2FhMjZlNmNjYTdhZmM1MGMyNDBjNmIxZTNkYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTU5Nyw2ICs1OTcsNyBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rf
c3VwcG9ydF9iYXNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21p
dW1fc3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5n
L2d0ZXN0Lmd5cDpndGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2lj
dS5neXA6KicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3Ny
Y19kaXIpL3RoaXJkX3BhcnR5L2xpYmpwZWcvbGlianBlZy5neXA6bGlianBlZycsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5
L2xpYnBuZy9saWJwbmcuZ3lwOmxpYnBuZycsCkBAIC03OTEsNiArNzkyLDcgQEAKICAgICAgICAg
ICAgICAgICAnd2Via2l0JywKICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cDp3ZWJjb3JlJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCisgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZScsCiAgICAgICAgICAgICAg
ICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDpiYXNlX2kxOG4nLAogICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0
X2Jhc2UnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMDE2Y2YxYTFhYmFkMzA0
MzcwOWMyOGUwNmExOGYxMzFiZDc1NjE0Zi4uMjQ4ZDc5NjY5MDZiYTRlNDBmZjJhZWY3OWZkNmUy
ZDJiYTkyMTkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2ICs1Myw4
IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAg
ICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9D
Q1Rhc2tUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5
UGF0aFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhy
ZWFkVGFza1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOWVmOTc3NWNkNzZhOGI3N2I4YmRhNDE3ODJk
MDBjYWU3MGE4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIE1vY2sgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMChtZXRob2QwLCB2b2lk
KCkpOworICAgIE1PQ0tfTUVUSE9EMShtZXRob2QxLCB2b2lkKGludCBhMSkpOworICAgIE1PQ0tf
TUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBhMSwgaW50IGEyKSk7CisgICAgTU9DS19NRVRIT0Qz
KG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMykpOworICAgIE1PQ0tfTUVUSE9E
NChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMsIGludCBhNCkpOworfTsKKwor
VEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1ldGhvZHMpCit7CisgICAgTW9jayBtb2Nr
OworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDAoKSkuVGltZXMoMSk7CisgICAgRVhQRUNU
X0NBTEwobW9jaywgbWV0aG9kMSg5KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywg
bWV0aG9kMig5LCA4KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMyg5
LCA4LCA3KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kNCg5LCA4LCA3
LCA2KSkuVGltZXMoMSk7CisKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjpt
ZXRob2QwKS0+cnVuKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0
aG9kMSwgOSktPnJ1bigpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1l
dGhvZDIsIDksIDgpLT5ydW4oKTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2Nr
OjptZXRob2QzLCA5LCA4LCA3KS0+cnVuKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2Nr
LCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnJ1bigpOworfQorCit9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1MzQwZjcxMjBhNzJiNmI1OTc1YTc3NGFhNGM5OWFjNDhlM2NmYWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAK
QEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKworI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2su
aCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitURVNUKENDVGhyZWFkVGVzdCwgb25s
eU9uZVRocmVhZCkKK3sKKyAgICBSZWZQdHI8Q0NUaHJlYWQ+IHRocmVhZCA9IENDVGhyZWFkOjpn
ZXRJbnN0YW5jZSgpOworICAgIFJlZlB0cjxDQ1RocmVhZD4gdGhyZWFkMiA9IENDVGhyZWFkOjpn
ZXRJbnN0YW5jZSgpOworICAgIEVYUEVDVF9FUSh0aHJlYWQtPnRocmVhZElEKCksIHRocmVhZDIt
PnRocmVhZElEKCkpOworfQorCitjbGFzcyBQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHBpbmcoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCisgICAgewor
ICAgICAgICBoaXRUaHJlYWRJRCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgY29tcGxldGlv
bi0+c2lnbmFsKCk7CisgICAgfQorCisgICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIGhpdFRocmVh
ZElEOworfTsKKworCitURVNUKENDVGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikK
K3sKKyAgICBSZWZQdHI8Q0NUaHJlYWQ+IHRocmVhZCA9IENDVGhyZWFkOjpnZXRJbnN0YW5jZSgp
OworICAgIFBpbmdQb25nVXNpbmdDb25kaXRpb24gdGFyZ2V0OworICAgIENDQ29tcGxldGlvbkV2
ZW50IGNvbXBsZXRpb247CisgICAgdGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
JnRhcmdldCwgJlBpbmdQb25nVXNpbmdDb25kaXRpb246OnBpbmcsICZjb21wbGV0aW9uKSk7Cisg
ICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBFWFBFQ1RfRVEodGhyZWFkLT50aHJlYWRJRCgp
LCB0YXJnZXQuaGl0VGhyZWFkSUQpOworfQorCitjbGFzcyBQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tz
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHBpbmcoKQorICAgIHsKKyAgICAgICAgQ0NNYWluVGhyZWFk
Ojpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmUGluZ1BvbmdUZXN0VXNpbmdU
YXNrczo6cG9uZykpOworICAgICAgICBoaXQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcG9u
ZygpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShpc01haW5UaHJlYWQoKSk7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKKyAgICB9CisKKyAgICBib29sIGhp
dDsKK307CisKK1RFU1QoQ0NUaHJlYWRUZXN0LCBzdGFydFBvc3RBbmRXYWl0T25Db25kaXRpb24p
Cit7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2Uo
KTsKKworICAgIFBpbmdQb25nVGVzdFVzaW5nVGFza3MgdGFyZ2V0OworICAgIHRocmVhZC0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tz
OjpwaW5nKSk7CisgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisKKyAgICBF
WFBFQ1RfVFJVRSh0YXJnZXQuaGl0KTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0cy5jcHAKaW5kZXggYjIxM2RlNzkzM2E1YmM1
NzI4N2YwMTc2YWEwM2M0NDA3NTYwMTVlYS4uNTAwYzNkYzhlNWEwMTUwM2NmOTYxMDNjMDIyNTIx
Yjc0ZWE3Nzc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5B
bGxUZXN0cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0
cy5jcHAKQEAgLTM5LDggKzM5LDExIEBACiAjaW5jbHVkZSAiV2ViVW5pdFRlc3RzLmgiCiAjZW5k
aWYKIAorI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisKIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKIHsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVNb2NrKCZhcmdjLCBhcmd2KTsK
ICAgICBUZXN0U3VpdGUgdGVzdFN1aXRlKGFyZ2MsIGFyZ3YpOwogICAgIC8vIFRlc3RTdWl0ZSBt
dXN0IGJlIGNyZWF0ZWQgYmVmb3JlIFNldFVwVGVzdEVudmlyb25tZW50IHNvIGl0IHBlcmZvcm1z
CiAgICAgLy8gaW5pdGlhbGl6YXRpb25zIG5lZWRlZCBieSBXZWJLaXQgc3VwcG9ydC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88590</attachid>
            <date>2011-04-07 01:27:08 -0700</date>
            <delta_ts>2011-04-07 01:43:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110407012707.patch</filename>
            <type>text/plain</type>
            <size>40822</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NWNlMDQ5NTc1OTU2MjEx
ZGVjYmIyNDIxMjJlZWJhZDdkMzhhM2E1Li5kMzU3NjJmZWYzYjA3NWIyZjA2NzQ4M2EzZGJlMWNh
NGI4YzgxZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDQtMDcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIGNocm9tZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcmVs
YXRlZCBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6cGVyZm9ybVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6Q0NNYWluVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NNYWluVGhyZWFkOjpUYXNrOjp+VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ01haW5U
aHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6
VGFzazo6VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
MDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6TWFpblRocmVh
ZFRhc2swKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpNYWluVGhyZWFkVGFzazEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpN
YWluVGhyZWFkVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFz
azI6Ok1haW5UaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazI6
OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6TWFpblRocmVhZFRhc2szKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlTWFpblRocmVhZFRhc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkND
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmNv
bXBvc2l0b3JUaHJlYWRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cnVuTG9v
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6VGFzazo6flRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpUYXNrOjpUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp0aHJl
YWRJRCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6Q0NDb21wbGV0aW9u
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6On5DQ0NvbXBsZXRp
b25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6d2FpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6c2lnbmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2swOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRUYXNrMDo6Q0NUaHJlYWRUYXNrMCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFRhc2swOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMTo6Q0NUaHJlYWRUYXNrMSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFRhc2syOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRUYXNrMjo6Q0NUaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRh
c2syOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMzo6Q0NUaHJlYWRUYXNrMyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVDQ1RocmVhZFRhc2spOgorCiAyMDExLTA0LTA2ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggZTlmN2YyYWZjZGI4MWNiZjhjZGVhYjIwY2FhYzcwMjc0MDU1ZTE0
YS4uMGVmYzlmZDQ3YzIyMmM3MDJhYzc2YzY4ZDE3N2VjN2I3ZDE0ZmI5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDAzMCw4ICs0MDMwLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNr
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiNjllYTlhYTEzZmY3YWQ5NTI1
M2E5MjQxY2Y0ODM5OTcyZmQ5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ01haW5UaHJlYWQ6
OnBlcmZvcm1UYXNrKHZvaWQqIHVzZXJkYXRhKQoreworICAgIFRhc2sqIHRhc2sgPSBzdGF0aWNf
Y2FzdDxUYXNrKj4odXNlcmRhdGEpOworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgZGVs
ZXRlIHRhc2s7Cit9CisKK3ZvaWQgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRh
c2s+IHRhc2spCit7CisgICAgY2FsbE9uTWFpblRocmVhZChwZXJmb3JtVGFzaywgdGFzay5sZWFr
UHRyKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjOWFhNjM2
ZDA0ZjRlYzAwMmE3ZTFjODEyOTVmYjJiYjVjODkyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBDQ01haW5UaHJlYWRfaAorI2Rl
ZmluZSBDQ01haW5UaHJlYWRfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDQyBk
b2Vzbid0IGhhdmUgYWNjZXNzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnR4dCBzbyB3ZSBoYXZlIHRv
IGR1cGxpY2F0ZSB0aGlzCisvLyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB0YXNrcyByb3V0ZSB0byB0
aGUgd2Via2l0IG1haW4gbG9vcAorY2xhc3MgQ0NNYWluVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBUYXNrIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpID0gMDsKKyAgICAgICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVy
biBtX2luc3RhbmNlOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUYXNrKHZvaWQqIGluc3Rh
bmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQorICAgICAgICB2b2lkKiBtX2luc3RhbmNl
OworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsg
Ly8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gbWFpbiB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1UYXNrKHZvaWQqKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTWFpblRocmVhZF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRU
YXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01h
aW5UaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RlOGQ3MTNlODhjODg0MjIyNDA3OTNmZjI3N2Q1
OWRmNTNhZGU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaApAQCAtMCwwICsxLDIyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19oCisjZGVmaW5lIENDTWFpblRo
cmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCisjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIE1haW5UaHJlYWRUYXNr
MCA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrMDxUPiBNYWluVGhy
ZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+
IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kKQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4q
bV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitjbGFz
cyBNYWluVGhyZWFkVGFzazEgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSk7CisgICAgdHlwZWRlZiBNYWluVGhy
ZWFkVGFzazE8VCwgUDEsIE1QMT4gTWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAg
IHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNl
LCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFt
ZXRlcjEpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2sxKFQqIGluc3Rh
bmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgOiBDQ01haW5U
aHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5z
dGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMj4KK2NsYXNzIE1haW5UaHJlYWRUYXNrMiA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRh
c2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIpOwor
ICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2syPFQsIFAxLCBNUDEsIFAyLCBNUDI+IE1haW5UaHJl
YWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
MT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFt
ZXRlcjEsIHBhcmFtZXRlcjIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRh
c2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAg
ICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nh
c3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJh
bWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBNYWluVGhyZWFkVGFzazMgOiBwdWJsaWMg
Q0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRo
b2QpKE1QMSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2szPFQsIFAxLCBN
UDEsIFAyLCBNUDIsIFAzLCBNUDM+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFy
YW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFy
YW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1w
bD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBNYWluVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFy
YW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMykpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNYWluVGhyZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgICAgIDog
Q0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
ICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBt
X3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhv
ZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOwor
ICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQYXNzT3du
UHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29u
c3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNr
KAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKSgpKQoreworICAg
IHJldHVybiBNYWluVGhyZWFkVGFzazA8VD46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAg
ICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJl
YWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEp
LAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azE8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUo
CisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFz
c093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQq
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAgY29u
c3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAgcmV0
dXJuIE1haW5UaHJlYWRUYXNrMjxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5
cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVh
dGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRl
TWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRo
b2QpKE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0
IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVy
biBNYWluVGhyZWFkVGFzazM8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBl
LCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICAgICAgY2Fs
bGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFt
ZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ01haW5UaHJlYWRU
YXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTJlMmIyY2Q0MDU0MTMyYzJkODg3
NDkwZTVlMWI2MWE0M2Q2NTQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7CisKK3N0YXRpYyBDQ1RocmVhZCogY2NUaHJlYWQgPSAwOworCitQ
YXNzUmVmUHRyPENDVGhyZWFkPiBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKQoreworICAgIGlmICgh
Y2NUaHJlYWQpIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ1RocmVhZCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8Q0NUaHJlYWQ+KGNjVGhyZWFkKTsKK30KKworQ0NUaHJlYWQ6OkNDVGhyZWFkKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgY2NUaHJlYWQg
PSB0aGlzOworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ0NUaHJlYWQ6OmNvbXBvc2l0
b3JUaHJlYWRTdGFydCwgdGhpcywgIkNocm9taXVtIENvbXBvc2l0b3IiKTsKK30KKworQ0NUaHJl
YWQ6On5DQ1RocmVhZCgpCit7CisgICAgbV9xdWV1ZS5raWxsKCk7CisKKyAgICAvLyBTdG9wIHRo
cmVhZC4KKyAgICB2b2lkKiBleGl0Q29kZTsKKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3RocmVhZElELCAmZXhpdENvZGUpOworICAgIG1fdGhyZWFkSUQgPSAwOworCisgICAgLy8gU2xl
YXIgc2luZ2xldG9uLgorICAgIGNjVGhyZWFkID0gMDsKK30KKworYm9vbCBDQ1RocmVhZDo6aXND
b21wb3NpdG9yVGhyZWFkKCkKK3sKKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBDQ1RocmVhZDo6Z2V0SW5zdGFu
Y2UoKS0+bV90aHJlYWRJRDsKK30KKwordm9pZCBDQ1RocmVhZDo6cG9zdFRhc2soUGFzc093blB0
cjxUYXNrPiB0YXNrKQoreworICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOworfQorCit2b2lkKiBD
Q1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqIHVzZXJkYXRhKQoreworICAgIEND
VGhyZWFkKiBjY1RocmVhZCA9IHN0YXRpY19jYXN0PENDVGhyZWFkKj4odXNlcmRhdGEpOworICAg
IHJldHVybiBjY1RocmVhZC0+cnVuTG9vcCgpOworfQorCit2b2lkKiBDQ1RocmVhZDo6cnVuTG9v
cCgpCit7CisgICAgeworICAgICAgICAvLyBXYWl0IGZvciBDQ1RocmVhZDo6c3RhcnQoKSB0byBj
b21wbGV0ZSB0byBoYXZlIG1fdGhyZWFkSUQKKyAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3Jl
IHN0YXJ0aW5nIHRoZSBtYWluIGxvb3AuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKKyAgICB9CisKKyAgICB3aGlsZSAoT3duUHRyPFRhc2s+IHRhc2sg
PSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpCisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7
CisKKyAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmViNzljNGU0NzM5MDM1NzBiY2JmMjdmMjBhZTIw
YjNhNzYyZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NUaHJlYWRfaAorI2RlZmluZSBDQ1RocmVhZF9oCisKKyNpbmNsdWRl
IDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgQ0NUaHJlYWQgc2luZ2xldG9uIG93bnMgdGhlIGNv
bXBvc2l0b3IgdGhyZWFkIGFuZCBwcm92aWRlcworLy8gYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgZm9y
IG1lc3NhZ2luZyBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gVGhlCisvLyB0aHJlYWQgaXMgYWxp
dmUgYXMgbG9uZyBhcyBzb21lb25lIGhvbGRzIG9uIHRvIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8g
c2luZ2xldG9uLgorY2xhc3MgQ0NUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q0NUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RocmVhZD4gZ2V0
SW5zdGFuY2UoKTsKKyAgICB2aXJ0dWFsIH5DQ1RocmVhZCgpOworCisgICAgc3RhdGljIGJvb2wg
aXNDb21wb3NpdG9yVGhyZWFkKCk7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRocmVh
ZCBzYWZlIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gYW55d2hlcmUuCisgICAgY2xhc3MgVGFzayB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2spOworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+VGFzaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KSA9IDA7CisgICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVGFzayh2b2lkKiBpbnN0YW5jZSkgOiBtX2lu
c3RhbmNlKGluc3RhbmNlKSB7IH0KKyAgICAgICAgdm9pZCogbV9pbnN0YW5jZTsKKyAgICB9Owor
CisgICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRh
c2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KKworICAgIFdURjo6VGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KKworcHJv
dGVjdGVkOgorICAgIGV4cGxpY2l0IENDVGhyZWFkKCk7CisKKyAgICBzdGF0aWMgdm9pZCogY29t
cG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICB2b2lkKiBydW5Mb29wKCk7CisKKyAgICBX
VEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBNZXNzYWdlUXVldWU8VGFzaz4g
bV9xdWV1ZTsKKworICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKK307CisKK2NsYXNz
IENDQ29tcGxldGlvbkV2ZW50IHsKK3B1YmxpYzoKKyAgICBDQ0NvbXBsZXRpb25FdmVudCgpCisg
ICAgeworICAgICAgICBtX211dGV4LmxvY2soKTsKKyAgICB9CisKKyAgICB+Q0NDb21wbGV0aW9u
RXZlbnQoKQorICAgIHsKKyAgICAgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICB9CisKKyAgICB2
b2lkIHdhaXQoKQorICAgIHsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4KTsKKyAg
ICB9CisKKyAgICB2b2lkIHNpZ25hbCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MThm
ZGFlNmIyNGVkMTRmNThmNjUxYTQ4MTkwMjE3MjEwNDhiNmY3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNr
LmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIENDVGhyZWFkVGFza19o
CisjZGVmaW5lIENDVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJDQ1RocmVhZC5oIgorI2luY2x1
ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDQ1Ro
cmVhZFRhc2swIDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IHZvaWQgKFQ6OipNZXRob2QpKCk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2swPFQ+IENDVGhy
ZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBj
cmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkK
KyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCko
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK2NsYXNzIENDVGhyZWFk
VGFzazEgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZCkoTVAxKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazE8VCwgUDEsIE1Q
MT4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFt
MSBwYXJhbWV0ZXIxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVh
ZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ0NUaHJlYWRUYXNrMShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAg
ICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRl
cjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9w
YXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIENDVGhyZWFkVGFzazIg
OiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6
Kk1ldGhvZCkoTVAxLCBNUDIpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMjxULCBQMSwgTVAx
LCBQMiwgTVAyPiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwg
bWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVGhyZWFkVGFzazIoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0
ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5j
ZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBh
cmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0
YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAx
IG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
TVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorY2xhc3MgQ0NUaHJlYWRUYXNrMyA6IHB1
YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0
aG9kKShNUDEsIE1QMiwgTVAzKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazM8VCwgUDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMz4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0y
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1U
eXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNy
ZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIx
LCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhy
ZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgICAgIDogQ0NUaHJlYWQ6
OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIy
KQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2Fz
dDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwg
bV9wYXJhbWV0ZXIzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOwor
ICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJh
bWV0ZXIzOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6
OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9p
ZCAoVDo6Km1ldGhvZCkoKSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQYXNzT3duUHRyPEND
VGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAor
ICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazA8VD46
OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorUGFzc093blB0cjxDQ1Ro
cmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAg
ICB2b2lkIChUOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQorewor
ICAgIHJldHVybiBDQ1RocmVhZFRhc2sxPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwK
KyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMj4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhy
ZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAx
LCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0
ZXIyKQoreworICAgIHJldHVybiBDQ1RocmVhZFRhc2syPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5
cGUsIE1QMj46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAg
ICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRh
c2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAo
VDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisg
ICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7Cisg
ICAgcmV0dXJuIENDVGhyZWFkVGFzazM8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICAg
ICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5
KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ1RocmVh
ZFRhc2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2NTg0NzI0ODU5M2Q3NDI3MTc1
MDU3OTIyNWZkNWU0Y2VmMDc4NGYxLi44YmY0NDYxOTkwYTNlMDdmMThiYmZiYzc4MGI0ZTFmODU4
ZjYxMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEx
LTA0LTA3ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIENvbXBvc2l0b3IgdGhy
ZWFkIGluZnJhc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjEzMQorCisgICAgICAgIEludHJvZHVjZSBjaHJvbWUgY29tcG9zaXRvciB0
aHJlYWQgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGFza1Rl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3Rz
L0NDVGhyZWFkVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAg
ICAgIChXZWJDb3JlOjpQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uOjpwaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBpbmdQb25nVGVzdFVzaW5nVGFza3M6OnBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UGluZ1BvbmdUZXN0VXNpbmdUYXNrczo6cG9uZyk6CisgICAgICAgICogdGVzdHMvUnVuQWxsVGVz
dHMuY3BwOgorICAgICAgICAobWFpbik6CisKIDIwMTEtMDQtMDYgIEFzYW5rYSBIZXJhdGggIDxh
c2Fua2FAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyNjNiNDllNTQ4Mjc1ZDExYTZiNGNjMDI0
ZWYxYmY1Y2ZkMDk2NGM3Li4wMzg5NmEwZmQxYzdhYTI2ZTZjY2E3YWZjNTBjMjQwYzZiMWUzZGM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC01OTcsNiArNTk3LDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNl
Lmd5cDp0ZXN0X3N1cHBvcnRfYmFzZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xl
dXJsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3Bh
cnR5L2ljdS9pY3UuZ3lwOionLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9saWJqcGVnL2xpYmpwZWcuZ3lwOmxpYmpwZWcn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90
aGlyZF9wYXJ0eS9saWJwbmcvbGlicG5nLmd5cDpsaWJwbmcnLApAQCAtNzkxLDYgKzc5Miw3IEBA
CiAgICAgICAgICAgICAgICAgJ3dlYmtpdCcsCiAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6d2ViY29yZScsCiAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAorICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAogICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThu
JywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRl
c3Rfc3VwcG9ydF9iYXNlJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDAxNmNm
MWExYWJhZDMwNDM3MDljMjhlMDZhMThmMTMxYmQ3NTYxNGYuLjMwNjgzZWY3MzQyMDVhZDdjMWVm
MmZhMmYxMWQzZTZiZjM2YWIwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NTMsNiArNTMsOCBAQAogICAgICAgICBdLAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVz
JzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAg
ICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGhy
ZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjllZjk3NzVjZDc2
YThiNzdiOGJkYTQxNzgyZDAwY2FlNzBhOGIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZFRhc2suaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhP
RDAobWV0aG9kMCwgdm9pZCgpKTsKKyAgICBNT0NLX01FVEhPRDEobWV0aG9kMSwgdm9pZChpbnQg
YTEpKTsKKyAgICBNT0NLX01FVEhPRDIobWV0aG9kMiwgdm9pZChpbnQgYTEsIGludCBhMikpOwor
ICAgIE1PQ0tfTUVUSE9EMyhtZXRob2QzLCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMpKTsK
KyAgICBNT0NLX01FVEhPRDQobWV0aG9kNCwgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBp
bnQgYTQpKTsKK307CisKK1RFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQor
eworICAgIE1vY2sgbW9jazsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QwKCkpLlRpbWVz
KDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDEoOSkpLlRpbWVzKDEpOworICAgIEVY
UEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxM
KG1vY2ssIG1ldGhvZDMoOSwgOCwgNykpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ss
IG1ldGhvZDQoOSwgOCwgNywgNikpLlRpbWVzKDEpOworCisgICAgY3JlYXRlQ0NUaHJlYWRUYXNr
KCZtb2NrLCAmTW9jazo6bWV0aG9kMCktPnJ1bigpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygm
bW9jaywgJk1vY2s6Om1ldGhvZDEsIDkpLT5ydW4oKTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2so
Jm1vY2ssICZNb2NrOjptZXRob2QyLCA5LCA4KS0+cnVuKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRU
YXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnJ1bigpOworICAgIGNyZWF0ZUND
VGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQsIDksIDgsIDcsIDYpLT5ydW4oKTsKK30K
KworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJl
YWRUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTM0MGY3MTIwYTcyYjZiNTk3NWE3NzRhYTRjOTlhYzQ4
ZTNjZmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1RocmVhZFRlc3QuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9y
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworVEVTVChD
Q1RocmVhZFRlc3QsIG9ubHlPbmVUaHJlYWQpCit7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJl
YWQgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBSZWZQdHI8Q0NUaHJlYWQ+IHRocmVh
ZDIgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBFWFBFQ1RfRVEodGhyZWFkLT50aHJl
YWRJRCgpLCB0aHJlYWQyLT50aHJlYWRJRCgpKTsKK30KKworY2xhc3MgUGluZ1BvbmdVc2luZ0Nv
bmRpdGlvbiB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5nKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQorICAgIHsKKyAgICAgICAgaGl0VGhyZWFkSUQgPSBjdXJyZW50VGhyZWFkKCk7Cisg
ICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIH0KKworICAgIFdURjo6VGhyZWFkSWRl
bnRpZmllciBoaXRUaHJlYWRJRDsKK307CisKKworVEVTVChDQ1RocmVhZFRlc3QsIHBpbmdQb25n
VXNpbmdDb25kaXRpb24pCit7CisgICAgUmVmUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVh
ZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uIHRhcmdldDsKKyAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIHRocmVhZC0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9uZ1VzaW5nQ29uZGl0aW9uOjpwaW5nLCAm
Y29tcGxldGlvbikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgRVhQRUNUX0VRKHRo
cmVhZC0+dGhyZWFkSUQoKSwgdGFyZ2V0LmhpdFRocmVhZElEKTsKK30KKworY2xhc3MgUGluZ1Bv
bmdUZXN0VXNpbmdUYXNrcyB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5nKCkKKyAgICB7CisgICAg
ICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJlBp
bmdQb25nVGVzdFVzaW5nVGFza3M6OnBvbmcpKTsKKyAgICAgICAgaGl0ID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHBvbmcoKQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoaXNNYWluVGhy
ZWFkKCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7CisgICAg
fQorCisgICAgYm9vbCBoaXQ7Cit9OworCitURVNUKENDVGhyZWFkVGVzdCwgc3RhcnRQb3N0QW5k
V2FpdE9uQ29uZGl0aW9uKQoreworICAgIFJlZlB0cjxDQ1RocmVhZD4gdGhyZWFkID0gQ0NUaHJl
YWQ6OmdldEluc3RhbmNlKCk7CisKKyAgICBQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzIHRhcmdldDsK
KyAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1Bv
bmdUZXN0VXNpbmdUYXNrczo6cGluZykpOworICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOworCisgICAgRVhQRUNUX1RSVUUodGFyZ2V0LmhpdCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3Rz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCmluZGV4
IGIyMTNkZTc5MzNhNWJjNTcyODdmMDE3NmFhMDNjNDQwNzU2MDE1ZWEuLjUwMGMzZGM4ZTVhMDE1
MDNjZjk2MTAzYzAyMjUyMWI3NGVhNzc3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUnVuQWxsVGVzdHMuY3BwCkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgIldlYlVu
aXRUZXN0cy5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorCiBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlTW9j
aygmYXJnYywgYXJndik7CiAgICAgVGVzdFN1aXRlIHRlc3RTdWl0ZShhcmdjLCBhcmd2KTsKICAg
ICAvLyBUZXN0U3VpdGUgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBTZXRVcFRlc3RFbnZpcm9ubWVu
dCBzbyBpdCBwZXJmb3JtcwogICAgIC8vIGluaXRpYWxpemF0aW9ucyBuZWVkZWQgYnkgV2ViS2l0
IHN1cHBvcnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88594</attachid>
            <date>2011-04-07 01:43:23 -0700</date>
            <delta_ts>2011-04-07 13:01:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110407014322.patch</filename>
            <type>text/plain</type>
            <size>43183</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NWNlMDQ5NTc1OTU2MjEx
ZGVjYmIyNDIxMjJlZWJhZDdkMzhhM2E1Li5kMzU3NjJmZWYzYjA3NWIyZjA2NzQ4M2EzZGJlMWNh
NGI4YzgxZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDQtMDcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIGNocm9tZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcmVs
YXRlZCBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6cGVyZm9ybVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6Q0NNYWluVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NNYWluVGhyZWFkOjpUYXNrOjp+VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ01haW5U
aHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6
VGFzazo6VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
MDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6TWFpblRocmVh
ZFRhc2swKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpNYWluVGhyZWFkVGFzazEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpN
YWluVGhyZWFkVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFz
azI6Ok1haW5UaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazI6
OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6TWFpblRocmVhZFRhc2szKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlTWFpblRocmVhZFRhc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZDo6Z2V0SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OkND
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp+Q0NUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmlzQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OmNv
bXBvc2l0b3JUaHJlYWRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6cnVuTG9v
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6VGFzazo6flRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpUYXNrOjpUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjp0aHJl
YWRJRCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6Q0NDb21wbGV0aW9u
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6On5DQ0NvbXBsZXRp
b25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6d2FpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6c2lnbmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2swOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRUYXNrMDo6Q0NUaHJlYWRUYXNrMCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFRhc2swOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMTo6Q0NUaHJlYWRUYXNrMSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFRhc2syOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRUYXNrMjo6Q0NUaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRh
c2syOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMzo6Q0NUaHJlYWRUYXNrMyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVDQ1RocmVhZFRhc2spOgorCiAyMDExLTA0LTA2ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggZTlmN2YyYWZjZGI4MWNiZjhjZGVhYjIwY2FhYzcwMjc0MDU1ZTE0
YS4uMGVmYzlmZDQ3YzIyMmM3MDJhYzc2YzY4ZDE3N2VjN2I3ZDE0ZmI5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNDAzMCw4ICs0MDMwLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNr
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiNjllYTlhYTEzZmY3YWQ5NTI1
M2E5MjQxY2Y0ODM5OTcyZmQ5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ01haW5UaHJlYWQ6
OnBlcmZvcm1UYXNrKHZvaWQqIHVzZXJkYXRhKQoreworICAgIFRhc2sqIHRhc2sgPSBzdGF0aWNf
Y2FzdDxUYXNrKj4odXNlcmRhdGEpOworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgZGVs
ZXRlIHRhc2s7Cit9CisKK3ZvaWQgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRh
c2s+IHRhc2spCit7CisgICAgY2FsbE9uTWFpblRocmVhZChwZXJmb3JtVGFzaywgdGFzay5sZWFr
UHRyKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjOWFhNjM2
ZDA0ZjRlYzAwMmE3ZTFjODEyOTVmYjJiYjVjODkyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBDQ01haW5UaHJlYWRfaAorI2Rl
ZmluZSBDQ01haW5UaHJlYWRfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDQyBk
b2Vzbid0IGhhdmUgYWNjZXNzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnR4dCBzbyB3ZSBoYXZlIHRv
IGR1cGxpY2F0ZSB0aGlzCisvLyBmdW5jdGlvbmFsaXR5LiBUaGVzZSB0YXNrcyByb3V0ZSB0byB0
aGUgd2Via2l0IG1haW4gbG9vcAorY2xhc3MgQ0NNYWluVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBUYXNrIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpID0gMDsKKyAgICAgICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVy
biBtX2luc3RhbmNlOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUYXNrKHZvaWQqIGluc3Rh
bmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQorICAgICAgICB2b2lkKiBtX2luc3RhbmNl
OworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsg
Ly8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gbWFpbiB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1UYXNrKHZvaWQqKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTWFpblRocmVhZF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRU
YXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01h
aW5UaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RlOGQ3MTNlODhjODg0MjIyNDA3OTNmZjI3N2Q1
OWRmNTNhZGU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaApAQCAtMCwwICsxLDIyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19oCisjZGVmaW5lIENDTWFpblRo
cmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCisjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIE1haW5UaHJlYWRUYXNr
MCA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrMDxUPiBNYWluVGhy
ZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+
IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kKQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4q
bV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitjbGFz
cyBNYWluVGhyZWFkVGFzazEgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSk7CisgICAgdHlwZWRlZiBNYWluVGhy
ZWFkVGFzazE8VCwgUDEsIE1QMT4gTWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAg
IHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNl
LCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFt
ZXRlcjEpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2sxKFQqIGluc3Rh
bmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgOiBDQ01haW5U
aHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5z
dGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMj4KK2NsYXNzIE1haW5UaHJlYWRUYXNrMiA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRh
c2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIpOwor
ICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2syPFQsIFAxLCBNUDEsIFAyLCBNUDI+IE1haW5UaHJl
YWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
MT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFt
ZXRlcjEsIHBhcmFtZXRlcjIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRh
c2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAg
ICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nh
c3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJh
bWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBNYWluVGhyZWFkVGFzazMgOiBwdWJsaWMg
Q0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRo
b2QpKE1QMSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2szPFQsIFAxLCBN
UDEsIFAyLCBNUDIsIFAzLCBNUDM+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFy
YW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFy
YW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1w
bD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBNYWluVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFy
YW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMykpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNYWluVGhyZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgICAgIDog
Q0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
ICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBt
X3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhv
ZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOwor
ICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQYXNzT3du
UHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29u
c3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNr
KAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKSgpKQoreworICAg
IHJldHVybiBNYWluVGhyZWFkVGFzazA8VD46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAg
ICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJl
YWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEp
LAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azE8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUo
CisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFz
c093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQq
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAgY29u
c3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAgcmV0
dXJuIE1haW5UaHJlYWRUYXNrMjxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5
cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVh
dGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRl
TWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRo
b2QpKE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0
IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVy
biBNYWluVGhyZWFkVGFzazM8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBl
LCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICAgICAgY2Fs
bGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFt
ZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ01haW5UaHJlYWRU
YXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTJlMmIyY2Q0MDU0MTMyYzJkODg3
NDkwZTVlMWI2MWE0M2Q2NTQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7CisKK3N0YXRpYyBDQ1RocmVhZCogY2NUaHJlYWQgPSAwOworCitQ
YXNzUmVmUHRyPENDVGhyZWFkPiBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKQoreworICAgIGlmICgh
Y2NUaHJlYWQpIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ1RocmVhZCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8Q0NUaHJlYWQ+KGNjVGhyZWFkKTsKK30KKworQ0NUaHJlYWQ6OkNDVGhyZWFkKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgY2NUaHJlYWQg
PSB0aGlzOworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ0NUaHJlYWQ6OmNvbXBvc2l0
b3JUaHJlYWRTdGFydCwgdGhpcywgIkNocm9taXVtIENvbXBvc2l0b3IiKTsKK30KKworQ0NUaHJl
YWQ6On5DQ1RocmVhZCgpCit7CisgICAgbV9xdWV1ZS5raWxsKCk7CisKKyAgICAvLyBTdG9wIHRo
cmVhZC4KKyAgICB2b2lkKiBleGl0Q29kZTsKKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3RocmVhZElELCAmZXhpdENvZGUpOworICAgIG1fdGhyZWFkSUQgPSAwOworCisgICAgLy8gU2xl
YXIgc2luZ2xldG9uLgorICAgIGNjVGhyZWFkID0gMDsKK30KKworYm9vbCBDQ1RocmVhZDo6aXND
b21wb3NpdG9yVGhyZWFkKCkKK3sKKyAgICBpZiAoIWNjVGhyZWFkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBDQ1RocmVhZDo6Z2V0SW5zdGFu
Y2UoKS0+bV90aHJlYWRJRDsKK30KKwordm9pZCBDQ1RocmVhZDo6cG9zdFRhc2soUGFzc093blB0
cjxUYXNrPiB0YXNrKQoreworICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOworfQorCit2b2lkKiBD
Q1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqIHVzZXJkYXRhKQoreworICAgIEND
VGhyZWFkKiBjY1RocmVhZCA9IHN0YXRpY19jYXN0PENDVGhyZWFkKj4odXNlcmRhdGEpOworICAg
IHJldHVybiBjY1RocmVhZC0+cnVuTG9vcCgpOworfQorCit2b2lkKiBDQ1RocmVhZDo6cnVuTG9v
cCgpCit7CisgICAgeworICAgICAgICAvLyBXYWl0IGZvciBDQ1RocmVhZDo6c3RhcnQoKSB0byBj
b21wbGV0ZSB0byBoYXZlIG1fdGhyZWFkSUQKKyAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3Jl
IHN0YXJ0aW5nIHRoZSBtYWluIGxvb3AuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKKyAgICB9CisKKyAgICB3aGlsZSAoT3duUHRyPFRhc2s+IHRhc2sg
PSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpCisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7
CisKKyAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmViNzljNGU0NzM5MDM1NzBiY2JmMjdmMjBhZTIw
YjNhNzYyZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NUaHJlYWRfaAorI2RlZmluZSBDQ1RocmVhZF9oCisKKyNpbmNsdWRl
IDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgQ0NUaHJlYWQgc2luZ2xldG9uIG93bnMgdGhlIGNv
bXBvc2l0b3IgdGhyZWFkIGFuZCBwcm92aWRlcworLy8gYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgZm9y
IG1lc3NhZ2luZyBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gVGhlCisvLyB0aHJlYWQgaXMgYWxp
dmUgYXMgbG9uZyBhcyBzb21lb25lIGhvbGRzIG9uIHRvIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8g
c2luZ2xldG9uLgorY2xhc3MgQ0NUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q0NUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RocmVhZD4gZ2V0
SW5zdGFuY2UoKTsKKyAgICB2aXJ0dWFsIH5DQ1RocmVhZCgpOworCisgICAgc3RhdGljIGJvb2wg
aXNDb21wb3NpdG9yVGhyZWFkKCk7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRocmVh
ZCBzYWZlIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gYW55d2hlcmUuCisgICAgY2xhc3MgVGFzayB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2spOworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+VGFzaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KSA9IDA7CisgICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVGFzayh2b2lkKiBpbnN0YW5jZSkgOiBtX2lu
c3RhbmNlKGluc3RhbmNlKSB7IH0KKyAgICAgICAgdm9pZCogbV9pbnN0YW5jZTsKKyAgICB9Owor
CisgICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRh
c2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KKworICAgIFdURjo6VGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KKworcHJv
dGVjdGVkOgorICAgIGV4cGxpY2l0IENDVGhyZWFkKCk7CisKKyAgICBzdGF0aWMgdm9pZCogY29t
cG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICB2b2lkKiBydW5Mb29wKCk7CisKKyAgICBX
VEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBNZXNzYWdlUXVldWU8VGFzaz4g
bV9xdWV1ZTsKKworICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKK307CisKK2NsYXNz
IENDQ29tcGxldGlvbkV2ZW50IHsKK3B1YmxpYzoKKyAgICBDQ0NvbXBsZXRpb25FdmVudCgpCisg
ICAgeworICAgICAgICBtX211dGV4LmxvY2soKTsKKyAgICB9CisKKyAgICB+Q0NDb21wbGV0aW9u
RXZlbnQoKQorICAgIHsKKyAgICAgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICB9CisKKyAgICB2
b2lkIHdhaXQoKQorICAgIHsKKyAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX211dGV4KTsKKyAg
ICB9CisKKyAgICB2b2lkIHNpZ25hbCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTI0
NWQzZTRlMGVjZTUzNTA1YTBkZWRlNzUzNjhlY2M2ZDBmYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNr
LmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIENDVGhyZWFkVGFza19o
CisjZGVmaW5lIENDVGhyZWFkVGFza19oCisKKyNpbmNsdWRlICJDQ1RocmVhZC5oIgorI2luY2x1
ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDQ1Ro
cmVhZFRhc2swIDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IHZvaWQgKFQ6OipNZXRob2QpKCk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2swPFQ+IENDVGhy
ZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBj
cmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkK
KyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCko
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK2NsYXNzIENDVGhyZWFk
VGFzazEgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZCkoTVAxKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazE8VCwgUDEsIE1Q
MT4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFt
MSBwYXJhbWV0ZXIxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVh
ZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ0NUaHJlYWRUYXNrMShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAg
ICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRl
cjEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9w
YXJhbWV0ZXIxOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIENDVGhyZWFkVGFzazIg
OiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6
Kk1ldGhvZCkoTVAxLCBNUDIpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMjxULCBQMSwgTVAx
LCBQMiwgTVAyPiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwg
bWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVGhyZWFkVGFzazIoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0
ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5j
ZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBh
cmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0
YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAx
IG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
TVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorY2xhc3MgQ0NUaHJlYWRUYXNrMyA6IHB1
YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0
aG9kKShNUDEsIE1QMiwgTVAzKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazM8VCwgUDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMz4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0y
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1U
eXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNy
ZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIx
LCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhy
ZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgICAgIDogQ0NUaHJlYWQ6
OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIy
KQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2Fz
dDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwg
bV9wYXJhbWV0ZXIzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOwor
ICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJh
bWV0ZXIzOworfTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5h
bWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUg
TVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorY2xhc3MgQ0NUaHJlYWRUYXNrNCA6IHB1
YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0
aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrNDxULCBQ
MSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0PiBDQ1RocmVhZFRhc2tJbXBsOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBh
cmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBh
cmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFp
dHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKworICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywg
UGFyYW00IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
VGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwg
cGFyYW1ldGVyMywgcGFyYW1ldGVyNCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVh
ZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAg
ICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRo
b2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJh
bWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQq
PihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3Bh
cmFtZXRlcjMsIG1fcGFyYW1ldGVyNCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBt
X21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAg
IFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFtZXRlcjQ7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNr
KAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKSgpKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhy
ZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoKSkK
K3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrMDxUPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUs
CisgICAgICAgIG1ldGhvZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDE+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVh
ZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSks
CisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazE8
VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCisg
ICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorUGFzc093
blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNh
bGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAgcmV0dXJuIENDVGhy
ZWFkVGFzazI8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAg
ICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5h
bWUgTVAzPgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAor
ICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAz
KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwK
KyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrMzxU
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhv
ZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBN
UDQ+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAg
VCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIs
CisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQpCit7
CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAy
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwK
KyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFy
YW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIy
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDVGhyZWFkVGFza19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDY1ODQ3MjQ4NTkzZDc0MjcxNzUwNTc5MjI1ZmQ1ZTRjZWYw
Nzg0ZjEuLjhiZjQ0NjE5OTBhM2UwN2YxOGJiZmJjNzgwYjRlMWY4NThmNjEwOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDQtMDcgIE5hdCBEdWNh
ICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1Y3R1
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTMx
CisKKyAgICAgICAgSW50cm9kdWNlIGNocm9tZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcmVsYXRl
ZCBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2Vi
S2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRUZXN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
bmdQb25nVXNpbmdDb25kaXRpb246OnBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGluZ1BvbmdU
ZXN0VXNpbmdUYXNrczo6cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQaW5nUG9uZ1Rlc3RVc2lu
Z1Rhc2tzOjpwb25nKToKKyAgICAgICAgKiB0ZXN0cy9SdW5BbGxUZXN0cy5jcHA6CisgICAgICAg
IChtYWluKToKKwogMjAxMS0wNC0wNiAgQXNhbmthIEhlcmF0aCAgPGFzYW5rYUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCmluZGV4IDI2M2I0OWU1NDgyNzVkMTFhNmI0Y2MwMjRlZjFiZjVjZmQwOTY0Yzcu
LjAzODk2YTBmZDFjN2FhMjZlNmNjYTdhZmM1MGMyNDBjNmIxZTNkYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKQEAgLTU5Nyw2ICs1OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9y
dF9iYXNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2d0ZXN0
Lmd5cDpndGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6
KicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIp
L3RoaXJkX3BhcnR5L2xpYmpwZWcvbGlianBlZy5neXA6bGlianBlZycsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2xpYnBu
Zy9saWJwbmcuZ3lwOmxpYnBuZycsCkBAIC03OTEsNiArNzkyLDcgQEAKICAgICAgICAgICAgICAg
ICAnd2Via2l0JywKICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDp3ZWJjb3JlJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpcikvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZScsCiAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDpiYXNlX2kxOG4nLAogICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2Un
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMDE2Y2YxYTFhYmFkMzA0MzcwOWMy
OGUwNmExOGYxMzFiZDc1NjE0Zi4uMzA2ODNlZjczNDIwNWFkN2MxZWYyZmEyZjExZDNlNmJmMzZh
YjAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2ICs1Myw4IEBACiAg
ICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAg
ICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5
UGF0aFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhy
ZWFkVGFza1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjNWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNh
MWY5NjNiNTc3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorCisj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIE1vY2sgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMChtZXRob2QwLCB2b2lk
KCkpOworICAgIE1PQ0tfTUVUSE9EMShtZXRob2QxLCB2b2lkKGludCBhMSkpOworICAgIE1PQ0tf
TUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBhMSwgaW50IGEyKSk7CisgICAgTU9DS19NRVRIT0Qz
KG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMykpOworICAgIE1PQ0tfTUVUSE9E
NChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMsIGludCBhNCkpOworfTsKKwor
VEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1ldGhvZHMpCit7CisgICAgTW9jayBtb2Nr
OworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDAoKSkuVGltZXMoMSk7CisgICAgRVhQRUNU
X0NBTEwobW9jaywgbWV0aG9kMSg5KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywg
bWV0aG9kMig5LCA4KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMyg5
LCA4LCA3KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kNCg5LCA4LCA3
LCA2KSkuVGltZXMoMSk7CisKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjpt
ZXRob2QwKS0+cGVyZm9ybVRhc2soKTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZN
b2NrOjptZXRob2QxLCA5KS0+cGVyZm9ybVRhc2soKTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2so
Jm1vY2ssICZNb2NrOjptZXRob2QyLCA5LCA4KS0+cGVyZm9ybVRhc2soKTsKKyAgICBjcmVhdGVD
Q1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QzLCA5LCA4LCA3KS0+cGVyZm9ybVRhc2so
KTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2Q0LCA5LCA4LCA3
LCA2KS0+cGVyZm9ybVRhc2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTM0MGY3MTIw
YTcyYjZiNTk3NWE3NzRhYTRjOTlhYzQ4ZTNjZmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCkBAIC0wLDAgKzEsOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhy
ZWFkLmgiCisKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2Mv
Q0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIHsKKworVEVTVChDQ1RocmVhZFRlc3QsIG9ubHlPbmVUaHJlYWQpCit7Cisg
ICAgUmVmUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAg
ICBSZWZQdHI8Q0NUaHJlYWQ+IHRocmVhZDIgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAg
ICBFWFBFQ1RfRVEodGhyZWFkLT50aHJlYWRJRCgpLCB0aHJlYWQyLT50aHJlYWRJRCgpKTsKK30K
KworY2xhc3MgUGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5n
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQorICAgIHsKKyAgICAgICAgaGl0VGhyZWFk
SUQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAg
IH0KKworICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBoaXRUaHJlYWRJRDsKK307CisKKworVEVT
VChDQ1RocmVhZFRlc3QsIHBpbmdQb25nVXNpbmdDb25kaXRpb24pCit7CisgICAgUmVmUHRyPEND
VGhyZWFkPiB0aHJlYWQgPSBDQ1RocmVhZDo6Z2V0SW5zdGFuY2UoKTsKKyAgICBQaW5nUG9uZ1Vz
aW5nQ29uZGl0aW9uIHRhcmdldDsKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwor
ICAgIHRocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9u
Z1VzaW5nQ29uZGl0aW9uOjpwaW5nLCAmY29tcGxldGlvbikpOworICAgIGNvbXBsZXRpb24ud2Fp
dCgpOworCisgICAgRVhQRUNUX0VRKHRocmVhZC0+dGhyZWFkSUQoKSwgdGFyZ2V0LmhpdFRocmVh
ZElEKTsKK30KKworY2xhc3MgUGluZ1BvbmdUZXN0VXNpbmdUYXNrcyB7CitwdWJsaWM6CisgICAg
dm9pZCBwaW5nKCkKKyAgICB7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJlBpbmdQb25nVGVzdFVzaW5nVGFza3M6OnBvbmcpKTsKKyAg
ICAgICAgaGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHBvbmcoKQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoaXNNYWluVGhyZWFkKCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UXVpdE1lc3NhZ2VMb29wKCk7CisgICAgfQorCisgICAgYm9vbCBoaXQ7Cit9OworCitURVNUKEND
VGhyZWFkVGVzdCwgc3RhcnRQb3N0QW5kV2FpdE9uQ29uZGl0aW9uKQoreworICAgIFJlZlB0cjxD
Q1RocmVhZD4gdGhyZWFkID0gQ0NUaHJlYWQ6OmdldEluc3RhbmNlKCk7CisKKyAgICBQaW5nUG9u
Z1Rlc3RVc2luZ1Rhc2tzIHRhcmdldDsKKyAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1BvbmdUZXN0VXNpbmdUYXNrczo6cGluZykpOworICAgIHdl
YmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgRVhQRUNUX1RSVUUodGFyZ2V0
LmhpdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUnVuQWxsVGVzdHMuY3BwCmluZGV4IGIyMTNkZTc5MzNhNWJjNTcyODdmMDE3NmFhMDNjNDQw
NzU2MDE1ZWEuLjUwMGMzZGM4ZTVhMDE1MDNjZjk2MTAzYzAyMjUyMWI3NGVhNzc3NmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCkBAIC0zOSw4ICsz
OSwxMSBAQAogI2luY2x1ZGUgIldlYlVuaXRUZXN0cy5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAg
Ojp0ZXN0aW5nOjpJbml0R29vZ2xlTW9jaygmYXJnYywgYXJndik7CiAgICAgVGVzdFN1aXRlIHRl
c3RTdWl0ZShhcmdjLCBhcmd2KTsKICAgICAvLyBUZXN0U3VpdGUgbXVzdCBiZSBjcmVhdGVkIGJl
Zm9yZSBTZXRVcFRlc3RFbnZpcm9ubWVudCBzbyBpdCBwZXJmb3JtcwogICAgIC8vIGluaXRpYWxp
emF0aW9ucyBuZWVkZWQgYnkgV2ViS2l0IHN1cHBvcnQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88675</attachid>
            <date>2011-04-07 13:01:40 -0700</date>
            <delta_ts>2011-04-07 15:02:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110407130139.patch</filename>
            <type>text/plain</type>
            <size>44366</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NWNlMDQ5NTc1OTU2MjEx
ZGVjYmIyNDIxMjJlZWJhZDdkMzhhM2E1Li4xMWFhOTA2NWY0YTBhNmI3YjMxYjJmMGZiZmQ2ZmJl
NDYxMGQ2ZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMDQtMDcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIGNocm9tZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcmVs
YXRlZAorICAgICAgICBpbmZyYXN0cnVjdHVyZS4gQ2hyb21lIGNvbXBvc2l0b3IgZG9lc24ndCBo
YXZlIGFjY2VzcyB0bworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvIHRoaXMgcGF0
Y2ggZHVwbGljYXRlcyBpdHMgcG9zdFRhc2sKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBpbiBDQ01h
aW5UaHJlYWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ01haW5UaHJlYWQ6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TWFpblRocmVhZDo6cG9zdFRhc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRo
cmVhZDo6VGFzazo6flRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYWluVGhyZWFkOjpUYXNr
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ01haW5UaHJlYWQ6OlRhc2s6OlRhc2sp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRh
c2suaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazA6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazA6Ok1haW5UaHJlYWRUYXNrMCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazA6OnBlcmZvcm1UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
aW5UaHJlYWRUYXNrMTo6TWFpblRocmVhZFRhc2sxKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5U
aHJlYWRUYXNrMTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRh
c2syOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2syOjpNYWluVGhy
ZWFkVGFzazIpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2syOjpwZXJmb3JtVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNYWluVGhyZWFkVGFzazM6Ok1haW5UaHJlYWRUYXNrMyk6CisgICAgICAgIChX
ZWJDb3JlOjpNYWluVGhyZWFkVGFzazM6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZU1haW5UaHJlYWRUYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6
OmdldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjpDQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6fkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjppc0NvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWQ6OnBvc3RUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjpjb21wb3NpdG9yVGhy
ZWFkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OnJ1bkxvb3ApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OlRhc2s6On5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkOjpUYXNrOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6
VGFzazo6VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6dGhyZWFkSUQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6OkNDQ29tcGxldGlvbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2ZW50Ojp+Q0NDb21wbGV0aW9uRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6OndhaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NDb21wbGV0aW9uRXZlbnQ6OnNpZ25hbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRUYXNrMDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFz
azA6OkNDVGhyZWFkVGFzazApOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMDo6cGVy
Zm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazE6OkNDVGhyZWFkVGFzazEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrMTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRUYXNrMjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazI6
OkNDVGhyZWFkVGFzazIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMjo6cGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrMzo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazM6OkNDVGhyZWFkVGFzazMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQ0NUaHJlYWRUYXNrKToKKwogMjAxMS0wNC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGU5ZjdmMmFmY2RiODFjYmY4Y2RlYWIyMGNhYWM3MDI3NDA1NWUxNGEuLjBlZmM5ZmQ0
N2MyMjJjNzAyYWM3NmM2OGQxNzdlYzdiN2QxNGZiOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQw
MzAsOCArNDAzMCwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbScsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NvbXBsZXRp
b25FdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDb21wbGV0aW9uRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGFjMTUxMDBhODUwMWI1ZjdhMTQxYmE5
YTRkZmMyYjNjODhmZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDb21wbGV0aW9uRXZlbnQuaApAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQ29tcGxldGlvbkV2ZW50X2gKKyNkZWZpbmUg
Q0NDb21wbGV0aW9uRXZlbnRfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0NvbXBsZXRpb25FdmVudCB7Citw
dWJsaWM6CisgICAgQ0NDb21wbGV0aW9uRXZlbnQoKQorICAgIHsKKyAgICAgICAgbV9tdXRleC5s
b2NrKCk7CisgICAgfQorCisgICAgfkNDQ29tcGxldGlvbkV2ZW50KCkKKyAgICB7CisgICAgICAg
IG1fbXV0ZXgudW5sb2NrKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0KCkKKyAgICB7CisgICAg
ICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCk7CisgICAgfQorCisgICAgdm9pZCBzaWduYWwo
KQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgbV9j
b25kaXRpb24uc2lnbmFsKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE11dGV4IG1fbXV0ZXg7
CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fY29uZGl0aW9uOworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ01haW5UaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkMzY4MTdlZGZjYjc5OTE2MmVlN2Y3
MTY5ZWQ1YTAyZDczZTdkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ01haW5U
aHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ01haW5UaHJlYWQ6OnBlcmZv
cm1UYXNrKHZvaWQqIHVzZXJkYXRhKQoreworICAgIFRhc2sqIHRhc2sgPSBzdGF0aWNfY2FzdDxU
YXNrKj4odXNlcmRhdGEpOworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgZGVsZXRlIHRh
c2s7Cit9CisKK3ZvaWQgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRh
c2spCit7CisgICAgY2FsbE9uTWFpblRocmVhZChwZXJmb3JtVGFzaywgdGFzay5sZWFrUHRyKCkp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOGU4YzFjMzlhZjZl
ZjNlYTViZmVkODQ5N2MyNDJhZmQ5ZjhhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaApAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBDQ01haW5UaHJlYWRfaAorI2RlZmluZSBD
Q01haW5UaHJlYWRfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUYXNrIHdyYXBw
ZXIgYXJvdW5kIFdURjo6Y2FsbE9uTWFpblRocmVhZFRocmVhZAorY2xhc3MgQ0NNYWluVGhyZWFk
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUYXNrIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVGFzayk7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpID0gMDsKKyAgICAgICAgdm9pZCogaW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBUYXNrKHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQorICAgICAg
ICB2b2lkKiBtX2luc3RhbmNlOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBwb3N0VGFzayhQ
YXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gbWFpbiB0aHJlYWQgYXN5
bmNocm9ub3VzbHkuCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1UYXNrKHZvaWQq
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTWFpblRocmVh
ZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ01haW5UaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RlOGQ3MTNlODhj
ODg0MjIyNDA3OTNmZjI3N2Q1OWRmNTNhZGU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaApA
QCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NNYWluVGhyZWFkVGFza19o
CisjZGVmaW5lIENDTWFpblRocmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgi
CisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIE1haW5UaHJlYWRUYXNrMCA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIE1haW5UaHJl
YWRUYXNrMDxUPiBNYWluVGhyZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
YWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3Rh
bmNlLCBtZXRob2QpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2swKFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kKQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhp
bnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0
PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1l
dGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0
eXBlbmFtZSBNUDE+CitjbGFzcyBNYWluVGhyZWFkVGFzazEgOiBwdWJsaWMgQ0NNYWluVGhyZWFk
OjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSk7Cisg
ICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazE8VCwgUDEsIE1QMT4gTWFpblRocmVhZFRhc2tJbXBs
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1U
eXBlIFBhcmFtMTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4g
Y3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3Rh
bmNlLCBtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRo
cmVhZFRhc2sxKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkK
KyAgICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRo
b2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpz
dGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIx
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK2NsYXNzIE1haW5UaHJlYWRUYXNrMiA6IHB1Ymxp
YyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1l
dGhvZCkoTVAxLCBNUDIpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2syPFQsIFAxLCBNUDEs
IFAyLCBNUDI+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2Us
IE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3Rh
bmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTWFpblRocmVhZFRhc2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpU
YXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7Cisg
ICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0
ZXIxLCBtX3BhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRo
b2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBNYWluVGhy
ZWFkVGFzazMgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgTWFpblRo
cmVhZFRhc2szPFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDM+IE1haW5UaHJlYWRUYXNrSW1w
bDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFt
VHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNYWluVGhyZWFkVGFza0ltcGwoaW5z
dGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMykpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBNYWluVGhyZWFkVGFzazMoVCogaW5zdGFuY2UsIE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFt
ZXRlcjMpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMo
cGFyYW1ldGVyMykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhv
ZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgfQorCitw
cml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAg
UDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVh
ZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNy
ZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoq
bWV0aG9kKSgpKQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazA8VD46OmNyZWF0ZSgKKyAg
ICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRh
c2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lk
IChUOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJl
dHVybiBNYWluVGhyZWFkVGFzazE8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpU
eXBlLCBNUDE+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwg
dHlwZW5hbWUgTVAyPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5U
aHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShN
UDEsIE1QMiksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFt
ZXRlcjIpCit7CisgICAgcmV0dXJuIE1haW5UaHJlYWRUYXNrMjxULCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+
OjpUeXBlLCBNUDI+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAor
ICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAg
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBl
bmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPENDTWFpblRo
cmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAor
ICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0
ZXIzKQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazM8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNy
ZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46
OmNvcHkocGFyYW1ldGVyMykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjY0
ZGZjY2IxNzM2MjdkNGNiYWM4MTI3ODUzOGQxMjVkYTE2MDMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3Bw
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkNDVGhyZWFkLmgiCisKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworQ0NUaHJlYWQ6OkNDVGhyZWFkKCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChDQ1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0LCB0
aGlzLCAiQ2hyb21pdW0gQ29tcG9zaXRvciIpOworfQorCitDQ1RocmVhZDo6fkNDVGhyZWFkKCkK
K3sKKyAgICBtX3F1ZXVlLmtpbGwoKTsKKworICAgIC8vIFN0b3AgdGhyZWFkLgorICAgIHZvaWQq
IGV4aXRDb2RlOworICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQsICZleGl0
Q29kZSk7CisgICAgbV90aHJlYWRJRCA9IDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWQ6OnBvc3RUYXNr
KFBhc3NPd25QdHI8VGFzaz4gdGFzaykKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZCh0YXNrKTsKK30K
Kwordm9pZCogQ0NUaHJlYWQ6OmNvbXBvc2l0b3JUaHJlYWRTdGFydCh2b2lkKiB1c2VyZGF0YSkK
K3sKKyAgICBDQ1RocmVhZCogY2NUaHJlYWQgPSBzdGF0aWNfY2FzdDxDQ1RocmVhZCo+KHVzZXJk
YXRhKTsKKyAgICByZXR1cm4gY2NUaHJlYWQtPnJ1bkxvb3AoKTsKK30KKwordm9pZCogQ0NUaHJl
YWQ6OnJ1bkxvb3AoKQoreworICAgIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgQ0NUaHJlYWQ6OnN0
YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECisgICAgICAgIC8vIGVzdGFibGlz
aGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgorICAgICAgICBNdXRleExvY2tlciBs
b2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgfQorCisgICAgd2hpbGUgKE93blB0cjxU
YXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKQorICAgICAgICB0YXNrLT5wZXJm
b3JtVGFzaygpOworCisgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworCisgICAgcmV0dXJu
IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1Yjk0MTNhMzMyMjg4N2JkNzBk
OGYxMTg1YWEyMWNhZTQ5OTliZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUaHJlYWRfaAorI2RlZmluZSBDQ1RocmVhZF9oCisK
KyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgQ0NUaHJlYWQgc2luZ2xldG9uIG93
bnMgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGFuZCBwcm92aWRlcworLy8gYmFzaWMgaW5mcmFzdHJ1
Y3R1cmUgZm9yIG1lc3NhZ2luZyBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gVGhlCisvLyB0aHJl
YWQgaXMgYWxpdmUgYXMgbG9uZyBhcyBzb21lb25lIGhvbGRzIG9uIHRvIGEgcmVmZXJlbmNlIHRv
IHRoZQorLy8gc2luZ2xldG9uLgorY2xhc3MgQ0NUaHJlYWQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ1RocmVhZCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DQ1RocmVhZCgp
OworCisgICAgY2xhc3MgVGFzayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2sp
OworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VGFzaygpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7CisgICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29u
c3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVGFzayh2
b2lkKiBpbnN0YW5jZSkgOiBtX2luc3RhbmNlKGluc3RhbmNlKSB7IH0KKyAgICAgICAgdm9pZCog
bV9pbnN0YW5jZTsKKyAgICB9OworCisgICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+
KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNs
eS4KKworICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGhyZWFkSUQ7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDVGhyZWFkKCk7CisK
KyAgICBzdGF0aWMgdm9pZCogY29tcG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICB2b2lk
KiBydW5Mb29wKCk7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAg
ICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsKKworICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRp
b25NdXRleDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxMjQ1ZDNlNGUwZWNlNTM1MDVhMGRlZGU3NTM2OGVjYzZkMGZjNDcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFRhc2suaApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NUaHJl
YWRUYXNrX2gKKyNkZWZpbmUgQ0NUaHJlYWRUYXNrX2gKKworI2luY2x1ZGUgIkNDVGhyZWFkLmgi
CisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIENDVGhyZWFkVGFzazAgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAg
IHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazA8
VD4gQ0NUaHJlYWRUYXNrSW1wbDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFz
a0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhyZWFkVGFzazAoVCogaW5zdGFuY2UsIE1ldGhv
ZCBtZXRob2QpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwg
bV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1f
bWV0aG9kKSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3Mg
Q0NUaHJlYWRUYXNrMSA6IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMTxU
LCBQMSwgTVAxPiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKworICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhv
ZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2sxKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkK
KyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFt
ZXRlcjEpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisg
ICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1f
cGFyYW1ldGVyMSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAg
ICBQMSBtX3BhcmFtZXRlcjE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgorY2xhc3MgQ0NUaHJl
YWRUYXNrMiA6IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMik7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2syPFQs
IFAxLCBNUDEsIFAyLCBNUDI+IENDVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsK
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFRhc2tJbXBsKGlu
c3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ0NUaHJlYWRUYXNrMihUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICA6IENDVGhyZWFkOjpUYXNr
KGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFt
ZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAg
ICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIx
LCBtX3BhcmFtZXRlcjIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0
eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitjbGFzcyBDQ1RocmVhZFRh
c2szIDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQg
KFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMzxU
LCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlw
ZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+
OjpQYXJhbVR5cGUgUGFyYW0zOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNr
SW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBh
cmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ0NUaHJlYWRUYXNrMyhUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgOiBD
Q1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAg
ICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBh
cmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0
YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyLCBtX3BhcmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9t
ZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQ
MyBtX3BhcmFtZXRlcjM7Cit9OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitjbGFzcyBDQ1RocmVhZFRh
c2s0IDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQg
KFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRh
c2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IENDVGhyZWFkVGFza0lt
cGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJh
bVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJh
bWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVGhyZWFkVGFzazQoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0
ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0
ZXI0KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0
aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1l
dGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGlj
X2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRl
cjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
TWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRl
cjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1Ro
cmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3Jl
YXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0
aG9kKSgpKQoreworICAgIHJldHVybiBDQ1RocmVhZFRhc2swPFQ+OjpjcmVhdGUoCisgICAgICAg
IGNhbGxlZSwKKyAgICAgICAgbWV0aG9kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0
ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhv
ZCkoTVAxKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICByZXR1cm4gQ0NUaHJl
YWRUYXNrMTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMT46OmNy
ZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+
CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAgVCog
Y29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyKSwKKyAgICBjb25z
dCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMikKK3sKKyAgICByZXR1
cm4gQ0NUaHJlYWRUYXNrMjxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUs
IE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVhdGUo
CisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAy
Pjo6Y29weShwYXJhbWV0ZXIyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDM+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVh
ZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwg
TVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJh
bWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQoreworICAgIHJldHVybiBDQ1RocmVh
ZFRhc2szPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAg
ICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5
cGVuYW1lIE1QND4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFz
aygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIs
IE1QMywgTVA0KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFy
YW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1l
dGVyNCkKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpU
eXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAg
Y2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBh
cmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVy
MyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NUaHJlYWRUYXNrX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjU4NDcyNDg1OTNkNzQyNzE3NTA1NzkyMjVm
ZDVlNGNlZjA3ODRmMS4uMzAxOTYxZTI4NmRjM2IzNWMyNWJjMGU4NWJiOTYxMWY2M2Y5ZjgxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wNC0wNyAg
TmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBDb21wb3NpdG9yIHRocmVhZCBpbmZy
YXN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTYxMzEKKworICAgICAgICBUZXN0cyBmb3IgY2hyb21lIGNvbXBvc2l0b3IgdGhyZWFkIGFu
ZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVh
ZFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGluZ1BvbmdVc2luZ0NvbmRpdGlvbjo6cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQ
aW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBpbmdQb25n
VGVzdFVzaW5nVGFza3M6OnBvbmcpOgorICAgICAgICAqIHRlc3RzL1J1bkFsbFRlc3RzLmNwcDoK
KyAgICAgICAgKG1haW4pOgorCiAyMDExLTA0LTA2ICBBc2Fua2EgSGVyYXRoICA8YXNhbmthQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggMjYzYjQ5ZTU0ODI3NWQxMWE2YjRjYzAyNGVmMWJmNWNm
ZDA5NjRjNy4uMDM4OTZhMGZkMWM3YWEyNmU2Y2NhN2FmYzUwYzI0MGM2YjFlM2RjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNTk3LDYgKzU5Nyw3IEBACiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVz
dF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS9idWlsZC90ZW1wX2d5cC9nb29nbGV1cmwuZ3lwOmdvb2dsZXVybCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3Rp
bmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3Uv
aWN1Lmd5cDoqJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpcikvdGhpcmRfcGFydHkvbGlianBlZy9saWJqcGVnLmd5cDpsaWJqcGVnJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFy
dHkvbGlicG5nL2xpYnBuZy5neXA6bGlicG5nJywKQEAgLTc5MSw2ICs3OTIsNyBAQAogICAgICAg
ICAgICAgICAgICd3ZWJraXQnLAogICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwOndlYmNvcmUnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKKyAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCiAgICAgICAgICAgICAg
ICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDpiYXNlJywKICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOmJhc2VfaTE4bicsCiAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBv
cnRfYmFzZScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAwMTZjZjFhMWFiYWQz
MDQzNzA5YzI4ZTA2YTE4ZjEzMWJkNzU2MTRmLi4zMDY4M2VmNzM0MjA1YWQ3YzFlZjJmYTJmMTFk
M2U2YmYzNmFiMDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTUzLDYgKzUz
LDggQEAKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAg
ICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9JREJLZXlQYXRoVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM1Zjg3NzI1MjY2YjA4OGY2ODY2
NzQ2YzhkM2ExZjk2M2I1NzdjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNr
LmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgTW9jayB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QwKG1ldGhv
ZDAsIHZvaWQoKSk7CisgICAgTU9DS19NRVRIT0QxKG1ldGhvZDEsIHZvaWQoaW50IGExKSk7Cisg
ICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBpbnQgYTIpKTsKKyAgICBNT0NL
X01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzKSk7CisgICAgTU9D
S19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7
Cit9OworCitURVNUKENDVGhyZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKK3sKKyAgICBN
b2NrIG1vY2s7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMCgpKS5UaW1lcygxKTsKKyAg
ICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QxKDkpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FM
TChtb2NrLCBtZXRob2QyKDksIDgpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBt
ZXRob2QzKDksIDgsIDcpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q0
KDksIDgsIDcsIDYpKS5UaW1lcygxKTsKKworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywg
Jk1vY2s6Om1ldGhvZDApLT5wZXJmb3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygm
bW9jaywgJk1vY2s6Om1ldGhvZDEsIDkpLT5wZXJmb3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhy
ZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDIsIDksIDgpLT5wZXJmb3JtVGFzaygpOworICAg
IGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5wZXJm
b3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQs
IDksIDgsIDcsIDYpLT5wZXJmb3JtVGFzaygpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0
ZmJhNDY1MzNkYjc1ZGQ3M2Y2OGFiN2I3YjJkNjAxZTdjYjQwNjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKQEAgLTAsMCAr
MSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWQuaCIKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Vi
a2l0X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIFBpbmdQb25nVXNpbmdDb25kaXRpb24geworcHVibGljOgorICAgIHZvaWQgcGlu
ZyhDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKKyAgICB7CisgICAgICAgIGhpdFRocmVh
ZElEID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAg
ICB9CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIGhpdFRocmVhZElEOworfTsKKworCitURVNUKEND
VGhyZWFkVGVzdCwgcGluZ1BvbmdVc2luZ0NvbmRpdGlvbikKK3sKKyAgICBPd25QdHI8Q0NUaHJl
YWQ+IHRocmVhZCA9IENDVGhyZWFkOjpjcmVhdGUoKTsKKyAgICBQaW5nUG9uZ1VzaW5nQ29uZGl0
aW9uIHRhcmdldDsKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIHRocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKCZ0YXJnZXQsICZQaW5nUG9uZ1VzaW5nQ29u
ZGl0aW9uOjpwaW5nLCAmY29tcGxldGlvbikpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisg
ICAgRVhQRUNUX0VRKHRocmVhZC0+dGhyZWFkSUQoKSwgdGFyZ2V0LmhpdFRocmVhZElEKTsKK30K
KworY2xhc3MgUGluZ1BvbmdUZXN0VXNpbmdUYXNrcyB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5n
KCkKKyAgICB7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVh
ZFRhc2sodGhpcywgJlBpbmdQb25nVGVzdFVzaW5nVGFza3M6OnBvbmcpKTsKKyAgICAgICAgaGl0
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHBvbmcoKQorICAgIHsKKyAgICAgICAgRVhQRUNU
X1RSVUUoaXNNYWluVGhyZWFkKCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3Nh
Z2VMb29wKCk7CisgICAgfQorCisgICAgYm9vbCBoaXQ7Cit9OworCitURVNUKENDVGhyZWFkVGVz
dCwgc3RhcnRQb3N0QW5kV2FpdE9uQ29uZGl0aW9uKQoreworICAgIE93blB0cjxDQ1RocmVhZD4g
dGhyZWFkID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworCisgICAgUGluZ1BvbmdUZXN0VXNpbmdUYXNr
cyB0YXJnZXQ7CisgICAgdGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2soJnRhcmdl
dCwgJlBpbmdQb25nVGVzdFVzaW5nVGFza3M6OnBpbmcpKTsKKyAgICB3ZWJraXRfc3VwcG9ydDo6
UnVuTWVzc2FnZUxvb3AoKTsKKworICAgIEVYUEVDVF9UUlVFKHRhcmdldC5oaXQpOworfQorCit9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9S
dW5BbGxUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3Rz
LmNwcAppbmRleCBiMjEzZGU3OTMzYTViYzU3Mjg3ZjAxNzZhYTAzYzQ0MDc1NjAxNWVhLi41MDBj
M2RjOGU1YTAxNTAzY2Y5NjEwM2MwMjI1MjFiNzRlYTc3NzZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcApAQCAtMzksOCArMzksMTEgQEAKICNpbmNs
dWRlICJXZWJVbml0VGVzdHMuaCIKICNlbmRpZgogCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4K
KwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogeworICAgIDo6dGVzdGluZzo6SW5p
dEdvb2dsZU1vY2soJmFyZ2MsIGFyZ3YpOwogICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUoYXJnYywg
YXJndik7CiAgICAgLy8gVGVzdFN1aXRlIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgU2V0VXBUZXN0
RW52aXJvbm1lbnQgc28gaXQgcGVyZm9ybXMKICAgICAvLyBpbml0aWFsaXphdGlvbnMgbmVlZGVk
IGJ5IFdlYktpdCBzdXBwb3J0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88709</attachid>
            <date>2011-04-07 15:02:57 -0700</date>
            <delta_ts>2011-04-07 21:32:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56131-20110407150256.patch</filename>
            <type>text/plain</type>
            <size>44071</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NWNlMDQ5NTc1OTU2MjEx
ZGVjYmIyNDIxMjJlZWJhZDdkMzhhM2E1Li4zZGM3NDg4MmIxZThiZWRiOWJiZmE1OWMzMzY4M2Ni
NzAwNWJmN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDQtMDcgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29tcG9zaXRvciB0aHJlYWQgaW5mcmFzdHJ1
Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MTMxCisKKyAgICAgICAgSW50cm9kdWNlIGNocm9tZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcmVs
YXRlZAorICAgICAgICBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTWFpblRocmVhZDo6cGVyZm9ybVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NNYWluVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q0NNYWluVGhyZWFkOjpUYXNrOjp+VGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ01haW5UaHJlYWQ6OlRhc2s6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWFp
blRocmVhZDo6VGFzazo6VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5U
aHJlYWRUYXNrMDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6
TWFpblRocmVhZFRhc2swKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMDo6cGVy
Zm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpNYWluVGhyZWFkVGFzazEpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpNYWluVGhyZWFkVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkVGFzazI6Ok1haW5UaHJlYWRUYXNrMik6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhy
ZWFkVGFzazI6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
Mzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6TWFpblRocmVh
ZFRhc2szKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFpblRocmVhZFRhc2spOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
OjpDQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6fkNDVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjpwb3N0VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkOjpydW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkOjpUYXNrOjp+VGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZDo6VGFzazo6aW5zdGFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWQ6OlRhc2s6OlRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWQ6OnRocmVhZElEKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2ZW50OjpD
Q0NvbXBsZXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NvbXBsZXRpb25FdmVudDo6
fkNDQ29tcGxldGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2ZW50
Ojp3YWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQ29tcGxldGlvbkV2ZW50OjpzaWduYWwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazA6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFRhc2swOjpDQ1RocmVhZFRhc2swKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkVGFzazA6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2sxOjpDQ1Ro
cmVhZFRhc2sxKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazE6OnBlcmZvcm1UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFRhc2syOjpDQ1RocmVhZFRhc2syKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkVGFzazI6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
VGFzazM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2szOjpDQ1RocmVh
ZFRhc2szKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazM6OnBlcmZvcm1UYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNDVGhyZWFkVGFzayk6CisKIDIwMTEtMDQtMDYgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlOWY3ZjJhZmNkYjgxY2JmOGNkZWFiMjBjYWFj
NzAyNzQwNTVlMTRhLi4wZWZjOWZkNDdjMjIyYzcwMmFjNzZjNjhkMTc3ZWM3YjdkMTRmYjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC00MDMwLDggKzQwMzAsMTQgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ29tcGxldGlvbkV2ZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThh
YzE1MTAwYTg1MDFiNWY3YTE0MWJhOWE0ZGZjMmIzYzg4ZmVmNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ29tcGxldGlv
bkV2ZW50LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0NvbXBs
ZXRpb25FdmVudF9oCisjZGVmaW5lIENDQ29tcGxldGlvbkV2ZW50X2gKKworI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NDb21wbGV0aW9uRXZlbnQgeworcHVibGljOgorICAgIENDQ29tcGxldGlvbkV2ZW50KCkKKyAg
ICB7CisgICAgICAgIG1fbXV0ZXgubG9jaygpOworICAgIH0KKworICAgIH5DQ0NvbXBsZXRpb25F
dmVudCgpCisgICAgeworICAgICAgICBtX211dGV4LnVubG9jaygpOworICAgIH0KKworICAgIHZv
aWQgd2FpdCgpCisgICAgeworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbXV0ZXgpOworICAg
IH0KKworICAgIHZvaWQgc2lnbmFsKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
bV9tdXRleCk7CisgICAgICAgIG1fY29uZGl0aW9uLnNpZ25hbCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBNdXRleCBtX211dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ZDM2ODE3ZWRmY2I3OTkxNjJlZTdmNzE2OWVkNWEwMmQ3M2U3ZGQ2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiQ0NNYWluVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgQ0NNYWluVGhyZWFkOjpwZXJmb3JtVGFzayh2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBUYXNr
KiB0YXNrID0gc3RhdGljX2Nhc3Q8VGFzayo+KHVzZXJkYXRhKTsKKyAgICB0YXNrLT5wZXJmb3Jt
VGFzaygpOworICAgIGRlbGV0ZSB0YXNrOworfQorCit2b2lkIENDTWFpblRocmVhZDo6cG9zdFRh
c2soUGFzc093blB0cjxUYXNrPiB0YXNrKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQocGVyZm9y
bVRhc2ssIHRhc2subGVha1B0cigpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jYThlOGMxYzM5YWY2ZWYzZWE1YmZlZDg0OTdjMjQyYWZkOWY4YWU2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NNYWluVGhyZWFkLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgQ0NN
YWluVGhyZWFkX2gKKyNkZWZpbmUgQ0NNYWluVGhyZWFkX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVGFzayB3cmFwcGVyIGFyb3VuZCBXVEY6OmNhbGxPbk1haW5UaHJlYWRUaHJl
YWQKK2NsYXNzIENDTWFpblRocmVhZCB7CitwdWJsaWM6CisgICAgY2xhc3MgVGFzayB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2spOworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+VGFzaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7
CisgICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgVGFzayh2b2lkKiBpbnN0YW5jZSkgOiBtX2luc3RhbmNl
KGluc3RhbmNlKSB7IH0KKyAgICAgICAgdm9pZCogbV9pbnN0YW5jZTsKKyAgICB9OworCisgICAg
c3RhdGljIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0
YXNrIG9uIG1haW4gdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCBwZXJmb3JtVGFzayh2b2lkKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBDQ01haW5UaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdkZThkNzEzZTg4Yzg4NDIyMjQwNzkzZmYyNzdkNTlkZjUzYWRlN2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZu
ZGVmIENDTWFpblRocmVhZFRhc2tfaAorI2RlZmluZSBDQ01haW5UaHJlYWRUYXNrX2gKKworI2lu
Y2x1ZGUgIkNDTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisj
aW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBNYWluVGhyZWFkVGFzazAgOiBwdWJsaWMgQ0NNYWlu
VGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKCk7
CisgICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazA8VD4gTWFpblRocmVhZFRhc2tJbXBsOworCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFu
Y2UsIE1ldGhvZCBtZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1h
aW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1haW5UaHJlYWRUYXNrMChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICAgICAg
OiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKSgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorY2xhc3MgTWFpblRocmVhZFRhc2sx
IDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lk
IChUOjoqTWV0aG9kKShNUDEpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2sxPFQsIFAxLCBN
UDE+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICBzdGF0aWMgUGFzc093blB0
cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1h
aW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrMShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhv
ZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhv
ZCkobV9wYXJhbWV0ZXIxKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9k
OworICAgIFAxIG1fcGFyYW1ldGVyMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitjbGFzcyBN
YWluVGhyZWFkVGFzazIgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIE1haW5U
aHJlYWRUYXNrMjxULCBQMSwgTVAxLCBQMiwgTVAyPiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFy
YW1UeXBlIFBhcmFtMjsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1w
bD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1h
aW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIy
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrMihUKiBpbnN0YW5jZSwg
TWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAg
ICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZCht
ZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9w
YXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgp
KS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBt
X3BhcmFtZXRlcjI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5h
bWUgTVAzPgorY2xhc3MgTWFpblRocmVhZFRhc2szIDogcHVibGljIENDTWFpblRocmVhZDo6VGFz
ayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAz
KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrMzxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywg
TVAzPiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisK
KyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
TWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRl
cjIsIHBhcmFtZXRlcjMpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2sz
KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBh
cmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFz
ayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJh
bWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQq
PihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3Bh
cmFtZXRlcjMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAg
UDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRl
cjM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6
OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2
b2lkIChUOjoqbWV0aG9kKSgpKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Bhc3NPd25QdHI8
Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBj
YWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoKSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVh
ZFRhc2swPFQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KK1Bhc3NP
d25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBj
b25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxKSwKKyAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2sxPFQsIHR5cGVuYW1lIENy
b3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUs
CisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBh
cmFtZXRlcjEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK1Bhc3NPd25QdHI8Q0NNYWluVGhy
ZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisg
ICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azI8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAgICBjYWxs
ZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5
KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1l
dGVyMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAor
ICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAz
KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwK
KyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMykKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2sz
PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBD
cm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0
aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NNYWluVGhyZWFkVGFza19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2Y2NGRmY2NiMTczNjI3ZDRjYmFjODEyNzg1MzhkMTI1ZGExNjAz
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1RocmVhZC5oIgorCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K0NDVGhyZWFkOjpDQ1RocmVhZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENy
ZWF0aW9uTXV0ZXgpOworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ0NUaHJlYWQ6OmNv
bXBvc2l0b3JUaHJlYWRTdGFydCwgdGhpcywgIkNocm9taXVtIENvbXBvc2l0b3IiKTsKK30KKwor
Q0NUaHJlYWQ6On5DQ1RocmVhZCgpCit7CisgICAgbV9xdWV1ZS5raWxsKCk7CisKKyAgICAvLyBT
dG9wIHRocmVhZC4KKyAgICB2b2lkKiBleGl0Q29kZTsKKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihtX3RocmVhZElELCAmZXhpdENvZGUpOworICAgIG1fdGhyZWFkSUQgPSAwOworfQorCit2
b2lkIENDVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2spCit7CisgICAgbV9x
dWV1ZS5hcHBlbmQodGFzayk7Cit9CisKK3ZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFk
U3RhcnQodm9pZCogdXNlcmRhdGEpCit7CisgICAgQ0NUaHJlYWQqIGNjVGhyZWFkID0gc3RhdGlj
X2Nhc3Q8Q0NUaHJlYWQqPih1c2VyZGF0YSk7CisgICAgcmV0dXJuIGNjVGhyZWFkLT5ydW5Mb29w
KCk7Cit9CisKK3ZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKK3sKKyAgICB7CisgICAgICAgIC8v
IFdhaXQgZm9yIENDVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJ
RAorICAgICAgICAvLyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4K
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOworICAgIH0K
KworICAgIHdoaWxlIChPd25QdHI8VGFzaz4gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2Uo
KSkKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKKworICAgIGRldGFjaFRocmVhZChtX3Ro
cmVhZElEKTsKKworICAgIHJldHVybiAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNzdkM2YzOGFiYzQyM2NkNjlmODcwNTljZTdiNmE3YTk1ZjAzMTE2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkX2gK
KyNkZWZpbmUgQ0NUaHJlYWRfaAorCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhl
IENDVGhyZWFkIHNpbmdsZXRvbiBvd25zIHRoZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcHJvdmlk
ZXMKKy8vIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciBtZXNzYWdpbmcgYmV0d2VlbiB0aGUgdHdv
IHRocmVhZHMuCitjbGFzcyBDQ1RocmVhZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NUaHJlYWQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVGhyZWFkKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDVGhyZWFkKCk7CisKKyAgICBj
bGFzcyBUYXNrIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpID0gMDsKKyAgICAgICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVy
biBtX2luc3RhbmNlOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUYXNrKHZvaWQqIGluc3Rh
bmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQorICAgICAgICB2b2lkKiBtX2luc3RhbmNl
OworICAgIH07CisKKyAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBFeGVj
dXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorCisgICAg
V1RGOjpUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJ
RDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NUaHJlYWQoKTsKKworICAgIHN0YXRp
YyB2b2lkKiBjb21wb3NpdG9yVGhyZWFkU3RhcnQodm9pZCopOworICAgIHZvaWQqIHJ1bkxvb3Ao
KTsKKworICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIE1lc3NhZ2VR
dWV1ZTxUYXNrPiBtX3F1ZXVlOworCisgICAgTXV0ZXggbV90aHJlYWRDcmVhdGlvbk11dGV4Owor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzEyNDVk
M2U0ZTBlY2U1MzUwNWEwZGVkZTc1MzY4ZWNjNmQwZmM0NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5o
CkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBDQ1RocmVhZFRhc2tfaAor
I2RlZmluZSBDQ1RocmVhZFRhc2tfaAorCisjaW5jbHVkZSAiQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
ICJDcm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ0NUaHJl
YWRUYXNrMCA6IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkIChUOjoqTWV0aG9kKSgpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrMDxUPiBDQ1RocmVh
ZFRhc2tJbXBsOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3Jl
YXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ1RocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQ0NUaHJlYWRUYXNrMChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkK
KyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZCht
ZXRob2QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisg
ICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CitjbGFzcyBDQ1RocmVhZFRh
c2sxIDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQg
KFQ6OipNZXRob2QpKE1QMSk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2sxPFQsIFAxLCBNUDE+
IENDVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tU
cmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NU
aHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRU
YXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIENDVGhyZWFkVGFzazEoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBw
YXJhbWV0ZXIxKQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAg
ICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIx
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFy
YW1ldGVyMTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFt
ZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitjbGFzcyBDQ1RocmVhZFRhc2syIDog
cHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipN
ZXRob2QpKE1QMSwgTVAyKTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazI8VCwgUDEsIE1QMSwg
UDIsIE1QMj4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1l
dGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
Q1RocmVhZFRhc2syKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2Up
CisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJh
bWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0
aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1l
dGVyMik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBt
X3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1Q
MiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KK2NsYXNzIENDVGhyZWFkVGFzazMgOiBwdWJs
aWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhv
ZCkoTVAxLCBNUDIsIE1QMyk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2szPFQsIFAxLCBNUDEs
IFAyLCBNUDIsIFAzLCBNUDM+IENDVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlw
ZSBQYXJhbTM7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVh
dGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIg
cGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwg
cGFyYW1ldGVyMiwgcGFyYW1ldGVyMykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVh
ZFRhc2szKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICA6IENDVGhyZWFkOjpU
YXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8
VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1f
cGFyYW1ldGVyMyk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAg
ICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1l
dGVyMzsKK307CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1Q
MywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QND4KK2NsYXNzIENDVGhyZWFkVGFzazQgOiBwdWJs
aWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhv
ZCkoTVAxLCBNUDIsIE1QMywgTVA0KTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazQ8VCwgUDEs
IE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJh
bTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJh
bVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBh
cmFtNCBwYXJhbWV0ZXI0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Ro
cmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBh
cmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NUaHJlYWRU
YXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAg
ICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1l
dGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4o
aW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJh
bWV0ZXIzLCBtX3BhcmFtZXRlcjQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9t
ZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQ
MyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygK
KyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoKSk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVh
ZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpCit7
CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazA8VD46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAor
ICAgICAgICBtZXRob2QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgTVAxPgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRU
YXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEpLAor
ICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQoreworICAgIHJldHVybiBDQ1RocmVhZFRhc2sxPFQs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxPjo6Y3JlYXRlKAorICAg
ICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK1Bhc3NPd25Q
dHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxs
ZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIpLAorICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQoreworICAgIHJldHVybiBDQ1RocmVh
ZFRhc2syPFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMj46OmNyZWF0ZSgKKyAgICAgICAg
Y2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBh
cmFtZXRlcjIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IE1QMz4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAg
ICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMyks
CisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisg
ICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazM8VCwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQ
Mz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2Qs
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9z
c1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
TVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0
PgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQq
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQp
LAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAor
ICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0KQorewor
ICAgIHJldHVybiBDQ1RocmVhZFRhc2s0PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisg
ICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFt
ZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiks
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpKTsKKworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ1RocmVhZFRhc2tfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA2NTg0NzI0ODU5M2Q3NDI3MTc1MDU3OTIyNWZkNWU0Y2VmMDc4
NGYxLi4zMDE5NjFlMjg2ZGMzYjM1YzI1YmMwZTg1YmI5NjExZjYzZjlmODE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTA0LTA3ICBOYXQgRHVjYSAg
PG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbY2hyb21pdW1dIENvbXBvc2l0b3IgdGhyZWFkIGluZnJhc3RydWN0dXJl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjEzMQor
CisgICAgICAgIFRlc3RzIGZvciBjaHJvbWUgY29tcG9zaXRvciB0aHJlYWQgYW5kIHJlbGF0ZWQg
aW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlOjpQaW5n
UG9uZ1VzaW5nQ29uZGl0aW9uOjpwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBpbmdQb25nVGVz
dFVzaW5nVGFza3M6OnBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGluZ1BvbmdUZXN0VXNpbmdU
YXNrczo6cG9uZyk6CisgICAgICAgICogdGVzdHMvUnVuQWxsVGVzdHMuY3BwOgorICAgICAgICAo
bWFpbik6CisKIDIwMTEtMDQtMDYgIEFzYW5rYSBIZXJhdGggIDxhc2Fua2FAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCAyNjNiNDllNTQ4Mjc1ZDExYTZiNGNjMDI0ZWYxYmY1Y2ZkMDk2NGM3Li4w
Mzg5NmEwZmQxYzdhYTI2ZTZjY2E3YWZjNTBjMjQwYzZiMWUzZGM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCkBAIC01OTcsNiArNTk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRf
YmFzZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9ndGVzdC5n
eXA6Z3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOion
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90
aGlyZF9wYXJ0eS9saWJqcGVnL2xpYmpwZWcuZ3lwOmxpYmpwZWcnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9saWJwbmcv
bGlicG5nLmd5cDpsaWJwbmcnLApAQCAtNzkxLDYgKzc5Miw3IEBACiAgICAgICAgICAgICAgICAg
J3dlYmtpdCcsCiAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6d2ViY29yZScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3Ny
Y19kaXIpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThuJywKICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDAxNmNmMWExYWJhZDMwNDM3MDljMjhl
MDZhMThmMTMxYmQ3NTYxNGYuLjMwNjgzZWY3MzQyMDVhZDdjMWVmMmZhMmYxMWQzZTZiZjM2YWIw
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsOCBAQAogICAg
ICAgICBdLAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAg
J3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRU
YXNrVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9J
REJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBh
dGhUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzVmODc3MjUyNjZiMDg4ZjY4NjY3NDZjOGQzYTFm
OTYzYjU3N2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKworI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ugewor
CitjbGFzcyBNb2NrIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAobWV0aG9kMCwgdm9pZCgp
KTsKKyAgICBNT0NLX01FVEhPRDEobWV0aG9kMSwgdm9pZChpbnQgYTEpKTsKKyAgICBNT0NLX01F
VEhPRDIobWV0aG9kMiwgdm9pZChpbnQgYTEsIGludCBhMikpOworICAgIE1PQ0tfTUVUSE9EMyht
ZXRob2QzLCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMpKTsKKyAgICBNT0NLX01FVEhPRDQo
bWV0aG9kNCwgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBpbnQgYTQpKTsKK307CisKK1RF
U1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQoreworICAgIE1vY2sgbW9jazsK
KyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QwKCkpLlRpbWVzKDEpOworICAgIEVYUEVDVF9D
QUxMKG1vY2ssIG1ldGhvZDEoOSkpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1l
dGhvZDIoOSwgOCkpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwg
OCwgNykpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywg
NikpLlRpbWVzKDEpOworCisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0
aG9kMCktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9j
azo6bWV0aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZt
b2NrLCAmTW9jazo6bWV0aG9kMiwgOSwgOCktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NU
aHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7
CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywg
NiktPnBlcmZvcm1UYXNrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRmYmE0NjUzM2Ri
NzVkZDczZjY4YWI3YjdiMmQ2MDFlN2NiNDA2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUZXN0LmNwcApAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZC5oIgorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9y
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
UGluZ1BvbmdVc2luZ0NvbmRpdGlvbiB7CitwdWJsaWM6CisgICAgdm9pZCBwaW5nKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQorICAgIHsKKyAgICAgICAgaGl0VGhyZWFkSUQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIH0KKworICAg
IFRocmVhZElkZW50aWZpZXIgaGl0VGhyZWFkSUQ7Cit9OworCisKK1RFU1QoQ0NUaHJlYWRUZXN0
LCBwaW5nUG9uZ1VzaW5nQ29uZGl0aW9uKQoreworICAgIE93blB0cjxDQ1RocmVhZD4gdGhyZWFk
ID0gQ0NUaHJlYWQ6OmNyZWF0ZSgpOworICAgIFBpbmdQb25nVXNpbmdDb25kaXRpb24gdGFyZ2V0
OworICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgdGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2soJnRhcmdldCwgJlBpbmdQb25nVXNpbmdDb25kaXRpb246OnBp
bmcsICZjb21wbGV0aW9uKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBFWFBFQ1Rf
RVEodGhyZWFkLT50aHJlYWRJRCgpLCB0YXJnZXQuaGl0VGhyZWFkSUQpOworfQorCitjbGFzcyBQ
aW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzIHsKK3B1YmxpYzoKKyAgICB2b2lkIHBpbmcoKQorICAgIHsK
KyAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlz
LCAmUGluZ1BvbmdUZXN0VXNpbmdUYXNrczo6cG9uZykpOworICAgICAgICBoaXQgPSB0cnVlOwor
ICAgIH0KKworICAgIHZvaWQgcG9uZygpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShpc01h
aW5UaHJlYWQoKSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsK
KyAgICB9CisKKyAgICBib29sIGhpdDsKK307CisKK1RFU1QoQ0NUaHJlYWRUZXN0LCBzdGFydFBv
c3RBbmRXYWl0T25Db25kaXRpb24pCit7CisgICAgT3duUHRyPENDVGhyZWFkPiB0aHJlYWQgPSBD
Q1RocmVhZDo6Y3JlYXRlKCk7CisKKyAgICBQaW5nUG9uZ1Rlc3RVc2luZ1Rhc2tzIHRhcmdldDsK
KyAgICB0aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzaygmdGFyZ2V0LCAmUGluZ1Bv
bmdUZXN0VXNpbmdUYXNrczo6cGluZykpOworICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOworCisgICAgRVhQRUNUX1RSVUUodGFyZ2V0LmhpdCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3Rz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCmluZGV4
IGIyMTNkZTc5MzNhNWJjNTcyODdmMDE3NmFhMDNjNDQwNzU2MDE1ZWEuLjUwMGMzZGM4ZTVhMDE1
MDNjZjk2MTAzYzAyMjUyMWI3NGVhNzc3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUnVuQWxsVGVzdHMuY3BwCkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgIldlYlVu
aXRUZXN0cy5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorCiBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlTW9j
aygmYXJnYywgYXJndik7CiAgICAgVGVzdFN1aXRlIHRlc3RTdWl0ZShhcmdjLCBhcmd2KTsKICAg
ICAvLyBUZXN0U3VpdGUgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBTZXRVcFRlc3RFbnZpcm9ubWVu
dCBzbyBpdCBwZXJmb3JtcwogICAgIC8vIGluaXRpYWxpemF0aW9ucyBuZWVkZWQgYnkgV2ViS2l0
IHN1cHBvcnQuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>