<?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>88271</bug_id>
          
          <creation_ts>2012-06-04 17:28:04 -0700</creation_ts>
          <short_desc>Introduce WebViewBenchmarkSupport for performance experiments on a real WebView</short_desc>
          <delta_ts>2012-07-23 13:21:21 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Murphy">dmurph</reporter>
          <assigned_to name="Daniel Murphy">dmurph</assigned_to>
          <cc>abarth</cc>
    
    <cc>alokp</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dmurph</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>scheib</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>641026</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-04 17:28:04 -0700</bug_when>
    <thetext>initial rendering microbenchmark</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641034</commentid>
    <comment_count>1</comment_count>
      <attachid>145662</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-04 17:34:17 -0700</bug_when>
    <thetext>Created attachment 145662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641110</commentid>
    <comment_count>2</comment_count>
      <attachid>145662</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-04 19:10:05 -0700</bug_when>
    <thetext>Comment on attachment 145662
Patch

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

Good first pass. Lets start gluing it all together.

&gt; Source/WebKit/chromium/public/RenderingBenchmarkResults.h:1
&gt; +/*

copy the style of other headers in that folder.

&gt; Source/WebKit/chromium/public/RenderingBenchmarkResults.h:10
&gt; +#pragma once

follow the style in the rest of the public/ folder

&gt; Source/WebKit/chromium/public/RenderingBenchmarkResults.h:12
&gt; +class RenderingBenchmarkResults {

We put &quot;web&quot; in the front of public wk apis. See other things in the folder, e.g. WebCompositorInputHandler.h

&gt; Source/WebKit/chromium/public/RenderingBenchmarkResults.h:15
&gt; +    virtual void addResult(const char *resultName, double result) = 0;

A const char* for the unit is probably also a good thing.

&gt; Source/WebKit/chromium/public/WebView.h:486
&gt; +    // Rendering benchmarks ------------------------------------------------------

Lets put this entry point with the &apos;GPU acceleration support&apos; group of methods, e.g. just above visibility after transferActiveWheelBlahblah

Take a peek through this file and see if we typically pass by pointer. Pass-by-ref seems to be used only for pass-by-reference, though I might be missing something.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1614
&gt; +void WebViewImpl::runRenderingBenchmarks(RenderingBenchmarkResults&amp; results)

Lets get this factored into a class like we described...

RenderingBenchmark {
  const char* name() const = 0;
  void setUp(WebViewImpl* webViewImpl) {}
  void run(RenderingBenchmarkResults&amp; results, WebViewImpl* webViewImpl) = 0;
  void tearDown(WebViewImpl* webViewImpl) { }
}

Then have another class called

AllRenderingBenchmarks : RenderingBenchmark {
   AllRenderingBenchmarks() {
      push instances benchmark subclasses of interest into m_benchmarks;
   }
   run() { run each of the instances; }
};
This runRenderingBenchamrks function should just construct a benchmark and run it. Ideally the test code will be in a bunch of classes in a cpp file --- the only thing exported by the benchmark.h would be the AllRenderingBenchmarks.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1623
&gt; +    this-&gt;paint(&amp;canvas, screenRect);

This works if you&apos;re in software mode. You need to handle accelerated mode as well. That is, you need to get the root graphics layer and iterate over each graphics layer painting it.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1625
&gt; +    results.addResult(&quot;paint to bitmap time&quot;, afterPaint - beforePaint);

methinks the benchmark names should be camelcased words. E.g. paintTime

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1632
&gt; +    results.addResult(&quot;paint to null canvas time&quot;, afterPaint - beforePaint);

paintTime_NullCanvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642634</commentid>
    <comment_count>3</comment_count>
      <attachid>146072</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-06 11:28:41 -0700</bug_when>
    <thetext>Created attachment 146072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642653</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-06 11:45:38 -0700</bug_when>
    <thetext>This patch separates the benchmarks into the AllRenderingBenchmarks.cpp file.  A sister chromium patch will be uploaded this afternoon with the hookup from the benchmarking extension.

Next, I&apos;ll be throwing an interface in between the WebViewImpl and the benchmarks, and expose the m_rootGraphicsLayer in that interface so we can simulate the accelerated graphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642750</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-06 13:30:03 -0700</bug_when>
    <thetext>chromium sister patch: https://chromiumcodereview.appspot.com/10537036/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649305</commentid>
    <comment_count>6</comment_count>
      <attachid>147618</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-14 11:04:37 -0700</bug_when>
    <thetext>Created attachment 147618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649310</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 11:07:42 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649312</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 11:09:15 -0700</bug_when>
    <thetext>FYI, we don&apos;t use std::auto_ptr in WebKit (or chromium) code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649319</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-14 11:15:32 -0700</bug_when>
    <thetext>For reviewers who are not Nat:
Sorry, this patch wasn&apos;t meant to be reviewed by people yet, I specified &apos;--no-review&apos; when I uploaded but maybe it didn&apos;t take?


This patch includes the &apos;controller&apos; interface for the benchmarks, and has benchmarking for the accelerated mode.

Things I was unsure of:
* I have auto_ptr&apos;s in here for exception-safe memory management.  I tried using the RefPtr, but that required deriving from a base, which was infeasible for WebCanvas (SkCanvas) and SkDevice.
* I use 0,0,width,height to draw the entire layer, and I&apos;m not sure if there&apos;s an offset I should be using.  Shouldn&apos;t matter after next iteration.


Still To-Do:
* Find the correct clip rectangles for each layer instead of drawing them entirely.
* Perhaps move everything into &apos;content&apos;, because we already have the &apos;controller&apos; abstraction that we can leave in WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649325</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 11:20:56 -0700</bug_when>
    <thetext>We don&apos;t use C++ exceptions either, so don&apos;t worry about exception safety :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649466</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-14 13:58:20 -0700</bug_when>
    <thetext>Ok cool, I&apos;ll remove those then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649667</commentid>
    <comment_count>12</comment_count>
      <attachid>147618</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-14 17:30:52 -0700</bug_when>
    <thetext>Comment on attachment 147618
Patch

Hey Daniel - can you take a crack at making the controller a public interface on webkit, and moving the actual AllBenchmarks to chrome&apos;s content/renderer folder, perthaps alongside teh benchmarking extension? I think Darin was onto something here. :)

Based on some of the discussion you heard in today&apos;s meeting, I think it will be useful to expose basic primitives like &quot;paint the page and use this functor to create canvas objects.&quot; That would allow us to use the benchmark controller to do both microbenchmarking and this record thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653671</commentid>
    <comment_count>13</comment_count>
      <attachid>148609</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-20 11:15:19 -0700</bug_when>
    <thetext>Created attachment 148609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656758</commentid>
    <comment_count>14</comment_count>
      <attachid>148609</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-25 11:46:04 -0700</bug_when>
    <thetext>Comment on attachment 148609
Patch

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

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:41
&gt; +// Interface between the rendering benchmarks and the WebViewImpl.

and the WebView.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:44
&gt; +    enum PaintMode {

check webkit style guide on enums. barring anything there, grep for enums. I think we use different style.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:48
&gt; +    class WebCanvasFactory {

I think you can call this CanvasFactory since its inner.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:54
&gt; +    WebRenderingBenchmarkController() { }

Why have a public constructor? Seems like you dont ened a constructor at all, or if you do, it should be protected.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:58
&gt; +    virtual double timePaint(WebCanvasFactory*, const PaintMode) = 0;

Lets come up with a better name. measurePaintTIme

Does this need layout called beforehand or does it do it automatically?

You need much better docs explaining what this does.

Also, I think you can pass a reference to the factory rather than a pointer. That clarifies ownership.

&gt; Source/WebKit/chromium/public/WebView.h:459
&gt; +    virtual WebRenderingBenchmarkController* createRenderingBenchmarkController()

Caller assumes ownership? Why?

I think WebViewImpl should ownptr&lt;renderingBenchmarkConttroller&gt; (lazily create it) and this can just be an accessor.

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:1
&gt; +/*

This should be called xxximpl. See for example webcompositorinputhandler and webcompositorinputhandlerimpl

Eg WebRenderingBenchmarkControllerImpl

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:48
&gt; +double WebViewImplRenderingBenchmarkController::timePaint(WebCanvasFactory* canvasFactory, const PaintMode paintMode)

The public header should document the units returned.

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:50
&gt; +    m_webViewImpl-&gt;layout();

Why expose layout if you&apos;re automatically laying out? Dont expose it if its not serving a purpose. :)

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:53
&gt; +        WebCore::GraphicsLayer* layer = m_webViewImpl-&gt;rootGraphicsLayer();

this should probably be split out to a standalone function

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:61
&gt; +            layers.prepend(layer-&gt;children());

why are you prepending? you realize that this is a vector so each prepend is super inefficient?

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:67
&gt; +            case PAINT_VIEWPORT: // TODO(dmurph): implement this

You should assert not reached in this case.

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:89
&gt; +    WebSize size = m_webViewImpl-&gt;size();

this could be another fucntion

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:110
&gt; +    WebCanvas* canvas = canvasFactory-&gt;createWebCanvas(canvasSize);

You should have
OwnPtr&lt;WebCanvas&gt; canvas = adoptPtr(canvasFactory-&gt;create(...));
that way you never leak

&gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:111
&gt; +    double beforeTime = currentTime();

you should be using monotonicallyIncreasingTime not currentTime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656793</commentid>
    <comment_count>15</comment_count>
      <attachid>148609</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-25 12:40:01 -0700</bug_when>
    <thetext>Comment on attachment 148609
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:44
&gt;&gt; +    enum PaintMode {
&gt; 
&gt; check webkit style guide on enums. barring anything there, grep for enums. I think we use different style.

http://trac.webkit.org/wiki/ChromiumWebKitAPI has a section on enums</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657830</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-26 12:14:00 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; Source/WebKit/chromium/public/WebView.h:459
&gt; &gt; +    virtual WebRenderingBenchmarkController* createRenderingBenchmarkController()
&gt; 
&gt; Caller assumes ownership? Why?
&gt; 
&gt; I think WebViewImpl should ownptr&lt;renderingBenchmarkConttroller&gt; (lazily create it) and this can just be an accessor.

That&apos;s fine as long as the controller is stateless.  Otherwise, it needs to be a factory.  Do you want to impose the stateless constraint on the controller, or the ownership constraint on the WebView?

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:50
&gt; &gt; +    m_webViewImpl-&gt;layout();
&gt; 
&gt; Why expose layout if you&apos;re automatically laying out? Dont expose it if its not serving a purpose. :)

I&apos;m using it, I have a benchmark that just calls layout.  I can remove that.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImplRenderingBenchmarkController.cpp:61
&gt; &gt; +            layers.prepend(layer-&gt;children());
&gt; 
&gt; why are you prepending? you realize that this is a vector so each prepend is super inefficient?

Obviously, yes, I just couldn&apos;t find a doubly-linked list in WTF and I need to prepend for breadth-first-search (which makes applying layer transformations easier).  I just talked to Julian and he pointed me towards Deque, which looks like it doesn&apos;t copy on prepend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657848</commentid>
    <comment_count>17</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-06-26 12:26:37 -0700</bug_when>
    <thetext>I think you&apos;re overthinking the stateless thing. I think that the functions should do what they say they&apos;re going to do regardless of what was called on them in the past. So, for example, it is good that layout NOT be on the interface and that it internally do layout for you. Anyway, I&apos;m not clear how you &quot;impose a stateless constraint&quot;?

Wrt deque, you could also write a recursive function. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657869</commentid>
    <comment_count>18</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-26 12:49:11 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I think you&apos;re overthinking the stateless thing. I think that the functions should do what they say they&apos;re going to do regardless of what was called on them in the past. So, for example, it is good that layout NOT be on the interface and that it internally do layout for you. Anyway, I&apos;m not clear how you &quot;impose a stateless constraint&quot;?
&gt; 
&gt; Wrt deque, you could also write a recursive function. :)

By stateless I meant there wouldn&apos;t be conflicts if two people were using the same controller.  I think it&apos;s better overall that the controller be stateless.  So, WebView owning it is cool.

I might use recursion if it makes the code simpler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659917</commentid>
    <comment_count>19</comment_count>
      <attachid>150035</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-28 16:04:42 -0700</bug_when>
    <thetext>Created attachment 150035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659924</commentid>
    <comment_count>20</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-06-28 16:07:03 -0700</bug_when>
    <thetext>Fixes for commented issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661803</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-02 16:24:42 -0700</bug_when>
    <thetext>This LGTM mod time-&gt;measure. JamesR for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661807</commentid>
    <comment_count>22</comment_count>
      <attachid>150496</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-02 16:34:46 -0700</bug_when>
    <thetext>Created attachment 150496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661808</commentid>
    <comment_count>23</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-02 16:35:53 -0700</bug_when>
    <thetext>Fixed time-&gt;measure, cleanup up accelerated check in the benchmark impl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661809</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 16:38:51 -0700</bug_when>
    <thetext>Attachment 150496 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1
Source/WebKit/chromium/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661810</commentid>
    <comment_count>25</comment_count>
      <attachid>150497</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-02 16:43:38 -0700</bug_when>
    <thetext>Created attachment 150497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661812</commentid>
    <comment_count>26</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-02 16:44:07 -0700</bug_when>
    <thetext>Fixed tab character in ChangeLog file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661822</commentid>
    <comment_count>27</comment_count>
      <attachid>150496</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-02 17:04:54 -0700</bug_when>
    <thetext>Comment on attachment 150496
Patch

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

I&apos;ve left some feedback that is hopefully helpful.  Unfortunately I&apos;m heading out now and will be gone for a few weeks, so I suggest you find another public API reviewer to work with in order to get this in landable shape.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:36
&gt; +#include &quot;platform/WebSize.h&quot;

If the only WebSize use is a const reference then you could just use a forward declaration. Alternately, since WebSize is two ints, passing by value is probably fine.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:41
&gt; +class WebRenderingBenchmarkController {

I don&apos;t see what about this class is a &apos;controller&apos;. When seeing a WebRenderingBenchmarkController, I expect to see a WebRenderingBenchmark type somewhere that this controls. Perhaps this could have a shorter, more direct name?

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:43
&gt; +    enum PaintMode {

This enum is mis-named, see the section on enums in http://trac.webkit.org/wiki/ChromiumWebKitAPI

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:49
&gt; +    class CanvasFactory {

this needs some explanation of what it&apos;s doing and what the expectations are of the implementation. a factory pattern is fairly unusual in the WebKit public API

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:51
&gt; +        virtual ~CanvasFactory() { }

should this be public? i.e. does the WebRenderingBenchmarkController take ownership of the factory, or should that be hidden from the controller? (I suspect the answer is the latter, which means this should probably be protected).

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:56
&gt; +    virtual ~WebRenderingBenchmarkController() { }

Should this be public (i.e. should someone be able to delete a WebRenderingBenchmarkController via a WebRenderingBenchmarkController* if they have no knowledge of the underlying type)? the answer is usually no

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:58
&gt; +    // Returns the time in seconds to paint on given canvas/es.

The comment is a bit misleading since this function isn&apos;t actually given a canvas.

&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:59
&gt; +    virtual double measurePaintTime(const CanvasFactory&amp;, const PaintMode) const = 0;

No point in having &apos;const&apos; on by-value parameters like an enum, it&apos;s copied anyway.

&gt; Source/WebKit/chromium/public/WebView.h:466
&gt; +    // Rending Benchmark support --------------------------------------------

typo - rendering ?

&gt; Source/WebKit/chromium/public/WebView.h:469
&gt; +      return 0;

4-space indentation, or just put this on one line

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:8
&gt; + *     * Redistributions of source code must retain the above copyright

we prefer 2-clause license for new files

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:38
&gt; +#include &quot;public/WebCanvas.h&quot;

&lt;public/WebCanvas.h&gt;, please

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:48
&gt; +using WTF::OwnPtr;
&gt; +using WTF::Vector;

You don&apos;t need this, OwnPtr.h / Vector.h have using declarations that put OwnPtr/Vector in the global namespace

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:52
&gt; +#if USE(ACCELERATED_COMPOSITING)

Chromium always sets USE(ACCELERATED_COMPOSITING), there&apos;s no point in guarding stuff in /chromium/ paths with this guard

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:56
&gt; +    const OwnPtr&lt;WebCanvas&gt; canvas = WTF::adoptPtr(canvasFactory.createWebCanvas(canvasSize));

no WTF::

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:61
&gt; +    return monotonicallyIncreasingTime() - beforeTime;

are you trying to isolate the time spent painting from the time spent creating/destroying the canvases? This might accumulate a lot of error if you have many small layers with cheap paint times

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:66
&gt; +    // TODO(dmurph): go through all the layers, using the internal WebLayer

We don&apos;t use TODO(name) in WebKit, just FIXME - no name.  Or even better, file a bug and link to it.  Or even better better, don&apos;t land this code until it works.  Code in the tree is code everybody working on the project has to worry about, so there&apos;s not much use in landing code that doesn&apos;t work yet.

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:75
&gt; +    const FloatSize layerSize = layer.size();

we don&apos;t typically use const for locals like this. If the function is big and long and complicated having const on locals can help you figure out invariants, but a better solution to that is often to just make the function less big + long + complicated. I&apos;d just leave the const out here.

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:104
&gt; +    default:

better to leave out the default: completely and have the compiler check that you have a case: for every possible value enum value

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:110
&gt; +    const OwnPtr&lt;WebCanvas&gt; canvas = WTF::adoptPtr(canvasFactory.createWebCanvas(canvasSize));

no WTF::

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:131
&gt; +    default:

same here re: default

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:35
&gt; +#include &quot;GraphicsLayer.h&quot;
&gt; +#include &quot;IntRect.h&quot;

Forward declarations of these types would suffice

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:42
&gt; +    WebRenderingBenchmarkControllerImpl(WebViewImpl* webViewImpl) : m_webViewImpl(webViewImpl) { }

explicit on one-arg constructors

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:53
&gt; +    // returns the time in seconds

please start your comments with an uppercase letter and end them with a period. for bonus points, have comments be completely sentences.

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:54
&gt; +    double measureLayerPaint(const CanvasFactory&amp;, WebCore::GraphicsLayer&amp;, const WebCore::IntRect&amp;) const;

why is GraphicsLayer being passed by non-const reference? is it an out parameter?

&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:55
&gt; +    // returns the time in seconds. Currently unimplemented.

why land it if it&apos;s unimplemented? probably better to just not land it until it works

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:749
&gt; +    if (!m_renderingBenchmarkController.get())

all WTF smart pointers provide operator bool() overrides that do the right thing, so this check should just be written:

if (!m_renderingBenchmarkController)

&gt; Source/WebKit/chromium/src/WebViewImpl.h:300
&gt; +    virtual const WebRenderingBenchmarkController* renderingBenchmarkController();

we don&apos;t typically use const for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661839</commentid>
    <comment_count>28</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-02 17:51:21 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:55
&gt; &gt; +    // returns the time in seconds. Currently unimplemented.
&gt; 
&gt; why land it if it&apos;s unimplemented? probably better to just not land it until it works

Because we need the infrastructure for things before we need the viewport version. I think this is acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666141</commentid>
    <comment_count>29</comment_count>
      <attachid>151547</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-10 16:12:21 -0700</bug_when>
    <thetext>Created attachment 151547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666142</commentid>
    <comment_count>30</comment_count>
      <attachid>150496</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-10 16:12:53 -0700</bug_when>
    <thetext>Comment on attachment 150496
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:41
&gt;&gt; +class WebRenderingBenchmarkController {
&gt; 
&gt; I don&apos;t see what about this class is a &apos;controller&apos;. When seeing a WebRenderingBenchmarkController, I expect to see a WebRenderingBenchmark type somewhere that this controls. Perhaps this could have a shorter, more direct name?

Renamed to WebViewBenchmarkSupport

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:43
&gt;&gt; +    enum PaintMode {
&gt; 
&gt; This enum is mis-named, see the section on enums in http://trac.webkit.org/wiki/ChromiumWebKitAPI

I think you might not be seeing the most recent patch?  This follows the guide.

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:49
&gt;&gt; +    class CanvasFactory {
&gt; 
&gt; this needs some explanation of what it&apos;s doing and what the expectations are of the implementation. a factory pattern is fairly unusual in the WebKit public API

Done.

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:51
&gt;&gt; +        virtual ~CanvasFactory() { }
&gt; 
&gt; should this be public? i.e. does the WebRenderingBenchmarkController take ownership of the factory, or should that be hidden from the controller? (I suspect the answer is the latter, which means this should probably be protected).

I haven&apos;t seen that pattern before, pretty cool.  Done.

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:56
&gt;&gt; +    virtual ~WebRenderingBenchmarkController() { }
&gt; 
&gt; Should this be public (i.e. should someone be able to delete a WebRenderingBenchmarkController via a WebRenderingBenchmarkController* if they have no knowledge of the underlying type)? the answer is usually no

Done.

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:58
&gt;&gt; +    // Returns the time in seconds to paint on given canvas/es.
&gt; 
&gt; The comment is a bit misleading since this function isn&apos;t actually given a canvas.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebRenderingBenchmarkController.h:59
&gt;&gt; +    virtual double measurePaintTime(const CanvasFactory&amp;, const PaintMode) const = 0;
&gt; 
&gt; No point in having &apos;const&apos; on by-value parameters like an enum, it&apos;s copied anyway.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:466
&gt;&gt; +    // Rending Benchmark support --------------------------------------------
&gt; 
&gt; typo - rendering ?

Done.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:469
&gt;&gt; +      return 0;
&gt; 
&gt; 4-space indentation, or just put this on one line

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:8
&gt;&gt; + *     * Redistributions of source code must retain the above copyright
&gt; 
&gt; we prefer 2-clause license for new files

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:38
&gt;&gt; +#include &quot;public/WebCanvas.h&quot;
&gt; 
&gt; &lt;public/WebCanvas.h&gt;, please

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:48
&gt;&gt; +using WTF::Vector;
&gt; 
&gt; You don&apos;t need this, OwnPtr.h / Vector.h have using declarations that put OwnPtr/Vector in the global namespace

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:52
&gt;&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; Chromium always sets USE(ACCELERATED_COMPOSITING), there&apos;s no point in guarding stuff in /chromium/ paths with this guard

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:56
&gt;&gt; +    const OwnPtr&lt;WebCanvas&gt; canvas = WTF::adoptPtr(canvasFactory.createWebCanvas(canvasSize));
&gt; 
&gt; no WTF::

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:61
&gt;&gt; +    return monotonicallyIncreasingTime() - beforeTime;
&gt; 
&gt; are you trying to isolate the time spent painting from the time spent creating/destroying the canvases? This might accumulate a lot of error if you have many small layers with cheap paint times

This is intentional.  Perhaps in the future we&apos;ll measure the creation as well, but for now, it&apos;s just the paint.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:66
&gt;&gt; +    // TODO(dmurph): go through all the layers, using the internal WebLayer
&gt; 
&gt; We don&apos;t use TODO(name) in WebKit, just FIXME - no name.  Or even better, file a bug and link to it.  Or even better better, don&apos;t land this code until it works.  Code in the tree is code everybody working on the project has to worry about, so there&apos;s not much use in landing code that doesn&apos;t work yet.

I agree, I think I&apos;ll remove the enumeration value then (and these methods), but keep the switch statement architecture for the next patch

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:75
&gt;&gt; +    const FloatSize layerSize = layer.size();
&gt; 
&gt; we don&apos;t typically use const for locals like this. If the function is big and long and complicated having const on locals can help you figure out invariants, but a better solution to that is often to just make the function less big + long + complicated. I&apos;d just leave the const out here.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:104
&gt;&gt; +    default:
&gt; 
&gt; better to leave out the default: completely and have the compiler check that you have a case: for every possible value enum value

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:110
&gt;&gt; +    const OwnPtr&lt;WebCanvas&gt; canvas = WTF::adoptPtr(canvasFactory.createWebCanvas(canvasSize));
&gt; 
&gt; no WTF::

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.cpp:131
&gt;&gt; +    default:
&gt; 
&gt; same here re: default

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:35
&gt;&gt; +#include &quot;IntRect.h&quot;
&gt; 
&gt; Forward declarations of these types would suffice

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:42
&gt;&gt; +    WebRenderingBenchmarkControllerImpl(WebViewImpl* webViewImpl) : m_webViewImpl(webViewImpl) { }
&gt; 
&gt; explicit on one-arg constructors

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:53
&gt;&gt; +    // returns the time in seconds
&gt; 
&gt; please start your comments with an uppercase letter and end them with a period. for bonus points, have comments be completely sentences.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:54
&gt;&gt; +    double measureLayerPaint(const CanvasFactory&amp;, WebCore::GraphicsLayer&amp;, const WebCore::IntRect&amp;) const;
&gt; 
&gt; why is GraphicsLayer being passed by non-const reference? is it an out parameter?

No, but the paint call is non-const

&gt;&gt; Source/WebKit/chromium/src/WebRenderingBenchmarkControllerImpl.h:55
&gt;&gt; +    // returns the time in seconds. Currently unimplemented.
&gt; 
&gt; why land it if it&apos;s unimplemented? probably better to just not land it until it works

I agree, removed.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:749
&gt;&gt; +    if (!m_renderingBenchmarkController.get())
&gt; 
&gt; all WTF smart pointers provide operator bool() overrides that do the right thing, so this check should just be written:
&gt; 
&gt; if (!m_renderingBenchmarkController)

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:300
&gt;&gt; +    virtual const WebRenderingBenchmarkController* renderingBenchmarkController();
&gt; 
&gt; we don&apos;t typically use const for this

const here enforces that WebRenderingBenchmarkController can be safely accessed by multiple people.  The controller should not be able to be changed by the caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666148</commentid>
    <comment_count>31</comment_count>
      <attachid>151547</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-10 16:28:02 -0700</bug_when>
    <thetext>Comment on attachment 151547
Patch

Attachment 151547 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13203131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666178</commentid>
    <comment_count>32</comment_count>
      <attachid>151556</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-10 17:07:56 -0700</bug_when>
    <thetext>Created attachment 151556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666307</commentid>
    <comment_count>33</comment_count>
      <attachid>151556</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-10 21:20:32 -0700</bug_when>
    <thetext>Comment on attachment 151556
Patch

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

Lets see what @fishd thinks.

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        initial microbenchmark web view controller

Lets update this comment to be a bit more clear. E.g. &quot;Introduce WebViewBenchmarkSupport as a way to do performance experiments on a real WebView&quot;

&gt; Source/WebKit/chromium/public/WebView.h:466
&gt; +    // Benchmark support --------------------------------------------

// Benchmarking ----
^^ instead of benchmark support?

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:52
&gt; +        virtual WebCanvas* createWebCanvas(const WebSize&amp;) const = 0;

I dont think this needs to be a const method. What if I wanted to count the number of canvases created? Or track the area of paints? That requires that the factory is non-const.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:59
&gt; +    virtual double measurePaintTime(const CanvasFactory&amp;, PaintMode) const = 0;

Does this need to be passed by const? I think thats unnecessarily restrictive.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:101
&gt; +#if USE(ACCELERATED_COMPOSITING)

Did we decide to nix this #if?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666318</commentid>
    <comment_count>34</comment_count>
      <attachid>151556</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-10 21:28:51 -0700</bug_when>
    <thetext>Comment on attachment 151556
Patch

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

&gt; Source/WebKit/chromium/public/WebView.h:467
&gt; +    virtual const WebViewBenchmarkSupport* benchmarkSupport() { return 0; }

This shouldn&apos;t return a const WVBS*. It should be straight WebViewBenchmarkSupport. Sorry, I dont buy your previous comment about enforcing anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667386</commentid>
    <comment_count>35</comment_count>
      <attachid>151556</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-07-11 21:40:50 -0700</bug_when>
    <thetext>Comment on attachment 151556
Patch

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

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:43
&gt; +    enum PaintMode {

do you need this enum?  do you plan on adding more values here in the future?

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:44
&gt; +      // Paint the entire page.

nit: indentation

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:47
&gt; +    // Factory for creating canvases for paint calls, where multiple canvases

you might also mention that the factory makes it convenient for the caller to not have
to know/compute the size of the canvas up front.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:51
&gt; +        // Creates a web canvas, caller assumes ownership.

nit: this comment is self-evident.  you can leave it out.  the &quot;create&quot; prefix implies the ownership transfer, and this function&apos;s name makes it clear that it is creating a canvas.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:52
&gt;&gt; +        virtual WebCanvas* createWebCanvas(const WebSize&amp;) const = 0;
&gt; 
&gt; I dont think this needs to be a const method. What if I wanted to count the number of canvases created? Or track the area of paints? That requires that the factory is non-const.

nit: we usually leave off the &quot;Web&quot; in method names that refer to types.  createCanvas, returning WebCanvas*, would be a fine name for this method that is consistent with existing code.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:65
&gt; +    WebViewImpl* m_webViewImpl;

notice how WebViewBenchmarkSupportImpl has no real member variables other than
the backpointer to the WebViewImpl?  perhaps allocating it lazily does not really
offer much benefit?  i suppose it trims the size of WebViewImpl by a DWORD doing
it this way.  however, if you wanted to just have WebViewImpl have a non-pointer
member variable of type WebViewBenchmarkSupportImpl that would be OK too.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:301
&gt; +    virtual const WebViewBenchmarkSupport* benchmarkSupport();

nit: no need for the new line between this method declaration and renderingStats.

the idea is that methods should be listed in the same order as they are declared
in the interface being implemented.  the .cpp file should similarly list the methods
in order.  (WebViewImpl seems to have some mistakes in this regard.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668473</commentid>
    <comment_count>36</comment_count>
      <attachid>152123</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-12 18:23:16 -0700</bug_when>
    <thetext>Created attachment 152123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668485</commentid>
    <comment_count>37</comment_count>
      <attachid>151556</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-12 18:37:47 -0700</bug_when>
    <thetext>Comment on attachment 151556
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebView.h:466
&gt;&gt; +    // Benchmark support --------------------------------------------
&gt; 
&gt; // Benchmarking ----
&gt; ^^ instead of benchmark support?

Done.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:467
&gt;&gt; +    virtual const WebViewBenchmarkSupport* benchmarkSupport() { return 0; }
&gt; 
&gt; This shouldn&apos;t return a const WVBS*. It should be straight WebViewBenchmarkSupport. Sorry, I dont buy your previous comment about enforcing anything.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:43
&gt;&gt; +    enum PaintMode {
&gt; 
&gt; do you need this enum?  do you plan on adding more values here in the future?

We&apos;re adding another paint mode in the next cl

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:44
&gt;&gt; +      // Paint the entire page.
&gt; 
&gt; nit: indentation

Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:47
&gt;&gt; +    // Factory for creating canvases for paint calls, where multiple canvases
&gt; 
&gt; you might also mention that the factory makes it convenient for the caller to not have
&gt; to know/compute the size of the canvas up front.

Done.  Also, renamed to CanvasController, as it will also have observer methods for when painting is about to occur and when painting is complete for a web canvas.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:51
&gt;&gt; +        // Creates a web canvas, caller assumes ownership.
&gt; 
&gt; nit: this comment is self-evident.  you can leave it out.  the &quot;create&quot; prefix implies the ownership transfer, and this function&apos;s name makes it clear that it is creating a canvas.

Ok

&gt;&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:52
&gt;&gt;&gt; +        virtual WebCanvas* createWebCanvas(const WebSize&amp;) const = 0;
&gt;&gt; 
&gt;&gt; I dont think this needs to be a const method. What if I wanted to count the number of canvases created? Or track the area of paints? That requires that the factory is non-const.
&gt; 
&gt; nit: we usually leave off the &quot;Web&quot; in method names that refer to types.  createCanvas, returning WebCanvas*, would be a fine name for this method that is consistent with existing code.

Done, Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:59
&gt;&gt; +    virtual double measurePaintTime(const CanvasFactory&amp;, PaintMode) const = 0;
&gt; 
&gt; Does this need to be passed by const? I think thats unnecessarily restrictive.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:101
&gt;&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; Did we decide to nix this #if?

Whoops, missed that one.  fixed.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:65
&gt;&gt; +    WebViewImpl* m_webViewImpl;
&gt; 
&gt; notice how WebViewBenchmarkSupportImpl has no real member variables other than
&gt; the backpointer to the WebViewImpl?  perhaps allocating it lazily does not really
&gt; offer much benefit?  i suppose it trims the size of WebViewImpl by a DWORD doing
&gt; it this way.  however, if you wanted to just have WebViewImpl have a non-pointer
&gt; member variable of type WebViewBenchmarkSupportImpl that would be OK too.

Good idea, done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:301
&gt;&gt; +    virtual const WebViewBenchmarkSupport* benchmarkSupport();
&gt; 
&gt; nit: no need for the new line between this method declaration and renderingStats.
&gt; 
&gt; the idea is that methods should be listed in the same order as they are declared
&gt; in the interface being implemented.  the .cpp file should similarly list the methods
&gt; in order.  (WebViewImpl seems to have some mistakes in this regard.)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668486</commentid>
    <comment_count>38</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-12 18:39:04 -0700</bug_when>
    <thetext>So I forgot to call the painting report methods, I&apos;ll upload another patch tomorrow morning with those four lines added in WebViewBenchmarkSupportImpl, my bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669132</commentid>
    <comment_count>39</comment_count>
      <attachid>152278</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-13 09:31:55 -0700</bug_when>
    <thetext>Created attachment 152278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670421</commentid>
    <comment_count>40</comment_count>
      <attachid>152278</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-07-16 10:01:55 -0700</bug_when>
    <thetext>Comment on attachment 152278
Patch

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

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:77
&gt; +double WebViewBenchmarkSupportImpl::measureSoftwarePaintTime(PaintingController&amp; paintingController, const PaintMode paintMode)

no need for &quot;const&quot; PaintMode.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:103
&gt; +double WebViewBenchmarkSupportImpl::measurePaintTime(PaintingController&amp; paintingController, const PaintMode paintMode)

same here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670457</commentid>
    <comment_count>41</comment_count>
      <attachid>152278</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-16 10:48:57 -0700</bug_when>
    <thetext>Comment on attachment 152278
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:77
&gt;&gt; +double WebViewBenchmarkSupportImpl::measureSoftwarePaintTime(PaintingController&amp; paintingController, const PaintMode paintMode)
&gt; 
&gt; no need for &quot;const&quot; PaintMode.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:103
&gt;&gt; +double WebViewBenchmarkSupportImpl::measurePaintTime(PaintingController&amp; paintingController, const PaintMode paintMode)
&gt; 
&gt; same here

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670458</commentid>
    <comment_count>42</comment_count>
      <attachid>152563</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-16 10:49:22 -0700</bug_when>
    <thetext>Created attachment 152563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670787</commentid>
    <comment_count>43</comment_count>
      <attachid>152645</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-16 17:01:55 -0700</bug_when>
    <thetext>Created attachment 152645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671579</commentid>
    <comment_count>44</comment_count>
      <attachid>152645</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-07-17 14:04:26 -0700</bug_when>
    <thetext>Comment on attachment 152645
Patch

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

&gt; Source/WebKit/chromium/public/WebView.h:454
&gt; +    // Benchmarking support --------------------------------------------

nit: add a new line below the section comment to be consistent with the rest
of this file.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:45
&gt; +        PaintModeEverything

it is hard to review the name of this enum without considering what the other
enum values will be.  PaintModeEverything reads a bit awkwardly.  another
option besides enums is to just have multiple entry points.  for example,
paint could be named paintEverything or paintAll.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:52
&gt; +    class PaintingController {

This seems like more of a Client interface than a Controller interface.
Since the method this goes with is named &quot;paint&quot;, I&apos;d probably call this
interface PaintClient.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:56
&gt; +        // Called by the WebViewBenchmakrSupport when painting is about to

typo: WebViewBenchmakrSupport

I recommend using the more conventional names for these functions:
willPaint and didPaint

We use these prefixes to denote before and after events.

&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:68
&gt; +    virtual double paint(PaintingController&amp;, PaintMode) = 0;

nit: it is more conventional to pass callback interfaces by pointer.

  virtual double paint(PaintClient*, PaintMode) = 0;

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:51
&gt; +    const WebSize canvasSize = WebSize(clip.width(), clip.height());

nit: same comment about gratuitous consts and WebSize construction

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:66
&gt; +    const IntRect clip = WebCore::IntRect(0, 0, layerSize.width(), layerSize.height());

nit: should be &quot;IntRect clip(...)&quot;

nit: isn&apos;t there a potential lossy conversion here from float to int?
Or, can we assume that layer.size() always returns integer values?

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:92
&gt; +    const WebSize canvasSize = WebSize(paintSize.width, paintSize.height);

nit: no need for &apos;const&apos; on these local variables.  it just adds noise.

nit: instead of &quot;WebSize foo = WebSize(...),&quot; just do &quot;WebSize foo(...)&quot;

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:95
&gt; +    double beforeTime = monotonicallyIncreasingTime();

it occurs to me that the timing code could be implemented on the client
side.  in willPaint record the start time.  in didPaint record the stop
time.  this means less code in webkit!

&gt; Source/WebKit/chromium/src/WebViewImpl.h:791
&gt; +    // Lazily created controller for microbenchmarks

nit: this comment is no longer correct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671850</commentid>
    <comment_count>45</comment_count>
      <attachid>152645</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-17 18:21:04 -0700</bug_when>
    <thetext>Comment on attachment 152645
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebView.h:454
&gt;&gt; +    // Benchmarking support --------------------------------------------
&gt; 
&gt; nit: add a new line below the section comment to be consistent with the rest
&gt; of this file.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:45
&gt;&gt; +        PaintModeEverything
&gt; 
&gt; it is hard to review the name of this enum without considering what the other
&gt; enum values will be.  PaintModeEverything reads a bit awkwardly.  another
&gt; option besides enums is to just have multiple entry points.  for example,
&gt; paint could be named paintEverything or paintAll.

The next enum will be PaintModeViewport.  I&apos;d rather use enums, and they make it cleaner on the implementation side as well.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:52
&gt;&gt; +    class PaintingController {
&gt; 
&gt; This seems like more of a Client interface than a Controller interface.
&gt; Since the method this goes with is named &quot;paint&quot;, I&apos;d probably call this
&gt; interface PaintClient.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:56
&gt;&gt; +        // Called by the WebViewBenchmakrSupport when painting is about to
&gt; 
&gt; typo: WebViewBenchmakrSupport
&gt; 
&gt; I recommend using the more conventional names for these functions:
&gt; willPaint and didPaint
&gt; 
&gt; We use these prefixes to denote before and after events.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:68
&gt;&gt; +    virtual double paint(PaintingController&amp;, PaintMode) = 0;
&gt; 
&gt; nit: it is more conventional to pass callback interfaces by pointer.
&gt; 
&gt;   virtual double paint(PaintClient*, PaintMode) = 0;

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:51
&gt;&gt; +    const WebSize canvasSize = WebSize(clip.width(), clip.height());
&gt; 
&gt; nit: same comment about gratuitous consts and WebSize construction

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:66
&gt;&gt; +    const IntRect clip = WebCore::IntRect(0, 0, layerSize.width(), layerSize.height());
&gt; 
&gt; nit: should be &quot;IntRect clip(...)&quot;
&gt; 
&gt; nit: isn&apos;t there a potential lossy conversion here from float to int?
&gt; Or, can we assume that layer.size() always returns integer values?

Done, I think we can assume layer.size() will always return integer values, I don&apos;t think there&apos;s another choice here either, we can only paint IntRects

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:92
&gt;&gt; +    const WebSize canvasSize = WebSize(paintSize.width, paintSize.height);
&gt; 
&gt; nit: no need for &apos;const&apos; on these local variables.  it just adds noise.
&gt; 
&gt; nit: instead of &quot;WebSize foo = WebSize(...),&quot; just do &quot;WebSize foo(...)&quot;

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:95
&gt;&gt; +    double beforeTime = monotonicallyIncreasingTime();
&gt; 
&gt; it occurs to me that the timing code could be implemented on the client
&gt; side.  in willPaint record the start time.  in didPaint record the stop
&gt; time.  this means less code in webkit!

True, but we might want to add different time measurment modes in the future, James mentioned we might want to include the canvas creation at some point.  Nat, would we ever want that?  Or can we move the timing out of WebKit.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:791
&gt;&gt; +    // Lazily created controller for microbenchmarks
&gt; 
&gt; nit: this comment is no longer correct

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671853</commentid>
    <comment_count>46</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-17 18:26:32 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; &gt;&gt; Source/WebKit/chromium/public/WebViewBenchmarkSupport.h:45
&gt; &gt;&gt; +        PaintModeEverything
&gt; &gt; 
&gt; &gt; it is hard to review the name of this enum without considering what the other
&gt; &gt; enum values will be.  PaintModeEverything reads a bit awkwardly.  another
&gt; &gt; option besides enums is to just have multiple entry points.  for example,
&gt; &gt; paint could be named paintEverything or paintAll.
&gt; 
&gt; The next enum will be PaintModeViewport.  I&apos;d rather use enums, and they make it cleaner on the implementation side as well.

This has come up a few times in the reivew. We had the enum fully filled out before but then james asked us to remove it because we weren&apos;t using it. Changing function arguments in the webkit api is very time consuming, so this was the compromise I was trying to have us make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671868</commentid>
    <comment_count>47</comment_count>
      <attachid>152900</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-17 18:56:19 -0700</bug_when>
    <thetext>Created attachment 152900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671869</commentid>
    <comment_count>48</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-17 18:57:21 -0700</bug_when>
    <thetext>Removed timings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672015</commentid>
    <comment_count>49</comment_count>
      <attachid>152900</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-07-17 23:14:39 -0700</bug_when>
    <thetext>Comment on attachment 152900
Patch

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

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:43
&gt; +using WebCore::FloatSize;

nit: I recommend a &apos;using namespace WebCore&apos; here.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:63
&gt; +    IntRect clip = WebCore::IntRect(0, 0, layerSize.width(), layerSize.height());

nit: IntRect clip(...)

nit: no need for WebCore:: in front of IntRect due to the &apos;using WebCore::IntRect&apos; statement.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:57
&gt; +    void paintLayer(PaintClient*, WebCore::GraphicsLayer&amp;, const WebCore::IntRect&amp;);

nit: insert new line between function and the next comment block.

I think it would be helpful to name the last parameter &quot;clip&quot;.  then you could
probably delete the comment for this function as it would be fairly redundant
with the function signature.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:61
&gt; +    // Paints the WebViewImpl using software rendering, with the given paint mode

nit: this comment is fairly redundant with the method signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672559</commentid>
    <comment_count>50</comment_count>
      <attachid>153054</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-18 11:22:27 -0700</bug_when>
    <thetext>Created attachment 153054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672563</commentid>
    <comment_count>51</comment_count>
      <attachid>152900</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-18 11:24:32 -0700</bug_when>
    <thetext>Comment on attachment 152900
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:43
&gt;&gt; +using WebCore::FloatSize;
&gt; 
&gt; nit: I recommend a &apos;using namespace WebCore&apos; here.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:63
&gt;&gt; +    IntRect clip = WebCore::IntRect(0, 0, layerSize.width(), layerSize.height());
&gt; 
&gt; nit: IntRect clip(...)
&gt; 
&gt; nit: no need for WebCore:: in front of IntRect due to the &apos;using WebCore::IntRect&apos; statement.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:57
&gt;&gt; +    void paintLayer(PaintClient*, WebCore::GraphicsLayer&amp;, const WebCore::IntRect&amp;);
&gt; 
&gt; nit: insert new line between function and the next comment block.
&gt; 
&gt; I think it would be helpful to name the last parameter &quot;clip&quot;.  then you could
&gt; probably delete the comment for this function as it would be fairly redundant
&gt; with the function signature.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.h:61
&gt;&gt; +    // Paints the WebViewImpl using software rendering, with the given paint mode
&gt; 
&gt; nit: this comment is fairly redundant with the method signature.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674714</commentid>
    <comment_count>52</comment_count>
      <attachid>153054</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-07-20 10:46:38 -0700</bug_when>
    <thetext>Comment on attachment 153054
Patch

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

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:76
&gt; +    case PaintModeEverything: {

nit: no {}&apos;s for this case.  you aren&apos;t declaring a variable.

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:101
&gt; +        acceleratedPaintUnclipped(paintClient, *layer);

nit: add a &quot;break;&quot; at the end of this case, so you don&apos;t have to remember to add one later
when you add the other cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674834</commentid>
    <comment_count>53</comment_count>
      <attachid>153561</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-20 12:21:50 -0700</bug_when>
    <thetext>Created attachment 153561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674859</commentid>
    <comment_count>54</comment_count>
      <attachid>153570</attachid>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-20 12:43:32 -0700</bug_when>
    <thetext>Created attachment 153570
Patch for commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674901</commentid>
    <comment_count>55</comment_count>
      <attachid>153570</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 13:27:43 -0700</bug_when>
    <thetext>Comment on attachment 153570
Patch for commit

Clearing flags on attachment: 153570

Committed r123254: &lt;http://trac.webkit.org/changeset/123254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674904</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 13:28:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675791</commentid>
    <comment_count>57</comment_count>
      <attachid>153570</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-07-23 10:21:58 -0700</bug_when>
    <thetext>Comment on attachment 153570
Patch for commit

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

&gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:50
&gt; +    OwnPtr&lt;WebCanvas&gt; canvas = adoptPtr(paintClient-&gt;createCanvas(canvasSize));

This will not work with a recording canvas. It cannot be destroyed here. PaintClient should be responsible for destroying the canvas. It is also better design to co-locate create and destroy. I will upload another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675800</commentid>
    <comment_count>58</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-07-23 10:34:44 -0700</bug_when>
    <thetext>Has this been tested on acclerated-composited content? I am hitting this assert with poster-circle example:

http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderLayerBacking.cpp#L1217

poster-circle example: http://www.webkit.org/blog-files/3d-transforms/poster-circle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675818</commentid>
    <comment_count>59</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-23 10:48:49 -0700</bug_when>
    <thetext>Interesting... I&apos;ve been running with the compositor always on, I didn&apos;t test with that specific page though.

This looks like it will require a bit of discussion with people working on the compositor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675864</commentid>
    <comment_count>60</comment_count>
    <who name="Daniel Murphy">dmurph</who>
    <bug_when>2012-07-23 11:54:37 -0700</bug_when>
    <thetext>Tested, and I don&apos;t hit that assertion when I call paint for that page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675906</commentid>
    <comment_count>61</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-07-23 12:37:21 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; Tested, and I don&apos;t hit that assertion when I call paint for that page.

Hmm. Does not seem like the assert would depend on the type of canvas. Anyways I will ask you to test my patch once it is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675908</commentid>
    <comment_count>62</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-23 12:40:17 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 153570 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153570&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:50
&gt; &gt; +    OwnPtr&lt;WebCanvas&gt; canvas = adoptPtr(paintClient-&gt;createCanvas(canvasSize));
&gt; 
&gt; This will not work with a recording canvas. It cannot be destroyed here. PaintClient should be responsible for destroying the canvas. It is also better design to co-locate create and destroy. I will upload another patch.

I think you should be precise here... it will work for one use case. Its just that it wont work if you had one-layer-per-canvas canvas to the file that you wanted to start with.

If you write the picture after every didPaint, then you&apos;d be fine, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675916</commentid>
    <comment_count>63</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-07-23 12:50:28 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (In reply to comment #57)
&gt; &gt; (From update of attachment 153570 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153570&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/WebViewBenchmarkSupportImpl.cpp:50
&gt; &gt; &gt; +    OwnPtr&lt;WebCanvas&gt; canvas = adoptPtr(paintClient-&gt;createCanvas(canvasSize));
&gt; &gt; 
&gt; &gt; This will not work with a recording canvas. It cannot be destroyed here. PaintClient should be responsible for destroying the canvas. It is also better design to co-locate create and destroy. I will upload another patch.
&gt; 
&gt; I think you should be precise here... it will work for one use case. Its just that it wont work if you had one-layer-per-canvas canvas to the file that you wanted to start with.
&gt; 
&gt; If you write the picture after every didPaint, then you&apos;d be fine, correct?

No. It is not the issue of writing after every paint. Just ownership. The canvas returned by SkPicture is owned by SkPicture, and cannot be destroyed by anybody else.

I have filed https://bugs.webkit.org/show_bug.cgi?id=92008. Will upload a patch as soon as prepare-changelogs cooperates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675939</commentid>
    <comment_count>64</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-07-23 13:21:21 -0700</bug_when>
    <thetext>Ah, that clarifies things. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145662</attachid>
            <date>2012-06-04 17:34:17 -0700</date>
            <delta_ts>2012-06-06 11:28:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120604173416.patch</filename>
            <type>text/plain</type>
            <size>4588</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDZkYjVjZDk4MzZjODU3ZWMyYjg5MWYzYjc3NDJjYzlkZmU1YmExMTcuLjkzZTAwNjllZjEyZDZl
OGMxYjZmODY1MzYwYjliMTJiNTZjN2ZkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTItMDYtMDQgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW5pdGlhbCByZW5kZXJpbmcgbWljcm9iZW5j
aG1hcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4
MjcxCisKKyAgICAgICAgKiBwdWJsaWMvUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cy5oOiBBZGRl
ZC4KKyAgICAgICAgKFJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgorICAgICAgICAoUmVuZGVy
aW5nQmVuY2htYXJrUmVzdWx0czo6flJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnJ1blJlbmRlcmluZ0JlbmNobWFya3MpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA2LTA0ICBaZWV2IExpZWJl
ciAgPHpsaWViZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW51cCBz
Y2lzc29yIHJlY3QgY29tcHV0YXRpb24vdXNlIHdpdGggZGFtYWdlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9SZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9SZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzAwY2M2MjExZTRiZTNiZTY0NWIyNmE2ZTRhOTRlY2UxZGI4NWIyYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1JlbmRlcmluZ0Jl
bmNobWFya1Jlc3VsdHMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogUmVuZGVyaW5nQmVuY2ht
YXJrUmVzdWx0cy5oCisgKgorICogIENyZWF0ZWQgb246IEp1biAxLCAyMDEyCisgKiAgICAgIEF1
dGhvcjogZG11cnBoCisgKi8KKworI2lmbmRlZiBSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzX2gK
KyNkZWZpbmUgUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0c19oCisjcHJhZ21hIG9uY2UKKworY2xh
c3MgUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cyB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVu
ZGVyaW5nQmVuY2htYXJrUmVzdWx0cygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRSZXN1bHQo
Y29uc3QgY2hhciAqcmVzdWx0TmFtZSwgZG91YmxlIHJlc3VsdCkgPSAwOworfTsKKworI2VuZGlm
IC8qIFJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlldy5oCmluZGV4IDBmNzA5M2FjNGZkYzA4NjE1NDY0NWEzMGMwMWVhMzM0Mjkw
ZmM1ZGMuLmQxZDc1YjdjMTY3NWI3MjkwZDVjMjJmNWFjMjc1ZGQ4ZDQ4ZTY1YmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5k
ZWYgV2ViVmlld19oCiAjZGVmaW5lIFdlYlZpZXdfaAogCisjaW5jbHVkZSAiUmVuZGVyaW5nQmVu
Y2htYXJrUmVzdWx0cy5oIgogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViV2lkZ2V0LmgiCkBAIC00
ODIsNiArNDgzLDkgQEAgcHVibGljOgogICAgIC8vIFNpbXVsYXRlcyBhIGNvbXBvc2l0b3IgbG9z
dCBjb250ZXh0LgogICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51
bVRpbWVzKSA9IDA7CiAKKyAgICAvLyBSZW5kZXJpbmcgYmVuY2htYXJrcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2aXJ0dWFsIHZv
aWQgcnVuUmVuZGVyaW5nQmVuY2htYXJrcyhSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJikgPSAw
OworCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlZpZXcoKSB7fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1YWJjZDE2YzAwYThjYmQxZWUxNTdmOWI0
MmFlZTg3NDY0MjU2ODM0Li4xMmFjZDc3NGYyNjFiNzMxZmQxNGU0ZDBkODIzNzU0MjdkNjkzMjU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTAs
NiArMTEwLDcgQEAKICNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJT
a051bGxDYW52YXMuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKICNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgpAQCAtMTYwOSw2ICsxNjEwLDMwIEBAIHZvaWQgV2ViVmlld0ltcGw6Omxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAjZW5kaWYKIH0KIAorCit2b2lkIFdlYlZpZXdJ
bXBsOjpydW5SZW5kZXJpbmdCZW5jaG1hcmtzKFJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMmIHJl
c3VsdHMpCit7CisgICAgSW50UmVjdCBzY3JlZW5SZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9z
aXplLmhlaWdodCk7CisgICAgU2tEZXZpY2UgZGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0LCB0cnVlKTsKKyAgICBXZWJDYW52YXMg
Y2FudmFzKCZkZXZpY2UpOworCisgICAgbGF5b3V0KCk7CisKKyAgICBkb3VibGUgYmVmb3JlUGFp
bnQgPSBjdXJyZW50VGltZSgpOworICAgIHRoaXMtPnBhaW50KCZjYW52YXMsIHNjcmVlblJlY3Qp
OworICAgIGRvdWJsZSBhZnRlclBhaW50ID0gY3VycmVudFRpbWUoKTsKKyAgICByZXN1bHRzLmFk
ZFJlc3VsdCgicGFpbnQgdG8gYml0bWFwIHRpbWUiLCBhZnRlclBhaW50IC0gYmVmb3JlUGFpbnQp
OworCisgICAgV2ViQ2FudmFzKiBudWxsQ2FudmFzID0gU2tDcmVhdGVOdWxsQ2FudmFzKG1fc2l6
ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisKKyAgICBiZWZvcmVQYWludCA9IGN1cnJlbnRUaW1l
KCk7CisgICAgdGhpcy0+cGFpbnQobnVsbENhbnZhcywgc2NyZWVuUmVjdCk7CisgICAgYWZ0ZXJQ
YWludCA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmVzdWx0cy5hZGRSZXN1bHQoInBhaW50IHRvIG51
bGwgY2FudmFzIHRpbWUiLCBhZnRlclBhaW50IC0gYmVmb3JlUGFpbnQpOworCisgICAgZGVsZXRl
IG51bGxDYW52YXM7Cit9CisKIHZvaWQgV2ViVmlld0ltcGw6OmVudGVyRnVsbFNjcmVlbkZvckVs
ZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBXZSBhcmUgYWxyZWFk
eSB0cmFuc2l0aW9uaW5nIHRvIGZ1bGxzY3JlZW4gZm9yIGEgZGlmZmVyZW50IGVsZW1lbnQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA2NzU2MmZlYWJjZWFj
OTA0NDY0NDRkYmQ4Mzk4YjMyM2IwNmVkMmI4Li5kOWEyMTFkYmNiZGY2YzE3OWNhZmVmMTk0ZGNj
NmI5NGFkZDI5N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTU0NSw2ICs1NDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29u
dGV4dChpbnQgbnVtVGltZXMpOwogCisgICAgdm9pZCBydW5SZW5kZXJpbmdCZW5jaG1hcmtzKFJl
bmRlcmluZ0JlbmNobWFya1Jlc3VsdHMmKTsKKwogICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CiAgICAgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146072</attachid>
            <date>2012-06-06 11:28:41 -0700</date>
            <delta_ts>2012-06-14 11:04:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120606112840.patch</filename>
            <type>text/plain</type>
            <size>16541</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDM0YjgzMmEzM2ZlYWViOGM5ZmQ1YzAzNWY0MzlkMzU1ZDczZGQxYTguLmE1YjcwMjllN2IxNWQ2
MDA3MDFiZjlhY2FiOGY0ZTJlOTAzZjNlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTItMDYtMDQgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW5pdGlhbCByZW5kZXJpbmcgbWljcm9iZW5j
aG1hcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4
MjcxCisKKyAgICAgICAgKiBwdWJsaWMvUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cy5oOiBBZGRl
ZC4KKyAgICAgICAgKFJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgorICAgICAgICAoUmVuZGVy
aW5nQmVuY2htYXJrUmVzdWx0czo6flJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnJ1blJlbmRlcmluZ0JlbmNobWFya3MpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA2LTA1ICBEb25nd29vIElt
ICA8ZHcuaW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkICdpc1Byb3RvY29sSGFuZGxlclJl
Z2lzdGVyZWQnIGFuZCAndW5yZWdpc3RlclByb3RvY29sSGFuZGxlcicuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggYmFhY2Y0MDU4MWFiNzk3MjcyNDVmMjYyM2NkNTU0ODExODJkZThk
ZS4uZmVlOWQzYWRiZGJmMjc5ZDk1MDE5NDQ4MWU4ZmEwZTk4YTQ5N2VjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cApAQCAtMjMxLDYgKzIzMSw3IEBACiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQcmVyZW5kZXJlckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlJhbmdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUmVndWxhckV4cHJlc3Npb24u
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRz
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NvcGVkTWljcm90YXNrU3VwcHJlc3Npb24uaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5oJywKQEAgLTM0NCw2
ICszNDUsOCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvd2luL1dlYlNhbmRib3hTdXBwb3J0
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvd2luL1dlYlNjcmVlbkluZm9GYWN0b3J5Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5jcHAnLAorICAgICAg
ICAgICAgICAgICdzcmMvQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5oJywKICAgICAgICAgICAgICAg
ICAnc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9B
cHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvQXNz
ZXJ0TWF0Y2hpbmdFbnVtcy5jcHAnLApAQCAtNDU3LDYgKzQ2MCw3IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1JlbmRlcmluZ0Jl
bmNobWFyay5oJywKICAgICAgICAgICAgICAgICAnc3JjL1Njcm9sbGJhckdyb3VwLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMGEzMzZiOTU2YjVhYzcyYzE2ZjE3YmFkZThlMDE0Y2U3MDU3MGEwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUmVuZGVyaW5n
QmVuY2htYXJrUmVzdWx0cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlJlbmRlcmluZ0Jl
bmNobWFya1Jlc3VsdHNfaAorI2RlZmluZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzX2gK
KworY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cyB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+V2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cygpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBhZGRSZXN1bHQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdW5pdCwgZG91YmxlIHJl
c3VsdCkgPSAwOworfTsKKworI2VuZGlmIC8qIFdlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHNf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDU0MmIxMDIx
YTY0NDY1ZTM4NmFiNDNmNGFjY2UzYjBmODM2MWNlOTMuLmNhOGEwNWRjZjU2MDk3NjE4N2IwN2Y5
NTZiMzE1MjFlNmFiYWYyYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKICNp
bmNsdWRlICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCisjaW5jbHVkZSAiV2ViUmVuZGVyaW5n
QmVuY2htYXJrUmVzdWx0cy5oIgogI2luY2x1ZGUgIldlYldpZGdldC5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgpAQCAt
NDUzLDYgKzQ1NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhlIGNvbXBvc2l0b3IpIGJ1dCBt
dXN0IGJlIGNvbXBsZXRlZCBieSB0aGUgV2ViVmlldy4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNm
ZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJh
bWV0ZXJzJikgPSAwOwogCisKKyAgICAvLyBSZW5kZXJpbmcgYmVuY2htYXJrcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSdW5zIGFs
bCByZW5kZXJpbmcgYmVuY2htYXJrcworICAgIHZpcnR1YWwgdm9pZCBydW5SZW5kZXJpbmdCZW5j
aG1hcmtzKFdlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMmKSA9IDA7CisKICAgICAvLyBWaXNp
YmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJWaWV3Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQWxsUmVuZGVyaW5nQmVuY2ht
YXJrcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BbGxSZW5kZXJpbmdCZW5jaG1h
cmtzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNjRmMzllZTU2NmQ2YWUwZTFkMTc1ZDAwMjYyYWYxZjA0MjUz
YTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQWxsUmVu
ZGVyaW5nQmVuY2htYXJrcy5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFsbFJlbmRlcmluZ0JlbmNobWFya3MuaCIKKworI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCisjaW5jbHVk
ZSAiU2tOdWxsQ2FudmFzLmgiCisjaW5jbHVkZSAicHVibGljL1dlYkNhbnZhcy5oIgorI2luY2x1
ZGUgInB1YmxpYy9XZWJMYXllci5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTaXplLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIFdlYktpdDo6V2ViU2l6ZTsKK3VzaW5n
IFdlYktpdDo6V2ViQ2FudmFzOwordXNpbmcgV2ViS2l0OjpXZWJWaWV3SW1wbDsKKworY2xhc3Mg
UGFpbnRCZW5jaG1hcmsgOiBwdWJsaWMgUmVuZGVyaW5nQmVuY2htYXJrIHsKK3B1YmxpYzoKKyAg
ICBQYWludEJlbmNobWFyaygpIHsgfQorCisgICAgdm9pZCBydW4oV2ViUmVuZGVyaW5nQmVuY2ht
YXJrUmVzdWx0cyYgcmVzdWx0cywgV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKQorICAgIHsKKyAg
ICAgICAgV2ViU2l6ZSBzaXplID0gd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICAgICAgV2ViQ29y
ZTo6SW50UmVjdCBzY3JlZW5SZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAg
ICAgICAgU2tEZXZpY2UgZGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53
aWR0aCwgc2l6ZS5oZWlnaHQsIHRydWUpOworICAgICAgICBXZWJDYW52YXMgY2FudmFzKCZkZXZp
Y2UpOworCisgICAgICAgIHdlYlZpZXdJbXBsLT5sYXlvdXQoKTsKKworICAgICAgICAvLyBUT0RP
KGRtdXJwaCk6IGFkZCBhY2NlbGVyYXRlZCB2ZXJzaW9uCisKKyAgICAgICAgZG91YmxlIGJlZm9y
ZVBhaW50ID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgd2ViVmlld0ltcGwtPnBhaW50KCZjYW52
YXMsIHNjcmVlblJlY3QpOworICAgICAgICBkb3VibGUgYWZ0ZXJQYWludCA9IGN1cnJlbnRUaW1l
KCk7CisgICAgICAgIHJlc3VsdHMuYWRkUmVzdWx0KCJwYWludCIsICJzIiwgYWZ0ZXJQYWludCAt
IGJlZm9yZVBhaW50KTsKKyAgICB9Cit9OworCitjbGFzcyBQYWludE51bGxDYW52YXNCZW5jaG1h
cmsgOiBwdWJsaWMgUmVuZGVyaW5nQmVuY2htYXJrIHsKK3B1YmxpYzoKKyAgICBQYWludE51bGxD
YW52YXNCZW5jaG1hcmsoKSB7IH0KKworICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICJwYWludEJlbmNobWFyayI7CisgICAgfQorCisgICAgdm9pZCBy
dW4oV2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cyYgcmVzdWx0cywgV2ViVmlld0ltcGwqIHdl
YlZpZXdJbXBsKQorICAgIHsKKyAgICAgICAgV2ViU2l6ZSBzaXplID0gd2ViVmlld0ltcGwtPnNp
emUoKTsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5SZWN0KDAsIDAsIHNpemUud2lk
dGgsIHNpemUuaGVpZ2h0KTsKKyAgICAgICAgV2ViQ2FudmFzKiBudWxsQ2FudmFzID0gU2tDcmVh
dGVOdWxsQ2FudmFzKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKworICAgICAgICB3ZWJWaWV3
SW1wbC0+bGF5b3V0KCk7CisKKyAgICAgICAgLy8gVE9ETyhkbXVycGgpOiBhZGQgYWNjZWxlcmF0
ZWQgdmVyc2lvbgorCisgICAgICAgIGRvdWJsZSBiZWZvcmVQYWludCA9IGN1cnJlbnRUaW1lKCk7
CisgICAgICAgIHdlYlZpZXdJbXBsLT5wYWludChudWxsQ2FudmFzLCBzY3JlZW5SZWN0KTsKKyAg
ICAgICAgZG91YmxlIGFmdGVyUGFpbnQgPSBjdXJyZW50VGltZSgpOworICAgICAgICByZXN1bHRz
LmFkZFJlc3VsdCgicGFpbnRfbnVsbENhbnZhcyIsICJzIiwgYWZ0ZXJQYWludCAtIGJlZm9yZVBh
aW50KTsKKworICAgICAgICBkZWxldGUgbnVsbENhbnZhczsKKyAgICB9Cit9OworCisKK0FsbFJl
bmRlcmluZ0JlbmNobWFya3M6OkFsbFJlbmRlcmluZ0JlbmNobWFya3MoKSA6IG1fYmVuY2htYXJr
Q291bnQoMikKK3sKKyAgICBtX2JlbmNobWFya3MgPSBuZXcgUmVuZGVyaW5nQmVuY2htYXJrKltt
X2JlbmNobWFya0NvdW50XTsKKyAgICBtX2JlbmNobWFya3NbMF0gPSBuZXcgUGFpbnRCZW5jaG1h
cmsoKTsKKyAgICBtX2JlbmNobWFya3NbMV0gPSBuZXcgUGFpbnROdWxsQ2FudmFzQmVuY2htYXJr
KCk7Cit9CisKK0FsbFJlbmRlcmluZ0JlbmNobWFya3M6On5BbGxSZW5kZXJpbmdCZW5jaG1hcmtz
KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYmVuY2htYXJrQ291bnQ7IGkrKykKKyAg
ICAgICAgZGVsZXRlIG1fYmVuY2htYXJrc1tpXTsKKyAgICBkZWxldGVbXSBtX2JlbmNobWFya3M7
Cit9CisKK3ZvaWQgQWxsUmVuZGVyaW5nQmVuY2htYXJrczo6cnVuKFdlYlJlbmRlcmluZ0JlbmNo
bWFya1Jlc3VsdHMmIHJlc3VsdHMsIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKK3sKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fYmVuY2htYXJrQ291bnQ7IGkrKykgeworICAgICAgICBtX2Jl
bmNobWFya3NbaV0tPnNldFVwKHdlYlZpZXdJbXBsKTsKKyAgICAgICAgbV9iZW5jaG1hcmtzW2ld
LT5ydW4ocmVzdWx0cywgd2ViVmlld0ltcGwpOworICAgICAgICBtX2JlbmNobWFya3NbaV0tPnRl
YXJEb3duKHdlYlZpZXdJbXBsKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9BbGxSZW5kZXJpbmdCZW5jaG1hcmtzLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BbGxSZW5kZXJpbmdCZW5jaG1hcmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRhZjhmYmZj
NGVkZDEzMDYzYzliYTAyMDU4NGI2NmJkMzk4ODIwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FsbFJlbmRlcmluZ0JlbmNobWFya3MuaApAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBbGxSZW5kZXJpbmdCZW5jaG1hcmtzX2gKKyNkZWZpbmUgQWxsUmVuZGVy
aW5nQmVuY2htYXJrc19oCisKKyNpbmNsdWRlICJSZW5kZXJpbmdCZW5jaG1hcmsuaCIKKyNpbmNs
dWRlICJXZWJWaWV3SW1wbC5oIgorCitjbGFzcyBBbGxSZW5kZXJpbmdCZW5jaG1hcmtzIDogcHVi
bGljIFJlbmRlcmluZ0JlbmNobWFyayB7CitwdWJsaWM6CisgICAgQWxsUmVuZGVyaW5nQmVuY2ht
YXJrcygpOworICAgIHZpcnR1YWwgfkFsbFJlbmRlcmluZ0JlbmNobWFya3MoKTsKKyAgICB2b2lk
IHJ1bihXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiwgV2ViS2l0OjpXZWJWaWV3SW1wbCop
OworCisgICAgUmVuZGVyaW5nQmVuY2htYXJrKiogbV9iZW5jaG1hcmtzOworICAgIGNvbnN0IGlu
dCBtX2JlbmNobWFya0NvdW50OworfTsKKworI2VuZGlmIC8qIEFsbFJlbmRlcmluZ0JlbmNobWFy
a3NfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVuZGVyaW5n
QmVuY2htYXJrLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZW5kZXJpbmdCZW5jaG1h
cmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYTM4YTkzZDNkMjJiNDZkNzc5NjQ4ZmRmMmFkYWZlNTQ4NzMxOGJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVuZGVyaW5n
QmVuY2htYXJrLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlcmluZ0JlbmNobWFy
a19oCisjZGVmaW5lIFJlbmRlcmluZ0JlbmNobWFya19oCisKKyNpbmNsdWRlICJXZWJSZW5kZXJp
bmdCZW5jaG1hcmtSZXN1bHRzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmll
d0ltcGw7Cit9CisKK3VzaW5nIFdlYktpdDo6V2ViVmlld0ltcGw7CisKK2NsYXNzIFJlbmRlcmlu
Z0JlbmNobWFyayB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmVuY2htYXJrKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNldFVwKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHJ1bihXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiwgV2Vi
Vmlld0ltcGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRlYXJEb3duKFdlYlZpZXdJbXBsKiB3
ZWJWaWV3SW1wbCkgeyB9Cit9OworCisjZW5kaWYgLyogUmVuZGVyaW5nQmVuY2htYXJrX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjNmRiMWIz
ZDIxZWQwZDJkZWY5MjZmODBiOTJmM2RlZjBiZjIyOTA0Li4xMzM2N2QwYzAyYWMzZjU4YjA1MzY3
YmUyZmM1MDA2ZjQyOTAwN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
QWxsUmVuZGVyaW5nQmVuY2htYXJrcy5oIgogI2luY2x1ZGUgIkF1dG9maWxsUG9wdXBNZW51Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJC
YXR0ZXJ5Q2xpZW50SW1wbC5oIgpAQCAtMTYyOCw2ICsxNjI5LDE2IEBAIHZvaWQgV2ViVmlld0lt
cGw6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAjZW5kaWYKIH0KIAorCit2
b2lkIFdlYlZpZXdJbXBsOjpydW5SZW5kZXJpbmdCZW5jaG1hcmtzKFdlYlJlbmRlcmluZ0JlbmNo
bWFya1Jlc3VsdHMmIHJlc3VsdHMpCit7CisgICAgQWxsUmVuZGVyaW5nQmVuY2htYXJrcyogYmVu
Y2htYXJrcyA9IG5ldyBBbGxSZW5kZXJpbmdCZW5jaG1hcmtzKCk7CisgICAgYmVuY2htYXJrcy0+
c2V0VXAodGhpcyk7CisgICAgYmVuY2htYXJrcy0+cnVuKHJlc3VsdHMsIHRoaXMpOworICAgIGJl
bmNobWFya3MtPnRlYXJEb3duKHRoaXMpOworICAgIGRlbGV0ZSBiZW5jaG1hcmtzOworfQorCiB2
b2lkIFdlYlZpZXdJbXBsOjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgLy8gV2UgYXJlIGFscmVhZHkgdHJhbnNpdGlvbmluZyB0byBm
dWxsc2NyZWVuIGZvciBhIGRpZmZlcmVudCBlbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTA4ODk2NzhhMTQwMDc0MmNjMjZlMGViZmJiZTIzZTE5
OGI5MmQyZS4uZjk5NWU5NzcyMDZmYzI3NDgyMjBiYWYyOWQwZjBmOGE1ZDdhYjNkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01NDksNiArNTQ5LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsK
IAorICAgIHZvaWQgcnVuUmVuZGVyaW5nQmVuY2htYXJrcyhXZWJSZW5kZXJpbmdCZW5jaG1hcmtS
ZXN1bHRzJik7CisKICAgICB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6
RWxlbWVudCopOwogICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVs
ZW1lbnQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147618</attachid>
            <date>2012-06-14 11:04:37 -0700</date>
            <delta_ts>2012-06-20 11:15:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120614110437.patch</filename>
            <type>text/plain</type>
            <size>26898</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDE1YzU2MTUwMmU2Mzc3YTdlM2NmNTE5M2JhMmY5NTU1M2FjMzIxM2IuLjY0MTQ1YzY4ZTNlOWZh
MWViNDBhZDJjYzk1MWJhNmEwODk1MDllMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMTItMDYtMTQgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIGluaXRpYWwgcmVuZGVyaW5nIG1pY3JvYmVuY2htYXJrCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODI3MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cy5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgorICAgICAgICAoV2ViUmVu
ZGVyaW5nQmVuY2htYXJrUmVzdWx0czo6fldlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMpOgor
ICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAg
KiBzcmMvQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5jcHA6IEFkZGVkLgorICAgICAgICAoRGV2aWNl
RmFjdG9yeSk6CisgICAgICAgIChEZXZpY2VGYWN0b3J5Ojp+RGV2aWNlRmFjdG9yeSk6CisgICAg
ICAgIChDYW52YXNGYWN0b3J5KToKKyAgICAgICAgKENhbnZhc0ZhY3Rvcnk6On5DYW52YXNGYWN0
b3J5KToKKyAgICAgICAgKHBhaW50SGVscGVyKToKKyAgICAgICAgKFBhaW50QmVuY2htYXJrKToK
KyAgICAgICAgKFBhaW50QmVuY2htYXJrOjpQYWludEJlbmNobWFyayk6CisgICAgICAgIChQYWlu
dEJlbmNobWFyazo6cnVuKToKKyAgICAgICAgKFBhaW50QmVuY2htYXJrOjpjcmVhdGVEZXZpY2Up
OgorICAgICAgICAoUGFpbnRCZW5jaG1hcms6OmNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChQYWlu
dE51bGxDYW52YXNCZW5jaG1hcmspOgorICAgICAgICAoUGFpbnROdWxsQ2FudmFzQmVuY2htYXJr
OjpQYWludE51bGxDYW52YXNCZW5jaG1hcmspOgorICAgICAgICAoUGFpbnROdWxsQ2FudmFzQmVu
Y2htYXJrOjpydW4pOgorICAgICAgICAoUGFpbnROdWxsQ2FudmFzQmVuY2htYXJrOjpjcmVhdGVE
ZXZpY2UpOgorICAgICAgICAoUGFpbnROdWxsQ2FudmFzQmVuY2htYXJrOjpjcmVhdGVDYW52YXMp
OgorICAgICAgICAoTGF5b3V0QmVuY2htYXJrKToKKyAgICAgICAgKExheW91dEJlbmNobWFyazo6
cnVuKToKKyAgICAgICAgKEFsbFJlbmRlcmluZ0JlbmNobWFya3M6OkFsbFJlbmRlcmluZ0JlbmNo
bWFya3MpOgorICAgICAgICAoQWxsUmVuZGVyaW5nQmVuY2htYXJrczo6fkFsbFJlbmRlcmluZ0Jl
bmNobWFya3MpOgorICAgICAgICAoQWxsUmVuZGVyaW5nQmVuY2htYXJrczo6cnVuKToKKyAgICAg
ICAgKiBzcmMvQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5oOiBBZGRlZC4KKyAgICAgICAgKEFsbFJl
bmRlcmluZ0JlbmNobWFya3MpOgorICAgICAgICAqIHNyYy9SZW5kZXJpbmdCZW5jaG1hcmsuaDog
QWRkZWQuCisgICAgICAgIChSZW5kZXJpbmdCZW5jaG1hcmspOgorICAgICAgICAoUmVuZGVyaW5n
QmVuY2htYXJrOjp+UmVuZGVyaW5nQmVuY2htYXJrKToKKyAgICAgICAgKFJlbmRlcmluZ0JlbmNo
bWFyazo6c2V0VXApOgorICAgICAgICAoUmVuZGVyaW5nQmVuY2htYXJrOjp0ZWFyRG93bik6Cisg
ICAgICAgICogc3JjL1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6OmlzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSk6CisgICAgICAgIChSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyOjpyb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyOjps
YXlvdXQpOgorICAgICAgICAoUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6cGFpbnQpOgor
ICAgICAgICAoUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6c2l6ZSk6CisgICAgICAgICog
c3JjL1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChSZW5k
ZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKToKKyAgICAgICAgKFJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXI6OlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6cnVuUmVuZGVyaW5nQmVuY2htYXJrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6
CisgICAgICAgIChXZWJWaWV3SW1wbCk6CisKIDIwMTItMDYtMTIgIElhbiBWb2xsaWNrICA8dm9s
bGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSb2xsIGNocm9taXVtIHJl
diBpbiBERVBTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggOTkyMDRiODg2YWI3ZWMx
Y2Y0ZDI0YTU5M2NjZGNkMDI3ZDU0OTkwMS4uZjAzNjBkZmUxMjUxMThlZWNkZmE5NDVlYjZhZjVm
NDI3Zjc3Zjk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjI5LDYgKzIyOSw3
IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQcmVyZW5kZXJlckNsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlJhbmdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUmVndWxhckV4cHJlc3Npb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJS
ZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UnVudGltZUZlYXR1cmVzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NvcGVkTWlj
cm90YXNrU3VwcHJlc3Npb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY29wZWRV
c2VyR2VzdHVyZS5oJywKQEAgLTM0MCw2ICszNDEsOCBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvd2luL1dlYlNhbmRib3hTdXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvd2lu
L1dlYlNjcmVlbkluZm9GYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMveDExL1dl
YlNjcmVlbkluZm9GYWN0b3J5LmgnLAorICAgICAgICAgICAgICAgICdzcmMvQWxsUmVuZGVyaW5n
QmVuY2htYXJrcy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvQWxsUmVuZGVyaW5nQmVuY2ht
YXJrcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAnLApAQCAtNDUwLDYg
KzQ1Myw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1JlbmRlcmluZ0JlbmNobWFyay5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9T
Y3JvbGxiYXJHcm91cC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU2Nyb2xsYmFyR3JvdXAu
aCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJpbmdCZW5j
aG1hcmtSZXN1bHRzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJp
bmdCZW5jaG1hcmtSZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBhMzM2Yjk1NmI1YWM3MmMxNmYxN2Jh
ZGU4ZTAxNGNlNzA1NzBhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMuaApAQCAtMCwwICsxLDQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzX2gKKyNkZWZpbmUgV2ViUmVuZGVy
aW5nQmVuY2htYXJrUmVzdWx0c19oCisKK2NsYXNzIFdlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3Vs
dHMgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVzdWx0KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IGNoYXIqIHVuaXQsIGRvdWJsZSByZXN1bHQpID0gMDsKK307CisKKyNlbmRpZiAvKiBXZWJSZW5k
ZXJpbmdCZW5jaG1hcmtSZXN1bHRzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaAppbmRleCA1NDJiMTAyMWE2NDQ2NWUzODZhYjQzZjRhY2NlM2IwZjgzNjFjZTkzLi5j
YThhMDVkY2Y1NjA5NzYxODdiMDdmOTU2YjMxNTIxZTZhYmFmMmEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJX
ZWJEcmFnT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgor
I2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMuaCIKICNpbmNsdWRlICJXZWJX
aWRnZXQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJWZWN0b3IuaCIKQEAgLTQ1Myw2ICs0NTQsMTIgQEAgcHVibGljOgogICAgIC8vIGJ5
IHRoZSBjb21wb3NpdG9yKSBidXQgbXVzdCBiZSBjb21wbGV0ZWQgYnkgdGhlIFdlYlZpZXcuCiAg
ICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0FuaW1hdGlvbihjb25zdCBX
ZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0gMDsKIAorCisgICAgLy8gUmVuZGVyaW5n
IGJlbmNobWFya3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgLy8gUnVucyBhbGwgcmVuZGVyaW5nIGJlbmNobWFya3MKKyAgICB2aXJ0dWFs
IHZvaWQgcnVuUmVuZGVyaW5nQmVuY2htYXJrcyhXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRz
JikgPSAwOworCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlzaWJp
bGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FsbFJlbmRlcmluZ0JlbmNobWFya3MuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTc5YjYwYzIwNzVhYTIx
ODM1NmI2MmU0ZGVkOWY4ZmFjOWFmZjc5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0FsbFJlbmRlcmluZ0JlbmNobWFya3MuY3BwCkBAIC0wLDAgKzEsMTg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBbGxSZW5kZXJpbmdCZW5jaG1hcmtzLmgi
CisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tE
ZXZpY2UuaCIKKyNpbmNsdWRlICJTa051bGxDYW52YXMuaCIKKyNpbmNsdWRlICJwYWludGluZy9H
cmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisjaW5jbHVkZSAicHVibGljL1dlYkNhbnZhcy5oIgor
I2luY2x1ZGUgInB1YmxpYy9XZWJMYXllci5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTaXplLmgi
CisKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK3VzaW5nIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI7Cit1c2luZyBXZWJDb3JlOjpJbnRSZWN0
OwordXNpbmcgV2ViQ29yZTo6RmxvYXRTaXplOwordXNpbmcgV2ViS2l0OjpXZWJTaXplOwordXNp
bmcgV2ViS2l0OjpXZWJDYW52YXM7Cit1c2luZyBXZWJLaXQ6OldlYlZpZXdJbXBsOwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworY2xhc3MgRGV2aWNlRmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+RGV2aWNlRmFjdG9yeSgpIHsgfTsKKyAgICB2aXJ0dWFsIGF1dG9fcHRyPFNrRGV2aWNl
PiBjcmVhdGVEZXZpY2UoaW50LCBpbnQpID0gMDsKK307CisKK2NsYXNzIENhbnZhc0ZhY3Rvcnkg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkNhbnZhc0ZhY3RvcnkoKSB7IH07CisgICAgdmlydHVh
bCBhdXRvX3B0cjxXZWJDYW52YXM+IGNyZWF0ZUNhbnZhcyhTa0RldmljZSopID0gMDsKK307CisK
K2RvdWJsZSBwYWludEhlbHBlcihEZXZpY2VGYWN0b3J5KiBkZXZpY2VGYWN0b3J5LCBDYW52YXNG
YWN0b3J5KiBjYW52YXNGYWN0b3J5LCBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyJiBjb250
cm9sbGVyKQoreworCisgICAgV2ViU2l6ZSBzaXplID0gY29udHJvbGxlci5zaXplKCk7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBzY3JlZW5SZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0
KTsKKyAgICBjb250cm9sbGVyLmxheW91dCgpOworCisgICAgaWYgKCFjb250cm9sbGVyLmlzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICBhdXRvX3B0cjxTa0RldmljZT4g
ZGV2aWNlID0gZGV2aWNlRmFjdG9yeS0+Y3JlYXRlRGV2aWNlKHNpemUud2lkdGgsIHNpemUuaGVp
Z2h0KTsKKyAgICAgIGF1dG9fcHRyPFdlYkNhbnZhcz4gY2FudmFzID0gY2FudmFzRmFjdG9yeS0+
Y3JlYXRlQ2FudmFzKGRldmljZS5nZXQoKSk7CisgICAgICBkb3VibGUgYmVmb3JlVGltZSA9IGN1
cnJlbnRUaW1lKCk7CisgICAgICBjb250cm9sbGVyLnBhaW50KGNhbnZhcy5nZXQoKSwgc2NyZWVu
UmVjdCk7CisgICAgICBkb3VibGUgYWZ0ZXJUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgIHJl
dHVybiBhZnRlclRpbWUgLSBiZWZvcmVUaW1lOworICAgIH0KKworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gY29udHJvbGxlci5yb290R3JhcGhpY3NMYXllcigpOworICAgIFZlY3RvcjxHcmFw
aGljc0xheWVyKj4gbGF5ZXJzOworICAgIGxheWVycy5hcHBlbmQobGF5ZXIpOworICAgIGRvdWJs
ZSB0b3RhbFRpbWUgPSAwOworCisgICAgd2hpbGUgKCFsYXllcnMuaXNFbXB0eSgpKSB7CisgICAg
ICBsYXllciA9IGxheWVycy5sYXN0KCk7CisgICAgICBsYXllcnMucmVtb3ZlTGFzdCgpOworICAg
ICAgbGF5ZXJzLnByZXBlbmQobGF5ZXItPmNoaWxkcmVuKCkpOworCisgICAgICBhdXRvX3B0cjxT
a0RldmljZT4gZGV2aWNlID0gZGV2aWNlRmFjdG9yeS0+Y3JlYXRlRGV2aWNlKHNpemUud2lkdGgs
IHNpemUuaGVpZ2h0KTsKKyAgICAgIGF1dG9fcHRyPFdlYkNhbnZhcz4gY2FudmFzID0gY2FudmFz
RmFjdG9yeS0+Y3JlYXRlQ2FudmFzKGRldmljZS5nZXQoKSk7CisgICAgICBHcmFwaGljc0NvbnRl
eHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzLmdldCgpKTsKKworICAgICAgLy8gYWNjdXJhdGU/Cisg
ICAgICBGbG9hdFNpemUgc2l6ZSA9IGxheWVyLT5zaXplKCk7CisgICAgICBjb25zdCBJbnRSZWN0
IGNsaXAoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgICAgZG91Ymxl
IGJlZm9yZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NM
YXllckNvbnRlbnRzKGJ1aWxkZXIuY29udGV4dCgpLCBjbGlwKTsKKyAgICAgIGRvdWJsZSBhZnRl
clRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgdG90YWxUaW1lICs9IGFmdGVyVGltZSAtIGJl
Zm9yZVRpbWU7CisgICAgfQorCisgICAgcmV0dXJuIHRvdGFsVGltZTsKK30KKworY2xhc3MgUGFp
bnRCZW5jaG1hcmsgOiBwdWJsaWMgUmVuZGVyaW5nQmVuY2htYXJrLCBwdWJsaWMgQ2FudmFzRmFj
dG9yeSwgcHVibGljIERldmljZUZhY3RvcnkgeworcHVibGljOgorICAgIFBhaW50QmVuY2htYXJr
KCkgeyB9CisKKyAgICB2b2lkIHJ1bihXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiByZXN1
bHRzLCBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyJiBjb250cm9sbGVyKQorICAgIHsKKyAg
ICAgICAgcmVzdWx0cy5hZGRSZXN1bHQoInBhaW50X29wYXF1ZV9jYW52YXMiLCAicyIsIHBhaW50
SGVscGVyKHRoaXMsIHRoaXMsIGNvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBhdXRvX3B0cjxT
a0RldmljZT4gY3JlYXRlRGV2aWNlKGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdXRvX3B0cjxTa0RldmljZT4obmV3IFNrRGV2aWNlKFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZywgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpOworICAgIH0KKworICAgIGF1dG9f
cHRyPFdlYkNhbnZhcz4gY3JlYXRlQ2FudmFzKFNrRGV2aWNlKiBkZXZpY2UpCisgICAgeworICAg
ICAgICByZXR1cm4gYXV0b19wdHI8V2ViQ2FudmFzPihuZXcgV2ViQ2FudmFzKGRldmljZSkpOwor
ICAgIH0KK307CisKK2NsYXNzIFBhaW50TnVsbENhbnZhc0JlbmNobWFyayA6IHB1YmxpYyBSZW5k
ZXJpbmdCZW5jaG1hcmssIHB1YmxpYyBDYW52YXNGYWN0b3J5LCBwdWJsaWMgRGV2aWNlRmFjdG9y
eSB7CitwdWJsaWM6CisgICAgUGFpbnROdWxsQ2FudmFzQmVuY2htYXJrKCkgeyB9CisKKyAgICB2
b2lkIHJ1bihXZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiByZXN1bHRzLCBSZW5kZXJpbmdC
ZW5jaG1hcmtDb250cm9sbGVyJiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmVzdWx0cy5h
ZGRSZXN1bHQoInBhaW50X251bGxfY2FudmFzIiwgInMiLCBwYWludEhlbHBlcih0aGlzLCB0aGlz
LCBjb250cm9sbGVyKSk7CisgICAgfQorCisgICAgYXV0b19wdHI8U2tEZXZpY2U+IGNyZWF0ZURl
dmljZShpbnQsIGludCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdXRvX3B0cjxTa0RldmljZT4o
KTsKKyAgICB9CisKKyAgICBhdXRvX3B0cjxXZWJDYW52YXM+IGNyZWF0ZUNhbnZhcyhTa0Rldmlj
ZSopCisgICAgeworICAgICAgICByZXR1cm4gYXV0b19wdHI8V2ViQ2FudmFzPihTa0NyZWF0ZU51
bGxDYW52YXMoKSk7CisgICAgfQorfTsKKworY2xhc3MgTGF5b3V0QmVuY2htYXJrIDogcHVibGlj
IFJlbmRlcmluZ0JlbmNobWFyayB7CitwdWJsaWM6CisKKyAgICB2b2lkIHJ1bihXZWJSZW5kZXJp
bmdCZW5jaG1hcmtSZXN1bHRzJiByZXN1bHRzLCBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVy
JiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgZG91YmxlIGJlZm9yZVRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgICAgICBjb250cm9sbGVyLmxheW91dCgpOworICAgICAgICBkb3VibGUgYWZ0
ZXJUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgcmVzdWx0cy5hZGRSZXN1bHQoImxheW91
dCIsICJzIiwgYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZSk7CisgICAgfQorfTsKKworCitBbGxSZW5k
ZXJpbmdCZW5jaG1hcmtzOjpBbGxSZW5kZXJpbmdCZW5jaG1hcmtzKCkgOiBtX2JlbmNobWFya0Nv
dW50KDMpCit7CisgICAgbV9iZW5jaG1hcmtzID0gbmV3IFJlbmRlcmluZ0JlbmNobWFyaypbbV9i
ZW5jaG1hcmtDb3VudF07CisgICAgbV9iZW5jaG1hcmtzWzBdID0gbmV3IFBhaW50QmVuY2htYXJr
KCk7CisgICAgbV9iZW5jaG1hcmtzWzFdID0gbmV3IFBhaW50TnVsbENhbnZhc0JlbmNobWFyaygp
OworICAgIG1fYmVuY2htYXJrc1syXSA9IG5ldyBMYXlvdXRCZW5jaG1hcmsoKTsKK30KKworQWxs
UmVuZGVyaW5nQmVuY2htYXJrczo6fkFsbFJlbmRlcmluZ0JlbmNobWFya3MoKQoreworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9iZW5jaG1hcmtDb3VudDsgaSsrKQorICAgICAgICBkZWxldGUg
bV9iZW5jaG1hcmtzW2ldOworICAgIGRlbGV0ZVtdIG1fYmVuY2htYXJrczsKK30KKwordm9pZCBB
bGxSZW5kZXJpbmdCZW5jaG1hcmtzOjpydW4oV2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cyYg
cmVzdWx0cywgUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciYgY29udHJvbGxlcikKK3sKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fYmVuY2htYXJrQ291bnQ7IGkrKykgeworICAgICAgICBt
X2JlbmNobWFya3NbaV0tPnNldFVwKGNvbnRyb2xsZXIpOworICAgICAgICBtX2JlbmNobWFya3Nb
aV0tPnJ1bihyZXN1bHRzLCBjb250cm9sbGVyKTsKKyAgICAgICAgbV9iZW5jaG1hcmtzW2ldLT50
ZWFyRG93bihjb250cm9sbGVyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9BbGxSZW5kZXJpbmdCZW5jaG1hcmtzLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BbGxSZW5kZXJpbmdCZW5jaG1hcmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRhOGMzN2Rm
MGY2MDU4MGJmY2EwNmYzNWQ4ZGUzNTU4YWJjZGZlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FsbFJlbmRlcmluZ0JlbmNobWFya3MuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBbGxSZW5kZXJpbmdCZW5jaG1hcmtzX2gKKyNkZWZpbmUgQWxsUmVuZGVy
aW5nQmVuY2htYXJrc19oCisKKyNpbmNsdWRlICJSZW5kZXJpbmdCZW5jaG1hcmsuaCIKKworY2xh
c3MgQWxsUmVuZGVyaW5nQmVuY2htYXJrcyA6IHB1YmxpYyBSZW5kZXJpbmdCZW5jaG1hcmsgewor
cHVibGljOgorICAgIEFsbFJlbmRlcmluZ0JlbmNobWFya3MoKTsKKyAgICB2aXJ0dWFsIH5BbGxS
ZW5kZXJpbmdCZW5jaG1hcmtzKCk7CisgICAgdm9pZCBydW4oV2ViUmVuZGVyaW5nQmVuY2htYXJr
UmVzdWx0cyYsIFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXImKTsKKworICAgIFJlbmRlcmlu
Z0JlbmNobWFyayoqIG1fYmVuY2htYXJrczsKKyAgICBjb25zdCBpbnQgbV9iZW5jaG1hcmtDb3Vu
dDsKK307CisKKyNlbmRpZiAvKiBBbGxSZW5kZXJpbmdCZW5jaG1hcmtzX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1JlbmRlcmluZ0JlbmNobWFyay5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVuZGVyaW5nQmVuY2htYXJrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTgyYTliM2RmZWUwYjcwZDBkMzEyMTZlZWZlYWYxOWY5ZjkxMjQ4NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1JlbmRlcmluZ0JlbmNobWFyay5oCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJpbmdCZW5jaG1hcmtfaAorI2RlZmluZSBSZW5k
ZXJpbmdCZW5jaG1hcmtfaAorCisjaW5jbHVkZSAiUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya1Jlc3VsdHMuaCIKKworY2xhc3Mg
UmVuZGVyaW5nQmVuY2htYXJrIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCZW5j
aG1hcmsoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VXAoUmVuZGVyaW5nQmVuY2htYXJrQ29u
dHJvbGxlciYgYmVuY2htYXJrQ29udHJvbGxlcikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJ1bihX
ZWJSZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiwgUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
ciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhckRvd24oUmVuZGVyaW5nQmVuY2htYXJrQ29u
dHJvbGxlciYgYmVuY2htYXJrQ29udHJvbGxlcikgeyB9Cit9OworCisjZW5kaWYgLyogUmVuZGVy
aW5nQmVuY2htYXJrX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNjMjdm
ZTk4NzgzNDI3YjUyNzgzMzgxNGM2OGQwNmVjNGJlMDM2OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3Bw
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyLmgiCisKK2Jvb2wgUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlcjo6aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV93ZWJWaWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCk7Cit9CisK
K1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6OnJv
b3RHcmFwaGljc0xheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3SW1wbC0+cm9v
dEdyYXBoaWNzTGF5ZXIoKTsKK30KKwordm9pZCBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVy
OjpsYXlvdXQoKQoreworICAgIG1fd2ViVmlld0ltcGwtPmxheW91dCgpOworfQorCit2b2lkIFJl
bmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25z
dCBXZWJSZWN0JiByZWN0KQoreworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcywgcmVj
dCk7Cit9CisKK1dlYktpdDo6V2ViU2l6ZSBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyOjpz
aXplKCkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZW5kZXJpbmdCZW5jaG1hcmtDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk0M2JlYmMxOWM4M2NiNGNiZWMzZTZjYmZkOTQ1ZTFjODEx
YjRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1JlbmRl
cmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcl9oCisjZGVmaW5lIFJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIldlYlZp
ZXdJbXBsLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgorI2luY2x1ZGUgInB1Ymxp
Yy9XZWJDYW52YXMuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU2l6ZS5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCisvLyBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgcmVuZGVyaW5nIGJlbmNo
bWFya3MgYW5kIHRoZSBXZWJWaWV3SW1wbC4KKy8vIEFsbCBjYWxscyBhcmUgZGVsZWdhdGVkIHRv
IFdlYlZpZXdJbXBsCitjbGFzcyBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyIHsKK3B1Ymxp
YzoKKyAgICBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKFdlYlZpZXdJbXBsKiB3ZWJWaWV3
SW1wbCkKKyAgICAgICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKSB7IH0KKworICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyKCkgY29uc3Q7CisKKyAgICBi
b29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpIGNvbnN0OworCisgICAgdm9pZCBs
YXlvdXQoKTsKKworICAgIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwor
CisgICAgV2ViU2l6ZSBzaXplKCk7CisKK3ByaXZhdGU6CisgICAgV2ViVmlld0ltcGwqIG1fd2Vi
Vmlld0ltcGw7Cit9OworCisKKyNlbmRpZiAvLyBSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA5MzBh
MjIzZmNkOGM0ZmZmNTJkNjlhYTZjYWY5MDVjY2Y1NTJkZDZlLi45YTYwMGU2NDU1Zjk5MzVlN2Y2
ZjAzMDJlNTExOThjMmFmNDQyZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCiAjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmgiCisjaW5jbHVk
ZSAiQWxsUmVuZGVyaW5nQmVuY2htYXJrcy5oIgogI2luY2x1ZGUgIkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRl
ICJCYXR0ZXJ5Q2xpZW50SW1wbC5oIgpAQCAtMTA0LDYgKzEwNSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTE2MjgsNiArMTYzMCwxNiBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogI2Vu
ZGlmCiB9CiAKKwordm9pZCBXZWJWaWV3SW1wbDo6cnVuUmVuZGVyaW5nQmVuY2htYXJrcyhXZWJS
ZW5kZXJpbmdCZW5jaG1hcmtSZXN1bHRzJiByZXN1bHRzKQoreworICAgIFJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzKTsKKyAgICBzdGQ6OmF1dG9fcHRyPEFsbFJl
bmRlcmluZ0JlbmNobWFya3M+IGJlbmNobWFya3MobmV3IEFsbFJlbmRlcmluZ0JlbmNobWFya3Mo
KSk7CisgICAgYmVuY2htYXJrcy0+c2V0VXAoY29udHJvbGxlcik7CisgICAgYmVuY2htYXJrcy0+
cnVuKHJlc3VsdHMsIGNvbnRyb2xsZXIpOworICAgIGJlbmNobWFya3MtPnRlYXJEb3duKGNvbnRy
b2xsZXIpOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgLy8gV2UgYXJlIGFscmVhZHkgdHJh
bnNpdGlvbmluZyB0byBmdWxsc2NyZWVuIGZvciBhIGRpZmZlcmVudCBlbGVtZW50LgpAQCAtMzM5
NSw2ICszNDA3LDEzIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEJhY2tncm91bmRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiAgICAgbV9sYXllclRyZWVWaWV3LnNldEJhY2tncm91
bmRDb2xvcih3ZWJEb2N1bWVudEJhY2tncm91bmRDb2xvcik7CiB9CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCitXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBXZWJWaWV3SW1wbDo6
cm9vdEdyYXBoaWNzTGF5ZXIoKQoreworICAgIHJldHVybiBtX3Jvb3RHcmFwaGljc0xheWVyOwor
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIFdl
YlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCBhMDg4OTY3OGExNDAwNzQyY2MyNmUwZWJmYmJlMjNlMTk4
YjkyZDJlLi43MmZkNmNjOWQ0ZmY5MWZmMzI2ZWQ5NDNkMmRhNzdmNDUzZGM1Y2U5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTUwNyw2ICs1MDcsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29u
dGVudEhvc3QoKTsKICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyKCk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBz
Y2hlZHVsZUFuaW1hdGlvbigpOwpAQCAtNTQ5LDYgKzU1MCw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CiAKKyAgICB2b2lkIHJ1blJl
bmRlcmluZ0JlbmNobWFya3MoV2ViUmVuZGVyaW5nQmVuY2htYXJrUmVzdWx0cyYpOworCiAgICAg
dm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKTsKICAgICB2
b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148609</attachid>
            <date>2012-06-20 11:15:19 -0700</date>
            <delta_ts>2012-06-28 16:04:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120620111519.patch</filename>
            <type>text/plain</type>
            <size>16840</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDk5OTJlMjhlNzEzODkwOWUxMjUwZTBiMjYwNjBmZDI1MGFjYzg0NDUuLjVhYmQ0YWM3OTI2NzUw
OTEyYTZmOTk3YTJhNTk5OTExYjI1OGUzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTItMDYtMjAgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIHJlbmRlcmluZyBiZW5jaG1hcmsgY29udHJvbGxlciBmb3IgbWlj
cm9iZW5jaG1hcmtzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04ODI3MQorCisJUmV2aWV3ZWQgYnkgTmF0IER1Y2EKKworICAgICAgICAqIFdlYktpdC5n
eXA6CisgICAgICAgICogcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUmVuZGVyaW5nQmVuY2htYXJr
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDYW52YXNGYWN0b3J5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6V2ViQ2FudmFzRmFjdG9yeTo6fldl
YkNhbnZhc0ZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyOjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6fldlYlJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChX
ZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlUmVuZGVyaW5nQmVuY2ht
YXJrQ29udHJvbGxlcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdl
YlZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGxSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6OnRpbWVQYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6
bGF5b3V0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGxSZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViVmlld0ltcGxSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGxSZW5kZXJpbmdCZW5jaG1h
cmtDb250cm9sbGVyOjpXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6
On5XZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgorCiAyMDEyLTA2LTE4
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBH
ZXN0dXJlUGluY2hCZWdpbiBhbmQgZnJpZW5kcyBhcmUgZ2VzdHVyZSBldmVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAppbmRleCA2NjI0OGRhNTIzYjU5M2E3OWM2YzgyOWU0NjAzZTQyNWM1
MjkzZjM1Li5lNDdhYTI2MzYwNjQ3MzYxNjNlY2I1NTNlNmEzMzE4MTgzNWZmYWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0yMjksNiArMjI5LDcgQEAKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYlByZXJlbmRlcmVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUmFuZ2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSZWd1bGFyRXhwcmVz
c2lvbi5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSdW50aW1lRmVhdHVyZXMu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY29wZWRNaWNyb3Rhc2tTdXBwcmVzc2lv
bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmgnLApA
QCAtNjUzLDYgKzY1NCw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWRlb0xheWVyLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVmlld0ltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1w
bFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYlZpZXdJbXBsUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYldvcmtlckJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldv
cmtlckJhc2UuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIwMzgxMzk5ZTZj
N2E4ZDE4MWU1NTEyMzA5OGU1MjJkMjA1NWI0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
cl9oCisjZGVmaW5lIFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJfaAorCisjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8v
IEludGVyZmFjZSBiZXR3ZWVuIHRoZSByZW5kZXJpbmcgYmVuY2htYXJrcyBhbmQgdGhlIFdlYlZp
ZXdJbXBsLgorY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciB7CitwdWJsaWM6
CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgUEFJTlRfRVZFUllUSElORywKKyAgICAgIFBB
SU5UX1ZJRVdQT1JUCisgICAgfTsKKyAgICBjbGFzcyBXZWJDYW52YXNGYWN0b3J5IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfldlYkNhbnZhc0ZhY3RvcnkoKSB7IH0KKyAgICAgICAg
dmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZVdlYkNhbnZhcyhjb25zdCBXZWJTaXplJikgPSAwOwor
ICAgIH07CisKKyAgICBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKCkgeyB9CisgICAg
dmlydHVhbCB+V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcigpIHsgfQorCisgICAgLy8g
cmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzLiBQQUlOVF9WSUVXUE9SVCBpcyBub3QgeWV0IHN1
cHBvcnRlZCBpbiBhY2NlbGVyYXRlZCBtb2RlCisgICAgdmlydHVhbCBkb3VibGUgdGltZVBhaW50
KFdlYkNhbnZhc0ZhY3RvcnkqLCBjb25zdCBQYWludE1vZGUpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKSA9IDA7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAppbmRleCA1NDJiMTAyMWE2NDQ2NWUzODZhYjQzZjRhY2NlM2IwZjgz
NjFjZTkzLi42YmY3YTY5ZjI2OTgwOGU0MGNiMDFlNTI2YWI5MTc4Yjk2YTY2MzMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNp
bmNsdWRlICJXZWJEcmFnT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZS5oIgorI2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJXaWRnZXQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKQEAgLTQ1Myw2ICs0NTQsMTMgQEAgcHVibGlj
OgogICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yKSBidXQgbXVzdCBiZSBjb21wbGV0ZWQgYnkgdGhl
IFdlYlZpZXcuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0FuaW1h
dGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0gMDsKIAorICAgIC8v
IFJlbmRpbmcgQmVuY2htYXJrIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlciogY3JlYXRlUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcigpCisgICAgeworICAgICAg
cmV0dXJuIDA7CisgICAgfQorCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0
aGUgdmlzaWJpbGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAppbmRleCA2N2I3YzA0MWU2MjgzNTI2YjA3MGVjZWFhOTFkODQ5MWIy
Nzk0YTc1Li5lMTEwNjlkZTU5NWI5YTczYzc0M2ExNzZlNDVlMDBhNDVkZjU2NmJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNDUsNiArMTQ1LDcg
QEAKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKICNpbmNsdWRlICJXZWJUZXh0SW5wdXRJ
bmZvLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBs
UmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIK
ICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NTZXR0aW5ncy5oIgpAQCAt
NzM1LDYgKzczNiwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlv
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsLCBib29sIHVzZUFuY2hvcgogfQogI2VuZGlmCiAKK1dl
YlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIqIFdlYlZpZXdJbXBsOjpjcmVhdGVSZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyKCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYlZpZXdJbXBsUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcih0aGlzKTsKK30KKwogYm9vbCBXZWJWaWV3SW1wbDo6
aGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNT
RVJUKChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6OlJhd0tleURvd24pCkBAIC0zNDA1LDYg
KzM0MTEsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiBjb2xvcikKICAgICBtX2xheWVyVHJlZVZpZXcuc2V0QmFja2dyb3VuZENv
bG9yKHdlYkRvY3VtZW50QmFja2dyb3VuZENvbG9yKTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290
R3JhcGhpY3NMYXllcigpCit7CisgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7Cit9Cisj
ZW5kaWYKKwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgV2ViVmll
d0ltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCmluZGV4IDRmNWMwNDhkOTc3NDJhZDU5YjE1ZWNiMzQzZDg1YzhkM2EwMzE4
NmYuLjZlMjEwNzEwN2EyMjNlZjUxZjQzZDIxMzhjMGE3YjA3M2RjOWQ0OTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMjkyLDYgKzI5Miw4IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxpbmdBbmlt
YXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxGbGluZ1BhcmFtZXRlcnMmKTsKIAorICAgIHZpcnR1
YWwgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciogY3JlYXRlUmVuZGVyaW5nQmVuY2ht
YXJrQ29udHJvbGxlcigpOworCiAgICAgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZp
cnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZy
YW1lKCk7CkBAIC01MDksNiArNTExLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRSb290TGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29u
dGVudFJlY3QpOwogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigp
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQg
c2NoZWR1bGVBbmltYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0MThmYzlmZjAxNjUzNDQ4ODRhN2I0YzVhZDMxMTliOWIxNTI0
ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1
aWxkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwordXNpbmcgV2ViQ29yZTo6RmxvYXRTaXplOwordXNpbmcgV2ViQ29yZTo6SW50
UmVjdDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2RvdWJsZSBXZWJWaWV3SW1wbFJlbmRlcmlu
Z0JlbmNobWFya0NvbnRyb2xsZXI6OnRpbWVQYWludChXZWJDYW52YXNGYWN0b3J5KiBjYW52YXNG
YWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKQoreworICAgIG1fd2ViVmlld0ltcGwt
PmxheW91dCgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV93
ZWJWaWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290R3JhcGhp
Y3NMYXllcigpOworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IGxheWVy
czsKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllcik7CisgICAgICAgIGRvdWJsZSB0b3RhbFRp
bWUgPSAwOworCisgICAgICAgIHdoaWxlICghbGF5ZXJzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbGF5ZXIgPSBsYXllcnMubGFzdCgpOworICAgICAgICAgICAgbGF5ZXJzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIGxheWVycy5wcmVwZW5kKGxheWVyLT5jaGlsZHJlbigpKTsKKworICAg
ICAgICAgICAgV2ViU2l6ZSBjYW52YXNTaXplOworICAgICAgICAgICAgSW50UmVjdCBjbGlwOwor
CisgICAgICAgICAgICBzd2l0Y2ggKHBhaW50TW9kZSkgeworICAgICAgICAgICAgY2FzZSBQQUlO
VF9WSUVXUE9SVDogLy8gVE9ETyhkbXVycGgpOiBpbXBsZW1lbnQgdGhpcworICAgICAgICAgICAg
Y2FzZSBQQUlOVF9FVkVSWVRISU5HOiB7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIGxheWVy
U2l6ZSA9IGxheWVyLT5zaXplKCk7CisgICAgICAgICAgICAgICAgY2xpcCA9IFdlYkNvcmU6Oklu
dFJlY3QoMCwgMCwgbGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgY2FudmFzU2l6ZSA9IFdlYlNpemUobGF5ZXJTaXplLndpZHRoKCksIGxheWVy
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICB9ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgV2ViQ2FudmFzKiBjYW52YXMg
PSBjYW52YXNGYWN0b3J5LT5jcmVhdGVXZWJDYW52YXMoY2FudmFzU2l6ZSk7CisgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzKTsKKworICAgICAgICAgICAg
ZG91YmxlIGJlZm9yZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGJ1aWxkZXIuY29udGV4dCgpLCBjbGlwKTsKKyAgICAg
ICAgICAgIGRvdWJsZSBhZnRlclRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgdG90
YWxUaW1lICs9IGFmdGVyVGltZSAtIGJlZm9yZVRpbWU7CisgICAgICAgICAgICBkZWxldGUgY2Fu
dmFzOworICAgICAgICB9CisgICAgICByZXR1cm4gdG90YWxUaW1lOworICAgIH0KKyNlbmRpZgor
ICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKworICAgIFdlYlJlY3Qg
cGFpbnRTaXplOworICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQQUlOVF9WSUVX
UE9SVDoKKyAgICAgICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXpl
LmhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEFJTlRfRVZFUllUSElORzogewor
ICAgICAgICBpZiAobV93ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2Uo
KS0+bWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9
IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAg
IFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7Cisg
ICAgICAgICAgICBwYWludFNpemUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgp
LCBjb250ZW50c1NpemUuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBh
aW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0g
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc3QgV2ViU2l6ZSBjYW52YXNTaXplID0gV2Vi
U2l6ZShwYWludFNpemUud2lkdGgsIHBhaW50U2l6ZS5oZWlnaHQpOworICAgIFdlYkNhbnZhcyog
Y2FudmFzID0gY2FudmFzRmFjdG9yeS0+Y3JlYXRlV2ViQ2FudmFzKGNhbnZhc1NpemUpOworICAg
IGRvdWJsZSBiZWZvcmVUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3dlYlZpZXdJbXBsLT5w
YWludChjYW52YXMsIHBhaW50U2l6ZSk7CisgICAgZG91YmxlIGFmdGVyVGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgZGVsZXRlIGNhbnZhczsKKyAgICByZXR1cm4gYWZ0ZXJUaW1lIC0gYmVmb3Jl
VGltZTsKK30KKwordm9pZCBXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6
OmxheW91dCgpCit7CisgICAgbV93ZWJWaWV3SW1wbC0+bGF5b3V0KCk7Cit9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
UmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4ZjkzMzNmYjg0MWVh
MTM5MDU2MmY4NTM2MWZlNWMwNTU0NjlmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXJfaAorI2RlZmluZSBXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xs
ZXJfaAorCisjaW5jbHVkZSAiV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlJlY3QuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRy
b2xsZXIgOiBwdWJsaWMgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciB7CitwdWJsaWM6
CisgICAgV2ViVmlld0ltcGxSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKFdlYlZpZXdJbXBs
KiB3ZWJWaWV3SW1wbCkgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKSB7IH0KKyAgICB2aXJ0
dWFsIH5XZWJWaWV3SW1wbFJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIoKSB7IH0KKworICAg
IHZpcnR1YWwgZG91YmxlIHRpbWVQYWludChXZWJDYW52YXNGYWN0b3J5KiwgY29uc3QgUGFpbnRN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Citwcml2YXRlOgorICAgIFdlYlZpZXdJ
bXBsKiBtX3dlYlZpZXdJbXBsOworfTsKK30KKworI2VuZGlmIC8vIFdlYlZpZXdJbXBsUmVuZGVy
aW5nQmVuY2htYXJrQ29udHJvbGxlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150035</attachid>
            <date>2012-06-28 16:04:42 -0700</date>
            <delta_ts>2012-07-02 16:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120628160442.patch</filename>
            <type>text/plain</type>
            <size>19820</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGNiYTc3Yzg0MWM5YjI0MGQwMjFmMDhmM2IwOWYyMjk1NWFmMmQ5M2IuLjM2YjlhMzU1NjU0ODg2
MGEyMTQxMjM1ZjdmYjM1ZWZjZTAyZDZjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTItMDYtMjggIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIGluaXRpYWwgcmVuZGVyaW5nIG1pY3JvYmVuY2htYXJrCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODI3MQorCisgICAg
ICAgIE5hdCBEdWNhCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9X
ZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgorICAgICAgICAo
Q2FudmFzRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXI6OkNhbnZhc0ZhY3Rvcnk6On5DYW52YXNGYWN0b3J5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6fldlYlJlbmRlcmluZ0JlbmNobWFy
a0NvbnRyb2xsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlbmRl
cmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgorICAgICAgICAqIHNyYy9XZWJSZW5kZXJpbmdCZW5j
aG1hcmtDb250cm9sbGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6OnRpbWVMYXll
clBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
ckltcGw6Om1lYXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6bWVhc3VyZVVuY2xpcHBl
ZEFjY2VsZXJhdGVkUGFpbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyaW5nQmVu
Y2htYXJrQ29udHJvbGxlckltcGw6Om1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlUGFp
bnRUaW1lKToKKyAgICAgICAgKiBzcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcklt
cGwuaDogQWRkZWQuCisgICAgICAgIChXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBs
OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjp+V2ViUmVuZGVyaW5nQmVuY2ht
YXJrQ29udHJvbGxlckltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3Jh
cGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA2LTI4ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTIxMzk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGQ3NWY1Yjcw
OTVmYmQxZTE3MTQxMzY5Y2IxZmEwYWQ5ZjI5MmIyNGEuLjJjOTBlMDY5OGJiMjEzYmJjODY0N2I3
ZWFmOWY1NzU2ZDMwYTlkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTIzMiw2
ICsyMzIsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUHJlcmVuZGVyZXJDbGllbnQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSYW5nZS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYlJlZ3VsYXJFeHByZXNzaW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlNjb3BlZE1pY3JvdGFza1N1cHByZXNzaW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViU2NvcGVkVXNlckdlc3R1cmUuaCcsCkBAIC02MTksNiArNjIwLDggQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlBvcHVwTWVudUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJS
YW5nZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUmVndWxhckV4cHJlc3Npb24uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU2NvcGVkTWljcm90YXNrU3VwcHJlc3Npb24u
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJpbmdCZW5j
aG1hcmtDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5k
ZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E5ZGU0ZDc0NDRmZjEzNDhi
NGJjZjUyZjM3NDNiNzM1NGUzY2VlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICovCisKKyNpZm5kZWYgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcl9oCisj
ZGVmaW5lIFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworLy8gSW50ZXJmYWNlIGJldHdlZW4gdGhlIHJlbmRlcmluZyBiZW5j
aG1hcmtzIGFuZCB0aGUgV2ViVmlldworY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlciB7CitwdWJsaWM6CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgLy8gUGFpbnQgdGhl
IGVudGlyZSBwYWdlCisgICAgICBQYWludE1vZGVFdmVyeXRoaW5nLAorICAgICAgLy8gT25seSBw
YWludCB0aGUgdmlld3BvcnQKKyAgICAgIFBhaW50TW9kZVZpZXdwb3J0CisgICAgfTsKKyAgICBj
bGFzcyBDYW52YXNGYWN0b3J5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNhbnZh
c0ZhY3RvcnkoKSB7IH0KKyAgICAgICAgLy8gY3JlYXRlcyBhIHdlYiBjYW52YXMsIGNhbGxlciBh
c3N1bWVzIG93bmVyc2hpcAorICAgICAgICB2aXJ0dWFsIFdlYkNhbnZhcyogY3JlYXRlV2ViQ2Fu
dmFzKGNvbnN0IFdlYlNpemUmKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgfldl
YlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFJldHVybnMgdGhl
IHRpbWUgaW4gc2Vjb25kcyB0byBwYWludCBvbiBnaXZlbiBjYW52YXMvZXMuCisgICAgdmlydHVh
bCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiwgY29uc3QgUGFp
bnRNb2RlKSBjb25zdCA9IDA7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAppbmRleCA5NjY0MmY2NjY4ZGZkNTgzMzgzMTBmM2YwYmY1ZjI4YmJh
OGY2MWVhLi43Mzk5NzI3Mzk4Njg4YjE3OWUwNTgzY2ZjYjRmMWViMjk1ZjMzYmY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNz
IFdlYk5vZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGll
bnQ7CiBjbGFzcyBXZWJQcmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdlYlJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXI7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xh
c3MgV2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQ2Miw2ICs0NjMsMTIgQEAgcHVibGljOgogICAg
IC8vIFRoaXMgY2FsbCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSBpbiB0aHJlYWRlZCBtb2RlIGFz
IGl0IGJsb2NrcyBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcmluZ1N0YXRzKFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3QgeyB9CiAKKyAgICAvLyBSZW5k
aW5nIEJlbmNobWFyayBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgdmlydHVhbCBjb25zdCBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9s
bGVyKiByZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKCkKKyAgICB7CisgICAgICByZXR1cm4g
MDsKKyAgICB9CisKICAgICAvLyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNp
YmlsaXR5IG9mIHRoZSBXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBiNzA2OGY2ZGQxZDBkMjIyMDQ0YTY3YTcxYmJiNzJjMzljZDc3NzQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSZW5kZXJpbmdC
ZW5jaG1hcmtDb250cm9sbGVySW1wbC5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmgiCisK
KyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dy
YXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViQ2FudmFzLmgiCisK
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBXZWJDb3JlOjpGbG9hdFNpemU7Cit1c2lu
ZyBXZWJDb3JlOjpHcmFwaGljc0xheWVyOwordXNpbmcgV2ViQ29yZTo6SW50UmVjdDsKK3VzaW5n
IFdURjo6T3duUHRyOwordXNpbmcgV1RGOjpWZWN0b3I7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorZG91YmxlIFdlYlJlbmRlcmluZ0Jl
bmNobWFya0NvbnRyb2xsZXJJbXBsOjp0aW1lTGF5ZXJQYWludChjb25zdCBDYW52YXNGYWN0b3J5
JiBjYW52YXNGYWN0b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xp
cCkgY29uc3QKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAu
d2lkdGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2Fu
dmFzID0gV1RGOjphZG9wdFB0cihjYW52YXNGYWN0b3J5LmNyZWF0ZVdlYkNhbnZhcyhjYW52YXNT
aXplKSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcy5nZXQoKSk7
CisKKyAgICBkb3VibGUgYmVmb3JlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworICAgIGxheWVyLnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGJ1aWxkZXIuY29udGV4dCgp
LCBjbGlwKTsKKyAgICByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBiZWZv
cmVUaW1lOworfQorCitkb3VibGUgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6
Om1lYXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYg
Y2FudmFzRmFjdG9yeSwgR3JhcGhpY3NMYXllciYgbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KSBjb25zdAoreworICAgIC8vIFRPRE8oZG11cnBoKTogZ28gdGhyb3VnaCBhbGwgdGhlIGxh
eWVycywgdXNpbmcgdGhlIGludGVybmFsIFdlYkxheWVyCisgICAgLy8gaW4gR3JhcGhpY3NMYXll
ckNocm9taXVtLCB3aGljaCBnaXZlcyBtZSBhIExheWVyQ2hyb21pdW0sIHdoZXJlIEkgY2FuCisg
ICAgLy8gZ3JhYiB0aGUgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSwgd2hlcmUgSSBjYW4gbWFwIG15
IHJlY3QKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworZG91
YmxlIFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlVW5jbGlwcGVk
QWNjZWxlcmF0ZWRQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYgY2FudmFzRmFjdG9yeSwg
R3JhcGhpY3NMYXllciYgbGF5ZXIpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRTaXplIGxheWVy
U2l6ZSA9IGxheWVyLnNpemUoKTsKKyAgICBjb25zdCBJbnRSZWN0IGNsaXAgPSBXZWJDb3JlOjpJ
bnRSZWN0KDAsIDAsIGxheWVyU2l6ZS53aWR0aCgpLCBsYXllclNpemUuaGVpZ2h0KCkpOworCisg
ICAgZG91YmxlIHRvdGFsVGltZSA9IHRpbWVMYXllclBhaW50KGNhbnZhc0ZhY3RvcnksIGxheWVy
LCBjbGlwKTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0g
bGF5ZXIuY2hpbGRyZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpjb25zdF9pdGVy
YXRvciBpdDsKKyAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4u
ZW5kKCk7ICsraXQpCisgICAgICAgIHRvdGFsVGltZSArPSBtZWFzdXJlVW5jbGlwcGVkQWNjZWxl
cmF0ZWRQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgKippdCk7CisgICAgcmV0dXJuIHRvdGFsVGlt
ZTsKK30KKyNlbmRpZgorCitkb3VibGUgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcklt
cGw6Om1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNG
YWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIFdlYlNpemUg
c2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAg
ICBzd2l0Y2ggKHBhaW50TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlVmlld3BvcnQ6CisgICAg
ICAgIHBhaW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5dGhpbmc6IHsKKyAgICAgICAg
aWYgKG1fd2ViVmlld0ltcGwtPnBhZ2UoKSAmJiBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5G
cmFtZSgpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBtX3dlYlZp
ZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgICAgICAgICBXZWJDb3Jl
OjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHZpZXctPmNvbnRlbnRzU2l6ZSgpOworICAgICAgICAg
ICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVu
dHNTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwYWludFNpemUg
PSBXZWJSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICB9ICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNvbnN0IFdlYlNpemUgY2FudmFzU2l6ZSA9IFdlYlNpemUocGFp
bnRTaXplLndpZHRoLCBwYWludFNpemUuaGVpZ2h0KTsKKyAgICBjb25zdCBPd25QdHI8V2ViQ2Fu
dmFzPiBjYW52YXMgPSBXVEY6OmFkb3B0UHRyKGNhbnZhc0ZhY3RvcnkuY3JlYXRlV2ViQ2FudmFz
KGNhbnZhc1NpemUpKTsKKyAgICBkb3VibGUgYmVmb3JlVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcy5nZXQoKSwgcGFp
bnRTaXplKTsKKyAgICByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBiZWZv
cmVUaW1lOworfQorCisKK2RvdWJsZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1w
bDo6bWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBj
b25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIG1fd2ViVmlld0ltcGwtPmxh
eW91dCgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV93ZWJW
aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyAgICAgICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290R3JhcGhpY3NMYXllcigpOwor
ICAgICAgICBzd2l0Y2ggKHBhaW50TW9kZSkgeworICAgICAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5
dGhpbmc6CisgICAgICAgICAgICByZXR1cm4gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFp
bnRUaW1lKGNhbnZhc0ZhY3RvcnksICpsYXllcik7CisgICAgICAgIGNhc2UgUGFpbnRNb2RlVmll
d3BvcnQ6IHsKKyAgICAgICAgICAgIGNvbnN0IFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0ltcGwt
PnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybiBtZWFzdXJlQ2xpcHBlZEFjY2VsZXJhdGVkUGFp
bnRUaW1lKGNhbnZhc0ZhY3RvcnksICpsYXllciwgSW50UmVjdCgwLCAwLCBzaXplLndpZHRoLCBz
aXplLmhlaWdodCkpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorI2VuZGlmCisgICAgcmV0dXJuIG1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShjYW52YXNGYWN0
b3J5LCBwYWludE1vZGUpOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjU1MGQ2NTFiOGRkNWE0NDk1Yzg3MDI2N2I4NmUwZjVkYzU2MmZkNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXJJbXBsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUmVuZGVyaW5n
QmVuY2htYXJrQ29udHJvbGxlckltcGxfaAorI2RlZmluZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVySW1wbF9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsIDogcHVibGljIFdlYlJlbmRlcmluZ0Jl
bmNobWFya0NvbnRyb2xsZXIgeworcHVibGljOgorICAgIFdlYlJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXJJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkgOiBtX3dlYlZpZXdJbXBsKHdl
YlZpZXdJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9s
bGVySW1wbCgpIHsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzLiBJZiB3
ZSdyZSBpbiBhY2NlbGVyYXRlZCBtb2RlLCBhIG5ldyBjYW52YXMKKyAgICAvLyBpcyBjcmVhdGVk
IGZvciBlYWNoIGdyYXBoaWNzIGxheWVyLiBQYWludE1vZGVWaWV3cG9ydCBpcyBub3QKKyAgICAv
LyBzdXBwb3J0ZWQgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSB5ZXQuCisgICAgLy8g
TGF5b3V0KCkgd2lsbCBiZSBjYWxsZWQgb24gdGhlIHdlYiB2aWV3IHByaW9yIHRvIHBhaW50aW5n
LgorICAgIHZpcnR1YWwgZG91YmxlIG1lYXN1cmVQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9y
eSYsIGNvbnN0IFBhaW50TW9kZSkgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIHJldHVybnMgdGhlIHRpbWUgaW4gc2Vj
b25kcworICAgIGRvdWJsZSB0aW1lTGF5ZXJQYWludChjb25zdCBDYW52YXNGYWN0b3J5JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKyAg
ICAvLyByZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMuIEN1cnJlbnRseSB1bmltcGxlbWVudGVk
LgorICAgIGRvdWJsZSBtZWFzdXJlQ2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNvbnN0IENh
bnZhc0ZhY3RvcnkmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGNvbnN0OworICAgIC8vIHJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcworICAgIGRv
dWJsZSBtZWFzdXJlVW5jbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUoY29uc3QgQ2FudmFzRmFj
dG9yeSYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKSBjb25zdDsKKyNlbmRpZgorICAgIC8vIHJl
dHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcworICAgIGRvdWJsZSBtZWFzdXJlU29mdHdhcmVQYWlu
dFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYsIGNvbnN0IFBhaW50TW9kZSkgY29uc3Q7CisKKyAg
ICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKK307Cit9CisKKworI2VuZGlmIC8vIFdlYlJl
bmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAyNmRmNDM2NGQwYzY5M2FhNDMxZDI5MjYzNmZkYWNj
OTNjN2UzYTc4Li41Zjc3YzU3ZjFkZDAxMTg4NmJhOWY5MzNkNTRhMjg1ODJiMmUxNjUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNDEsNiArMTQx
LDcgQEAKICNpbmNsdWRlICJXZWJQbHVnaW5Db250YWluZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2Vi
UG9wdXBNZW51SW1wbC5oIgogI2luY2x1ZGUgIldlYlJhbmdlLmgiCisjaW5jbHVkZSAiV2ViUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJXZWJSdW50aW1lRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKICNpbmNsdWRlICJXZWJUZXh0
SW5wdXRJbmZvLmgiCkBAIC03NDMsNiArNzQ0LDEzIEBAIHZvaWQgV2ViVmlld0ltcGw6OnN0YXJ0
UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGwsIGJvb2wgdXNlQW5jaG9y
CiB9CiAjZW5kaWYKIAorY29uc3QgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciogV2Vi
Vmlld0ltcGw6OnJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9y
ZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyLmdldCgpKQorICAgICAgICBtX3JlbmRlcmluZ0Jl
bmNobWFya0NvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29u
dHJvbGxlckltcGwodGhpcykpOworICAgIHJldHVybiBtX3JlbmRlcmluZ0JlbmNobWFya0NvbnRy
b2xsZXIuZ2V0KCk7Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUtleUV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVCgoZXZlbnQudHlwZSA9PSBX
ZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duKQpAQCAtMzQ4Niw2ICszNDk0LDEzIEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3Ip
CiAgICAgbV9sYXllclRyZWVWaWV3LnNldEJhY2tncm91bmRDb2xvcih3ZWJEb2N1bWVudEJhY2tn
cm91bmRDb2xvcik7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBXZWJWaWV3SW1wbDo6cm9vdEdyYXBoaWNzTGF5ZXIoKQorewor
ICAgIHJldHVybiBtX3Jvb3RHcmFwaGljc0xheWVyOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1h
dGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBm
NjU3NTA0ZjJhZGRkZGViZGEyMGJjODJmMjdlYmE1YjNhZjgyODgzLi42MDQxNmJiZTllZWVmNjU4
NDUwNDk0YjAwYzg0ZGU4ZDFjYzM2YWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTEwNSw2ICsxMDUsNyBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiBjbGFz
cyBXZWJHZXN0dXJlRXZlbnQ7CiBjbGFzcyBXZWJQYWdlUG9wdXBJbXBsOwogY2xhc3MgV2ViUHJl
cmVuZGVyZXJDbGllbnQ7CitjbGFzcyBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyOwog
Y2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VF
dmVudDsKQEAgLTI5Niw2ICsyOTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5z
ZmVyQWN0aXZlV2hlZWxGbGluZ0FuaW1hdGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFy
YW1ldGVycyYpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdT
dGF0cyYpIGNvbnN0OwogCisgICAgdmlydHVhbCBjb25zdCBXZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyKiByZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKCk7CisKICAgICAvLyBXZWJM
YXllclRyZWVWaWV3Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRnJhbWUoKTsKQEAgLTUxNSw2ICs1MTgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludFJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKICAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwpAQCAtNzg3LDYg
Kzc5MSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBtX2Z1bGxTY3Jl
ZW5GcmFtZTsKICAgICBib29sIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuOwogCisgICAgLy8gTGF6
aWx5IGNyZWF0ZWQgY29udHJvbGxlciBmb3IgbWljcm9iZW5jaG1hcmtzCisgICAgT3duUHRyPFdl
YlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI+IG1fcmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlcjsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlOwogICAgIE93blB0cjxOb25Db21wb3NpdGVk
Q29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150496</attachid>
            <date>2012-07-02 16:34:46 -0700</date>
            <delta_ts>2012-07-10 16:12:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120702163445.patch</filename>
            <type>text/plain</type>
            <size>19824</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGJiZjhmN2I3NGYzZDgwZTBiNjc5NDBlOTg2YTU3N2I5MTRmMWM1MTguLmFjNTYzNmI5ODViMDEy
YzZmNWEyMjhmZDFlZTE4YjdiMjFkMTQzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTItMDctMDIgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIE1pY3JvYmVuY2htYXJrIGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp
b24gKyAKKwlob29rIGluIFdlYlZpZXcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODI3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UykhCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJSZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIpOgorICAgICAgICAoQ2FudmFzRmFj
dG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6
OkNhbnZhc0ZhY3Rvcnk6On5DYW52YXNGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcjo6fldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xs
ZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXIpOgorICAgICAgICAqIHNyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6Om1lYXN1cmVMYXllclBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6
Om1lYXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6bWVhc3VyZVVuY2xpcHBlZEFjY2Vs
ZXJhdGVkUGFpbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJr
Q29udHJvbGxlckltcGw6Om1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlUGFpbnRUaW1l
KToKKyAgICAgICAgKiBzcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuaDog
QWRkZWQuCisgICAgICAgIChXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjpXZWJS
ZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
bmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjp+V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29u
dHJvbGxlckltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NM
YXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA3LTAxICBLZWlzaGkgSGF0dG9yaSAgPGtl
aXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjE2
NTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNzhlNDI4YjIyODVkMzYzZTU0Nzhk
ZjdmYTIzOGYzNmYzZWJlZjkwNy4uZTk3OTA5NDYwYzYyOTNlZDg1OTFkOGY4NjUyYmU1ZmFjNGNj
ZTM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjM0LDYgKzIzNCw3IEBACiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQcmVyZW5kZXJlckNsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlJhbmdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UmVndWxhckV4cHJlc3Npb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUnVu
dGltZUZlYXR1cmVzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NvcGVkTWljcm90
YXNrU3VwcHJlc3Npb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY29wZWRVc2Vy
R2VzdHVyZS5oJywKQEAgLTYyMSw2ICs2MjIsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
UG9wdXBNZW51SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlJhbmdlLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJSZWd1bGFyRXhwcmVzc2lvbi5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJTY29wZWRNaWNyb3Rhc2tTdXBwcmVzc2lvbi5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFy
a0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTlkZTRkNzQ0NGZmMTM0OGI0YmNmNTJmMzc0M2I3
MzU0ZTNjZWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKwor
I2lmbmRlZiBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDYW52
YXMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgcmVuZGVyaW5nIGJlbmNobWFya3MgYW5kIHRo
ZSBXZWJWaWV3CitjbGFzcyBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFBhaW50TW9kZSB7CisgICAgICAvLyBQYWludCB0aGUgZW50aXJlIHBhZ2UK
KyAgICAgIFBhaW50TW9kZUV2ZXJ5dGhpbmcsCisgICAgICAvLyBPbmx5IHBhaW50IHRoZSB2aWV3
cG9ydAorICAgICAgUGFpbnRNb2RlVmlld3BvcnQKKyAgICB9OworICAgIGNsYXNzIENhbnZhc0Zh
Y3RvcnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzRmFjdG9yeSgpIHsg
fQorICAgICAgICAvLyBjcmVhdGVzIGEgd2ViIGNhbnZhcywgY2FsbGVyIGFzc3VtZXMgb3duZXJz
aGlwCisgICAgICAgIHZpcnR1YWwgV2ViQ2FudmFzKiBjcmVhdGVXZWJDYW52YXMoY29uc3QgV2Vi
U2l6ZSYpIGNvbnN0ID0gMDsKKyAgICB9OworCisgICAgdmlydHVhbCB+V2ViUmVuZGVyaW5nQmVu
Y2htYXJrQ29udHJvbGxlcigpIHsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgdGltZSBpbiBzZWNv
bmRzIHRvIHBhaW50IG9uIGdpdmVuIGNhbnZhcy9lcy4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtZWFz
dXJlUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmLCBjb25zdCBQYWludE1vZGUpIGNvbnN0
ID0gMDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlJlbmRlcmlu
Z0JlbmNobWFya0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
dy5oCmluZGV4IDk2NjQyZjY2NjhkZmQ1ODMzODMxMGYzZjBiZjVmMjhiYmE4ZjYxZWEuLjczOTk3
MjczOTg2ODhiMTc5ZTA1ODNjZmNiNGYxZWIyOTVmMzNiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgV2ViTm9kZTsKIGNs
YXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKIGNsYXNzIFdl
YlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
cjsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENo
ZWNrQ2xpZW50OwpAQCAtNDYyLDYgKzQ2MywxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBjYWxs
IGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGluIHRocmVhZGVkIG1vZGUgYXMgaXQgYmxvY2tzIG9u
IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMo
V2ViUmVuZGVyaW5nU3RhdHMmKSBjb25zdCB7IH0KIAorICAgIC8vIFJlbmRpbmcgQmVuY2htYXJr
IHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICB2aXJ0dWFsIGNvbnN0IFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIqIHJlbmRlcmlu
Z0JlbmNobWFya0NvbnRyb2xsZXIoKQorICAgIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKwog
ICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhl
IFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSZW5k
ZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTMzNjZhMTc4ZGRkNDRmNGY1NTE3ZjY0Y2ZiNzQxNDg5ZDhlYjNlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRy
b2xsZXJJbXBsLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuaCIKKworI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAicGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0
QnVpbGRlci5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJDYW52YXMuaCIKKworI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK3VzaW5nIFdlYkNvcmU6OkZsb2F0U2l6ZTsKK3VzaW5nIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI7Cit1c2luZyBXZWJDb3JlOjpJbnRSZWN0OwordXNpbmcgV1RGOjpPd25QdHI7
Cit1c2luZyBXVEY6OlZlY3RvcjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCitkb3VibGUgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlckltcGw6Om1lYXN1cmVMYXllclBhaW50KGNvbnN0IENhbnZhc0ZhY3RvcnkmIGNhbnZhc0Zh
Y3RvcnksIEdyYXBoaWNzTGF5ZXImIGxheWVyLCBjb25zdCBJbnRSZWN0JiBjbGlwKSBjb25zdAor
eworICAgIGNvbnN0IFdlYlNpemUgY2FudmFzU2l6ZSA9IFdlYlNpemUoY2xpcC53aWR0aCgpLCBj
bGlwLmhlaWdodCgpKTsKKyAgICBjb25zdCBPd25QdHI8V2ViQ2FudmFzPiBjYW52YXMgPSBXVEY6
OmFkb3B0UHRyKGNhbnZhc0ZhY3RvcnkuY3JlYXRlV2ViQ2FudmFzKGNhbnZhc1NpemUpKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzLmdldCgpKTsKKworICAgIGRv
dWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgbGF5
ZXIucGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoYnVpbGRlci5jb250ZXh0KCksIGNsaXApOwor
ICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRpbWU7Cit9
CisKK2RvdWJsZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6bWVhc3VyZUNs
aXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0
b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0
Cit7CisgICAgLy8gVE9ETyhkbXVycGgpOiBnbyB0aHJvdWdoIGFsbCB0aGUgbGF5ZXJzLCB1c2lu
ZyB0aGUgaW50ZXJuYWwgV2ViTGF5ZXIKKyAgICAvLyBpbiBHcmFwaGljc0xheWVyQ2hyb21pdW0s
IHdoaWNoIGdpdmVzIG1lIGEgTGF5ZXJDaHJvbWl1bSwgd2hlcmUgSSBjYW4KKyAgICAvLyBncmFi
IHRoZSBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtLCB3aGVyZSBJIGNhbiBtYXAgbXkgcmVjdAorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitkb3VibGUgV2ViUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6Om1lYXN1cmVVbmNsaXBwZWRBY2NlbGVyYXRl
ZFBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBHcmFwaGljc0xh
eWVyJiBsYXllcikgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFNpemUgbGF5ZXJTaXplID0gbGF5
ZXIuc2l6ZSgpOworICAgIGNvbnN0IEludFJlY3QgY2xpcCA9IFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgbGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBkb3VibGUg
dG90YWxUaW1lID0gbWVhc3VyZUxheWVyUGFpbnQoY2FudmFzRmFjdG9yeSwgbGF5ZXIsIGNsaXAp
OworCisgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4gPSBsYXllci5j
aGlsZHJlbigpOworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0
OworICAgIGZvciAoaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsg
KytpdCkKKyAgICAgICAgdG90YWxUaW1lICs9IG1lYXN1cmVVbmNsaXBwZWRBY2NlbGVyYXRlZFBh
aW50VGltZShjYW52YXNGYWN0b3J5LCAqKml0KTsKKyAgICByZXR1cm4gdG90YWxUaW1lOworfQor
I2VuZGlmCisKK2RvdWJsZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6bWVh
c3VyZVNvZnR3YXJlUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmIGNhbnZhc0ZhY3Rvcnks
IGNvbnN0IFBhaW50TW9kZSBwYWludE1vZGUpIGNvbnN0Cit7CisgICAgV2ViU2l6ZSBzaXplID0g
bV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAgIFdlYlJlY3QgcGFpbnRTaXplOworICAgIHN3aXRj
aCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1vZGVWaWV3cG9ydDoKKyAgICAgICAgcGFp
bnRTaXplID0gV2ViUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93
ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNp
emUgY29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWlu
dFNpemUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUu
aGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY29uc3QgV2ViU2l6ZSBjYW52YXNTaXplID0gV2ViU2l6ZShwYWludFNpemUu
d2lkdGgsIHBhaW50U2l6ZS5oZWlnaHQpOworICAgIGNvbnN0IE93blB0cjxXZWJDYW52YXM+IGNh
bnZhcyA9IFdURjo6YWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVXZWJDYW52YXMoY2FudmFz
U2l6ZSkpOworICAgIGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CisgICAgbV93ZWJWaWV3SW1wbC0+cGFpbnQoY2FudmFzLmdldCgpLCBwYWludFNpemUp
OworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRpbWU7
Cit9CisKKworZG91YmxlIFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFz
dXJlUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmIGNhbnZhc0ZhY3RvcnksIGNvbnN0IFBh
aW50TW9kZSBwYWludE1vZGUpIGNvbnN0Cit7CisgICAgbV93ZWJWaWV3SW1wbC0+bGF5b3V0KCk7
CisgICAgaWYgKCFtX3dlYlZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSkKKyAgICAgICAgcmV0dXJuIG1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShjYW52YXNGYWN0b3J5
LCBwYWludE1vZGUpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IG1fd2ViVmlld0ltcGwtPnJvb3RHcmFwaGljc0xheWVyKCk7Cisg
ICAgc3dpdGNoIChwYWludE1vZGUpIHsKKyAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5dGhpbmc6Cisg
ICAgICAgIHJldHVybiBtZWFzdXJlVW5jbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUoY2FudmFz
RmFjdG9yeSwgKmxheWVyKTsKKyAgICBjYXNlIFBhaW50TW9kZVZpZXdwb3J0OiB7CisgICAgICAg
IGNvbnN0IFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICAgICAgcmV0
dXJuIG1lYXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgKmxh
eWVyLCBJbnRSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSk7CisgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisjZW5kaWYKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI2M2QyOGZhNTMzZTNhMzVmNmQyMmZlYzZmZmIzOTUxODk4ZTY1M2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSZW5kZXJpbmdCZW5j
aG1hcmtDb250cm9sbGVySW1wbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlJlbmRlcmlu
Z0JlbmNobWFya0NvbnRyb2xsZXJJbXBsX2gKKyNkZWZpbmUgV2ViUmVuZGVyaW5nQmVuY2htYXJr
Q29udHJvbGxlckltcGxfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbCA6IHB1YmxpYyBXZWJSZW5kZXJpbmdC
ZW5jaG1hcmtDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBXZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVySW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpIDogbV93ZWJWaWV3SW1wbCh3
ZWJWaWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB+V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlckltcGwoKSB7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcy4gSWYg
d2UncmUgaW4gYWNjZWxlcmF0ZWQgbW9kZSwgYSBuZXcgY2FudmFzCisgICAgLy8gaXMgY3JlYXRl
ZCBmb3IgZWFjaCBncmFwaGljcyBsYXllci4gUGFpbnRNb2RlVmlld3BvcnQgaXMgbm90CisgICAg
Ly8gc3VwcG9ydGVkIGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgeWV0LgorICAgIC8v
IExheW91dCgpIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSB3ZWIgdmlldyBwcmlvciB0byBwYWludGlu
Zy4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtZWFzdXJlUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3Rv
cnkmLCBjb25zdCBQYWludE1vZGUpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAvLyByZXR1cm5zIHRoZSB0aW1lIGluIHNl
Y29uZHMKKyAgICBkb3VibGUgbWVhc3VyZUxheWVyUGFpbnQoY29uc3QgQ2FudmFzRmFjdG9yeSYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7
CisgICAgLy8gcmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzLiBDdXJyZW50bHkgdW5pbXBsZW1l
bnRlZC4KKyAgICBkb3VibGUgbWVhc3VyZUNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShjb25z
dCBDYW52YXNGYWN0b3J5JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBjb25zdDsKKyAgICAvLyByZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMKKyAg
ICBkb3VibGUgbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNvbnN0IENhbnZh
c0ZhY3RvcnkmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJikgY29uc3Q7CisjZW5kaWYKKyAgICAv
LyByZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMKKyAgICBkb3VibGUgbWVhc3VyZVNvZnR3YXJl
UGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmLCBjb25zdCBQYWludE1vZGUpIGNvbnN0Owor
CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OworfQorCisKKyNlbmRpZiAvLyBX
ZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYjNmZGRlZjFlN2EwYWEwNjkxNDg3MGJlZTUx
OWZhZDM3M2U3MGYwNy4uZGMyZjgxMTRlNjJkYWE0YmZjNjQ1YjgyOWQyNzI4MGU2N2I4NmI5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTQxLDYg
KzE0MSw3IEBACiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgogI2luY2x1ZGUg
IldlYlBvcHVwTWVudUltcGwuaCIKICNpbmNsdWRlICJXZWJSYW5nZS5oIgorI2luY2x1ZGUgIldl
YlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUnVudGlt
ZUZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBsLmgiCiAjaW5jbHVkZSAiV2Vi
VGV4dElucHV0SW5mby5oIgpAQCAtNzQzLDYgKzc0NCwxMyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpz
dGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsLCBib29sIHVzZUFu
Y2hvcgogfQogI2VuZGlmCiAKK2NvbnN0IFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIq
IFdlYlZpZXdJbXBsOjpyZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKCkKK3sKKyAgICBpZiAo
IW1fcmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5nZXQoKSkKKyAgICAgICAgbV9yZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyID0gYWRvcHRQdHIobmV3IFdlYlJlbmRlcmluZ0JlbmNobWFy
a0NvbnRyb2xsZXJJbXBsKHRoaXMpKTsKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyLmdldCgpOworfQorCiBib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVLZXlFdmVudChj
b25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoKGV2ZW50LnR5cGUg
PT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bikKQEAgLTM0NzUsNiArMzQ4MywxMyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNv
bG9yKQogICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3Iod2ViRG9jdW1lbnRC
YWNrZ3JvdW5kQ29sb3IpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogV2ViVmlld0ltcGw6OnJvb3RHcmFwaGljc0xheWVyKCkK
K3sKKyAgICByZXR1cm4gbV9yb290R3JhcGhpY3NMYXllcjsKK30KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVB
bmltYXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5k
ZXggZjY1NzUwNGYyYWRkZGRlYmRhMjBiYzgyZjI3ZWJhNWIzYWY4Mjg4My4uNjA0MTZiYmU5ZWVl
ZjY1ODQ1MDQ5NGIwMGM4NGRlOGQxY2MzNmFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCkBAIC0xMDUsNiArMTA1LDcgQEAgY2xhc3MgV2ViRnJhbWVJbXBsOwog
Y2xhc3MgV2ViR2VzdHVyZUV2ZW50OwogY2xhc3MgV2ViUGFnZVBvcHVwSW1wbDsKIGNsYXNzIFdl
YlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxl
cjsKIGNsYXNzIFdlYkltYWdlOwogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1v
dXNlRXZlbnQ7CkBAIC0yOTYsNiArMjk3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0
cmFuc2ZlckFjdGl2ZVdoZWVsRmxpbmdBbmltYXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxGbGlu
Z1BhcmFtZXRlcnMmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMoV2ViUmVuZGVy
aW5nU3RhdHMmKSBjb25zdDsKIAorICAgIHZpcnR1YWwgY29uc3QgV2ViUmVuZGVyaW5nQmVuY2ht
YXJrQ29udHJvbGxlciogcmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcigpOworCiAgICAgLy8g
V2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCk7CkBAIC01MTUsNiArNTE4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcGFpbnRSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudFJlY3QpOwogICAgIE5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CiAgICAgdm9pZCBzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKQEAgLTc4
Nyw2ICs3OTEsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gbV9mdWxs
U2NyZWVuRnJhbWU7CiAgICAgYm9vbCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVlbjsKIAorICAgIC8v
IExhemlseSBjcmVhdGVkIGNvbnRyb2xsZXIgZm9yIG1pY3JvYmVuY2htYXJrcworICAgIE93blB0
cjxXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyPiBtX3JlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXI7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29y
ZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsKICAgICBPd25QdHI8Tm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0PiBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150497</attachid>
            <date>2012-07-02 16:43:38 -0700</date>
            <delta_ts>2012-07-10 16:12:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120702164337.patch</filename>
            <type>text/plain</type>
            <size>19831</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGJiZjhmN2I3NGYzZDgwZTBiNjc5NDBlOTg2YTU3N2I5MTRmMWM1MTguLmE3MGJiYmMxOTllNjA1
Y2MyNzBkYjE0ZDIwOGIyZDRlYjUyODQ4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTItMDctMDIgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIE1pY3JvYmVuY2htYXJrIGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp
b24gKyAKKyAgICAgICAgaG9vayBpbiBXZWJWaWV3LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgyNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMpIQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2Vi
UmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKToKKyAgICAgICAgKENh
bnZhc0ZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVyOjpDYW52YXNGYWN0b3J5Ojp+Q2FudmFzRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXI6On5XZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpyZW5kZXJp
bmdCZW5jaG1hcmtDb250cm9sbGVyKToKKyAgICAgICAgKiBzcmMvV2ViUmVuZGVyaW5nQmVuY2ht
YXJrQ29udHJvbGxlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlTGF5
ZXJQYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xs
ZXJJbXBsOjptZWFzdXJlQ2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6Om1lYXN1cmVVbmNsaXBw
ZWRBY2NlbGVyYXRlZFBhaW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlbmRlcmluZ0Jl
bmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlU29mdHdhcmVQYWludFRpbWUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6bWVhc3VyZVBh
aW50VGltZSk6CisgICAgICAgICogc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcklt
cGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1w
bDo6V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbDo6fldlYlJlbmRlcmluZ0JlbmNo
bWFya0NvbnRyb2xsZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cm9vdEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wNy0wMSAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTIxNjUwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc4ZTQyOGIyMjg1ZDM2
M2U1NDc4ZGY3ZmEyMzhmMzZmM2ViZWY5MDcuLmU5NzkwOTQ2MGM2MjkzZWQ4NTkxZDhmODY1MmJl
NWZhYzRjY2UzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTIzNCw2ICsyMzQs
NyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUHJlcmVuZGVyZXJDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJSYW5nZS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYlJlZ3VsYXJFeHByZXNzaW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlJ1bnRpbWVGZWF0dXJlcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNjb3Bl
ZE1pY3JvdGFza1N1cHByZXNzaW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2Nv
cGVkVXNlckdlc3R1cmUuaCcsCkBAIC02MjEsNiArNjIyLDggQEAKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlBvcHVwTWVudUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJSYW5nZS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUmVndWxhckV4cHJlc3Npb24uY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVy
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViU2NvcGVkTWljcm90YXNrU3VwcHJlc3Npb24uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSZW5kZXJpbmdC
ZW5jaG1hcmtDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E5ZGU0ZDc0NDRmZjEzNDhiNGJjZjUy
ZjM3NDNiNzM1NGUzY2VlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICovCisKKyNpZm5kZWYgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcl9oCisjZGVmaW5l
IFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworLy8gSW50ZXJmYWNlIGJldHdlZW4gdGhlIHJlbmRlcmluZyBiZW5jaG1hcmtz
IGFuZCB0aGUgV2ViVmlldworY2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciB7
CitwdWJsaWM6CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgLy8gUGFpbnQgdGhlIGVudGly
ZSBwYWdlCisgICAgICBQYWludE1vZGVFdmVyeXRoaW5nLAorICAgICAgLy8gT25seSBwYWludCB0
aGUgdmlld3BvcnQKKyAgICAgIFBhaW50TW9kZVZpZXdwb3J0CisgICAgfTsKKyAgICBjbGFzcyBD
YW52YXNGYWN0b3J5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc0ZhY3Rv
cnkoKSB7IH0KKyAgICAgICAgLy8gY3JlYXRlcyBhIHdlYiBjYW52YXMsIGNhbGxlciBhc3N1bWVz
IG93bmVyc2hpcAorICAgICAgICB2aXJ0dWFsIFdlYkNhbnZhcyogY3JlYXRlV2ViQ2FudmFzKGNv
bnN0IFdlYlNpemUmKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgfldlYlJlbmRl
cmluZ0JlbmNobWFya0NvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHRpbWUg
aW4gc2Vjb25kcyB0byBwYWludCBvbiBnaXZlbiBjYW52YXMvZXMuCisgICAgdmlydHVhbCBkb3Vi
bGUgbWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiwgY29uc3QgUGFpbnRNb2Rl
KSBjb25zdCA9IDA7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJS
ZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaAppbmRleCA5NjY0MmY2NjY4ZGZkNTgzMzgzMTBmM2YwYmY1ZjI4YmJhOGY2MWVh
Li43Mzk5NzI3Mzk4Njg4YjE3OWUwNTgzY2ZjYjRmMWViMjk1ZjMzYmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIFdlYk5v
ZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7CiBj
bGFzcyBXZWJQcmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdlYlJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXI7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2Vi
U3BlbGxDaGVja0NsaWVudDsKQEAgLTQ2Miw2ICs0NjMsMTIgQEAgcHVibGljOgogICAgIC8vIFRo
aXMgY2FsbCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSBpbiB0aHJlYWRlZCBtb2RlIGFzIGl0IGJs
b2NrcyBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmlu
Z1N0YXRzKFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3QgeyB9CiAKKyAgICAvLyBSZW5kaW5nIEJl
bmNobWFyayBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgdmlydHVhbCBjb25zdCBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKiBy
ZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVyKCkKKyAgICB7CisgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKICAgICAvLyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5
IG9mIHRoZSBXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEzMzY2YTE3OGRkZDQ0ZjRmNTUxN2Y2NGNmYjc0MTQ4OWQ4ZWIzZWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1h
cmtDb250cm9sbGVySW1wbC5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsLmgiCisKKyNpbmNs
dWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNz
Q29udGV4dEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViQ2FudmFzLmgiCisKKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBXZWJDb3JlOjpGbG9hdFNpemU7Cit1c2luZyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyOwordXNpbmcgV2ViQ29yZTo6SW50UmVjdDsKK3VzaW5nIFdURjo6
T3duUHRyOwordXNpbmcgV1RGOjpWZWN0b3I7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorZG91YmxlIFdlYlJlbmRlcmluZ0JlbmNobWFy
a0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlTGF5ZXJQYWludChjb25zdCBDYW52YXNGYWN0b3J5JiBj
YW52YXNGYWN0b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkg
Y29uc3QKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAud2lk
dGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFz
ID0gV1RGOjphZG9wdFB0cihjYW52YXNGYWN0b3J5LmNyZWF0ZVdlYkNhbnZhcyhjYW52YXNTaXpl
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcy5nZXQoKSk7CisK
KyAgICBkb3VibGUgYmVmb3JlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwor
ICAgIGxheWVyLnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGJ1aWxkZXIuY29udGV4dCgpLCBj
bGlwKTsKKyAgICByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBiZWZvcmVU
aW1lOworfQorCitkb3VibGUgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGw6Om1l
YXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYgY2Fu
dmFzRmFjdG9yeSwgR3JhcGhpY3NMYXllciYgbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KSBjb25zdAoreworICAgIC8vIFRPRE8oZG11cnBoKTogZ28gdGhyb3VnaCBhbGwgdGhlIGxheWVy
cywgdXNpbmcgdGhlIGludGVybmFsIFdlYkxheWVyCisgICAgLy8gaW4gR3JhcGhpY3NMYXllckNo
cm9taXVtLCB3aGljaCBnaXZlcyBtZSBhIExheWVyQ2hyb21pdW0sIHdoZXJlIEkgY2FuCisgICAg
Ly8gZ3JhYiB0aGUgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSwgd2hlcmUgSSBjYW4gbWFwIG15IHJl
Y3QKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworZG91Ymxl
IFdlYlJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXJJbXBsOjptZWFzdXJlVW5jbGlwcGVkQWNj
ZWxlcmF0ZWRQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYgY2FudmFzRmFjdG9yeSwgR3Jh
cGhpY3NMYXllciYgbGF5ZXIpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRTaXplIGxheWVyU2l6
ZSA9IGxheWVyLnNpemUoKTsKKyAgICBjb25zdCBJbnRSZWN0IGNsaXAgPSBXZWJDb3JlOjpJbnRS
ZWN0KDAsIDAsIGxheWVyU2l6ZS53aWR0aCgpLCBsYXllclNpemUuaGVpZ2h0KCkpOworCisgICAg
ZG91YmxlIHRvdGFsVGltZSA9IG1lYXN1cmVMYXllclBhaW50KGNhbnZhc0ZhY3RvcnksIGxheWVy
LCBjbGlwKTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0g
bGF5ZXIuY2hpbGRyZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpjb25zdF9pdGVy
YXRvciBpdDsKKyAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4u
ZW5kKCk7ICsraXQpCisgICAgICAgIHRvdGFsVGltZSArPSBtZWFzdXJlVW5jbGlwcGVkQWNjZWxl
cmF0ZWRQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgKippdCk7CisgICAgcmV0dXJuIHRvdGFsVGlt
ZTsKK30KKyNlbmRpZgorCitkb3VibGUgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcklt
cGw6Om1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNG
YWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIFdlYlNpemUg
c2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAg
ICBzd2l0Y2ggKHBhaW50TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlVmlld3BvcnQ6CisgICAg
ICAgIHBhaW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5dGhpbmc6IHsKKyAgICAgICAg
aWYgKG1fd2ViVmlld0ltcGwtPnBhZ2UoKSAmJiBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5G
cmFtZSgpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBtX3dlYlZp
ZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgICAgICAgICBXZWJDb3Jl
OjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHZpZXctPmNvbnRlbnRzU2l6ZSgpOworICAgICAgICAg
ICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVu
dHNTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwYWludFNpemUg
PSBXZWJSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICB9ICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNvbnN0IFdlYlNpemUgY2FudmFzU2l6ZSA9IFdlYlNpemUocGFp
bnRTaXplLndpZHRoLCBwYWludFNpemUuaGVpZ2h0KTsKKyAgICBjb25zdCBPd25QdHI8V2ViQ2Fu
dmFzPiBjYW52YXMgPSBXVEY6OmFkb3B0UHRyKGNhbnZhc0ZhY3RvcnkuY3JlYXRlV2ViQ2FudmFz
KGNhbnZhc1NpemUpKTsKKyAgICBkb3VibGUgYmVmb3JlVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcy5nZXQoKSwgcGFp
bnRTaXplKTsKKyAgICByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBiZWZv
cmVUaW1lOworfQorCisKK2RvdWJsZSBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1w
bDo6bWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBj
b25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIG1fd2ViVmlld0ltcGwtPmxh
eW91dCgpOworICAgIGlmICghbV93ZWJWaWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpCisgICAgICAgIHJldHVybiBtZWFzdXJlU29mdHdhcmVQYWludFRpbWUoY2FudmFz
RmFjdG9yeSwgcGFpbnRNb2RlKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290R3JhcGhpY3NMYXll
cigpOworICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRo
aW5nOgorICAgICAgICByZXR1cm4gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1l
KGNhbnZhc0ZhY3RvcnksICpsYXllcik7CisgICAgY2FzZSBQYWludE1vZGVWaWV3cG9ydDogewor
ICAgICAgICBjb25zdCBXZWJTaXplIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAg
ICAgIHJldHVybiBtZWFzdXJlQ2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNhbnZhc0ZhY3Rv
cnksICpsYXllciwgSW50UmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCkpOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcklt
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNjNkMjhmYTUzM2UzYTM1ZjZkMjJmZWM2ZmZiMzk1MTg5OGU2NTNm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUmVuZGVy
aW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJS
ZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbF9oCisjZGVmaW5lIFdlYlJlbmRlcmluZ0Jl
bmNobWFya0NvbnRyb2xsZXJJbXBsX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGwgOiBwdWJsaWMgV2ViUmVu
ZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViUmVuZGVyaW5nQmVu
Y2htYXJrQ29udHJvbGxlckltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKSA6IG1fd2ViVmll
d0ltcGwod2ViVmlld0ltcGwpIHsgfQorICAgIHZpcnR1YWwgfldlYlJlbmRlcmluZ0JlbmNobWFy
a0NvbnRyb2xsZXJJbXBsKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGluIHNlY29u
ZHMuIElmIHdlJ3JlIGluIGFjY2VsZXJhdGVkIG1vZGUsIGEgbmV3IGNhbnZhcworICAgIC8vIGlz
IGNyZWF0ZWQgZm9yIGVhY2ggZ3JhcGhpY3MgbGF5ZXIuIFBhaW50TW9kZVZpZXdwb3J0IGlzIG5v
dAorICAgIC8vIHN1cHBvcnRlZCBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIHlldC4K
KyAgICAvLyBMYXlvdXQoKSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3IgdG8g
cGFpbnRpbmcuCisgICAgdmlydHVhbCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52
YXNGYWN0b3J5JiwgY29uc3QgUGFpbnRNb2RlKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gcmV0dXJucyB0aGUgdGlt
ZSBpbiBzZWNvbmRzCisgICAgZG91YmxlIG1lYXN1cmVMYXllclBhaW50KGNvbnN0IENhbnZhc0Zh
Y3RvcnkmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0OworICAgIC8vIHJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcy4gQ3VycmVudGx5IHVu
aW1wbGVtZW50ZWQuCisgICAgZG91YmxlIG1lYXN1cmVDbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRp
bWUoY29uc3QgQ2FudmFzRmFjdG9yeSYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgLy8gcmV0dXJucyB0aGUgdGltZSBpbiBzZWNv
bmRzCisgICAgZG91YmxlIG1lYXN1cmVVbmNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShjb25z
dCBDYW52YXNGYWN0b3J5JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpIGNvbnN0OworI2VuZGlm
CisgICAgLy8gcmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzCisgICAgZG91YmxlIG1lYXN1cmVT
b2Z0d2FyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiwgY29uc3QgUGFpbnRNb2RlKSBj
b25zdDsKKworICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOworfTsKK30KKworCisjZW5k
aWYgLy8gV2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlckltcGxfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGIzZmRkZWYxZTdhMGFhMDY5MTQ4
NzBiZWU1MTlmYWQzNzNlNzBmMDcuLmRjMmY4MTE0ZTYyZGFhNGJmYzY0NWI4MjlkMjcyODBlNjdi
ODZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAg
LTE0MSw2ICsxNDEsNyBAQAogI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNp
bmNsdWRlICJXZWJQb3B1cE1lbnVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKyNpbmNs
dWRlICJXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgIldl
YlJ1bnRpbWVGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogI2luY2x1
ZGUgIldlYlRleHRJbnB1dEluZm8uaCIKQEAgLTc0Myw2ICs3NDQsMTMgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwgYm9v
bCB1c2VBbmNob3IKIH0KICNlbmRpZgogCitjb25zdCBXZWJSZW5kZXJpbmdCZW5jaG1hcmtDb250
cm9sbGVyKiBXZWJWaWV3SW1wbDo6cmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcigpCit7Cisg
ICAgaWYgKCFtX3JlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgIG1f
cmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBXZWJSZW5kZXJpbmdC
ZW5jaG1hcmtDb250cm9sbGVySW1wbCh0aGlzKSk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmVu
Y2htYXJrQ29udHJvbGxlci5nZXQoKTsKK30KKwogYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlS2V5
RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6OlJhd0tleURvd24pCkBAIC0zNDc1LDYgKzM0ODMsMTMg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiBjb2xvcikKICAgICBtX2xheWVyVHJlZVZpZXcuc2V0QmFja2dyb3VuZENvbG9yKHdlYkRv
Y3VtZW50QmFja2dyb3VuZENvbG9yKTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NM
YXllcigpCit7CisgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7Cit9CisjZW5kaWYKKwog
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgV2ViVmlld0ltcGw6OnNj
aGVkdWxlQW5pbWF0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCmluZGV4IGY2NTc1MDRmMmFkZGRkZWJkYTIwYmM4MmYyN2ViYTViM2FmODI4ODMuLjYwNDE2
YmJlOWVlZWY2NTg0NTA0OTRiMDBjODRkZThkMWNjMzZhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTA1LDYgKzEwNSw3IEBAIGNsYXNzIFdlYkZyYW1l
SW1wbDsKIGNsYXNzIFdlYkdlc3R1cmVFdmVudDsKIGNsYXNzIFdlYlBhZ2VQb3B1cEltcGw7CiBj
bGFzcyBXZWJQcmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdlYlJlbmRlcmluZ0JlbmNobWFya0Nv
bnRyb2xsZXI7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFz
cyBXZWJNb3VzZUV2ZW50OwpAQCAtMjk2LDYgKzI5Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdo
ZWVsRmxpbmdQYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0YXRzKFdl
YlJlbmRlcmluZ1N0YXRzJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYlJlbmRlcmlu
Z0JlbmNobWFya0NvbnRyb2xsZXIqIHJlbmRlcmluZ0JlbmNobWFya0NvbnRyb2xsZXIoKTsKKwog
ICAgIC8vIFdlYkxheWVyVHJlZVZpZXdDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlZ2lu
RnJhbWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5GcmFtZSgpOwpAQCAtNTE1LDYgKzUx
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICBOb25D
b21wb3NpdGVkQ29udGVudEhvc3QqIG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpOwogICAgIHZv
aWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKTsKICNlbmRpZgogI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7
CkBAIC03ODcsNiArNzkxLDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+
IG1fZnVsbFNjcmVlbkZyYW1lOwogICAgIGJvb2wgbV9pc0NhbmNlbGluZ0Z1bGxTY3JlZW47CiAK
KyAgICAvLyBMYXppbHkgY3JlYXRlZCBjb250cm9sbGVyIGZvciBtaWNyb2JlbmNobWFya3MKKyAg
ICBPd25QdHI8V2ViUmVuZGVyaW5nQmVuY2htYXJrQ29udHJvbGxlcj4gbV9yZW5kZXJpbmdCZW5j
aG1hcmtDb250cm9sbGVyOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151547</attachid>
            <date>2012-07-10 16:12:21 -0700</date>
            <delta_ts>2012-07-10 17:07:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120710161219.patch</filename>
            <type>text/plain</type>
            <size>18204</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY4ZWQyODczYzkxYWQ1MzZlYjJmODkyNDgyMjcxZDYxYTU5NDI4ZTEuLjliNWQ4OTM4YTMyYzUz
OTM1MmUxMmRhMTFhZjFkMzI4N2E4NDVmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTItMDctMTAgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIGluaXRpYWwgbWljcm9iZW5jaG1hcmsgd2ViIHZpZXcgY29udHJv
bGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgy
NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6YmVuY2htYXJr
U3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KToKKyAgICAgICAgKENhbnZhc0ZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydDo6Q2FudmFzRmFjdG9yeTo6fkNhbnZhc0ZhY3RvcnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrQWRh
cHRlckltcGw6Om1lYXN1cmVMYXllclBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0Jl
bmNobWFya0FkYXB0ZXJJbXBsOjptZWFzdXJlVW5jbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrQWRhcHRlckltcGw6Om1lYXN1cmVT
b2Z0d2FyZVBhaW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtBZGFw
dGVySW1wbDo6bWVhc3VyZVBhaW50VGltZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNo
bWFya1N1cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydEltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmll
d0ltcGwpOgorCiAyMDEyLTA3LTA5ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbmFtZSBXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVyIHRvIFdlYkNv
cmU6Ok11dGF0aW9uT2JzZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyZmVl
Y2M3Mzg5ZDNjNTgxZDRmNDNmYjk0NDYwMmUzYjA3ZDUzMjUzLi5kMjA2OGQ5MGYyZmQxN2NlZWU2
ODNhZjFiNzZmMGY5YTFkYzgzNTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0y
NzksNiArMjc5LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYUNsaWVu
dC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYVJlcXVlc3QuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJWaWV3LmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJWaWV3Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgnLApAQCAtNjYxLDYgKzY2
Miw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0RmllbGREZWNvcmF0b3JDbGllbnQu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVzZXJNZWRpYVJlcXVlc3QuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlZpZGVvTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdz
cmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVmlld0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQmFzZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDk2NjQyZjY2NjhkZmQ1ODMzODMxMGYzZjBiZjVm
MjhiYmE4ZjYxZWEuLjRhNzIyMWU2MTFiMzFjZjU4OGRkZGFhZjg5N2I5NDhmNzU3YTcwMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTUyLDYgKzUyLDcgQEAg
Y2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lv
bkNsaWVudDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViVmlld0JlbmNo
bWFya1N1cHBvcnQ7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3Mg
V2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQ2Miw2ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyBjYWxsIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGluIHRocmVhZGVkIG1vZGUgYXMgaXQg
YmxvY2tzIG9uIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
aW5nU3RhdHMoV2ViUmVuZGVyaW5nU3RhdHMmKSBjb25zdCB7IH0KIAorICAgIC8vIEJlbmNobWFy
ayBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgdmlydHVhbCBjb25zdCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogYmVuY2htYXJrU3VwcG9y
dCgpIHsgcmV0dXJuIDA7IH0KKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFNldHMg
dGhlIHZpc2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ZDAzNWM3ZTdiNWIzY2M2NmQ5ZDcwYjEzMmZjZjdmMzNhZDhlMjYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaAor
I2RlZmluZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJDYW52YXMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBTdXBwb3J0IGZvciBiZW5jaG1hcmtzIGFjY2Vzc2luZyB0aGUgV2ViVmll
dy4KK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBh
aW50TW9kZSB7CisgICAgICAvLyBQYWludCB0aGUgZW50aXJlIHBhZ2UuCisgICAgICBQYWludE1v
ZGVFdmVyeXRoaW5nCisgICAgfTsKKyAgICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBjYW52YXNl
cyBmb3IgcGFpbnQgY2FsbHMsIHdoZXJlIG11bHRpcGxlIGNhbnZhc2VzCisgICAgLy8gbWF5IGJl
IHVzZWQgZm9yIGxheWVyZWQgcmVuZGVyaW5nLgorICAgIGNsYXNzIENhbnZhc0ZhY3Rvcnkgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8gQ3JlYXRlcyBhIHdlYiBjYW52YXMsIGNhbGxlciBhc3N1
bWVzIG93bmVyc2hpcC4KKyAgICAgICAgdmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZVdlYkNhbnZh
cyhjb25zdCBXZWJTaXplJikgY29uc3QgPSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB+Q2FudmFzRmFjdG9yeSgpIHsgfQorICAgIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGluIHNlY29uZHMgdG8gcGFpbnQgb24gb25lIG9yIG1vcmUgY2FudmFzZXMgY3JlYXRlZAor
ICAgIC8vIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBmYWN0b3J5LgorICAgIHZpcnR1YWwgZG91Ymxl
IG1lYXN1cmVQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYsIFBhaW50TW9kZSkgY29uc3Qg
PSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnQo
KSB7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMjM5MDc2MDA4
NjE4Y2Y5ZjBmMTkzMWY1NWFhNWUzYzczYjcxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCkBAIC0w
LDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgiCisKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgV2ViQ29y
ZTo6RmxvYXRTaXplOwordXNpbmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKK3VzaW5nIFdlYkNv
cmU6OkludFJlY3Q7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitkb3VibGUgV2ViVmlld0JlbmNo
bWFya0FkYXB0ZXJJbXBsOjptZWFzdXJlTGF5ZXJQYWludChjb25zdCBDYW52YXNGYWN0b3J5JiBj
YW52YXNGYWN0b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkg
Y29uc3QKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAud2lk
dGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFz
ID0gYWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVXZWJDYW52YXMoY2FudmFzU2l6ZSkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMuZ2V0KCkpOworCisgICAg
ZG91YmxlIGJlZm9yZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBs
YXllci5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhidWlsZGVyLmNvbnRleHQoKSwgY2xpcCk7
CisgICAgcmV0dXJuIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3JlVGltZTsK
K30KKworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtBZGFwdGVySW1wbDo6bWVhc3VyZVVuY2xpcHBl
ZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmIGNhbnZhc0ZhY3Rvcnks
IEdyYXBoaWNzTGF5ZXImIGxheWVyKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBsYXllclNpemUg
PSBsYXllci5zaXplKCk7CisgICAgY29uc3QgSW50UmVjdCBjbGlwID0gV2ViQ29yZTo6SW50UmVj
dCgwLCAwLCBsYXllclNpemUud2lkdGgoKSwgbGF5ZXJTaXplLmhlaWdodCgpKTsKKworICAgIGRv
dWJsZSB0b3RhbFRpbWUgPSBtZWFzdXJlTGF5ZXJQYWludChjYW52YXNGYWN0b3J5LCBsYXllciwg
Y2xpcCk7CisKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbiA9IGxh
eWVyLmNoaWxkcmVuKCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPjo6Y29uc3RfaXRlcmF0
b3IgaXQ7CisgICAgZm9yIChpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVu
ZCgpOyArK2l0KQorICAgICAgICB0b3RhbFRpbWUgKz0gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJh
dGVkUGFpbnRUaW1lKGNhbnZhc0ZhY3RvcnksICoqaXQpOworICAgIHJldHVybiB0b3RhbFRpbWU7
Cit9CisKK2RvdWJsZSBXZWJWaWV3QmVuY2htYXJrQWRhcHRlckltcGw6Om1lYXN1cmVTb2Z0d2Fy
ZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBjb25zdCBQYWlu
dE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0lt
cGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50TW9k
ZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93ZWJW
aWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWludFNp
emUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJlY3Qo
MCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICB9CisK
KyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKHBhaW50U2l6ZS53aWR0aCwg
cGFpbnRTaXplLmhlaWdodCk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFzID0g
YWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVXZWJDYW52YXMoY2FudmFzU2l6ZSkpOworICAg
IGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAg
bV93ZWJWaWV3SW1wbC0+cGFpbnQoY2FudmFzLmdldCgpLCBwYWludFNpemUpOworICAgIHJldHVy
biBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRpbWU7Cit9CisKKworZG91
YmxlIFdlYlZpZXdCZW5jaG1hcmtBZGFwdGVySW1wbDo6bWVhc3VyZVBhaW50VGltZShjb25zdCBD
YW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBj
b25zdAoreworICAgIG1fd2ViVmlld0ltcGwtPmxheW91dCgpOworICAgIGlmICghbV93ZWJWaWV3
SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBt
ZWFzdXJlU29mdHdhcmVQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgcGFpbnRNb2RlKTsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBt
X3dlYlZpZXdJbXBsLT5yb290R3JhcGhpY3NMYXllcigpOworICAgIHN3aXRjaCAocGFpbnRNb2Rl
KSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRoaW5nOgorICAgICAgICByZXR1cm4gbWVhc3Vy
ZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNhbnZhc0ZhY3RvcnksICpsYXllcik7Cisg
ICAgfQorI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMzI5OWNiNGQx
MmUxMzFjOWQ5ZGQzMGJhNGQ5NzI1NjU0YzU5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaApAQCAtMCww
ICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorI2RlZmluZSBX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFy
a1N1cHBvcnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwgOiBwdWJsaWMgV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpIDogbV93ZWJWaWV3SW1w
bCh3ZWJWaWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnRJ
bXBsKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMuIElmIHdlJ3Jl
IGluIGFjY2VsZXJhdGVkIG1vZGUsIGEgbmV3IGNhbnZhcworICAgIC8vIGlzIGNyZWF0ZWQgZm9y
IGVhY2ggZ3JhcGhpY3MgbGF5ZXIuIFBhaW50TW9kZVZpZXdwb3J0IGlzIG5vdAorICAgIC8vIHN1
cHBvcnRlZCBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIHlldC4KKyAgICAvLyBMYXlv
dXQoKSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3IgdG8gcGFpbnRpbmcuCisg
ICAgdmlydHVhbCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5Jiwg
Y29uc3QgUGFpbnRNb2RlKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICAvLyBNZWFz
dXJlcyB0aGUgdGltZSBpbiBzZWNvbmRzdG8gcGFpbnQgdGhlIGdpdmVuIGdyYXBoaWNzIGxheWVy
IHRvIGEgY2FudmFzCisgICAgLy8gbWFkZSBmcm9tIHRoZSBnaXZlbiBmYWN0b3J5LCBjbGlwcGVk
IHdpdGggdGhlIGdpdmVuIHJlY3RhbmdsZS4KKyAgICBkb3VibGUgbWVhc3VyZUxheWVyUGFpbnQo
Y29uc3QgQ2FudmFzRmFjdG9yeSYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgLy8gTWVhc3VyZXMgdGhlIHRpbWUgaW4gc2Vjb25k
cyB0byBwYWludCB0aGUgZ2l2ZW4gZ3JhcGhpY3MgbGF5ZXIgaGllcmFyY2h5CisgICAgLy8gdG8g
Y2FudmFzZXMgY3JlYXRlZCBieSB0aGUgY2FudmFzIGZhY3RvcnkuCisgICAgZG91YmxlIG1lYXN1
cmVVbmNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciYpIGNvbnN0OworICAgIC8vIE1lYXN1cmVzIHRoZSB0aW1lIGlu
IHNlY29uZHMgdG8gcGFpbnQgdGhlIHdyYXBwZWQgd2ViIHZpZXcgdXNpbmcgc29mdHdhcmUKKyAg
ICAvLyByZW5kZXJpbmcsIGFuZCB0aGUgZ2l2ZW4gcGFpbnQgbW9kZQorICAgIGRvdWJsZSBtZWFz
dXJlU29mdHdhcmVQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYsIGNvbnN0IFBhaW50TW9k
ZSkgY29uc3Q7CisKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKK307Cit9CisKKyNl
bmRpZiAvLyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDgzNjhkMWMyNmUzODFhMDZhYzE4YTVjYTNi
MTY1NDk3MTFkYWI2ZGYuLjJmZmIzMzBkNGIyMjNkMDk2MTRlOWMwMTI1MDljYzE0OTkzYzdhNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTE0NCw2
ICsxNDQsNyBAQAogI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldl
YlNldHRpbmdzSW1wbC5oIgogI2luY2x1ZGUgIldlYlRleHRJbnB1dEluZm8uaCIKKyNpbmNsdWRl
ICJXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50
LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAg
LTc0NCw2ICs3NDUsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRp
b24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwgYm9vbCB1c2VBbmNob3IKIH0KICNlbmRpZgogCitj
b25zdCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogV2ViVmlld0ltcGw6OmJlbmNobWFya1N1cHBv
cnQoKQoreworICAgIGlmICghbV9iZW5jaG1hcmtBZGFwdGVyKQorICAgICAgICBtX2JlbmNobWFy
a0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKHRoaXMp
KTsKKyAgICByZXR1cm4gbV9iZW5jaG1hcmtBZGFwdGVyLmdldCgpOworfQorCiBib29sIFdlYlZp
ZXdJbXBsOjpoYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsK
ICAgICBBU1NFUlQoKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bikKQEAg
LTM0NzQsNiArMzQ4MiwxMyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRCYWNr
Z3JvdW5kQ29sb3Iod2ViRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOwogfQogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorV2ViQ29yZTo6R3JhcGhpY3NMYXllciogV2ViVmlld0lt
cGw6OnJvb3RHcmFwaGljc0xheWVyKCkKK3sKKyAgICByZXR1cm4gbV9yb290R3JhcGhpY3NMYXll
cjsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9p
ZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZjY1NzUwNGYyYWRkZGRlYmRhMjBiYzgyZjI3ZWJh
NWIzYWY4Mjg4My4uZGUyNDE4ZDZjYjQ2YTE1OTQzMjA1OWM5ZjViZDdmY2MzY2IwYmZlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMDUsNiArMTA1LDcg
QEAgY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2ViR2VzdHVyZUV2ZW50OwogY2xhc3MgV2Vi
UGFnZVBvcHVwSW1wbDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViVmll
d0JlbmNobWFya1N1cHBvcnQ7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZl
bnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtMjk2LDYgKzI5Nyw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdl
YkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmlu
Z1N0YXRzKFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtTdXBwb3J0KCk7CisKICAgICAvLyBXZWJM
YXllclRyZWVWaWV3Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRnJhbWUoKTsKQEAgLTUxNSw2ICs1MTgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludFJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKICAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwpAQCAtNzg3LDYg
Kzc5MSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBtX2Z1bGxTY3Jl
ZW5GcmFtZTsKICAgICBib29sIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuOwogCisgICAgLy8gTGF6
aWx5IGNyZWF0ZWQgY29udHJvbGxlciBmb3IgbWljcm9iZW5jaG1hcmtzCisgICAgT3duUHRyPFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0PiBtX2JlbmNobWFya0FkYXB0ZXI7CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNj
cm9sbERhbWFnZTsKICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151556</attachid>
            <date>2012-07-10 17:07:56 -0700</date>
            <delta_ts>2012-07-12 18:37:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120710170755.patch</filename>
            <type>text/plain</type>
            <size>18259</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY4ZWQyODczYzkxYWQ1MzZlYjJmODkyNDgyMjcxZDYxYTU5NDI4ZTEuLjliNWQ4OTM4YTMyYzUz
OTM1MmUxMmRhMTFhZjFkMzI4N2E4NDVmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTItMDctMTAgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIGluaXRpYWwgbWljcm9iZW5jaG1hcmsgd2ViIHZpZXcgY29udHJv
bGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgy
NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6YmVuY2htYXJr
U3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KToKKyAgICAgICAgKENhbnZhc0ZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydDo6Q2FudmFzRmFjdG9yeTo6fkNhbnZhc0ZhY3RvcnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrQWRh
cHRlckltcGw6Om1lYXN1cmVMYXllclBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0Jl
bmNobWFya0FkYXB0ZXJJbXBsOjptZWFzdXJlVW5jbGlwcGVkQWNjZWxlcmF0ZWRQYWludFRpbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrQWRhcHRlckltcGw6Om1lYXN1cmVT
b2Z0d2FyZVBhaW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtBZGFw
dGVySW1wbDo6bWVhc3VyZVBhaW50VGltZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNo
bWFya1N1cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydEltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmll
d0ltcGwpOgorCiAyMDEyLTA3LTA5ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbmFtZSBXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVyIHRvIFdlYkNv
cmU6Ok11dGF0aW9uT2JzZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyZmVl
Y2M3Mzg5ZDNjNTgxZDRmNDNmYjk0NDYwMmUzYjA3ZDUzMjUzLi5kMjA2OGQ5MGYyZmQxN2NlZWU2
ODNhZjFiNzZmMGY5YTFkYzgzNTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0y
NzksNiArMjc5LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYUNsaWVu
dC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYVJlcXVlc3QuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJWaWV3LmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJWaWV3Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgnLApAQCAtNjYxLDYgKzY2
Miw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0RmllbGREZWNvcmF0b3JDbGllbnQu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVzZXJNZWRpYVJlcXVlc3QuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlZpZGVvTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdz
cmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVmlld0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQmFzZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDk2NjQyZjY2NjhkZmQ1ODMzODMxMGYzZjBiZjVm
MjhiYmE4ZjYxZWEuLjRhNzIyMWU2MTFiMzFjZjU4OGRkZGFhZjg5N2I5NDhmNzU3YTcwMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTUyLDYgKzUyLDcgQEAg
Y2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lv
bkNsaWVudDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViVmlld0JlbmNo
bWFya1N1cHBvcnQ7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3Mg
V2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQ2Miw2ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyBjYWxsIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGluIHRocmVhZGVkIG1vZGUgYXMgaXQg
YmxvY2tzIG9uIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
aW5nU3RhdHMoV2ViUmVuZGVyaW5nU3RhdHMmKSBjb25zdCB7IH0KIAorICAgIC8vIEJlbmNobWFy
ayBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgdmlydHVhbCBjb25zdCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogYmVuY2htYXJrU3VwcG9y
dCgpIHsgcmV0dXJuIDA7IH0KKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFNldHMg
dGhlIHZpc2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ZDAzNWM3ZTdiNWIzY2M2NmQ5ZDcwYjEzMmZjZjdmMzNhZDhlMjYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaAor
I2RlZmluZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJDYW52YXMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBTdXBwb3J0IGZvciBiZW5jaG1hcmtzIGFjY2Vzc2luZyB0aGUgV2ViVmll
dy4KK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBh
aW50TW9kZSB7CisgICAgICAvLyBQYWludCB0aGUgZW50aXJlIHBhZ2UuCisgICAgICBQYWludE1v
ZGVFdmVyeXRoaW5nCisgICAgfTsKKyAgICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBjYW52YXNl
cyBmb3IgcGFpbnQgY2FsbHMsIHdoZXJlIG11bHRpcGxlIGNhbnZhc2VzCisgICAgLy8gbWF5IGJl
IHVzZWQgZm9yIGxheWVyZWQgcmVuZGVyaW5nLgorICAgIGNsYXNzIENhbnZhc0ZhY3Rvcnkgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8gQ3JlYXRlcyBhIHdlYiBjYW52YXMsIGNhbGxlciBhc3N1
bWVzIG93bmVyc2hpcC4KKyAgICAgICAgdmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZVdlYkNhbnZh
cyhjb25zdCBXZWJTaXplJikgY29uc3QgPSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB+Q2FudmFzRmFjdG9yeSgpIHsgfQorICAgIH07CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGluIHNlY29uZHMgdG8gcGFpbnQgb24gb25lIG9yIG1vcmUgY2FudmFzZXMgY3JlYXRlZAor
ICAgIC8vIGZyb20gdGhlIGdpdmVuIGNhbnZhcyBmYWN0b3J5LgorICAgIHZpcnR1YWwgZG91Ymxl
IG1lYXN1cmVQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYsIFBhaW50TW9kZSkgY29uc3Qg
PSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnQo
KSB7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczZWMxYjIwNGFk
YzI5OWIyY2M4ZjAzZDUyZjVhNDJjOWY5Y2NmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgiCisKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgV2ViQ29y
ZTo6RmxvYXRTaXplOwordXNpbmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKK3VzaW5nIFdlYkNv
cmU6OkludFJlY3Q7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitkb3VibGUgV2ViVmlld0JlbmNo
bWFya1N1cHBvcnRJbXBsOjptZWFzdXJlTGF5ZXJQYWludChjb25zdCBDYW52YXNGYWN0b3J5JiBj
YW52YXNGYWN0b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkg
Y29uc3QKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAud2lk
dGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFz
ID0gYWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVXZWJDYW52YXMoY2FudmFzU2l6ZSkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMuZ2V0KCkpOworCisgICAg
ZG91YmxlIGJlZm9yZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBs
YXllci5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhidWlsZGVyLmNvbnRleHQoKSwgY2xpcCk7
CisgICAgcmV0dXJuIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3JlVGltZTsK
K30KKworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZVVuY2xpcHBl
ZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNvbnN0IENhbnZhc0ZhY3RvcnkmIGNhbnZhc0ZhY3Rvcnks
IEdyYXBoaWNzTGF5ZXImIGxheWVyKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBsYXllclNpemUg
PSBsYXllci5zaXplKCk7CisgICAgY29uc3QgSW50UmVjdCBjbGlwID0gV2ViQ29yZTo6SW50UmVj
dCgwLCAwLCBsYXllclNpemUud2lkdGgoKSwgbGF5ZXJTaXplLmhlaWdodCgpKTsKKworICAgIGRv
dWJsZSB0b3RhbFRpbWUgPSBtZWFzdXJlTGF5ZXJQYWludChjYW52YXNGYWN0b3J5LCBsYXllciwg
Y2xpcCk7CisKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbiA9IGxh
eWVyLmNoaWxkcmVuKCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPjo6Y29uc3RfaXRlcmF0
b3IgaXQ7CisgICAgZm9yIChpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVu
ZCgpOyArK2l0KQorICAgICAgICB0b3RhbFRpbWUgKz0gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJh
dGVkUGFpbnRUaW1lKGNhbnZhc0ZhY3RvcnksICoqaXQpOworICAgIHJldHVybiB0b3RhbFRpbWU7
Cit9CisKK2RvdWJsZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6Om1lYXN1cmVTb2Z0d2Fy
ZVBhaW50VGltZShjb25zdCBDYW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBjb25zdCBQYWlu
dE1vZGUgcGFpbnRNb2RlKSBjb25zdAoreworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0lt
cGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50TW9k
ZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93ZWJW
aWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWludFNp
emUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJlY3Qo
MCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICB9CisK
KyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKHBhaW50U2l6ZS53aWR0aCwg
cGFpbnRTaXplLmhlaWdodCk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFzID0g
YWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVXZWJDYW52YXMoY2FudmFzU2l6ZSkpOworICAg
IGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAg
bV93ZWJWaWV3SW1wbC0+cGFpbnQoY2FudmFzLmdldCgpLCBwYWludFNpemUpOworICAgIHJldHVy
biBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRpbWU7Cit9CisKKworZG91
YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZVBhaW50VGltZShjb25zdCBD
YW52YXNGYWN0b3J5JiBjYW52YXNGYWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKSBj
b25zdAoreworICAgIG1fd2ViVmlld0ltcGwtPmxheW91dCgpOworICAgIGlmICghbV93ZWJWaWV3
SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBt
ZWFzdXJlU29mdHdhcmVQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgcGFpbnRNb2RlKTsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBt
X3dlYlZpZXdJbXBsLT5yb290R3JhcGhpY3NMYXllcigpOworICAgIHN3aXRjaCAocGFpbnRNb2Rl
KSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRoaW5nOgorICAgICAgICByZXR1cm4gbWVhc3Vy
ZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNhbnZhc0ZhY3RvcnksICpsYXllcik7Cisg
ICAgfQorICAgIHJldHVybiAwOworI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJkMzI5OWNiNGQxMmUxMzFjOWQ5ZGQzMGJhNGQ5NzI1NjU0YzU5ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGxfaAorI2RlZmluZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorCisjaW5jbHVkZSAi
V2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgR3JhcGhpY3NMYXllcjsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGwgOiBwdWJsaWMgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwp
IDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB+V2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGluIHNl
Y29uZHMuIElmIHdlJ3JlIGluIGFjY2VsZXJhdGVkIG1vZGUsIGEgbmV3IGNhbnZhcworICAgIC8v
IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZ3JhcGhpY3MgbGF5ZXIuIFBhaW50TW9kZVZpZXdwb3J0IGlz
IG5vdAorICAgIC8vIHN1cHBvcnRlZCBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIHll
dC4KKyAgICAvLyBMYXlvdXQoKSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3Ig
dG8gcGFpbnRpbmcuCisgICAgdmlydHVhbCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShjb25zdCBD
YW52YXNGYWN0b3J5JiwgY29uc3QgUGFpbnRNb2RlKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICAvLyBNZWFzdXJlcyB0aGUgdGltZSBpbiBzZWNvbmRzdG8gcGFpbnQgdGhlIGdpdmVu
IGdyYXBoaWNzIGxheWVyIHRvIGEgY2FudmFzCisgICAgLy8gbWFkZSBmcm9tIHRoZSBnaXZlbiBm
YWN0b3J5LCBjbGlwcGVkIHdpdGggdGhlIGdpdmVuIHJlY3RhbmdsZS4KKyAgICBkb3VibGUgbWVh
c3VyZUxheWVyUGFpbnQoY29uc3QgQ2FudmFzRmFjdG9yeSYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgLy8gTWVhc3VyZXMgdGhl
IHRpbWUgaW4gc2Vjb25kcyB0byBwYWludCB0aGUgZ2l2ZW4gZ3JhcGhpY3MgbGF5ZXIgaGllcmFy
Y2h5CisgICAgLy8gdG8gY2FudmFzZXMgY3JlYXRlZCBieSB0aGUgY2FudmFzIGZhY3RvcnkuCisg
ICAgZG91YmxlIG1lYXN1cmVVbmNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShjb25zdCBDYW52
YXNGYWN0b3J5JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpIGNvbnN0OworICAgIC8vIE1lYXN1
cmVzIHRoZSB0aW1lIGluIHNlY29uZHMgdG8gcGFpbnQgdGhlIHdyYXBwZWQgd2ViIHZpZXcgdXNp
bmcgc29mdHdhcmUKKyAgICAvLyByZW5kZXJpbmcsIGFuZCB0aGUgZ2l2ZW4gcGFpbnQgbW9kZQor
ICAgIGRvdWJsZSBtZWFzdXJlU29mdHdhcmVQYWludFRpbWUoY29uc3QgQ2FudmFzRmFjdG9yeSYs
IGNvbnN0IFBhaW50TW9kZSkgY29uc3Q7CisKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1w
bDsKK307Cit9CisKKyNlbmRpZiAvLyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDgzNjhkMWMyNmUz
ODFhMDZhYzE4YTVjYTNiMTY1NDk3MTFkYWI2ZGYuLjJmZmIzMzBkNGIyMjNkMDk2MTRlOWMwMTI1
MDljYzE0OTkzYzdhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKQEAgLTE0NCw2ICsxNDQsNyBAQAogI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogI2luY2x1ZGUgIldlYlRleHRJbnB1dElu
Zm8uaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCIKICNpbmNsdWRl
ICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKQEAgLTc0NCw2ICs3NDUsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwgYm9vbCB1c2VBbmNob3IK
IH0KICNlbmRpZgogCitjb25zdCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogV2ViVmlld0ltcGw6
OmJlbmNobWFya1N1cHBvcnQoKQoreworICAgIGlmICghbV9iZW5jaG1hcmtBZGFwdGVyKQorICAg
ICAgICBtX2JlbmNobWFya0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgV2ViVmlld0JlbmNobWFya1N1
cHBvcnRJbXBsKHRoaXMpKTsKKyAgICByZXR1cm4gbV9iZW5jaG1hcmtBZGFwdGVyLmdldCgpOwor
fQorCiBib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2
ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6
UmF3S2V5RG93bikKQEAgLTM0NzQsNiArMzQ4MiwxMyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogICAgIG1fbGF5ZXJU
cmVlVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3Iod2ViRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOwog
fQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogV2ViVmlld0ltcGw6OnJvb3RHcmFwaGljc0xheWVyKCkKK3sKKyAgICByZXR1cm4gbV9y
b290R3JhcGhpY3NMYXllcjsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24oKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZjY1NzUwNGYyYWRkZGRl
YmRhMjBiYzgyZjI3ZWJhNWIzYWY4Mjg4My4uNjdkYzAxNGQ0Y2VkYTFhMTU0YjUxNTIxMTJkZjFl
YmNhNDQ1NmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBA
IC0xMDUsNiArMTA1LDggQEAgY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2ViR2VzdHVyZUV2
ZW50OwogY2xhc3MgV2ViUGFnZVBvcHVwSW1wbDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50
OworY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnQ7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGw7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBj
bGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtMjk2LDYgKzI5OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2
ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0YXRz
KFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtTdXBwb3J0KCk7CisKICAgICAvLyBXZWJMYXllclRy
ZWVWaWV3Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCk7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEJlZ2luRnJhbWUoKTsKQEAgLTUxNSw2ICs1MTksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYWludFJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKICAgICB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IHJvb3RHcmFwaGljc0xheWVyKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpOwpAQCAtNzg3LDYgKzc5Miw5
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBtX2Z1bGxTY3JlZW5GcmFt
ZTsKICAgICBib29sIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuOwogCisgICAgLy8gTGF6aWx5IGNy
ZWF0ZWQgY29udHJvbGxlciBmb3IgbWljcm9iZW5jaG1hcmtzCisgICAgT3duUHRyPFdlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0SW1wbD4gbV9iZW5jaG1hcmtBZGFwdGVyOworCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJTY3Jv
bGxEYW1hZ2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152123</attachid>
            <date>2012-07-12 18:23:16 -0700</date>
            <delta_ts>2012-07-13 09:31:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120712182315.patch</filename>
            <type>text/plain</type>
            <size>18568</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY4ZWQyODczYzkxYWQ1MzZlYjJmODkyNDgyMjcxZDYxYTU5NDI4ZTEuLmI3OGUzNThkM2M1ZTMx
YjY0ZjNiMGIwMWYyNWRiY2M2YmViYTAyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTItMDctMTAgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIEludHJvZHVjZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCBmb3Ig
cGVyZm9ybWFuY2UgZXhwZXJpbWVudHMgb24gYSByZWFsIFdlYlZpZXcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4MjcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAq
IHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmJlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgIChDYW52YXNG
YWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OkNhbnZh
c0ZhY3Rvcnk6On5DYW52YXNGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNo
bWFya1N1cHBvcnQ6On5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya0FkYXB0ZXJJbXBsOjptZWFzdXJlTGF5
ZXJQYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtBZGFwdGVySW1wbDo6
bWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0JlbmNobWFya0FkYXB0ZXJJbXBsOjptZWFzdXJlU29mdHdhcmVQYWludFRpbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrQWRhcHRlckltcGw6Om1lYXN1cmVQYWlu
dFRpbWUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6V2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNo
bWFya1N1cHBvcnRJbXBsOjp+V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVu
Y2htYXJrU3VwcG9ydCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6cm9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wNy0w
OSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5hbWUgV2Vi
Q29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlciB0byBXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMmZlZWNjNzM4OWQzYzU4MWQ0ZjQzZmI5
NDQ2MDJlM2IwN2Q1MzI1My4uZDIwNjhkOTBmMmZkMTdjZWVlNjgzYWYxYjc2ZjBmOWExZGM4MzUw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjc5LDYgKzI3OSw3IEBACiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJVc2VyTWVkaWFDbGllbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVmlldy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVmlld0NsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYldpZGdldC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYldpZGdldENsaWVudC5oJywKQEAgLTY2MSw2ICs2NjIsOCBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJWaWRlb0xheWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYldvcmtlckJhc2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aAppbmRleCA5NjY0MmY2NjY4ZGZkNTgzMzgzMTBmM2YwYmY1ZjI4YmJhOGY2MWVhLi4zMDgwMjRi
YTg5YWRlNTQ4ZTUwMzQ5YzM1YzhhZWI4MjIxNzc1ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIFdlYk5vZGU7CiBjbGFz
cyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7CiBjbGFzcyBXZWJQ
cmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3Mg
V2ViUmFuZ2U7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7
CkBAIC00NjIsNiArNDYzLDkgQEAgcHVibGljOgogICAgIC8vIFRoaXMgY2FsbCBpcyByZWxhdGl2
ZWx5IGV4cGVuc2l2ZSBpbiB0aHJlYWRlZCBtb2RlIGFzIGl0IGJsb2NrcyBvbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0YXRzKFdlYlJlbmRlcmlu
Z1N0YXRzJikgY29uc3QgeyB9CiAKKyAgICAvLyBCZW5jaG1hcmtpbmcgc3VwcG9ydCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZpcnR1YWwgV2ViVmll
d0JlbmNobWFya1N1cHBvcnQqIGJlbmNobWFya1N1cHBvcnQoKSB7IHJldHVybiAwOyB9CisKICAg
ICAvLyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBX
ZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
d0JlbmNobWFya1N1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDJlMGY4YTBhMjkyZTk0YzNhMTNjOGNk
MjA3MDM1YWNkNDQyYzEzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj
aWZuZGVmIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VwcG9ydCBm
b3IgYmVuY2htYXJrcyBhY2Nlc3NpbmcgdGhlIFdlYlZpZXcuCitjbGFzcyBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydCB7CitwdWJsaWM6CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgICAvLyBQ
YWludCB0aGUgZW50aXJlIHBhZ2UuCisgICAgICAgIFBhaW50TW9kZUV2ZXJ5dGhpbmcKKyAgICB9
OworCisgICAgLy8gQ29udHJvbGxlciBmb3IgY3JlYXRpbmcgY2FudmFzZXMgd2hlcmUgbXVsdGlw
bGUgY2FudmFzZXMKKyAgICAvLyBtYXkgYmUgdXNlZCBmb3IgbGF5ZXJlZCByZW5kZXJpbmcgYW5k
IHNpemVzIGRlZmluZWQgYnkgdGhlIGJlbmNobWFyay4KKyAgICAvLyBBbHNvIGNvbnRhaW5zIHJl
cG9ydGluZyBtZXRob2RzIGNhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQKKyAg
ICAvLyB3aGVuIHBhaW50aW5nIGlzIGFib3V0IHRvIG9jY3VyIGFuZCB3aGVuIHBhaW50aW5nIGlz
IGNvbXBsZXRlLgorICAgIGNsYXNzIENhbnZhc0NvbnRyb2xsZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZUNhbnZhcyhjb25zdCBXZWJTaXplJikgPSAw
OworCisgICAgICAgIC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFrclN1cHBvcnQgd2hl
biBwYWludGluZyBpcyBhYm91dCB0bworICAgICAgICAvLyBvY2N1ci4KKyAgICAgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1BhaW50KGNvbnN0IFdlYkNhbnZhcyYpID0gMDsKKworICAgICAgICAv
LyBDYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHdoZW4gcGFpbnRpbmcgaXMg
Y29tcGxldGUuCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludGluZ0NvbXBsZXRlKGNvbnN0IFdl
YkNhbnZhcyYpID0gMDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc0Nv
bnRyb2xsZXIoKSB7IH0KKyAgICB9OworCisgICAgLy8gUmV0dXJucyB0aGUgdGltZSBpbiBzZWNv
bmRzIHRvIHBhaW50IG9uIG9uZSBvciBtb3JlIGNhbnZhc2VzIGNyZWF0ZWQKKyAgICAvLyBmcm9t
IHRoZSBnaXZlbiBjYW52YXMgZmFjdG9yeS4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtZWFzdXJlUGFp
bnRUaW1lKENhbnZhc0NvbnRyb2xsZXImLCBQYWludE1vZGUpID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgfldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KCkgeyB9Cit9OworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1
cHBvcnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDdlY2IzNzYyYjFkNmJjZTlhMjAyZGRlMjA1NGEy
MjA2YTYwZTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oIgorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwu
aCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisKKyNpbmNs
dWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcg
V2ViQ29yZTo6RmxvYXRTaXplOwordXNpbmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKK3VzaW5n
IFdlYkNvcmU6OkludFJlY3Q7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitkb3VibGUgV2ViVmll
d0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJlTGF5ZXJQYWludChDYW52YXNDb250cm9sbGVy
JiBjYW52YXNGYWN0b3J5LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xp
cCkKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAud2lkdGgo
KSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFzID0g
YWRvcHRQdHIoY2FudmFzRmFjdG9yeS5jcmVhdGVDYW52YXMoY2FudmFzU2l6ZSkpOworICAgIEdy
YXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMuZ2V0KCkpOworCisgICAgZG91Ymxl
IGJlZm9yZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBsYXllci5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhidWlsZGVyLmNvbnRleHQoKSwgY2xpcCk7CisgICAg
cmV0dXJuIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3JlVGltZTsKK30KKwor
ZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZVVuY2xpcHBlZEFjY2Vs
ZXJhdGVkUGFpbnRUaW1lKENhbnZhc0NvbnRyb2xsZXImIGNhbnZhc0ZhY3RvcnksIEdyYXBoaWNz
TGF5ZXImIGxheWVyKQoreworICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBsYXllci5zaXplKCk7
CisgICAgY29uc3QgSW50UmVjdCBjbGlwID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBsYXllclNp
emUud2lkdGgoKSwgbGF5ZXJTaXplLmhlaWdodCgpKTsKKworICAgIGRvdWJsZSB0b3RhbFRpbWUg
PSBtZWFzdXJlTGF5ZXJQYWludChjYW52YXNGYWN0b3J5LCBsYXllciwgY2xpcCk7CisKKyAgICBj
b25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbiA9IGxheWVyLmNoaWxkcmVuKCk7
CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgZm9y
IChpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KQorICAg
ICAgICB0b3RhbFRpbWUgKz0gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKGNh
bnZhc0ZhY3RvcnksICoqaXQpOworICAgIHJldHVybiB0b3RhbFRpbWU7Cit9CisKK2RvdWJsZSBX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6Om1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShDYW52
YXNDb250cm9sbGVyJiBjYW52YXNGYWN0b3J5LCBjb25zdCBQYWludE1vZGUgcGFpbnRNb2RlKQor
eworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICBXZWJSZWN0
IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2Rl
RXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2Vi
Vmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplID0gdmlldy0+Y29u
dGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWludFNpemUgPSBXZWJSZWN0KDAsIDAsIGNvbnRl
bnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5o
ZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTaXplIGNhbnZh
c1NpemUgPSBXZWJTaXplKHBhaW50U2l6ZS53aWR0aCwgcGFpbnRTaXplLmhlaWdodCk7CisgICAg
Y29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIoY2FudmFzRmFjdG9yeS5j
cmVhdGVDYW52YXMoY2FudmFzU2l6ZSkpOworICAgIGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgbV93ZWJWaWV3SW1wbC0+cGFpbnQoY2FudmFz
LmdldCgpLCBwYWludFNpemUpOworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSAtIGJlZm9yZVRpbWU7Cit9CisKKworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbDo6bWVhc3VyZVBhaW50VGltZShDYW52YXNDb250cm9sbGVyJiBjYW52YXNGYWN0b3J5LCBj
b25zdCBQYWludE1vZGUgcGFpbnRNb2RlKQoreworICAgIG1fd2ViVmlld0ltcGwtPmxheW91dCgp
OworICAgIGlmICghbV93ZWJWaWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpCisgICAgICAgIHJldHVybiBtZWFzdXJlU29mdHdhcmVQYWludFRpbWUoY2FudmFzRmFjdG9y
eSwgcGFpbnRNb2RlKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fd2ViVmlld0ltcGwt
PnJvb3RHcmFwaGljc0xheWVyKCk7CisgICAgc3dpdGNoIChwYWludE1vZGUpIHsKKyAgICBjYXNl
IFBhaW50TW9kZUV2ZXJ5dGhpbmc6CisgICAgICAgIHJldHVybiBtZWFzdXJlVW5jbGlwcGVkQWNj
ZWxlcmF0ZWRQYWludFRpbWUoY2FudmFzRmFjdG9yeSwgKmxheWVyKTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5Zjg3N2QxYjk1M2MzYWYw
Y2Q1YTcxY2M5OTJhMjNjMDVhODFlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorI2RlZmluZSBXZWJWaWV3
QmVuY2htYXJrU3VwcG9ydEltcGxfaAorCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBv
cnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEdyYXBo
aWNzTGF5ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlld0ltcGw7CisK
K2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbCA6IHB1YmxpYyBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViVmlld0JlbmNobWFya1N1cHBv
cnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJ
bXBsKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwoKSB7IH0K
KworICAgIC8vIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcy4gSWYgd2UncmUgaW4gYWNjZWxl
cmF0ZWQgbW9kZSwgYSBuZXcgY2FudmFzCisgICAgLy8gaXMgY3JlYXRlZCBmb3IgZWFjaCBncmFw
aGljcyBsYXllci4gUGFpbnRNb2RlVmlld3BvcnQgaXMgbm90CisgICAgLy8gc3VwcG9ydGVkIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgeWV0LgorICAgIC8vIExheW91dCgpIHdpbGwg
YmUgY2FsbGVkIG9uIHRoZSB3ZWIgdmlldyBwcmlvciB0byBwYWludGluZy4KKyAgICB2aXJ0dWFs
IGRvdWJsZSBtZWFzdXJlUGFpbnRUaW1lKENhbnZhc0NvbnRyb2xsZXImLCBQYWludE1vZGUpIE9W
RVJSSURFOworCitwcml2YXRlOgorICAgIC8vIE1lYXN1cmVzIHRoZSB0aW1lIGluIHNlY29uZHN0
byBwYWludCB0aGUgZ2l2ZW4gZ3JhcGhpY3MgbGF5ZXIgdG8gYSBjYW52YXMKKyAgICAvLyBtYWRl
IGZyb20gdGhlIGdpdmVuIGZhY3RvcnksIGNsaXBwZWQgd2l0aCB0aGUgZ2l2ZW4gcmVjdGFuZ2xl
LgorICAgIGRvdWJsZSBtZWFzdXJlTGF5ZXJQYWludChDYW52YXNDb250cm9sbGVyJiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICAvLyBNZWFz
dXJlcyB0aGUgdGltZSBpbiBzZWNvbmRzIHRvIHBhaW50IHRoZSBnaXZlbiBncmFwaGljcyBsYXll
ciBoaWVyYXJjaHkKKyAgICAvLyB0byBjYW52YXNlcyBjcmVhdGVkIGJ5IHRoZSBjYW52YXMgZmFj
dG9yeS4KKyAgICBkb3VibGUgbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKENh
bnZhc0NvbnRyb2xsZXImLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJik7CisgICAgLy8gTWVhc3Vy
ZXMgdGhlIHRpbWUgaW4gc2Vjb25kcyB0byBwYWludCB0aGUgd3JhcHBlZCB3ZWIgdmlldyB1c2lu
ZyBzb2Z0d2FyZQorICAgIC8vIHJlbmRlcmluZywgYW5kIHRoZSBnaXZlbiBwYWludCBtb2RlCisg
ICAgZG91YmxlIG1lYXN1cmVTb2Z0d2FyZVBhaW50VGltZShDYW52YXNDb250cm9sbGVyJiwgUGFp
bnRNb2RlKTsKKworICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOworfTsKK30KKworI2Vu
ZGlmIC8vIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODM2OGQxYzI2ZTM4MWEwNmFjMThhNWNhM2Ix
NjU0OTcxMWRhYjZkZi4uMGYzMTAyNGJjOWEzODhjYjRmOWI0NWNlM2UxMGNmYTA5NTQ5ZjlmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNDA0LDYg
KzQwNCw3IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQp
CiAgICAgLCBtX3RhYnNUb0xpbmtzKGZhbHNlKQogICAgICwgbV9kcmFnU2Nyb2xsVGltZXIoYWRv
cHRQdHIobmV3IERyYWdTY3JvbGxUaW1lcikpCiAgICAgLCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVl
bihmYWxzZSkKKyAgICAsIG1fYmVuY2htYXJrQWRhcHRlcih0aGlzKQogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICAsIG1fcm9vdEdyYXBoaWNzTGF5ZXIoMCkKICAgICAsIG1f
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGZhbHNlKQpAQCAtNzQ0LDYgKzc0NSwxMSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsLCBib29sIHVzZUFuY2hvcgogfQogI2VuZGlmCiAKK1dlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0KiBXZWJWaWV3SW1wbDo6YmVuY2htYXJrU3VwcG9ydCgpCit7CisgICAgcmV0dXJuICZt
X2JlbmNobWFya0FkYXB0ZXI7Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUtleUV2ZW50
KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVCgoZXZlbnQudHlw
ZSA9PSBXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duKQpAQCAtMzQ3NCw2ICszNDgwLDExIEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYg
Y29sb3IpCiAgICAgbV9sYXllclRyZWVWaWV3LnNldEJhY2tncm91bmRDb2xvcih3ZWJEb2N1bWVu
dEJhY2tncm91bmRDb2xvcik7CiB9CiAKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJ
bXBsOjpyb290R3JhcGhpY3NMYXllcigpCit7CisgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5
ZXI7Cit9CisKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIFdlYlZp
ZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAppbmRleCBmNjU3NTA0ZjJhZGRkZGViZGEyMGJjODJmMjdlYmE1YjNhZjgy
ODgzLi4wNDkyOGExNmNmMDA5NTAzZmM3YTk4NjYwOGVhODBlOTJmY2M4YTNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNs
dWRlICJQYWdlV2lkZ2V0RGVsZWdhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldC5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMTA1LDYgKzEwNiw3IEBAIGNsYXNzIFdl
YkZyYW1lSW1wbDsKIGNsYXNzIFdlYkdlc3R1cmVFdmVudDsKIGNsYXNzIFdlYlBhZ2VQb3B1cElt
cGw7CiBjbGFzcyBXZWJQcmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0OwogY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3Mg
V2ViTW91c2VFdmVudDsKQEAgLTI5NSw2ICsyOTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFj
dGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0
YXRzKFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3Q7CisgICAgdmlydHVhbCBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydCogYmVuY2htYXJrU3VwcG9ydCgpOwogCiAgICAgLy8gV2ViTGF5ZXJUcmVlVmll
d0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpOwpAQCAtNTA2LDYgKzUw
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY3VycmVudElucHV0RXZlbnQ7CiAgICAg
fQogCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKTsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKik7CkBAIC03ODcsNiArNzkxLDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
V2ViQ29yZTo6RnJhbWU+IG1fZnVsbFNjcmVlbkZyYW1lOwogICAgIGJvb2wgbV9pc0NhbmNlbGlu
Z0Z1bGxTY3JlZW47CiAKKyAgICAvLyBMYXppbHkgY3JlYXRlZCBjb250cm9sbGVyIGZvciBtaWNy
b2JlbmNobWFya3MKKyAgICBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwgbV9iZW5jaG1hcmtB
ZGFwdGVyOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6
OkludFJlY3QgbV9yb290TGF5ZXJTY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152278</attachid>
            <date>2012-07-13 09:31:55 -0700</date>
            <delta_ts>2012-07-16 10:49:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120713093154.patch</filename>
            <type>text/plain</type>
            <size>19173</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY4ZWQyODczYzkxYWQ1MzZlYjJmODkyNDgyMjcxZDYxYTU5NDI4ZTEuLjljZTRhMjk3N2RkMTdl
ZWJmMWU2ZTJkMjNhMWM3NzEwZjA0ZWFkNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTItMDctMTMgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIEludHJvZHVjZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCBmb3Ig
cGVyZm9ybWFuY2UgZXhwZXJpbWVudHMgb24gYSByZWFsIFdlYlZpZXcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4MjcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAq
IHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmJlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgIChQYWludGlu
Z0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6
UGFpbnRpbmdDb250cm9sbGVyOjpwcmVwYXJlVG9QYWludCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0OjpQYWludGluZ0NvbnRyb2xsZXI6OnBhaW50aW5nQ29tcGxl
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6UGFpbnRpbmdD
b250cm9sbGVyOjp+UGFpbnRpbmdDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0JlbmNobWFya1N1cHBvcnQ6On5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICog
c3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFz
dXJlTGF5ZXJQYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbDo6bWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJlU29mdHdhcmVQYWludFRp
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6Om1lYXN1
cmVQYWludFRpbWUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
QmVuY2htYXJrU3VwcG9ydEltcGw6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6fldlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmJlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3SW1wbCk6
CisKIDIwMTItMDctMDkgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmVuYW1lIFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXIgdG8gV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDJmZWVjYzczODlk
M2M1ODFkNGY0M2ZiOTQ0NjAyZTNiMDdkNTMyNTMuLmQyMDY4ZDkwZjJmZDE3Y2VlZTY4M2FmMWI3
NmYwZjlhMWRjODM1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI3OSw2ICsy
NzksNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVXNlck1lZGlhQ2xpZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVXNlck1lZGlhUmVxdWVzdC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlZpZXcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdD
bGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXQuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCcsCkBAIC02NjEsNiArNjYyLDggQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRGaWVsZERlY29yYXRvckNsaWVudC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVmlkZW9MYXllci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3
SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0ltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKaW5kZXggOTY2NDJmNjY2OGRmZDU4MzM4MzEwZjNmMGJmNWYyOGJiYThm
NjFlYS4uMzA4MDI0YmE4OWFkZTU0OGU1MDM0OWMzNWM4YWViODIyMTc3NWUwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBX
ZWJOb2RlOwogY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50
OwogY2xhc3MgV2ViUHJlcmVuZGVyZXJDbGllbnQ7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydDsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVs
bENoZWNrQ2xpZW50OwpAQCAtNDYyLDYgKzQ2Myw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNh
bGwgaXMgcmVsYXRpdmVseSBleHBlbnNpdmUgaW4gdGhyZWFkZWQgbW9kZSBhcyBpdCBibG9ja3Mg
b24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0
cyhXZWJSZW5kZXJpbmdTdGF0cyYpIGNvbnN0IHsgfQogCisgICAgLy8gQmVuY2htYXJraW5nIHN1
cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2
aXJ0dWFsIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtTdXBwb3J0KCkgeyByZXR1
cm4gMDsgfQorCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlzaWJp
bGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2OWVkMzg3ZmRm
ODQ2Y2NlNjQzZmFkYjY5MGY1YjU0Y2FjYjdjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqCisgKi8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCisjZGVmaW5lIFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIFN1cHBvcnQgZm9yIGJlbmNobWFya3MgYWNjZXNzaW5nIHRoZSBXZWJWaWV3LgorY2xhc3Mg
V2ViVmlld0JlbmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGVudW0gUGFpbnRNb2RlIHsK
KyAgICAgICAgLy8gUGFpbnQgdGhlIGVudGlyZSBwYWdlLgorICAgICAgICBQYWludE1vZGVFdmVy
eXRoaW5nCisgICAgfTsKKworICAgIC8vIENvbnRyb2xsZXIgZm9yIGNyZWF0aW5nIGNhbnZhc2Vz
IHdoZXJlIG11bHRpcGxlIGNhbnZhc2VzCisgICAgLy8gbWF5IGJlIHVzZWQgZm9yIGxheWVyZWQg
cmVuZGVyaW5nIGFuZCBzaXplcyBkZWZpbmVkIGJ5IHRoZSBiZW5jaG1hcmsuCisgICAgLy8gQWxz
byBjb250YWlucyByZXBvcnRpbmcgbWV0aG9kcyBjYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0CisgICAgLy8gd2hlbiBwYWludGluZyBpcyBhYm91dCB0byBvY2N1ciBhbmQgd2hl
biBwYWludGluZyBpcyBjb21wbGV0ZS4KKyAgICBjbGFzcyBQYWludGluZ0NvbnRyb2xsZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZUNhbnZhcyhjb25z
dCBXZWJTaXplJikgPSAwOworCisgICAgICAgIC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNo
bWFrclN1cHBvcnQgd2hlbiBwYWludGluZyBpcyBhYm91dCB0bworICAgICAgICAvLyBvY2N1ci4K
KyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BhaW50KGNvbnN0IFdlYkNhbnZhcyYpIHsg
fQorCisgICAgICAgIC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgd2hl
biBwYWludGluZyBpcyBjb21wbGV0ZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50aW5nQ29t
cGxldGUoY29uc3QgV2ViQ2FudmFzJikgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIH5QYWludGluZ0NvbnRyb2xsZXIoKSB7IH0KKyAgICB9OworCisgICAgLy8gUmV0dXJucyB0
aGUgdGltZSBpbiBzZWNvbmRzIHRvIHBhaW50IG9uIG9uZSBvciBtb3JlIGNhbnZhc2VzIGNyZWF0
ZWQKKyAgICAvLyBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZmFjdG9yeS4KKyAgICB2aXJ0dWFsIGRv
dWJsZSBtZWFzdXJlUGFpbnRUaW1lKFBhaW50aW5nQ29udHJvbGxlciYsIFBhaW50TW9kZSkgPSAw
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnQoKSB7
IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMjgyZTllNzRiY2E5
NGIwNmM1YWIyYzY0MGJhMWU4MmY2YTNjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCkBAIC0wLDAg
KzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgiCisKKyNpbmNsdWRlICJG
bG9hdFNpemUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJXZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1
aWxkZXIuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJDYW52YXMuaD4KKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCit1c2luZyBXZWJDb3JlOjpGbG9hdFNpemU7Cit1c2luZyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyOwordXNpbmcgV2ViQ29yZTo6SW50UmVjdDsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2RvdWJsZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6Om1lYXN1cmVMYXllclBhaW50
KFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRpbmdDb250cm9sbGVyLCBHcmFwaGljc0xheWVyJiBs
YXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1Np
emUgPSBXZWJTaXplKGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgY29uc3QgT3du
UHRyPFdlYkNhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIocGFpbnRpbmdDb250cm9sbGVyLmNyZWF0
ZUNhbnZhcyhjYW52YXNTaXplKSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVy
KGNhbnZhcy5nZXQoKSk7CisKKyAgICBwYWludGluZ0NvbnRyb2xsZXIucHJlcGFyZVRvUGFpbnQo
KmNhbnZhcy5nZXQoKSk7CisgICAgZG91YmxlIGJlZm9yZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICBsYXllci5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhidWls
ZGVyLmNvbnRleHQoKSwgY2xpcCk7CisgICAgZG91YmxlIHRvdGFsVGltZSA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3JlVGltZTsKKyAgICBwYWludGluZ0NvbnRyb2xsZXIu
cGFpbnRpbmdDb21wbGV0ZSgqY2FudmFzLmdldCgpKTsKKyAgICByZXR1cm4gdG90YWxUaW1lOwor
fQorCitkb3VibGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJlVW5jbGlwcGVk
QWNjZWxlcmF0ZWRQYWludFRpbWUoUGFpbnRpbmdDb250cm9sbGVyJiBwYWludGluZ0NvbnRyb2xs
ZXIsIEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBs
YXllci5zaXplKCk7CisgICAgY29uc3QgSW50UmVjdCBjbGlwID0gV2ViQ29yZTo6SW50UmVjdCgw
LCAwLCBsYXllclNpemUud2lkdGgoKSwgbGF5ZXJTaXplLmhlaWdodCgpKTsKKworICAgIGRvdWJs
ZSB0b3RhbFRpbWUgPSBtZWFzdXJlTGF5ZXJQYWludChwYWludGluZ0NvbnRyb2xsZXIsIGxheWVy
LCBjbGlwKTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0g
bGF5ZXIuY2hpbGRyZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpjb25zdF9pdGVy
YXRvciBpdDsKKyAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4u
ZW5kKCk7ICsraXQpCisgICAgICAgIHRvdGFsVGltZSArPSBtZWFzdXJlVW5jbGlwcGVkQWNjZWxl
cmF0ZWRQYWludFRpbWUocGFpbnRpbmdDb250cm9sbGVyLCAqKml0KTsKKyAgICByZXR1cm4gdG90
YWxUaW1lOworfQorCitkb3VibGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJl
U29mdHdhcmVQYWludFRpbWUoUGFpbnRpbmdDb250cm9sbGVyJiBwYWludGluZ0NvbnRyb2xsZXIs
IGNvbnN0IFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAgV2ViU2l6ZSBzaXplID0gbV93ZWJW
aWV3SW1wbC0+c2l6ZSgpOworICAgIFdlYlJlY3QgcGFpbnRTaXplOworICAgIHN3aXRjaCAocGFp
bnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRoaW5nOiB7CisgICAgICAgIGlmICht
X3dlYlZpZXdJbXBsLT5wYWdlKCkgJiYgbV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5tYWluRnJhbWUo
KSkgeworICAgICAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gbV93ZWJWaWV3SW1w
bC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgICAgICAgICAgV2ViQ29yZTo6SW50
U2l6ZSBjb250ZW50c1NpemUgPSB2aWV3LT5jb250ZW50c1NpemUoKTsKKyAgICAgICAgICAgIHBh
aW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGFpbnRTaXplID0gV2Vi
UmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgfSAgIGJyZWFrOworICAg
IH0KKworICAgIGNvbnN0IFdlYlNpemUgY2FudmFzU2l6ZSA9IFdlYlNpemUocGFpbnRTaXplLndp
ZHRoLCBwYWludFNpemUuaGVpZ2h0KTsKKyAgICBjb25zdCBPd25QdHI8V2ViQ2FudmFzPiBjYW52
YXMgPSBhZG9wdFB0cihwYWludGluZ0NvbnRyb2xsZXIuY3JlYXRlQ2FudmFzKGNhbnZhc1NpemUp
KTsKKyAgICBwYWludGluZ0NvbnRyb2xsZXIucHJlcGFyZVRvUGFpbnQoKmNhbnZhcy5nZXQoKSk7
CisgICAgZG91YmxlIGJlZm9yZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
KyAgICBtX3dlYlZpZXdJbXBsLT5wYWludChjYW52YXMuZ2V0KCksIHBhaW50U2l6ZSk7CisgICAg
ZG91YmxlIHRvdGFsVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3Jl
VGltZTsKKyAgICBwYWludGluZ0NvbnRyb2xsZXIucGFpbnRpbmdDb21wbGV0ZSgqY2FudmFzLmdl
dCgpKTsKKyAgICByZXR1cm4gdG90YWxUaW1lOworfQorCisKK2RvdWJsZSBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGw6Om1lYXN1cmVQYWludFRpbWUoUGFpbnRpbmdDb250cm9sbGVyJiBwYWlu
dGluZ0NvbnRyb2xsZXIsIGNvbnN0IFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAgbV93ZWJW
aWV3SW1wbC0+bGF5b3V0KCk7CisgICAgaWYgKCFtX3dlYlZpZXdJbXBsLT5pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1lYXN1cmVTb2Z0d2FyZVBhaW50
VGltZShwYWludGluZ0NvbnRyb2xsZXIsIHBhaW50TW9kZSk7CisgICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290R3JhcGhpY3NMYXllcigpOworICAgIHN3aXRjaCAo
cGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRoaW5nOgorICAgICAgICByZXR1
cm4gbWVhc3VyZVVuY2xpcHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKHBhaW50aW5nQ29udHJvbGxl
ciwgKmxheWVyKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE4MjAwODg1OTkxZjZiYTZmNDU4ZDI1MjgxZmEzOGI4YzNkMmQ5ZTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydEltcGxfaAorI2RlZmluZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorCisjaW5j
bHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgSW50UmVjdDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbCA6IHB1YmxpYyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1w
bCkgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJWaWV3
QmVuY2htYXJrU3VwcG9ydEltcGwoKSB7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHRpbWUgaW4g
c2Vjb25kcy4gSWYgd2UncmUgaW4gYWNjZWxlcmF0ZWQgbW9kZSwgYSBuZXcgY2FudmFzCisgICAg
Ly8gaXMgY3JlYXRlZCBmb3IgZWFjaCBncmFwaGljcyBsYXllci4gUGFpbnRNb2RlVmlld3BvcnQg
aXMgbm90CisgICAgLy8gc3VwcG9ydGVkIGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUg
eWV0LgorICAgIC8vIExheW91dCgpIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSB3ZWIgdmlldyBwcmlv
ciB0byBwYWludGluZy4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtZWFzdXJlUGFpbnRUaW1lKFBhaW50
aW5nQ29udHJvbGxlciYsIFBhaW50TW9kZSkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgLy8g
TWVhc3VyZXMgdGhlIHRpbWUgaW4gc2Vjb25kc3RvIHBhaW50IHRoZSBnaXZlbiBncmFwaGljcyBs
YXllciB0byBhIGNhbnZhcworICAgIC8vIG1hZGUgZnJvbSB0aGUgZ2l2ZW4gZmFjdG9yeSwgY2xp
cHBlZCB3aXRoIHRoZSBnaXZlbiByZWN0YW5nbGUuCisgICAgZG91YmxlIG1lYXN1cmVMYXllclBh
aW50KFBhaW50aW5nQ29udHJvbGxlciYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgLy8gTWVhc3VyZXMgdGhlIHRpbWUgaW4gc2Vjb25kcyB0
byBwYWludCB0aGUgZ2l2ZW4gZ3JhcGhpY3MgbGF5ZXIgaGllcmFyY2h5CisgICAgLy8gdG8gY2Fu
dmFzZXMgY3JlYXRlZCBieSB0aGUgY2FudmFzIGZhY3RvcnkuCisgICAgZG91YmxlIG1lYXN1cmVV
bmNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShQYWludGluZ0NvbnRyb2xsZXImLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyJik7CisgICAgLy8gTWVhc3VyZXMgdGhlIHRpbWUgaW4gc2Vjb25kcyB0
byBwYWludCB0aGUgd3JhcHBlZCB3ZWIgdmlldyB1c2luZyBzb2Z0d2FyZQorICAgIC8vIHJlbmRl
cmluZywgYW5kIHRoZSBnaXZlbiBwYWludCBtb2RlCisgICAgZG91YmxlIG1lYXN1cmVTb2Z0d2Fy
ZVBhaW50VGltZShQYWludGluZ0NvbnRyb2xsZXImLCBQYWludE1vZGUpOworCisgICAgV2ViVmll
d0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OworfQorCisjZW5kaWYgLy8gV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCA4MzY4ZDFjMjZlMzgxYTA2YWMxOGE1Y2EzYjE2NTQ5NzExZGFiNmRmLi4wZjMxMDI0
YmM5YTM4OGNiNGY5YjQ1Y2UzZTEwY2ZhMDk1NDlmOWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC00MDQsNiArNDA0LDcgQEAgV2ViVmlld0ltcGw6
OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAsIG1fdGFic1RvTGlua3Mo
ZmFsc2UpCiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcgRHJhZ1Njcm9sbFRp
bWVyKSkKICAgICAsIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuKGZhbHNlKQorICAgICwgbV9iZW5j
aG1hcmtBZGFwdGVyKHRoaXMpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
ICwgbV9yb290R3JhcGhpY3NMYXllcigwKQogICAgICwgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoZmFsc2UpCkBAIC03NDQsNiArNzQ1LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGwsIGJvb2wgdXNlQW5j
aG9yCiB9CiAjZW5kaWYKIAorV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIFdlYlZpZXdJbXBsOjpi
ZW5jaG1hcmtTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gJm1fYmVuY2htYXJrQWRhcHRlcjsKK30K
KwogYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6OlJh
d0tleURvd24pCkBAIC0zNDc0LDYgKzM0ODAsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKICAgICBtX2xheWVyVHJl
ZVZpZXcuc2V0QmFja2dyb3VuZENvbG9yKHdlYkRvY3VtZW50QmFja2dyb3VuZENvbG9yKTsKIH0K
IAorV2ViQ29yZTo6R3JhcGhpY3NMYXllciogV2ViVmlld0ltcGw6OnJvb3RHcmFwaGljc0xheWVy
KCkKK3sKKyAgICByZXR1cm4gbV9yb290R3JhcGhpY3NMYXllcjsKK30KKwogI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQW5pbWF0
aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGY2
NTc1MDRmMmFkZGRkZWJkYTIwYmM4MmYyN2ViYTViM2FmODI4ODMuLjA0OTI4YTE2Y2YwMDk1MDNm
YzdhOTg2NjA4ZWE4MGU5MmZjYzhhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlBhZ2VXaWRnZXREZWxlZ2F0
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCiAjaW5jbHVkZSAi
VXNlck1lZGlhQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCkBAIC0xMDUsNiArMTA2LDcgQEAgY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2Vi
R2VzdHVyZUV2ZW50OwogY2xhc3MgV2ViUGFnZVBvcHVwSW1wbDsKIGNsYXNzIFdlYlByZXJlbmRl
cmVyQ2xpZW50OworY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnQ7CiBjbGFzcyBXZWJJbWFn
ZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtMjk1
LDYgKzI5Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2ZlckFj
dGl2ZVdoZWVsRmxpbmdBbmltYXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxGbGluZ1BhcmFtZXRl
cnMmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMoV2ViUmVuZGVyaW5nU3RhdHMm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtT
dXBwb3J0KCk7CiAKICAgICAvLyBXZWJMYXllclRyZWVWaWV3Q2xpZW50CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxCZWdpbkZyYW1lKCk7CkBAIC01MDYsNiArNTA5LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9jdXJyZW50SW5wdXRFdmVudDsKICAgICB9CiAKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICAgICB2
b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKQEAgLTc4
Nyw2ICs3OTEsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gbV9mdWxs
U2NyZWVuRnJhbWU7CiAgICAgYm9vbCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVlbjsKIAorICAgIC8v
IExhemlseSBjcmVhdGVkIGNvbnRyb2xsZXIgZm9yIG1pY3JvYmVuY2htYXJrcworICAgIFdlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0SW1wbCBtX2JlbmNobWFya0FkYXB0ZXI7CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNj
cm9sbERhbWFnZTsKICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152563</attachid>
            <date>2012-07-16 10:49:22 -0700</date>
            <delta_ts>2012-07-16 17:01:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120716104921.patch</filename>
            <type>text/plain</type>
            <size>19165</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDMxZTJjZDQ5NDFiMTZkODNjZDRmMDk2Mjhm
OThlOWIzZTE0MTM1MC4uYjg4MzMwYzI4ZDI2NjdmZjkzYWEyMDljYzQ0MDZhOTc0NTY1NGJhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNy0xNiAg
RGFuaWVsIE11cnBoeSAgPGRtdXJwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBJbnRyb2R1Y2UgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgZm9yIHBlcmZvcm1hbmNlIGV4cGVy
aW1lbnRzIG9uIGEgcmVhbCBXZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODI3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAoUGFpbnRpbmdDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50aW5nQ29udHJvbGxl
cjo6cHJlcGFyZVRvUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydDo6UGFpbnRpbmdDb250cm9sbGVyOjpwYWludGluZ0NvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50aW5nQ29udHJvbGxlcjo6flBhaW50
aW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
Ojp+V2ViVmlld0JlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZUxheWVyUGFpbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6Om1lYXN1cmVVbmNs
aXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZVNvZnR3YXJlUGFpbnRUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJlUGFpbnRUaW1lKToKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnRJ
bXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpiZW5jaG1h
cmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA3LTEzICBX
ZWkgSmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgogCiAgICAgICAgIGVuYWJsZSBUZXN0V2Vi
S2l0QVBJL3dlYmtpdF91bml0X3Rlc3RzIGFwayBvbiB4ODYgYW5kcm9pZCBwbGF0Zm9ybSBieSBh
ZGRpbmcgYWJpIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBmNjg2ODIw
MWM2MTAxYTliYjZkZmY1Njk5Mzg5YTdhMGM0OGRkMmVmLi41ZjU5MTM5Njg5OGUxNjhiYmZhOTVj
NzdhNmFmMzg2MDM5NmY3NTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0yNzks
NiArMjc5LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYUNsaWVudC5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlVzZXJNZWRpYVJlcXVlc3QuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJWaWV3LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJW
aWV3Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgnLApAQCAtNjYxLDYgKzY2Miw4
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0RmllbGREZWNvcmF0b3JDbGllbnQuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVzZXJNZWRpYVJlcXVlc3QuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlZpZGVvTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
Vmlld0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQmFzZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDNiYTVkYTI0ZmFlNmUwYzdkNmQ1NjM0MjQwNjRjMzhm
NmJmNWVlYTUuLmQwN2U0MDUxZmJjYjg1ZTY3Mzc2ZTQzZDQyNDQxZTg2M2QwMjczOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTUyLDYgKzUyLDcgQEAgY2xh
c3MgV2ViTm9kZTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lvbkNs
aWVudDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViVmlld0JlbmNobWFy
a1N1cHBvcnQ7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2Vi
U3BlbGxDaGVja0NsaWVudDsKQEAgLTQ1MCw2ICs0NTEsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhp
cyBjYWxsIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGluIHRocmVhZGVkIG1vZGUgYXMgaXQgYmxv
Y2tzIG9uIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5n
U3RhdHMoV2ViUmVuZGVyaW5nU3RhdHMmKSBjb25zdCB7IH0KIAorICAgIC8vIEJlbmNobWFya2lu
ZyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgdmlydHVhbCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogYmVuY2htYXJrU3VwcG9ydCgpIHsg
cmV0dXJuIDA7IH0KKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFNldHMgdGhlIHZp
c2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjllZDM4
N2ZkZjg0NmNjZTY0M2ZhZGI2OTBmNWI1NGNhY2I3Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaApAQCAt
MCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKgorICovCisKKyNpZm5kZWYgV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaAorI2RlZmlu
ZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDYW52
YXMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBTdXBwb3J0IGZvciBiZW5jaG1hcmtzIGFjY2Vzc2luZyB0aGUgV2ViVmlldy4KK2Ns
YXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBhaW50TW9k
ZSB7CisgICAgICAgIC8vIFBhaW50IHRoZSBlbnRpcmUgcGFnZS4KKyAgICAgICAgUGFpbnRNb2Rl
RXZlcnl0aGluZworICAgIH07CisKKyAgICAvLyBDb250cm9sbGVyIGZvciBjcmVhdGluZyBjYW52
YXNlcyB3aGVyZSBtdWx0aXBsZSBjYW52YXNlcworICAgIC8vIG1heSBiZSB1c2VkIGZvciBsYXll
cmVkIHJlbmRlcmluZyBhbmQgc2l6ZXMgZGVmaW5lZCBieSB0aGUgYmVuY2htYXJrLgorICAgIC8v
IEFsc28gY29udGFpbnMgcmVwb3J0aW5nIG1ldGhvZHMgY2FsbGVkIGJ5IHRoZSBXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydAorICAgIC8vIHdoZW4gcGFpbnRpbmcgaXMgYWJvdXQgdG8gb2NjdXIgYW5k
IHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgY2xhc3MgUGFpbnRpbmdDb250cm9sbGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgV2ViQ2FudmFzKiBjcmVhdGVDYW52YXMo
Y29uc3QgV2ViU2l6ZSYpID0gMDsKKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlZpZXdC
ZW5jaG1ha3JTdXBwb3J0IHdoZW4gcGFpbnRpbmcgaXMgYWJvdXQgdG8KKyAgICAgICAgLy8gb2Nj
dXIuCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QYWludChjb25zdCBXZWJDYW52YXMm
KSB7IH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
IHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludGlu
Z0NvbXBsZXRlKGNvbnN0IFdlYkNhbnZhcyYpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
dmlydHVhbCB+UGFpbnRpbmdDb250cm9sbGVyKCkgeyB9CisgICAgfTsKKworICAgIC8vIFJldHVy
bnMgdGhlIHRpbWUgaW4gc2Vjb25kcyB0byBwYWludCBvbiBvbmUgb3IgbW9yZSBjYW52YXNlcyBj
cmVhdGVkCisgICAgLy8gZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGZhY3RvcnkuCisgICAgdmlydHVh
bCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShQYWludGluZ0NvbnRyb2xsZXImLCBQYWludE1vZGUp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KCkgeyB9Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmRkMjJhMjg3
YzQ1NDhjYmUzMDEyMWM4OGMyYWRjMDUzNzM0Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcApAQCAt
MCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oIgorCisjaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRl
eHRCdWlsZGVyLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordXNpbmcgV2ViQ29yZTo6RmxvYXRTaXplOwordXNpbmcgV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjsKK3VzaW5nIFdlYkNvcmU6OkludFJlY3Q7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitkb3VibGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjptZWFzdXJlTGF5ZXJQ
YWludChQYWludGluZ0NvbnRyb2xsZXImIHBhaW50aW5nQ29udHJvbGxlciwgR3JhcGhpY3NMYXll
ciYgbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAgY29uc3QgV2ViU2l6ZSBjYW52
YXNTaXplID0gV2ViU2l6ZShjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpOworICAgIGNvbnN0
IE93blB0cjxXZWJDYW52YXM+IGNhbnZhcyA9IGFkb3B0UHRyKHBhaW50aW5nQ29udHJvbGxlci5j
cmVhdGVDYW52YXMoY2FudmFzU2l6ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVp
bGRlcihjYW52YXMuZ2V0KCkpOworCisgICAgcGFpbnRpbmdDb250cm9sbGVyLnByZXBhcmVUb1Bh
aW50KCpjYW52YXMuZ2V0KCkpOworICAgIGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCk7CisgICAgbGF5ZXIucGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
YnVpbGRlci5jb250ZXh0KCksIGNsaXApOworICAgIGRvdWJsZSB0b3RhbFRpbWUgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRpbWU7CisgICAgcGFpbnRpbmdDb250cm9s
bGVyLnBhaW50aW5nQ29tcGxldGUoKmNhbnZhcy5nZXQoKSk7CisgICAgcmV0dXJuIHRvdGFsVGlt
ZTsKK30KKworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVhc3VyZVVuY2xp
cHBlZEFjY2VsZXJhdGVkUGFpbnRUaW1lKFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRpbmdDb250
cm9sbGVyLCBHcmFwaGljc0xheWVyJiBsYXllcikKK3sKKyAgICBGbG9hdFNpemUgbGF5ZXJTaXpl
ID0gbGF5ZXIuc2l6ZSgpOworICAgIGNvbnN0IEludFJlY3QgY2xpcCA9IFdlYkNvcmU6OkludFJl
Y3QoMCwgMCwgbGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBk
b3VibGUgdG90YWxUaW1lID0gbWVhc3VyZUxheWVyUGFpbnQocGFpbnRpbmdDb250cm9sbGVyLCBs
YXllciwgY2xpcCk7CisKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJl
biA9IGxheWVyLmNoaWxkcmVuKCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyArK2l0KQorICAgICAgICB0b3RhbFRpbWUgKz0gbWVhc3VyZVVuY2xpcHBlZEFj
Y2VsZXJhdGVkUGFpbnRUaW1lKHBhaW50aW5nQ29udHJvbGxlciwgKippdCk7CisgICAgcmV0dXJu
IHRvdGFsVGltZTsKK30KKworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6bWVh
c3VyZVNvZnR3YXJlUGFpbnRUaW1lKFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRpbmdDb250cm9s
bGVyLCBQYWludE1vZGUgcGFpbnRNb2RlKQoreworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmll
d0ltcGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50
TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93
ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNp
emUgY29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWlu
dFNpemUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUu
aGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICB9
CisKKyAgICBjb25zdCBXZWJTaXplIGNhbnZhc1NpemUgPSBXZWJTaXplKHBhaW50U2l6ZS53aWR0
aCwgcGFpbnRTaXplLmhlaWdodCk7CisgICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFz
ID0gYWRvcHRQdHIocGFpbnRpbmdDb250cm9sbGVyLmNyZWF0ZUNhbnZhcyhjYW52YXNTaXplKSk7
CisgICAgcGFpbnRpbmdDb250cm9sbGVyLnByZXBhcmVUb1BhaW50KCpjYW52YXMuZ2V0KCkpOwor
ICAgIGRvdWJsZSBiZWZvcmVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cisg
ICAgbV93ZWJWaWV3SW1wbC0+cGFpbnQoY2FudmFzLmdldCgpLCBwYWludFNpemUpOworICAgIGRv
dWJsZSB0b3RhbFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGJlZm9yZVRp
bWU7CisgICAgcGFpbnRpbmdDb250cm9sbGVyLnBhaW50aW5nQ29tcGxldGUoKmNhbnZhcy5nZXQo
KSk7CisgICAgcmV0dXJuIHRvdGFsVGltZTsKK30KKworCitkb3VibGUgV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsOjptZWFzdXJlUGFpbnRUaW1lKFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRp
bmdDb250cm9sbGVyLCBQYWludE1vZGUgcGFpbnRNb2RlKQoreworICAgIG1fd2ViVmlld0ltcGwt
PmxheW91dCgpOworICAgIGlmICghbV93ZWJWaWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBtZWFzdXJlU29mdHdhcmVQYWludFRpbWUocGFp
bnRpbmdDb250cm9sbGVyLCBwYWludE1vZGUpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bV93ZWJWaWV3SW1wbC0+cm9vdEdyYXBoaWNzTGF5ZXIoKTsKKyAgICBzd2l0Y2ggKHBhaW50TW9k
ZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzoKKyAgICAgICAgcmV0dXJuIG1lYXN1
cmVVbmNsaXBwZWRBY2NlbGVyYXRlZFBhaW50VGltZShwYWludGluZ0NvbnRyb2xsZXIsICpsYXll
cik7CisgICAgfQorICAgIHJldHVybiAwOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xODIwMDg4NTk5MWY2YmE2ZjQ1OGQyNTI4MWZhMzhiOGMzZDJkOWU0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJ
bXBsLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBs
X2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsX2gKKworI2luY2x1ZGUgIldl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElu
dFJlY3Q7CitjbGFzcyBHcmFwaGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYlZpZXdJbXBsOworCitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwgOiBw
dWJsaWMgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpIDogbV93
ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMu
IElmIHdlJ3JlIGluIGFjY2VsZXJhdGVkIG1vZGUsIGEgbmV3IGNhbnZhcworICAgIC8vIGlzIGNy
ZWF0ZWQgZm9yIGVhY2ggZ3JhcGhpY3MgbGF5ZXIuIFBhaW50TW9kZVZpZXdwb3J0IGlzIG5vdAor
ICAgIC8vIHN1cHBvcnRlZCBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIHlldC4KKyAg
ICAvLyBMYXlvdXQoKSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3IgdG8gcGFp
bnRpbmcuCisgICAgdmlydHVhbCBkb3VibGUgbWVhc3VyZVBhaW50VGltZShQYWludGluZ0NvbnRy
b2xsZXImLCBQYWludE1vZGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIC8vIE1lYXN1cmVz
IHRoZSB0aW1lIGluIHNlY29uZHN0byBwYWludCB0aGUgZ2l2ZW4gZ3JhcGhpY3MgbGF5ZXIgdG8g
YSBjYW52YXMKKyAgICAvLyBtYWRlIGZyb20gdGhlIGdpdmVuIGZhY3RvcnksIGNsaXBwZWQgd2l0
aCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICAgIGRvdWJsZSBtZWFzdXJlTGF5ZXJQYWludChQYWlu
dGluZ0NvbnRyb2xsZXImLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIC8vIE1lYXN1cmVzIHRoZSB0aW1lIGluIHNlY29uZHMgdG8gcGFpbnQg
dGhlIGdpdmVuIGdyYXBoaWNzIGxheWVyIGhpZXJhcmNoeQorICAgIC8vIHRvIGNhbnZhc2VzIGNy
ZWF0ZWQgYnkgdGhlIGNhbnZhcyBmYWN0b3J5LgorICAgIGRvdWJsZSBtZWFzdXJlVW5jbGlwcGVk
QWNjZWxlcmF0ZWRQYWludFRpbWUoUGFpbnRpbmdDb250cm9sbGVyJiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciYpOworICAgIC8vIE1lYXN1cmVzIHRoZSB0aW1lIGluIHNlY29uZHMgdG8gcGFpbnQg
dGhlIHdyYXBwZWQgd2ViIHZpZXcgdXNpbmcgc29mdHdhcmUKKyAgICAvLyByZW5kZXJpbmcsIGFu
ZCB0aGUgZ2l2ZW4gcGFpbnQgbW9kZQorICAgIGRvdWJsZSBtZWFzdXJlU29mdHdhcmVQYWludFRp
bWUoUGFpbnRpbmdDb250cm9sbGVyJiwgUGFpbnRNb2RlKTsKKworICAgIFdlYlZpZXdJbXBsKiBt
X3dlYlZpZXdJbXBsOworfTsKK30KKworI2VuZGlmIC8vIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
NzIxYmZjMWQ2ODY3OWY1NmFkNDhkZTZlMzNkZWRmZmI0NzAxMTY2Yy4uNWQ2NGVkYjY4NzAzODMw
M2VhNzFiYmQxN2Y3YjQ5ZjE5MzU3M2JmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcApAQCAtNDA0LDYgKzQwNCw3IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3
SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAgICAgLCBtX3RhYnNUb0xpbmtzKGZhbHNlKQog
ICAgICwgbV9kcmFnU2Nyb2xsVGltZXIoYWRvcHRQdHIobmV3IERyYWdTY3JvbGxUaW1lcikpCiAg
ICAgLCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVlbihmYWxzZSkKKyAgICAsIG1fYmVuY2htYXJrQWRh
cHRlcih0aGlzKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAsIG1fcm9v
dEdyYXBoaWNzTGF5ZXIoMCkKICAgICAsIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGZhbHNlKQpAQCAtNzQ0LDYgKzc0NSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzdGFydFBhZ2VT
Y2FsZUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsLCBib29sIHVzZUFuY2hvcgogfQog
I2VuZGlmCiAKK1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBXZWJWaWV3SW1wbDo6YmVuY2htYXJr
U3VwcG9ydCgpCit7CisgICAgcmV0dXJuICZtX2JlbmNobWFya0FkYXB0ZXI7Cit9CisKIGJvb2wg
V2ViVmlld0ltcGw6OmhhbmRsZUtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50
KQogewogICAgIEFTU0VSVCgoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3du
KQpAQCAtMzQ1MSw2ICszNDU3LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEJhY2tncm91bmRD
b2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiAgICAgbV9sYXllclRyZWVWaWV3LnNl
dEJhY2tncm91bmRDb2xvcih3ZWJEb2N1bWVudEJhY2tncm91bmRDb2xvcik7CiB9CiAKK1dlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7Cit9CisKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA0NTk2ZGNhZmNh
MTM4YmNiNDk3MTViYzY5OGIyNmJjNjQwN2NmYjEyLi5kYzFmZDg5YTQ1YTRlMzVkZjBjNjVlMmVj
ZGIwOGNkMDMyYmVjZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJQYWdlV2lkZ2V0RGVsZWdhdGUuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1ZGUgIlVzZXJNZWRp
YUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApA
QCAtMTA2LDYgKzEwNyw3IEBAIGNsYXNzIFdlYkZyYW1lSW1wbDsKIGNsYXNzIFdlYkdlc3R1cmVF
dmVudDsKIGNsYXNzIFdlYlBhZ2VQb3B1cEltcGw7CiBjbGFzcyBXZWJQcmVyZW5kZXJlckNsaWVu
dDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3MgV2ViSW1hZ2U7CiBjbGFz
cyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTI5MSw2ICsyOTMs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVl
bEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJik7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0YXRzKFdlYlJlbmRlcmluZ1N0YXRzJikgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogYmVuY2htYXJrU3VwcG9ydCgp
OwogCiAgICAgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB3aWxs
QmVnaW5GcmFtZSgpOwpAQCAtNTAzLDYgKzUwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fY3VycmVudElucHV0RXZlbnQ7CiAgICAgfQogCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogcm9vdEdyYXBoaWNzTGF5ZXIoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAgICAgdm9pZCBzZXRS
b290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CkBAIC03ODQsNiArNzg4
LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IG1fZnVsbFNjcmVlbkZy
YW1lOwogICAgIGJvb2wgbV9pc0NhbmNlbGluZ0Z1bGxTY3JlZW47CiAKKyAgICAvLyBMYXppbHkg
Y3JlYXRlZCBjb250cm9sbGVyIGZvciBtaWNyb2JlbmNobWFya3MKKyAgICBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwgbV9iZW5jaG1hcmtBZGFwdGVyOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJTY3JvbGxEYW1h
Z2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152645</attachid>
            <date>2012-07-16 17:01:55 -0700</date>
            <delta_ts>2012-07-17 18:56:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120716170154.patch</filename>
            <type>text/plain</type>
            <size>19003</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggY2EwMDQ5MTY4ZGRlNjU1ZGY4ZGQ5MDcyZmQw
ZmRmMTE1ZWFiYTBlOC4uNDVkZWE3NzIzNjdmMGViZDU3YmY0Zjk4YzgzNjkxYTAxN2U1NzlmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNy0xNiAg
RGFuaWVsIE11cnBoeSAgPGRtdXJwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW50cm9kdWNl
IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBleHBlcmltZW50cyBvbiBh
IHJlYWwgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgyNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
YmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0KToKKyAgICAgICAgKFBhaW50aW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OjpQYWludGluZ0NvbnRyb2xsZXI6OnByZXBhcmVU
b1BhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50
aW5nQ29udHJvbGxlcjo6cGFpbnRpbmdDb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0OjpQYWludGluZ0NvbnRyb2xsZXI6On5QYWludGluZ0NvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6fldlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJ
bXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnNvZnR3YXJlUGFp
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1
cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpi
ZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTA3
LTEzICBFcmljIFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIEFkZCAnc2VsZi1tYW5hZ2VkJyBvcHRpb24gdG8gQ0NQcmlvcml0aXplZFRleHR1cmUgdG8g
ZW5hYmxlIHJlbmRlci1zdXJmYWNlIGFuZCBjYW52YXMgdXNlIGNhc2VzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCmluZGV4IGY2ODY4MjAxYzYxMDFhOWJiNmRmZjU2OTkzODlhN2EwYzQ4ZGQy
ZWYuLjVmNTkxMzk2ODk4ZTE2OGJiZmE5NWM3N2E2YWYzODYwMzk2Zjc1M2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKQEAgLTI3OSw2ICsyNzksNyBAQAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViVXNlck1lZGlhQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
VXNlck1lZGlhUmVxdWVzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXcuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJXaWRnZXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXRD
bGllbnQuaCcsCkBAIC02NjEsNiArNjYyLDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRl
eHRGaWVsZERlY29yYXRvckNsaWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVXNl
ck1lZGlhUmVxdWVzdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVmlkZW9MYXllci5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViVmlld0ltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggM2JhNWRh
MjRmYWU2ZTBjN2Q2ZDU2MzQyNDA2NGMzOGY2YmY1ZWVhNS4uZDA3ZTQwNTFmYmNiODVlNjczNzZl
NDNkNDI0NDFlODYzZDAyNzM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBXZWJOb2RlOwogY2xhc3MgV2ViUGFnZU92ZXJs
YXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3MgV2ViUHJlcmVuZGVyZXJDbGll
bnQ7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDsKIGNsYXNzIFdlYlJhbmdlOwogY2xh
c3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xpZW50OwpAQCAtNDUwLDYgKzQ1
MSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNhbGwgaXMgcmVsYXRpdmVseSBleHBlbnNpdmUg
aW4gdGhyZWFkZWQgbW9kZSBhcyBpdCBibG9ja3Mgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgog
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0cyYpIGNvbnN0
IHsgfQogCisgICAgLy8gQmVuY2htYXJraW5nIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2aXJ0dWFsIFdlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0KiBiZW5jaG1hcmtTdXBwb3J0KCkgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gVmlzaWJpbGl0
eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVjY2E2NGI0NzJmNzAzYzNlMmZmNzhhMjgyYzY5YWYxNWQxM2Iz
NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBXZWJWaWV3
QmVuY2htYXJrU3VwcG9ydF9oCisjZGVmaW5lIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKKwor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNp
emUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFN1cHBvcnQgZm9yIGJlbmNobWFya3Mg
YWNjZXNzaW5nIHRoZSBXZWJWaWV3LgorY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgewor
cHVibGljOgorICAgIGVudW0gUGFpbnRNb2RlIHsKKyAgICAgICAgLy8gUGFpbnQgdGhlIGVudGly
ZSBwYWdlLgorICAgICAgICBQYWludE1vZGVFdmVyeXRoaW5nCisgICAgfTsKKworICAgIC8vIENv
bnRyb2xsZXIgZm9yIGNyZWF0aW5nIGNhbnZhc2VzIHdoZXJlIG11bHRpcGxlIGNhbnZhc2VzCisg
ICAgLy8gbWF5IGJlIHVzZWQgZm9yIGxheWVyZWQgcmVuZGVyaW5nIGFuZCBzaXplcyBkZWZpbmVk
IGJ5IHRoZSBiZW5jaG1hcmsuCisgICAgLy8gQWxzbyBjb250YWlucyByZXBvcnRpbmcgbWV0aG9k
cyBjYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0CisgICAgLy8gd2hlbiBwYWlu
dGluZyBpcyBhYm91dCB0byBvY2N1ciBhbmQgd2hlbiBwYWludGluZyBpcyBjb21wbGV0ZS4KKyAg
ICBjbGFzcyBQYWludGluZ0NvbnRyb2xsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCBXZWJDYW52YXMqIGNyZWF0ZUNhbnZhcyhjb25zdCBXZWJTaXplJikgPSAwOworCisgICAgICAg
IC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFrclN1cHBvcnQgd2hlbiBwYWludGluZyBp
cyBhYm91dCB0bworICAgICAgICAvLyBvY2N1ci4KKyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1BhaW50KGNvbnN0IFdlYkNhbnZhcyYpIHsgfQorCisgICAgICAgIC8vIENhbGxlZCBieSB0
aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgd2hlbiBwYWludGluZyBpcyBjb21wbGV0ZS4KKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBhaW50aW5nQ29tcGxldGUoY29uc3QgV2ViQ2FudmFzJikgeyB9
CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5QYWludGluZ0NvbnRyb2xsZXIoKSB7
IH0KKyAgICB9OworCisgICAgLy8gUmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzIHRvIHBhaW50
IG9uIG9uZSBvciBtb3JlIGNhbnZhc2VzIGNyZWF0ZWQKKyAgICAvLyBmcm9tIHRoZSBnaXZlbiBj
YW52YXMgZmFjdG9yeS4KKyAgICB2aXJ0dWFsIGRvdWJsZSBwYWludChQYWludGluZ0NvbnRyb2xs
ZXImLCBQYWludE1vZGUpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0KCkgeyB9Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MjIzMjBjZTI4Y2M4ZGI1ZmUwNGIyYjBlZjM0MDIyOWExOWEwMzBiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBv
cnRJbXBsLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bC5oIgorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlICJwYWludGlu
Zy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFz
Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgV2ViQ29yZTo6RmxvYXRTaXplOwor
dXNpbmcgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjsKK3VzaW5nIFdlYkNvcmU6OkludFJlY3Q7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitkb3VibGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBs
OjpwYWludExheWVyKFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRpbmdDb250cm9sbGVyLCBHcmFw
aGljc0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBjb25zdCBXZWJT
aXplIGNhbnZhc1NpemUgPSBXZWJTaXplKGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQoKSk7Cisg
ICAgY29uc3QgT3duUHRyPFdlYkNhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIocGFpbnRpbmdDb250
cm9sbGVyLmNyZWF0ZUNhbnZhcyhjYW52YXNTaXplKSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVp
bGRlciBidWlsZGVyKGNhbnZhcy5nZXQoKSk7CisKKyAgICBwYWludGluZ0NvbnRyb2xsZXIucHJl
cGFyZVRvUGFpbnQoKmNhbnZhcy5nZXQoKSk7CisgICAgZG91YmxlIGJlZm9yZVRpbWUgPSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBsYXllci5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhidWlsZGVyLmNvbnRleHQoKSwgY2xpcCk7CisgICAgZG91YmxlIHRvdGFsVGltZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gYmVmb3JlVGltZTsKKyAgICBwYWludGlu
Z0NvbnRyb2xsZXIucGFpbnRpbmdDb21wbGV0ZSgqY2FudmFzLmdldCgpKTsKKyAgICByZXR1cm4g
dG90YWxUaW1lOworfQorCitkb3VibGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjphY2Nl
bGVyYXRlZFBhaW50VW5jbGlwcGVkKFBhaW50aW5nQ29udHJvbGxlciYgcGFpbnRpbmdDb250cm9s
bGVyLCBHcmFwaGljc0xheWVyJiBsYXllcikKK3sKKyAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0g
bGF5ZXIuc2l6ZSgpOworICAgIGNvbnN0IEludFJlY3QgY2xpcCA9IFdlYkNvcmU6OkludFJlY3Qo
MCwgMCwgbGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBkb3Vi
bGUgdG90YWxUaW1lID0gcGFpbnRMYXllcihwYWludGluZ0NvbnRyb2xsZXIsIGxheWVyLCBjbGlw
KTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0gbGF5ZXIu
Y2hpbGRyZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpjb25zdF9pdGVyYXRvciBp
dDsKKyAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7
ICsraXQpCisgICAgICAgIHRvdGFsVGltZSArPSBhY2NlbGVyYXRlZFBhaW50VW5jbGlwcGVkKHBh
aW50aW5nQ29udHJvbGxlciwgKippdCk7CisgICAgcmV0dXJuIHRvdGFsVGltZTsKK30KKworZG91
YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6c29mdHdhcmVQYWludChQYWludGluZ0Nv
bnRyb2xsZXImIHBhaW50aW5nQ29udHJvbGxlciwgUGFpbnRNb2RlIHBhaW50TW9kZSkKK3sKKyAg
ICBXZWJTaXplIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAgV2ViUmVjdCBwYWlu
dFNpemU7CisgICAgc3dpdGNoIChwYWludE1vZGUpIHsKKyAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5
dGhpbmc6IHsKKyAgICAgICAgaWYgKG1fd2ViVmlld0ltcGwtPnBhZ2UoKSAmJiBtX3dlYlZpZXdJ
bXBsLT5wYWdlKCktPm1haW5GcmFtZSgpKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Cisg
ICAgICAgICAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHZpZXctPmNvbnRlbnRz
U2l6ZSgpOworICAgICAgICAgICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBjb250ZW50c1Np
emUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBwYWludFNpemUgPSBXZWJSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0
KTsKKyAgICB9ICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc3QgV2ViU2l6ZSBjYW52YXNTaXpl
ID0gV2ViU2l6ZShwYWludFNpemUud2lkdGgsIHBhaW50U2l6ZS5oZWlnaHQpOworICAgIGNvbnN0
IE93blB0cjxXZWJDYW52YXM+IGNhbnZhcyA9IGFkb3B0UHRyKHBhaW50aW5nQ29udHJvbGxlci5j
cmVhdGVDYW52YXMoY2FudmFzU2l6ZSkpOworICAgIHBhaW50aW5nQ29udHJvbGxlci5wcmVwYXJl
VG9QYWludCgqY2FudmFzLmdldCgpKTsKKyAgICBkb3VibGUgYmVmb3JlVGltZSA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcy5n
ZXQoKSwgcGFpbnRTaXplKTsKKyAgICBkb3VibGUgdG90YWxUaW1lID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkgLSBiZWZvcmVUaW1lOworICAgIHBhaW50aW5nQ29udHJvbGxlci5wYWlu
dGluZ0NvbXBsZXRlKCpjYW52YXMuZ2V0KCkpOworICAgIHJldHVybiB0b3RhbFRpbWU7Cit9CisK
KworZG91YmxlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6cGFpbnQoUGFpbnRpbmdDb250
cm9sbGVyJiBwYWludGluZ0NvbnRyb2xsZXIsIFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAg
bV93ZWJWaWV3SW1wbC0+bGF5b3V0KCk7CisgICAgaWYgKCFtX3dlYlZpZXdJbXBsLT5pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIHNvZnR3YXJlUGFpbnQo
cGFpbnRpbmdDb250cm9sbGVyLCBwYWludE1vZGUpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbV93ZWJWaWV3SW1wbC0+cm9vdEdyYXBoaWNzTGF5ZXIoKTsKKyAgICBzd2l0Y2ggKHBhaW50
TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzoKKyAgICAgICAgcmV0dXJuIGFj
Y2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQocGFpbnRpbmdDb250cm9sbGVyLCAqbGF5ZXIpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEyMWEw
NjdmY2UwZmJkMWNjM2ZiYjY2MWNmOGQ4MmFhOGEzMWU2NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbF9oCisjZGVm
aW5lIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbF9oCisKKyNpbmNsdWRlICJXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0Owor
Y2xhc3MgR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJW
aWV3SW1wbDsKKworY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsIDogcHVibGljIFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKSA6IG1fd2ViVmlld0lt
cGwod2ViVmlld0ltcGwpIHsgfQorICAgIHZpcnR1YWwgfldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbCgpIHsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgdGltZSBpbiBzZWNvbmRzLiBJZiB3ZSdy
ZSBpbiBhY2NlbGVyYXRlZCBtb2RlLCBhIG5ldyBjYW52YXMKKyAgICAvLyBpcyBjcmVhdGVkIGZv
ciBlYWNoIGdyYXBoaWNzIGxheWVyLiBQYWludE1vZGVWaWV3cG9ydCBpcyBub3QKKyAgICAvLyBz
dXBwb3J0ZWQgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSB5ZXQuCisgICAgLy8gTGF5
b3V0KCkgd2lsbCBiZSBjYWxsZWQgb24gdGhlIHdlYiB2aWV3IHByaW9yIHRvIHBhaW50aW5nLgor
ICAgIHZpcnR1YWwgZG91YmxlIHBhaW50KFBhaW50aW5nQ29udHJvbGxlciYsIFBhaW50TW9kZSkg
T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgLy8gTWVhc3VyZXMgdGhlIHRpbWUgaW4gc2Vjb25k
c3RvIHBhaW50IHRoZSBnaXZlbiBncmFwaGljcyBsYXllciB0byBhIGNhbnZhcworICAgIC8vIG1h
ZGUgZnJvbSB0aGUgZ2l2ZW4gZmFjdG9yeSwgY2xpcHBlZCB3aXRoIHRoZSBnaXZlbiByZWN0YW5n
bGUuCisgICAgZG91YmxlIHBhaW50TGF5ZXIoUGFpbnRpbmdDb250cm9sbGVyJiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICAvLyBNZWFzdXJl
cyB0aGUgdGltZSBpbiBzZWNvbmRzIHRvIHBhaW50IHRoZSBnaXZlbiBncmFwaGljcyBsYXllciBo
aWVyYXJjaHkKKyAgICAvLyB0byBjYW52YXNlcyBjcmVhdGVkIGJ5IHRoZSBjYW52YXMgZmFjdG9y
eS4KKyAgICBkb3VibGUgYWNjZWxlcmF0ZWRQYWludFVuY2xpcHBlZChQYWludGluZ0NvbnRyb2xs
ZXImLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJik7CisgICAgLy8gTWVhc3VyZXMgdGhlIHRpbWUg
aW4gc2Vjb25kcyB0byBwYWludCB0aGUgd3JhcHBlZCB3ZWIgdmlldyB1c2luZyBzb2Z0d2FyZQor
ICAgIC8vIHJlbmRlcmluZywgYW5kIHRoZSBnaXZlbiBwYWludCBtb2RlCisgICAgZG91YmxlIHNv
ZnR3YXJlUGFpbnQoUGFpbnRpbmdDb250cm9sbGVyJiwgUGFpbnRNb2RlKTsKKworICAgIFdlYlZp
ZXdJbXBsKiBtX3dlYlZpZXdJbXBsOworfTsKK30KKworI2VuZGlmIC8vIFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKaW5kZXggNzIxYmZjMWQ2ODY3OWY1NmFkNDhkZTZlMzNkZWRmZmI0NzAxMTY2Yy4uNWQ2NGVk
YjY4NzAzODMwM2VhNzFiYmQxN2Y3YjQ5ZjE5MzU3M2JmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNDA0LDYgKzQwNCw3IEBAIFdlYlZpZXdJbXBs
OjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAgICAgLCBtX3RhYnNUb0xpbmtz
KGZhbHNlKQogICAgICwgbV9kcmFnU2Nyb2xsVGltZXIoYWRvcHRQdHIobmV3IERyYWdTY3JvbGxU
aW1lcikpCiAgICAgLCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVlbihmYWxzZSkKKyAgICAsIG1fYmVu
Y2htYXJrQWRhcHRlcih0aGlzKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICAsIG1fcm9vdEdyYXBoaWNzTGF5ZXIoMCkKICAgICAsIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKGZhbHNlKQpAQCAtNzQ0LDYgKzc0NSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpz
dGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsLCBib29sIHVzZUFu
Y2hvcgogfQogI2VuZGlmCiAKK1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBXZWJWaWV3SW1wbDo6
YmVuY2htYXJrU3VwcG9ydCgpCit7CisgICAgcmV0dXJuICZtX2JlbmNobWFya0FkYXB0ZXI7Cit9
CisKIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmIGV2ZW50KQogewogICAgIEFTU0VSVCgoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpS
YXdLZXlEb3duKQpAQCAtMzQ1MSw2ICszNDU3LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiAgICAgbV9sYXllclRy
ZWVWaWV3LnNldEJhY2tncm91bmRDb2xvcih3ZWJEb2N1bWVudEJhY2tncm91bmRDb2xvcik7CiB9
CiAKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXll
cigpCit7CisgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7Cit9CisKICNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1h
dGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA0
NTk2ZGNhZmNhMTM4YmNiNDk3MTViYzY5OGIyNmJjNjQwN2NmYjEyLi5kYzFmZDg5YTQ1YTRlMzVk
ZjBjNjVlMmVjZGIwOGNkMDMyYmVjZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJQYWdlV2lkZ2V0RGVsZWdh
dGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgogI2luY2x1ZGUg
IlVzZXJNZWRpYUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIApAQCAtMTA2LDYgKzEwNyw3IEBAIGNsYXNzIFdlYkZyYW1lSW1wbDsKIGNsYXNzIFdl
Ykdlc3R1cmVFdmVudDsKIGNsYXNzIFdlYlBhZ2VQb3B1cEltcGw7CiBjbGFzcyBXZWJQcmVyZW5k
ZXJlckNsaWVudDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3MgV2ViSW1h
Z2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VFdmVudDsKQEAgLTI5
MSw2ICsyOTMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJB
Y3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0
ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmluZ1N0YXRzKFdlYlJlbmRlcmluZ1N0YXRz
JikgY29uc3Q7CisgICAgdmlydHVhbCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogYmVuY2htYXJr
U3VwcG9ydCgpOwogCiAgICAgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwg
dm9pZCB3aWxsQmVnaW5GcmFtZSgpOwpAQCAtNTAzLDYgKzUwNiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudElucHV0RXZlbnQ7CiAgICAgfQogCisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogcm9vdEdyYXBoaWNzTGF5ZXIoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAgICAg
dm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CkBAIC03
ODQsNiArNzg4LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IG1fZnVs
bFNjcmVlbkZyYW1lOwogICAgIGJvb2wgbV9pc0NhbmNlbGluZ0Z1bGxTY3JlZW47CiAKKyAgICAv
LyBMYXppbHkgY3JlYXRlZCBjb250cm9sbGVyIGZvciBtaWNyb2JlbmNobWFya3MKKyAgICBXZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwgbV9iZW5jaG1hcmtBZGFwdGVyOworCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJT
Y3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152900</attachid>
            <date>2012-07-17 18:56:19 -0700</date>
            <delta_ts>2012-07-18 11:24:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120717185618.patch</filename>
            <type>text/plain</type>
            <size>18089</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjkyMDBmMDAwMjAyYWYzOTM1YTcwMDY4MTNm
YjEwMmUzYjBlOWQ4OC4uYThlNzk2YWU1ZGNjNGZlNGEyMmYyOWVmYmZkNzBiZDU0YTM3YzU0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNy0xNyAg
RGFuaWVsIE11cnBoeSAgPGRtdXJwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW50cm9kdWNl
IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBleHBlcmltZW50cyBvbiBh
IHJlYWwgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgyNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
YmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0KToKKyAgICAgICAgKFBhaW50Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp3aWxsUGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6UGFpbnRDbGllbnQ6OmRpZFBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp+
UGFpbnRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6
fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50TGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNs
aXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnNv
ZnR3YXJlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGw6OnBhaW50KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgor
CiAyMDEyLTA3LTE3ICBWaXZlayBHYWxhdGFnZSAgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXI6OmNv
bm5lY3RGcm9udGVuZCgpIHRvIGFjY2VwdCBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggZjY4NjgyMDFjNjEwMWE5YmI2ZGZmNTY5OTM4OWE3
YTBjNDhkZDJlZi4uNWY1OTEzOTY4OThlMTY4YmJmYTk1Yzc3YTZhZjM4NjAzOTZmNzUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjc5LDYgKzI3OSw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJVc2VyTWVkaWFDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Vmlldy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVmlld0NsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYldpZGdldC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YldpZGdldENsaWVudC5oJywKQEAgLTY2MSw2ICs2NjIsOCBAQAogICAgICAgICAgICAgICAgICdz
cmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWRl
b0xheWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldv
cmtlckJhc2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRl
eCAzYmE1ZGEyNGZhZTZlMGM3ZDZkNTYzNDI0MDY0YzM4ZjZiZjVlZWE1Li5hYWI2YTQ0ZDE5MmQ4
YWZiOTY4NjQwOTI5MDY1ZGRmMTI1N2NhZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQ
YWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7CiBjbGFzcyBXZWJQcmVyZW5k
ZXJlckNsaWVudDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3MgV2ViUmFu
Z2U7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7CkBAIC00
NTAsNiArNDUxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNhbGwgaXMgcmVsYXRpdmVseSBl
eHBlbnNpdmUgaW4gdGhyZWFkZWQgbW9kZSBhcyBpdCBibG9ja3Mgb24gdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0
cyYpIGNvbnN0IHsgfQogCisgICAgLy8gQmVuY2htYXJraW5nIHN1cHBvcnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQqIGJlbmNobWFya1N1cHBvcnQoKSB7IHJldHVybiAwOyB9CisKICAgICAv
LyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJW
aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhY2UzNjIyNWU4OTAxMWFhYTMwMDUxMjY2
MzcxZmZkOWI5ODhlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZu
ZGVmIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFya1N1
cHBvcnRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VwcG9ydCBmb3Ig
YmVuY2htYXJrcyBhY2Nlc3NpbmcgdGhlIFdlYlZpZXcuCitjbGFzcyBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydCB7CitwdWJsaWM6CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgICAvLyBQYWlu
dCB0aGUgZW50aXJlIHBhZ2UuCisgICAgICAgIFBhaW50TW9kZUV2ZXJ5dGhpbmcKKyAgICB9Owor
CisgICAgLy8gQ2xpZW50IGZvciBjcmVhdGluZyBjYW52YXNlcyB3aGVyZSBtdWx0aXBsZSBjYW52
YXNlcworICAgIC8vIG1heSBiZSB1c2VkIGZvciBsYXllcmVkIHJlbmRlcmluZyBhbmQgc2l6ZXMg
ZGVmaW5lZCBieSB0aGUgYmVuY2htYXJrLgorICAgIC8vIEFsc28gY29udGFpbnMgcmVwb3J0aW5n
IG1ldGhvZHMgY2FsbGVkIGJ5IHRoZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydAorICAgIC8vIHdo
ZW4gcGFpbnRpbmcgaXMgYWJvdXQgdG8gb2NjdXIgYW5kIHdoZW4gcGFpbnRpbmcgaXMgY29tcGxl
dGUuCisgICAgY2xhc3MgUGFpbnRDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCBXZWJDYW52YXMqIGNyZWF0ZUNhbnZhcyhjb25zdCBXZWJTaXplJikgPSAwOworCisgICAgICAg
IC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgd2hlbiBwYWludGluZyBp
cyBhYm91dCB0bworICAgICAgICAvLyBvY2N1ci4KKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQ
YWludChjb25zdCBXZWJDYW52YXMmKSB7IH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0IHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRQYWludChjb25zdCBXZWJDYW52YXMmKSB7IH0KKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZpcnR1YWwgflBhaW50Q2xpZW50KCkgeyB9CisgICAgfTsKKworICAgIC8v
IFBhaW50cyB0aGUgd2ViIHZpZXcgb24gY2FudmFzZXMgY3JlYXRlZCBmcm9tIHRoZSBjbGllbnQs
IHVzaW5nIHRoZSBnaXZlbgorICAgIC8vIHBhaW50IG1vZGUuCisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50Q2xpZW50KiwgUGFpbnRNb2RlKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydCgpIHsgfQorfTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGZmOWFhMjFkZGMzZDkzMmY3ZjJhZGYzZjA0MjU4Mzg2MzM2OWE1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5j
bHVkZSAicGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgorCisjaW5jbHVkZSA8cHVi
bGljL1dlYkNhbnZhcy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIFdlYkNvcmU6
OkZsb2F0U2l6ZTsKK3VzaW5nIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI7Cit1c2luZyBXZWJDb3Jl
OjpJbnRSZWN0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGw6OnBhaW50TGF5ZXIoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBHcmFwaGlj
c0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBXZWJTaXplIGNhbnZh
c1NpemUoY2xpcC53aWR0aCgpLCBjbGlwLmhlaWdodCgpKTsKKyAgICBPd25QdHI8V2ViQ2FudmFz
PiBjYW52YXMgPSBhZG9wdFB0cihwYWludENsaWVudC0+Y3JlYXRlQ2FudmFzKGNhbnZhc1NpemUp
KTsKKyAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzLmdldCgpKTsKKwor
ICAgIHBhaW50Q2xpZW50LT53aWxsUGFpbnQoKmNhbnZhcy5nZXQoKSk7CisgICAgbGF5ZXIucGFp
bnRHcmFwaGljc0xheWVyQ29udGVudHMoYnVpbGRlci5jb250ZXh0KCksIGNsaXApOworICAgIHBh
aW50Q2xpZW50LT5kaWRQYWludCgqY2FudmFzLmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQoUGFpbnRDbGllbnQq
IHBhaW50Q2xpZW50LCBHcmFwaGljc0xheWVyJiBsYXllcikKK3sKKyAgICBGbG9hdFNpemUgbGF5
ZXJTaXplID0gbGF5ZXIuc2l6ZSgpOworICAgIEludFJlY3QgY2xpcCA9IFdlYkNvcmU6OkludFJl
Y3QoMCwgMCwgbGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBw
YWludExheWVyKHBhaW50Q2xpZW50LCBsYXllciwgY2xpcCk7CisKKyAgICBjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbiA9IGxheWVyLmNoaWxkcmVuKCk7CisgICAgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGNoaWxk
cmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KQorICAgICAgICBhY2NlbGVy
YXRlZFBhaW50VW5jbGlwcGVkKHBhaW50Q2xpZW50LCAqKml0KTsKK30KKwordm9pZCBXZWJWaWV3
QmVuY2htYXJrU3VwcG9ydEltcGw6OnNvZnR3YXJlUGFpbnQoUGFpbnRDbGllbnQqIHBhaW50Q2xp
ZW50LCBQYWludE1vZGUgcGFpbnRNb2RlKQoreworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmll
d0ltcGwtPnNpemUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50
TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzogeworICAgICAgICBpZiAobV93
ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IG1fd2ViVmlld0ltcGwt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFNp
emUgY29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWlu
dFNpemUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUu
aGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIH0gICBicmVhazsKKyAgICB9
CisKKyAgICBXZWJTaXplIGNhbnZhc1NpemUocGFpbnRTaXplLndpZHRoLCBwYWludFNpemUuaGVp
Z2h0KTsKKyAgICBPd25QdHI8V2ViQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihwYWludENsaWVu
dC0+Y3JlYXRlQ2FudmFzKGNhbnZhc1NpemUpKTsKKyAgICBwYWludENsaWVudC0+d2lsbFBhaW50
KCpjYW52YXMuZ2V0KCkpOworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcy5nZXQoKSwg
cGFpbnRTaXplKTsKKyAgICBwYWludENsaWVudC0+ZGlkUGFpbnQoKmNhbnZhcy5nZXQoKSk7Cit9
CisKK3ZvaWQgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjpwYWludChQYWludENsaWVudCog
cGFpbnRDbGllbnQsIFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAgbV93ZWJWaWV3SW1wbC0+
bGF5b3V0KCk7CisgICAgaWYgKCFtX3dlYlZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIHNvZnR3YXJlUGFpbnQocGFpbnRDbGllbnQsIHBh
aW50TW9kZSk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290
R3JhcGhpY3NMYXllcigpOworICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWlu
dE1vZGVFdmVyeXRoaW5nOgorICAgICAgICBhY2NlbGVyYXRlZFBhaW50VW5jbGlwcGVkKHBhaW50
Q2xpZW50LCAqbGF5ZXIpOworICAgIH0KK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzI0M2RlNmY2ZjUwMmVkMGU0NzFjZjEzMWE3MTIxODQ5N2U5ZTBlMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbF9o
CisjZGVmaW5lIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbF9oCisKKyNpbmNsdWRlICJXZWJW
aWV3QmVuY2htYXJrU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRS
ZWN0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBXZWJWaWV3SW1wbDsKKworY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsIDogcHVi
bGljIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsKSA6IG1fd2Vi
Vmlld0ltcGwod2ViVmlld0ltcGwpIHsgfQorICAgIHZpcnR1YWwgfldlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0SW1wbCgpIHsgfQorCisgICAgLy8gUGFpbnRzIHRoZSBXZWJWaWV3SW1wbCBvbnRvIGNh
bnZhc2VzIGNyZWF0ZWQgZnJvbSB0aGUgUGFpbnRDbGllbnQuCisgICAgLy8gSWYgd2UncmUgaW4g
YWNjZWxlcmF0ZWQgbW9kZSwgYSBuZXcgY2FudmFzIGlzIGNyZWF0ZWQgZm9yIGVhY2ggZ3JhcGhp
Y3MKKyAgICAvLyBsYXllci4gTGF5b3V0KCkgd2lsbCBiZSBjYWxsZWQgb24gdGhlIHdlYiB2aWV3
IHByaW9yIHRvIHBhaW50aW5nLgorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludENsaWVudCos
IFBhaW50TW9kZSkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgLy8gUGFpbnRzIHRoZSBnaXZl
biBncmFwaGljcyBsYXllciB0byBhIGNhbnZhcyBtYWRlIGZyb20gdGhlIGdpdmVuIGZhY3Rvcnks
CisgICAgLy8gY2xpcHBlZCB3aXRoIHRoZSBnaXZlbiByZWN0YW5nbGUuCisgICAgdm9pZCBwYWlu
dExheWVyKFBhaW50Q2xpZW50KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICAvLyBQYWludHMgdGhlIGdpdmVuIGdyYXBoaWNzIGxheWVyIGhp
ZXJhcmNoeSB0byBjYW52YXNlcyBjcmVhdGVkIGJ5IHRoZQorICAgIC8vIGNhbnZhcyBmYWN0b3J5
LgorICAgIHZvaWQgYWNjZWxlcmF0ZWRQYWludFVuY2xpcHBlZChQYWludENsaWVudCosIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXImKTsKKyAgICAvLyBQYWludHMgdGhlIFdlYlZpZXdJbXBsIHVzaW5n
IHNvZnR3YXJlIHJlbmRlcmluZywgd2l0aCB0aGUgZ2l2ZW4gcGFpbnQgbW9kZQorICAgIHZvaWQg
c29mdHdhcmVQYWludChQYWludENsaWVudCosIFBhaW50TW9kZSk7CisKKyAgICBXZWJWaWV3SW1w
bCogbV93ZWJWaWV3SW1wbDsKK307Cit9CisKKyNlbmRpZiAvLyBXZWJWaWV3QmVuY2htYXJrU3Vw
cG9ydEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IGUzNDkxNTFmYWQxNDQ3OTgyMGVlYzY2ZmM2M2YxZDg0NWJjNmE2YWMuLjc3ZGQyNGVkMDdl
NTNhY2IyYzhiYTBhZDY5OTFjMTg0MGYxNmNjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTQwNSw2ICs0MDUsNyBAQCBXZWJWaWV3SW1wbDo6V2Vi
Vmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogICAgICwgbV90YWJzVG9MaW5rcyhmYWxz
ZSkKICAgICAsIG1fZHJhZ1Njcm9sbFRpbWVyKGFkb3B0UHRyKG5ldyBEcmFnU2Nyb2xsVGltZXIp
KQogICAgICwgbV9pc0NhbmNlbGluZ0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX2JlbmNobWFy
a1N1cHBvcnQodGhpcykKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBt
X3Jvb3RHcmFwaGljc0xheWVyKDApCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZShmYWxzZSkKQEAgLTc1Miw2ICs3NTMsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwgYm9vbCB1c2VBbmNob3IK
IH0KICNlbmRpZgogCitXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogV2ViVmlld0ltcGw6OmJlbmNo
bWFya1N1cHBvcnQoKQoreworICAgIHJldHVybiAmbV9iZW5jaG1hcmtTdXBwb3J0OworfQorCiBi
b29sIFdlYlZpZXdJbXBsOjpoYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBl
dmVudCkKIHsKICAgICBBU1NFUlQoKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5
RG93bikKQEAgLTM0NTksNiArMzQ2NSwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogICAgIG1fbGF5ZXJUcmVlVmll
dy5zZXRCYWNrZ3JvdW5kQ29sb3Iod2ViRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOwogfQogCitX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBXZWJWaWV3SW1wbDo6cm9vdEdyYXBoaWNzTGF5ZXIoKQor
eworICAgIHJldHVybiBtX3Jvb3RHcmFwaGljc0xheWVyOworfQorCiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24o
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggOGY2YmRm
NDBiODIxZDFhYmM2YWJkYWYwYzdiZTE4YmRlMDJiMWE1MC4uYTk3YTIwMTViZTBhNDAxOGE5Mzk3
N2Q5M2Q4Mzc4NmNjMzE2ODlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiUGFnZVdpZGdldERlbGVnYXRlLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJVc2Vy
TWVkaWFDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBs
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKQEAgLTEwNiw2ICsxMDcsNyBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiBjbGFzcyBXZWJHZXN0
dXJlRXZlbnQ7CiBjbGFzcyBXZWJQYWdlUG9wdXBJbXBsOwogY2xhc3MgV2ViUHJlcmVuZGVyZXJD
bGllbnQ7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDsKIGNsYXNzIFdlYkltYWdlOwog
Y2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0yOTEsNiAr
MjkzLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZl
V2hlZWxGbGluZ0FuaW1hdGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYp
OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0cyYpIGNv
bnN0OworICAgIHZpcnR1YWwgV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIGJlbmNobWFya1N1cHBv
cnQoKTsKIAogICAgIC8vIFdlYkxheWVyVHJlZVZpZXdDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlZ2luRnJhbWUoKTsKQEAgLTUwMyw2ICs1MDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRJbnB1dEV2ZW50OwogICAgIH0KIAorICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIHJvb3RHcmFwaGljc0xheWVyKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIHZvaWQg
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwpAQCAtNzg0LDYg
Kzc4OCw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBtX2Z1bGxTY3Jl
ZW5GcmFtZTsKICAgICBib29sIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuOwogCisgICAgV2ViVmll
d0JlbmNobWFya1N1cHBvcnRJbXBsIG1fYmVuY2htYXJrU3VwcG9ydDsKKwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Ny
b2xsRGFtYWdlOwogICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153054</attachid>
            <date>2012-07-18 11:22:27 -0700</date>
            <delta_ts>2012-07-20 12:21:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120718112227.patch</filename>
            <type>text/plain</type>
            <size>17796</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjkyMDBmMDAwMjAyYWYzOTM1YTcwMDY4MTNm
YjEwMmUzYjBlOWQ4OC4uYThlNzk2YWU1ZGNjNGZlNGEyMmYyOWVmYmZkNzBiZDU0YTM3YzU0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNy0xNyAg
RGFuaWVsIE11cnBoeSAgPGRtdXJwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW50cm9kdWNl
IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBleHBlcmltZW50cyBvbiBh
IHJlYWwgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgyNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
YmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0KToKKyAgICAgICAgKFBhaW50Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp3aWxsUGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6UGFpbnRDbGllbnQ6OmRpZFBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp+
UGFpbnRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6
fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50TGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNs
aXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnNv
ZnR3YXJlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGw6OnBhaW50KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgor
CiAyMDEyLTA3LTE3ICBWaXZlayBHYWxhdGFnZSAgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXI6OmNv
bm5lY3RGcm9udGVuZCgpIHRvIGFjY2VwdCBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggZjY4NjgyMDFjNjEwMWE5YmI2ZGZmNTY5OTM4OWE3
YTBjNDhkZDJlZi4uNWY1OTEzOTY4OThlMTY4YmJmYTk1Yzc3YTZhZjM4NjAzOTZmNzUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjc5LDYgKzI3OSw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJVc2VyTWVkaWFDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Vmlldy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVmlld0NsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYldpZGdldC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YldpZGdldENsaWVudC5oJywKQEAgLTY2MSw2ICs2NjIsOCBAQAogICAgICAgICAgICAgICAgICdz
cmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJVc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWRl
b0xheWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlZpZXdJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldv
cmtlckJhc2UuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRl
eCAzYmE1ZGEyNGZhZTZlMGM3ZDZkNTYzNDI0MDY0YzM4ZjZiZjVlZWE1Li5hYWI2YTQ0ZDE5MmQ4
YWZiOTY4NjQwOTI5MDY1ZGRmMTI1N2NhZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQ
YWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7CiBjbGFzcyBXZWJQcmVyZW5k
ZXJlckNsaWVudDsKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3MgV2ViUmFu
Z2U7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7CkBAIC00
NTAsNiArNDUxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNhbGwgaXMgcmVsYXRpdmVseSBl
eHBlbnNpdmUgaW4gdGhyZWFkZWQgbW9kZSBhcyBpdCBibG9ja3Mgb24gdGhlIGNvbXBvc2l0b3Ig
dGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0
cyYpIGNvbnN0IHsgfQogCisgICAgLy8gQmVuY2htYXJraW5nIHN1cHBvcnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQqIGJlbmNobWFya1N1cHBvcnQoKSB7IHJldHVybiAwOyB9CisKICAgICAv
LyBWaXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJW
aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhhY2UzNjIyNWU4OTAxMWFhYTMwMDUxMjY2
MzcxZmZkOWI5ODhlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZu
ZGVmIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFya1N1
cHBvcnRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VwcG9ydCBmb3Ig
YmVuY2htYXJrcyBhY2Nlc3NpbmcgdGhlIFdlYlZpZXcuCitjbGFzcyBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydCB7CitwdWJsaWM6CisgICAgZW51bSBQYWludE1vZGUgeworICAgICAgICAvLyBQYWlu
dCB0aGUgZW50aXJlIHBhZ2UuCisgICAgICAgIFBhaW50TW9kZUV2ZXJ5dGhpbmcKKyAgICB9Owor
CisgICAgLy8gQ2xpZW50IGZvciBjcmVhdGluZyBjYW52YXNlcyB3aGVyZSBtdWx0aXBsZSBjYW52
YXNlcworICAgIC8vIG1heSBiZSB1c2VkIGZvciBsYXllcmVkIHJlbmRlcmluZyBhbmQgc2l6ZXMg
ZGVmaW5lZCBieSB0aGUgYmVuY2htYXJrLgorICAgIC8vIEFsc28gY29udGFpbnMgcmVwb3J0aW5n
IG1ldGhvZHMgY2FsbGVkIGJ5IHRoZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydAorICAgIC8vIHdo
ZW4gcGFpbnRpbmcgaXMgYWJvdXQgdG8gb2NjdXIgYW5kIHdoZW4gcGFpbnRpbmcgaXMgY29tcGxl
dGUuCisgICAgY2xhc3MgUGFpbnRDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCBXZWJDYW52YXMqIGNyZWF0ZUNhbnZhcyhjb25zdCBXZWJTaXplJikgPSAwOworCisgICAgICAg
IC8vIENhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgd2hlbiBwYWludGluZyBp
cyBhYm91dCB0bworICAgICAgICAvLyBvY2N1ci4KKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQ
YWludChjb25zdCBXZWJDYW52YXMmKSB7IH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0IHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRQYWludChjb25zdCBXZWJDYW52YXMmKSB7IH0KKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZpcnR1YWwgflBhaW50Q2xpZW50KCkgeyB9CisgICAgfTsKKworICAgIC8v
IFBhaW50cyB0aGUgd2ViIHZpZXcgb24gY2FudmFzZXMgY3JlYXRlZCBmcm9tIHRoZSBjbGllbnQs
IHVzaW5nIHRoZSBnaXZlbgorICAgIC8vIHBhaW50IG1vZGUuCisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50Q2xpZW50KiwgUGFpbnRNb2RlKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5XZWJWaWV3QmVuY2htYXJrU3VwcG9ydCgpIHsgfQorfTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYmU0MDg3MGNmNTM2YjQwYjFlMjUxOWVmNjRhZGMwNjg2NjIxYThj
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5j
bHVkZSAicGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oIgorCisjaW5jbHVkZSA8cHVi
bGljL1dlYkNhbnZhcy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGw6OnBhaW50TGF5ZXIoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBHcmFwaGlj
c0xheWVyJiBsYXllciwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBXZWJTaXplIGNhbnZh
c1NpemUoY2xpcC53aWR0aCgpLCBjbGlwLmhlaWdodCgpKTsKKyAgICBPd25QdHI8V2ViQ2FudmFz
PiBjYW52YXMgPSBhZG9wdFB0cihwYWludENsaWVudC0+Y3JlYXRlQ2FudmFzKGNhbnZhc1NpemUp
KTsKKyAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzLmdldCgpKTsKKwor
ICAgIHBhaW50Q2xpZW50LT53aWxsUGFpbnQoKmNhbnZhcy5nZXQoKSk7CisgICAgbGF5ZXIucGFp
bnRHcmFwaGljc0xheWVyQ29udGVudHMoYnVpbGRlci5jb250ZXh0KCksIGNsaXApOworICAgIHBh
aW50Q2xpZW50LT5kaWRQYWludCgqY2FudmFzLmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3QmVu
Y2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQoUGFpbnRDbGllbnQq
IHBhaW50Q2xpZW50LCBHcmFwaGljc0xheWVyJiBsYXllcikKK3sKKyAgICBGbG9hdFNpemUgbGF5
ZXJTaXplID0gbGF5ZXIuc2l6ZSgpOworICAgIEludFJlY3QgY2xpcCgwLCAwLCBsYXllclNpemUu
d2lkdGgoKSwgbGF5ZXJTaXplLmhlaWdodCgpKTsKKworICAgIHBhaW50TGF5ZXIocGFpbnRDbGll
bnQsIGxheWVyLCBjbGlwKTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNo
aWxkcmVuID0gbGF5ZXIuY2hpbGRyZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpj
b25zdF9pdGVyYXRvciBpdDsKKyAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0g
Y2hpbGRyZW4uZW5kKCk7ICsraXQpCisgICAgICAgIGFjY2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQo
cGFpbnRDbGllbnQsICoqaXQpOworfQorCit2b2lkIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bDo6c29mdHdhcmVQYWludChQYWludENsaWVudCogcGFpbnRDbGllbnQsIFBhaW50TW9kZSBwYWlu
dE1vZGUpCit7CisgICAgV2ViU2l6ZSBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAg
IFdlYlJlY3QgcGFpbnRTaXplOworICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQ
YWludE1vZGVFdmVyeXRoaW5nOiB7CisgICAgICAgIGlmIChtX3dlYlZpZXdJbXBsLT5wYWdlKCkg
JiYgbV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5tYWluRnJhbWUoKSkgeworICAgICAgICAgICAgRnJh
bWVWaWV3KiB2aWV3ID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
OworICAgICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB2aWV3LT5jb250ZW50c1NpemUo
KTsKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJlY3QoMCwgMCwgY29udGVudHNTaXplLndp
ZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7Cisg
ICAgfSAgIGJyZWFrOworICAgIH0KKworICAgIFdlYlNpemUgY2FudmFzU2l6ZShwYWludFNpemUu
d2lkdGgsIHBhaW50U2l6ZS5oZWlnaHQpOworICAgIE93blB0cjxXZWJDYW52YXM+IGNhbnZhcyA9
IGFkb3B0UHRyKHBhaW50Q2xpZW50LT5jcmVhdGVDYW52YXMoY2FudmFzU2l6ZSkpOworICAgIHBh
aW50Q2xpZW50LT53aWxsUGFpbnQoKmNhbnZhcy5nZXQoKSk7CisgICAgbV93ZWJWaWV3SW1wbC0+
cGFpbnQoY2FudmFzLmdldCgpLCBwYWludFNpemUpOworICAgIHBhaW50Q2xpZW50LT5kaWRQYWlu
dCgqY2FudmFzLmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6
OnBhaW50KFBhaW50Q2xpZW50KiBwYWludENsaWVudCwgUGFpbnRNb2RlIHBhaW50TW9kZSkKK3sK
KyAgICBtX3dlYlZpZXdJbXBsLT5sYXlvdXQoKTsKKyAgICBpZiAoIW1fd2ViVmlld0ltcGwtPmlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gc29mdHdhcmVQ
YWludChwYWludENsaWVudCwgcGFpbnRNb2RlKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IG1fd2ViVmlld0ltcGwtPnJvb3RHcmFwaGljc0xheWVyKCk7CisgICAgc3dpdGNoIChwYWludE1v
ZGUpIHsKKyAgICBjYXNlIFBhaW50TW9kZUV2ZXJ5dGhpbmc6CisgICAgICAgIGFjY2VsZXJhdGVk
UGFpbnRVbmNsaXBwZWQocGFpbnRDbGllbnQsICpsYXllcik7CisgICAgfQorfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9y
dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YTYxMmNkNjQ4MGY1MjVlZGU3MmZjM2FmZmNkYTMyY2FhMWFi
MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0JlbmNobWFya1N1cHBvcnRJbXBsLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsX2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBs
X2gKKworI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBHcmFwaGljc0xheWVyOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitjbGFzcyBXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwgOiBwdWJsaWMgV2ViVmlld0JlbmNobWFya1N1cHBvcnQgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbChXZWJWaWV3SW1wbCog
d2ViVmlld0ltcGwpIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkgeyB9CisgICAgdmlydHVh
bCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKCkgeyB9CisKKyAgICAvLyBQYWludHMgdGhl
IFdlYlZpZXdJbXBsIG9udG8gY2FudmFzZXMgY3JlYXRlZCBmcm9tIHRoZSBQYWludENsaWVudC4K
KyAgICAvLyBJZiB3ZSdyZSBpbiBhY2NlbGVyYXRlZCBtb2RlLCBhIG5ldyBjYW52YXMgaXMgY3Jl
YXRlZCBmb3IgZWFjaCBncmFwaGljcworICAgIC8vIGxheWVyLiBMYXlvdXQoKSB3aWxsIGJlIGNh
bGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3IgdG8gcGFpbnRpbmcuCisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50Q2xpZW50KiwgUGFpbnRNb2RlKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHBhaW50TGF5ZXIoUGFpbnRDbGllbnQqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisKKyAgICAvLyBQYWludHMgdGhlIGdpdmVu
IGdyYXBoaWNzIGxheWVyIGhpZXJhcmNoeSB0byBjYW52YXNlcyBjcmVhdGVkIGJ5IHRoZQorICAg
IC8vIGNhbnZhcyBmYWN0b3J5LgorICAgIHZvaWQgYWNjZWxlcmF0ZWRQYWludFVuY2xpcHBlZChQ
YWludENsaWVudCosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKTsKKyAgICB2b2lkIHNvZnR3YXJl
UGFpbnQoUGFpbnRDbGllbnQqLCBQYWludE1vZGUpOworCisgICAgV2ViVmlld0ltcGwqIG1fd2Vi
Vmlld0ltcGw7Cit9OworfQorCisjZW5kaWYgLy8gV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBlMzQ5
MTUxZmFkMTQ0Nzk4MjBlZWM2NmZjNjNmMWQ4NDViYzZhNmFjLi43N2RkMjRlZDA3ZTUzYWNiMmM4
YmEwYWQ2OTkxYzE4NDBmMTZjY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCkBAIC00MDUsNiArNDA1LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBs
KFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAsIG1fdGFic1RvTGlua3MoZmFsc2UpCiAgICAg
LCBtX2RyYWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcgRHJhZ1Njcm9sbFRpbWVyKSkKICAgICAs
IG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuKGZhbHNlKQorICAgICwgbV9iZW5jaG1hcmtTdXBwb3J0
KHRoaXMpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9yb290R3Jh
cGhpY3NMYXllcigwKQogICAgICwgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoZmFs
c2UpCkBAIC03NTIsNiArNzUzLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGwsIGJvb2wgdXNlQW5jaG9yCiB9CiAjZW5k
aWYKIAorV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIFdlYlZpZXdJbXBsOjpiZW5jaG1hcmtTdXBw
b3J0KCkKK3sKKyAgICByZXR1cm4gJm1fYmVuY2htYXJrU3VwcG9ydDsKK30KKwogYm9vbCBXZWJW
aWV3SW1wbDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7
CiAgICAgQVNTRVJUKChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6OlJhd0tleURvd24pCkBA
IC0zNDU5LDYgKzM0NjUsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKICAgICBtX2xheWVyVHJlZVZpZXcuc2V0QmFj
a2dyb3VuZENvbG9yKHdlYkRvY3VtZW50QmFja2dyb3VuZENvbG9yKTsKIH0KIAorV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogV2ViVmlld0ltcGw6OnJvb3RHcmFwaGljc0xheWVyKCkKK3sKKyAgICBy
ZXR1cm4gbV9yb290R3JhcGhpY3NMYXllcjsKK30KKwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDhmNmJkZjQwYjgyMWQx
YWJjNmFiZGFmMGM3YmUxOGJkZTAyYjFhNTAuLmE5N2EyMDE1YmUwYTQwMThhOTM5NzdkOTNkODM3
ODZjYzMxNjg5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApA
QCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIlBhZ2VXaWRnZXREZWxlZ2F0ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xp
ZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0x
MDYsNiArMTA3LDcgQEAgY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2ViR2VzdHVyZUV2ZW50
OwogY2xhc3MgV2ViUGFnZVBvcHVwSW1wbDsKIGNsYXNzIFdlYlByZXJlbmRlcmVyQ2xpZW50Owor
Y2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnQ7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdl
YktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtMjkxLDYgKzI5Myw3IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxp
bmdBbmltYXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxGbGluZ1BhcmFtZXRlcnMmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMoV2ViUmVuZGVyaW5nU3RhdHMmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtTdXBwb3J0KCk7CiAK
ICAgICAvLyBXZWJMYXllclRyZWVWaWV3Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdp
bkZyYW1lKCk7CkBAIC01MDMsNiArNTA2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9j
dXJyZW50SW5wdXRFdmVudDsKICAgICB9CiAKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBy
b290R3JhcGhpY3NMYXllcigpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICAgICB2b2lkIHNldFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKQEAgLTc4NCw2ICs3ODgsOCBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gbV9mdWxsU2NyZWVuRnJhbWU7
CiAgICAgYm9vbCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVlbjsKIAorICAgIFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0SW1wbCBtX2JlbmNobWFya1N1cHBvcnQ7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFn
ZTsKICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153561</attachid>
            <date>2012-07-20 12:21:50 -0700</date>
            <delta_ts>2012-07-20 12:43:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88271-20120720122145.patch</filename>
            <type>text/plain</type>
            <size>17763</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggY2ExODM1YTVlNzA2N2Q1YzQ3OTc0OGQ4M2Iz
ZDUxMjllMGFjOGFlYy4uZGE1MDc4YmE0MjM1Y2FmZjFlMDI5Mzc0YjMxMjNhOTJkOWMwMmUyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNy0yMCAg
RGFuaWVsIE11cnBoeSAgPGRtdXJwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW50cm9kdWNl
IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBleHBlcmltZW50cyBvbiBh
IHJlYWwgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgyNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
YmVuY2htYXJrU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0KToKKyAgICAgICAgKFBhaW50Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp3aWxsUGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6UGFpbnRDbGllbnQ6OmRpZFBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0JlbmNobWFya1N1cHBvcnQ6OlBhaW50Q2xpZW50Ojp+
UGFpbnRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6
fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFy
a1N1cHBvcnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50TGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OmFjY2VsZXJhdGVkUGFpbnRVbmNs
aXBwZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnNv
ZnR3YXJlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydElt
cGw6OnBhaW50KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0Jl
bmNobWFya1N1cHBvcnRJbXBsOjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6On5XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgor
CiAyMDEyLTA3LTE5ICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgRW5hYmxlIENTUyB2YXJpYWJsZXMgY29tcGlsZSB0aW1lIGZsYWcgaW4gQ2hy
b21lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGY2ODY4MjAxYzYxMDFhOWJiNmRm
ZjU2OTkzODlhN2EwYzQ4ZGQyZWYuLjVmNTkxMzk2ODk4ZTE2OGJiZmE5NWM3N2E2YWYzODYwMzk2
Zjc1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI3OSw2ICsyNzksNyBAQAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVXNlck1lZGlhQ2xpZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViVXNlck1lZGlhUmVxdWVzdC5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlZpZXcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlZpZXdDbGllbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCcsCkBAIC02NjEsNiArNjYyLDggQEAKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlRleHRGaWVsZERlY29yYXRvckNsaWVudC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViVmlkZW9MYXllci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0JlbmNo
bWFya1N1cHBvcnRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3SW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViVmlld0ltcGwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJXb3JrZXJCYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmgKaW5kZXggNWUzNDM3YTA4ZDdlMmNkNGIxYzgxMWY0NDAwMDM3MmRhZGZhMzk0Yi4uYTEw
NjkzNmNmMzljZDgwNjliNThhOGNjNzNhNWE5Nzc0MGJkZTBhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBXZWJOb2RlOwog
Y2xhc3MgV2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3Mg
V2ViUHJlcmVuZGVyZXJDbGllbnQ7CitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDsKIGNs
YXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xp
ZW50OwpAQCAtNDU0LDYgKzQ1NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBjYWxsIGlzIHJl
bGF0aXZlbHkgZXhwZW5zaXZlIGluIHRocmVhZGVkIG1vZGUgYXMgaXQgYmxvY2tzIG9uIHRoZSBj
b21wb3NpdG9yIHRocmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMoV2ViUmVu
ZGVyaW5nU3RhdHMmKSBjb25zdCB7IH0KIAorICAgIC8vIEJlbmNobWFya2luZyBzdXBwb3J0IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2aXJ0dWFs
IFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0KiBiZW5jaG1hcmtTdXBwb3J0KCkgeyByZXR1cm4gMDsg
fQorCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlzaWJpbGl0eSBv
ZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YWNlMzYyMjVlODkwMTFh
YWEzMDA1MTI2NjM3MWZmZDliOTg4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydC5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydF9oCisjZGVmaW5lIFdlYlZpZXdC
ZW5jaG1hcmtTdXBwb3J0X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFN1
cHBvcnQgZm9yIGJlbmNobWFya3MgYWNjZXNzaW5nIHRoZSBXZWJWaWV3LgorY2xhc3MgV2ViVmll
d0JlbmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGVudW0gUGFpbnRNb2RlIHsKKyAgICAg
ICAgLy8gUGFpbnQgdGhlIGVudGlyZSBwYWdlLgorICAgICAgICBQYWludE1vZGVFdmVyeXRoaW5n
CisgICAgfTsKKworICAgIC8vIENsaWVudCBmb3IgY3JlYXRpbmcgY2FudmFzZXMgd2hlcmUgbXVs
dGlwbGUgY2FudmFzZXMKKyAgICAvLyBtYXkgYmUgdXNlZCBmb3IgbGF5ZXJlZCByZW5kZXJpbmcg
YW5kIHNpemVzIGRlZmluZWQgYnkgdGhlIGJlbmNobWFyay4KKyAgICAvLyBBbHNvIGNvbnRhaW5z
IHJlcG9ydGluZyBtZXRob2RzIGNhbGxlZCBieSB0aGUgV2ViVmlld0JlbmNobWFya1N1cHBvcnQK
KyAgICAvLyB3aGVuIHBhaW50aW5nIGlzIGFib3V0IHRvIG9jY3VyIGFuZCB3aGVuIHBhaW50aW5n
IGlzIGNvbXBsZXRlLgorICAgIGNsYXNzIFBhaW50Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZpcnR1YWwgV2ViQ2FudmFzKiBjcmVhdGVDYW52YXMoY29uc3QgV2ViU2l6ZSYpID0gMDsK
KworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0IHdoZW4g
cGFpbnRpbmcgaXMgYWJvdXQgdG8KKyAgICAgICAgLy8gb2NjdXIuCisgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGFpbnQoY29uc3QgV2ViQ2FudmFzJikgeyB9CisKKyAgICAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCB3aGVuIHBhaW50aW5nIGlzIGNvbXBsZXRl
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFpbnQoY29uc3QgV2ViQ2FudmFzJikgeyB9Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5QYWludENsaWVudCgpIHsgfQorICAgIH07
CisKKyAgICAvLyBQYWludHMgdGhlIHdlYiB2aWV3IG9uIGNhbnZhc2VzIGNyZWF0ZWQgZnJvbSB0
aGUgY2xpZW50LCB1c2luZyB0aGUgZ2l2ZW4KKyAgICAvLyBwYWludCBtb2RlLgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludENsaWVudCosIFBhaW50TW9kZSkgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnQoKSB7IH0KK307Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMTFmNmViNjRkYzEyNDE0OGYwNDc4YjIwNThl
Yzk5YzNjMzQ2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgiCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1w
bC5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKKworI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJDYW52YXMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVmll
d0JlbmNobWFya1N1cHBvcnRJbXBsOjpwYWludExheWVyKFBhaW50Q2xpZW50KiBwYWludENsaWVu
dCwgR3JhcGhpY3NMYXllciYgbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAgV2Vi
U2l6ZSBjYW52YXNTaXplKGNsaXAud2lkdGgoKSwgY2xpcC5oZWlnaHQoKSk7CisgICAgT3duUHRy
PFdlYkNhbnZhcz4gY2FudmFzID0gYWRvcHRQdHIocGFpbnRDbGllbnQtPmNyZWF0ZUNhbnZhcyhj
YW52YXNTaXplKSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcy5n
ZXQoKSk7CisKKyAgICBwYWludENsaWVudC0+d2lsbFBhaW50KCpjYW52YXMuZ2V0KCkpOworICAg
IGxheWVyLnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGJ1aWxkZXIuY29udGV4dCgpLCBjbGlw
KTsKKyAgICBwYWludENsaWVudC0+ZGlkUGFpbnQoKmNhbnZhcy5nZXQoKSk7Cit9CisKK3ZvaWQg
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjphY2NlbGVyYXRlZFBhaW50VW5jbGlwcGVkKFBh
aW50Q2xpZW50KiBwYWludENsaWVudCwgR3JhcGhpY3NMYXllciYgbGF5ZXIpCit7CisgICAgRmxv
YXRTaXplIGxheWVyU2l6ZSA9IGxheWVyLnNpemUoKTsKKyAgICBJbnRSZWN0IGNsaXAoMCwgMCwg
bGF5ZXJTaXplLndpZHRoKCksIGxheWVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBwYWludExheWVy
KHBhaW50Q2xpZW50LCBsYXllciwgY2xpcCk7CisKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NM
YXllcio+JiBjaGlsZHJlbiA9IGxheWVyLmNoaWxkcmVuKCk7CisgICAgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGNoaWxkcmVuLmJlZ2lu
KCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KQorICAgICAgICBhY2NlbGVyYXRlZFBhaW50
VW5jbGlwcGVkKHBhaW50Q2xpZW50LCAqKml0KTsKK30KKwordm9pZCBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGw6OnNvZnR3YXJlUGFpbnQoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBQYWlu
dE1vZGUgcGFpbnRNb2RlKQoreworICAgIFdlYlNpemUgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNp
emUoKTsKKyAgICBXZWJSZWN0IHBhaW50U2l6ZTsKKyAgICBzd2l0Y2ggKHBhaW50TW9kZSkgewor
ICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzoKKyAgICAgICAgaWYgKG1fd2ViVmlld0ltcGwt
PnBhZ2UoKSAmJiBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpKSB7CisgICAgICAg
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCk7CisgICAgICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHZpZXctPmNvbnRl
bnRzU2l6ZSgpOworICAgICAgICAgICAgcGFpbnRTaXplID0gV2ViUmVjdCgwLCAwLCBjb250ZW50
c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBwYWludFNpemUgPSBXZWJSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgV2ViU2l6ZSBjYW52YXNTaXplKHBh
aW50U2l6ZS53aWR0aCwgcGFpbnRTaXplLmhlaWdodCk7CisgICAgT3duUHRyPFdlYkNhbnZhcz4g
Y2FudmFzID0gYWRvcHRQdHIocGFpbnRDbGllbnQtPmNyZWF0ZUNhbnZhcyhjYW52YXNTaXplKSk7
CisgICAgcGFpbnRDbGllbnQtPndpbGxQYWludCgqY2FudmFzLmdldCgpKTsKKyAgICBtX3dlYlZp
ZXdJbXBsLT5wYWludChjYW52YXMuZ2V0KCksIHBhaW50U2l6ZSk7CisgICAgcGFpbnRDbGllbnQt
PmRpZFBhaW50KCpjYW52YXMuZ2V0KCkpOworfQorCit2b2lkIFdlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0SW1wbDo6cGFpbnQoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBQYWludE1vZGUgcGFpbnRN
b2RlKQoreworICAgIG1fd2ViVmlld0ltcGwtPmxheW91dCgpOworICAgIGlmICghbV93ZWJWaWV3
SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBz
b2Z0d2FyZVBhaW50KHBhaW50Q2xpZW50LCBwYWludE1vZGUpOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbV93ZWJWaWV3SW1wbC0+cm9vdEdyYXBoaWNzTGF5ZXIoKTsKKyAgICBzd2l0Y2gg
KHBhaW50TW9kZSkgeworICAgIGNhc2UgUGFpbnRNb2RlRXZlcnl0aGluZzoKKyAgICAgICAgYWNj
ZWxlcmF0ZWRQYWludFVuY2xpcHBlZChwYWludENsaWVudCwgKmxheWVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTYxMmNkNjQ4MGY1
MjVlZGU3MmZjM2FmZmNkYTMyY2FhMWFiMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsX2gKKyNkZWZpbmUgV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsX2gKKworI2luY2x1ZGUgIldlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBH
cmFwaGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlZpZXdJbXBs
OworCitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwgOiBwdWJsaWMgV2ViVmlld0Jl
bmNobWFya1N1cHBvcnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpIDogbV93ZWJWaWV3SW1wbCh3ZWJW
aWV3SW1wbCkgeyB9CisgICAgdmlydHVhbCB+V2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKCkg
eyB9CisKKyAgICAvLyBQYWludHMgdGhlIFdlYlZpZXdJbXBsIG9udG8gY2FudmFzZXMgY3JlYXRl
ZCBmcm9tIHRoZSBQYWludENsaWVudC4KKyAgICAvLyBJZiB3ZSdyZSBpbiBhY2NlbGVyYXRlZCBt
b2RlLCBhIG5ldyBjYW52YXMgaXMgY3JlYXRlZCBmb3IgZWFjaCBncmFwaGljcworICAgIC8vIGxh
eWVyLiBMYXlvdXQoKSB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcgcHJpb3IgdG8gcGFp
bnRpbmcuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50Q2xpZW50KiwgUGFpbnRNb2RlKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBhaW50TGF5ZXIoUGFpbnRDbGllbnQqLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisK
KyAgICAvLyBQYWludHMgdGhlIGdpdmVuIGdyYXBoaWNzIGxheWVyIGhpZXJhcmNoeSB0byBjYW52
YXNlcyBjcmVhdGVkIGJ5IHRoZQorICAgIC8vIGNhbnZhcyBmYWN0b3J5LgorICAgIHZvaWQgYWNj
ZWxlcmF0ZWRQYWludFVuY2xpcHBlZChQYWludENsaWVudCosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXImKTsKKyAgICB2b2lkIHNvZnR3YXJlUGFpbnQoUGFpbnRDbGllbnQqLCBQYWludE1vZGUpOwor
CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7Cit9OworfQorCisjZW5kaWYgLy8gV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAppbmRleCA1NDljY2Q0MWUwMWRkMWIzNmQ4NWY2MzM0OTk2NGE5YjdmODgw
Y2UwLi41NmE5NjRlMTMxNzdhYzgyZmUyNDE5NGZkYmRkNTk1ODQzNTQzODU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC00MDUsNiArNDA1LDcgQEAg
V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAsIG1f
dGFic1RvTGlua3MoZmFsc2UpCiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcg
RHJhZ1Njcm9sbFRpbWVyKSkKICAgICAsIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuKGZhbHNlKQor
ICAgICwgbV9iZW5jaG1hcmtTdXBwb3J0KHRoaXMpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgICwgbV9yb290R3JhcGhpY3NMYXllcigwKQogICAgICwgbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoZmFsc2UpCkBAIC03NTIsNiArNzUzLDExIEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGws
IGJvb2wgdXNlQW5jaG9yCiB9CiAjZW5kaWYKIAorV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIFdl
YlZpZXdJbXBsOjpiZW5jaG1hcmtTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gJm1fYmVuY2htYXJr
U3VwcG9ydDsKK30KKwogYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgV2Vi
S2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKChldmVudC50eXBlID09IFdlYklu
cHV0RXZlbnQ6OlJhd0tleURvd24pCkBAIC0zNDc4LDYgKzM0ODQsMTEgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKICAg
ICBtX2xheWVyVHJlZVZpZXcuc2V0QmFja2dyb3VuZENvbG9yKHdlYkRvY3VtZW50QmFja2dyb3Vu
ZENvbG9yKTsKIH0KIAorV2ViQ29yZTo6R3JhcGhpY3NMYXllciogV2ViVmlld0ltcGw6OnJvb3RH
cmFwaGljc0xheWVyKCkKK3sKKyAgICByZXR1cm4gbV9yb290R3JhcGhpY3NMYXllcjsKK30KKwog
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgV2ViVmlld0ltcGw6OnNj
aGVkdWxlQW5pbWF0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCmluZGV4IGQ5NzM2ZGRmY2VkNzUxOGM2OWIwMGI0NmY2NzhjYWU5ZTA1MDY1MzkuLjgxM2Y1
MGY5MmFlNzA2OTgxNmY2OWJiZWE2NDY0NTU0YjdjM2VkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIlBhZ2VX
aWRnZXREZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0Lmgi
CiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCkBAIC0xMDYsNiArMTA3LDcgQEAgY2xhc3MgV2ViRnJhbWVJbXBs
OwogY2xhc3MgV2ViR2VzdHVyZUV2ZW50OwogY2xhc3MgV2ViUGFnZVBvcHVwSW1wbDsKIGNsYXNz
IFdlYlByZXJlbmRlcmVyQ2xpZW50OworY2xhc3MgV2ViVmlld0JlbmNobWFya1N1cHBvcnQ7CiBj
bGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2
ZW50OwpAQCAtMjk0LDYgKzI5Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxpbmdBbmltYXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxG
bGluZ1BhcmFtZXRlcnMmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyaW5nU3RhdHMoV2ViUmVu
ZGVyaW5nU3RhdHMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
KiBiZW5jaG1hcmtTdXBwb3J0KCk7CiAKICAgICAvLyBXZWJMYXllclRyZWVWaWV3Q2xpZW50CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCk7CkBAIC01MDYsNiArNTA5LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9jdXJyZW50SW5wdXRFdmVudDsKICAgICB9CiAKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigpOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKTsKICAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKTsKQEAgLTc4Nyw2ICs3OTEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpG
cmFtZT4gbV9mdWxsU2NyZWVuRnJhbWU7CiAgICAgYm9vbCBtX2lzQ2FuY2VsaW5nRnVsbFNjcmVl
bjsKIAorICAgIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbCBtX2JlbmNobWFya1N1cHBvcnQ7
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVj
dCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsKICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0PiBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153570</attachid>
            <date>2012-07-20 12:43:32 -0700</date>
            <delta_ts>2012-07-23 10:21:58 -0700</delta_ts>
            <desc>Patch for commit</desc>
            <filename>bug-88271-20120720124328.patch</filename>
            <type>text/plain</type>
            <size>17789</size>
            <attacher name="Daniel Murphy">dmurph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGNhMTgzNWE1ZTcwNjdkNWM0Nzk3NDhkODNiM2Q1MTI5ZTBhYzhhZWMuLjZiNDE1OWMxODdiZGZj
NjVjY2Y4MDA4MGFmNTAwMjNmYWQwMmI2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTItMDctMjAgIERhbmllbCBNdXJwaHkgIDxkbXVycGhAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIEludHJvZHVjZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCBmb3Ig
cGVyZm9ybWFuY2UgZXhwZXJpbWVudHMgb24gYSByZWFsIFdlYlZpZXcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4MjcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gRmlzaGVyLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpiZW5jaG1hcmtTdXBwb3J0KToKKyAgICAgICAgKiBw
dWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViVmlld0JlbmNobWFya1N1cHBvcnQpOgorICAgICAgICAoUGFpbnRDbGll
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydDo6UGFpbnRDbGll
bnQ6OndpbGxQYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
OjpQYWludENsaWVudDo6ZGlkUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydDo6UGFpbnRDbGllbnQ6On5QYWludENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0Ojp+V2ViVmlld0JlbmNobWFya1N1cHBvcnQpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1w
bDo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
SW1wbDo6YWNjZWxlcmF0ZWRQYWludFVuY2xpcHBlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6c29mdHdhcmVQYWludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6cGFpbnQpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OldlYlZpZXdCZW5j
aG1hcmtTdXBwb3J0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0SW1wbDo6fldlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmJlbmNobWFya1N1cHBvcnQpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJvb3RHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3SW1wbCk6CisKIDIwMTItMDctMTkgIEx1a2UgTWFjcGhlcnNvbiAg
IDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFibGUgQ1NTIHZhcmlhYmxl
cyBjb21waWxlIHRpbWUgZmxhZyBpbiBDaHJvbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggZjY4NjgyMDFjNjEwMWE5YmI2ZGZmNTY5OTM4OWE3YTBjNDhkZDJlZi4uNWY1OTEzOTY4
OThlMTY4YmJmYTk1Yzc3YTZhZjM4NjAzOTZmNzUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMjc5LDYgKzI3OSw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVc2Vy
TWVkaWFDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVc2VyTWVkaWFSZXF1
ZXN0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVmlldy5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVmlld0NsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYldp
ZGdldC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYldpZGdldENsaWVudC5oJywKQEAg
LTY2MSw2ICs2NjIsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4dEZpZWxkRGVjb3Jh
dG9yQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVc2VyTWVkaWFSZXF1ZXN0
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWRlb0xheWVyLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlZpZXdJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJWaWV3
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlckJhc2UuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRleCA1ZTM0MzdhMDhkN2UyY2Q0YjFj
ODExZjQ0MDAwMzcyZGFkZmEzOTRiLi5hMTA2OTM2Y2YzOWNkODA2OWI1OGE4Y2M3M2E1YTk3NzQw
YmRlMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC01Miw2
ICs1Miw3IEBAIGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdl
YlBlcm1pc3Npb25DbGllbnQ7CiBjbGFzcyBXZWJQcmVyZW5kZXJlckNsaWVudDsKK2NsYXNzIFdl
YlZpZXdCZW5jaG1hcmtTdXBwb3J0OwogY2xhc3MgV2ViUmFuZ2U7CiBjbGFzcyBXZWJTZXR0aW5n
czsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7CkBAIC00NTQsNiArNDU1LDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGNhbGwgaXMgcmVsYXRpdmVseSBleHBlbnNpdmUgaW4gdGhyZWFkZWQg
bW9kZSBhcyBpdCBibG9ja3Mgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgogICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0cyYpIGNvbnN0IHsgfQogCisgICAg
Ly8gQmVuY2htYXJraW5nIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIGJlbmNo
bWFya1N1cHBvcnQoKSB7IHJldHVybiAwOyB9CisKICAgICAvLyBWaXNpYmlsaXR5IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAg
ICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzhhY2UzNjIyNWU4OTAxMWFhYTMwMDUxMjY2MzcxZmZkOWI5ODhlMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdCZW5jaG1h
cmtTdXBwb3J0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIFdlYlZpZXdCZW5jaG1hcmtT
dXBwb3J0X2gKKyNkZWZpbmUgV2ViVmlld0JlbmNobWFya1N1cHBvcnRfaAorCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VwcG9ydCBmb3IgYmVuY2htYXJrcyBhY2Nlc3Npbmcg
dGhlIFdlYlZpZXcuCitjbGFzcyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCB7CitwdWJsaWM6Cisg
ICAgZW51bSBQYWludE1vZGUgeworICAgICAgICAvLyBQYWludCB0aGUgZW50aXJlIHBhZ2UuCisg
ICAgICAgIFBhaW50TW9kZUV2ZXJ5dGhpbmcKKyAgICB9OworCisgICAgLy8gQ2xpZW50IGZvciBj
cmVhdGluZyBjYW52YXNlcyB3aGVyZSBtdWx0aXBsZSBjYW52YXNlcworICAgIC8vIG1heSBiZSB1
c2VkIGZvciBsYXllcmVkIHJlbmRlcmluZyBhbmQgc2l6ZXMgZGVmaW5lZCBieSB0aGUgYmVuY2ht
YXJrLgorICAgIC8vIEFsc28gY29udGFpbnMgcmVwb3J0aW5nIG1ldGhvZHMgY2FsbGVkIGJ5IHRo
ZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydAorICAgIC8vIHdoZW4gcGFpbnRpbmcgaXMgYWJvdXQg
dG8gb2NjdXIgYW5kIHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgY2xhc3MgUGFpbnRD
bGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBXZWJDYW52YXMqIGNyZWF0ZUNh
bnZhcyhjb25zdCBXZWJTaXplJikgPSAwOworCisgICAgICAgIC8vIENhbGxlZCBieSB0aGUgV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQgd2hlbiBwYWludGluZyBpcyBhYm91dCB0bworICAgICAgICAv
LyBvY2N1ci4KKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQYWludChjb25zdCBXZWJDYW52YXMm
KSB7IH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0
IHdoZW4gcGFpbnRpbmcgaXMgY29tcGxldGUuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQYWlu
dChjb25zdCBXZWJDYW52YXMmKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwg
flBhaW50Q2xpZW50KCkgeyB9CisgICAgfTsKKworICAgIC8vIFBhaW50cyB0aGUgd2ViIHZpZXcg
b24gY2FudmFzZXMgY3JlYXRlZCBmcm9tIHRoZSBjbGllbnQsIHVzaW5nIHRoZSBnaXZlbgorICAg
IC8vIHBhaW50IG1vZGUuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50Q2xpZW50KiwgUGFp
bnRNb2RlKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJWaWV3QmVuY2htYXJr
U3VwcG9ydCgpIHsgfQorfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIx
MWY2ZWI2NGRjMTI0MTQ4ZjA0NzhiMjA1OGVjOTljM2MzNDY1MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5j
cHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCIKKwor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5jbHVkZSAicGFpbnRpbmcvR3JhcGhp
Y3NDb250ZXh0QnVpbGRlci5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkNhbnZhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordm9pZCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OnBhaW50TGF5
ZXIoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBHcmFwaGljc0xheWVyJiBsYXllciwgY29uc3Qg
SW50UmVjdCYgY2xpcCkKK3sKKyAgICBXZWJTaXplIGNhbnZhc1NpemUoY2xpcC53aWR0aCgpLCBj
bGlwLmhlaWdodCgpKTsKKyAgICBPd25QdHI8V2ViQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihw
YWludENsaWVudC0+Y3JlYXRlQ2FudmFzKGNhbnZhc1NpemUpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzLmdldCgpKTsKKworICAgIHBhaW50Q2xpZW50LT53aWxs
UGFpbnQoKmNhbnZhcy5nZXQoKSk7CisgICAgbGF5ZXIucGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoYnVpbGRlci5jb250ZXh0KCksIGNsaXApOworICAgIHBhaW50Q2xpZW50LT5kaWRQYWludCgq
Y2FudmFzLmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGw6OmFj
Y2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQoUGFpbnRDbGllbnQqIHBhaW50Q2xpZW50LCBHcmFwaGlj
c0xheWVyJiBsYXllcikKK3sKKyAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gbGF5ZXIuc2l6ZSgp
OworICAgIEludFJlY3QgY2xpcCgwLCAwLCBsYXllclNpemUud2lkdGgoKSwgbGF5ZXJTaXplLmhl
aWdodCgpKTsKKworICAgIHBhaW50TGF5ZXIocGFpbnRDbGllbnQsIGxheWVyLCBjbGlwKTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0gbGF5ZXIuY2hpbGRy
ZW4oKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+Ojpjb25zdF9pdGVyYXRvciBpdDsKKyAg
ICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQp
CisgICAgICAgIGFjY2VsZXJhdGVkUGFpbnRVbmNsaXBwZWQocGFpbnRDbGllbnQsICoqaXQpOwor
fQorCit2b2lkIFdlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbDo6c29mdHdhcmVQYWludChQYWlu
dENsaWVudCogcGFpbnRDbGllbnQsIFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAgV2ViU2l6
ZSBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAgIFdlYlJlY3QgcGFpbnRTaXplOwor
ICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1vZGVFdmVyeXRoaW5nOgor
ICAgICAgICBpZiAobV93ZWJWaWV3SW1wbC0+cGFnZSgpICYmIG1fd2ViVmlld0ltcGwtPnBhZ2Uo
KS0+bWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fd2ViVmll
d0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgICAgIEludFNpemUg
Y29udGVudHNTaXplID0gdmlldy0+Y29udGVudHNTaXplKCk7CisgICAgICAgICAgICBwYWludFNp
emUgPSBXZWJSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50U2l6ZSA9IFdlYlJlY3Qo
MCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBXZWJTaXplIGNhbnZhc1NpemUocGFpbnRTaXplLndpZHRoLCBwYWludFNpemUuaGVpZ2h0
KTsKKyAgICBPd25QdHI8V2ViQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihwYWludENsaWVudC0+
Y3JlYXRlQ2FudmFzKGNhbnZhc1NpemUpKTsKKyAgICBwYWludENsaWVudC0+d2lsbFBhaW50KCpj
YW52YXMuZ2V0KCkpOworICAgIG1fd2ViVmlld0ltcGwtPnBhaW50KGNhbnZhcy5nZXQoKSwgcGFp
bnRTaXplKTsKKyAgICBwYWludENsaWVudC0+ZGlkUGFpbnQoKmNhbnZhcy5nZXQoKSk7Cit9CisK
K3ZvaWQgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsOjpwYWludChQYWludENsaWVudCogcGFp
bnRDbGllbnQsIFBhaW50TW9kZSBwYWludE1vZGUpCit7CisgICAgbV93ZWJWaWV3SW1wbC0+bGF5
b3V0KCk7CisgICAgaWYgKCFtX3dlYlZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIHNvZnR3YXJlUGFpbnQocGFpbnRDbGllbnQsIHBhaW50
TW9kZSk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3dlYlZpZXdJbXBsLT5yb290R3Jh
cGhpY3NMYXllcigpOworICAgIHN3aXRjaCAocGFpbnRNb2RlKSB7CisgICAgY2FzZSBQYWludE1v
ZGVFdmVyeXRoaW5nOgorICAgICAgICBhY2NlbGVyYXRlZFBhaW50VW5jbGlwcGVkKHBhaW50Q2xp
ZW50LCAqbGF5ZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdCZW5jaG1hcmtTdXBwb3J0SW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlhNjEyY2Q2NDgwZjUyNWVkZTcyZmMzYWZmY2RhMzJjYWExYWIwMzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3QmVuY2ht
YXJrU3VwcG9ydEltcGwuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3QmVuY2htYXJr
U3VwcG9ydEltcGxfaAorI2RlZmluZSBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaAorCisj
aW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFdlYlZpZXdCZW5jaG1hcmtTdXBw
b3J0SW1wbCA6IHB1YmxpYyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydCB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3
SW1wbCkgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJW
aWV3QmVuY2htYXJrU3VwcG9ydEltcGwoKSB7IH0KKworICAgIC8vIFBhaW50cyB0aGUgV2ViVmll
d0ltcGwgb250byBjYW52YXNlcyBjcmVhdGVkIGZyb20gdGhlIFBhaW50Q2xpZW50LgorICAgIC8v
IElmIHdlJ3JlIGluIGFjY2VsZXJhdGVkIG1vZGUsIGEgbmV3IGNhbnZhcyBpcyBjcmVhdGVkIGZv
ciBlYWNoIGdyYXBoaWNzCisgICAgLy8gbGF5ZXIuIExheW91dCgpIHdpbGwgYmUgY2FsbGVkIG9u
IHRoZSB3ZWIgdmlldyBwcmlvciB0byBwYWludGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRDbGllbnQqLCBQYWludE1vZGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHZvaWQg
cGFpbnRMYXllcihQYWludENsaWVudCosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKworICAgIC8vIFBhaW50cyB0aGUgZ2l2ZW4gZ3JhcGhp
Y3MgbGF5ZXIgaGllcmFyY2h5IHRvIGNhbnZhc2VzIGNyZWF0ZWQgYnkgdGhlCisgICAgLy8gY2Fu
dmFzIGZhY3RvcnkuCisgICAgdm9pZCBhY2NlbGVyYXRlZFBhaW50VW5jbGlwcGVkKFBhaW50Q2xp
ZW50KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpOworICAgIHZvaWQgc29mdHdhcmVQYWludChQ
YWludENsaWVudCosIFBhaW50TW9kZSk7CisKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1w
bDsKK307Cit9CisKKyNlbmRpZiAvLyBXZWJWaWV3QmVuY2htYXJrU3VwcG9ydEltcGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDU0OWNjZDQxZTAx
ZGQxYjM2ZDg1ZjYzMzQ5OTY0YTliN2Y4ODBjZTAuLjU2YTk2NGUxMzE3N2FjODJmZTI0MTk0ZmRi
ZGQ1OTU4NDM1NDM4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKQEAgLTQwNSw2ICs0MDUsNyBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmll
d0NsaWVudCogY2xpZW50KQogICAgICwgbV90YWJzVG9MaW5rcyhmYWxzZSkKICAgICAsIG1fZHJh
Z1Njcm9sbFRpbWVyKGFkb3B0UHRyKG5ldyBEcmFnU2Nyb2xsVGltZXIpKQogICAgICwgbV9pc0Nh
bmNlbGluZ0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX2JlbmNobWFya1N1cHBvcnQodGhpcykK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBtX3Jvb3RHcmFwaGljc0xh
eWVyKDApCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShmYWxzZSkKQEAg
LTc1Miw2ICs3NTMsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRp
b24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwgYm9vbCB1c2VBbmNob3IKIH0KICNlbmRpZgogCitX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydCogV2ViVmlld0ltcGw6OmJlbmNobWFya1N1cHBvcnQoKQor
eworICAgIHJldHVybiAmbV9iZW5jaG1hcmtTdXBwb3J0OworfQorCiBib29sIFdlYlZpZXdJbXBs
OjpoYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBB
U1NFUlQoKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bikKQEAgLTM0Nzgs
NiArMzQ4NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRCYWNrZ3JvdW5k
Q29sb3Iod2ViRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOwogfQogCitXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBXZWJWaWV3SW1wbDo6cm9vdEdyYXBoaWNzTGF5ZXIoKQoreworICAgIHJldHVybiBt
X3Jvb3RHcmFwaGljc0xheWVyOworfQorCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQogdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24oKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZDk3MzZkZGZjZWQ3NTE4YzY5YjAw
YjQ2ZjY3OGNhZTllMDUwNjUzOS4uODEzZjUwZjkyYWU3MDY5ODE2ZjY5YmJlYTY0NjQ1NTRiN2Mz
ZWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01Niw2
ICs1Niw3IEBACiAjaW5jbHVkZSAiUGFnZVdpZGdldERlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiV2ViVmlld0JlbmNobWFya1N1cHBvcnRJbXBsLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTEwNiw2ICsx
MDcsNyBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiBjbGFzcyBXZWJHZXN0dXJlRXZlbnQ7CiBjbGFz
cyBXZWJQYWdlUG9wdXBJbXBsOwogY2xhc3MgV2ViUHJlcmVuZGVyZXJDbGllbnQ7CitjbGFzcyBX
ZWJWaWV3QmVuY2htYXJrU3VwcG9ydDsKIGNsYXNzIFdlYkltYWdlOwogY2xhc3MgV2ViS2V5Ym9h
cmRFdmVudDsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CkBAIC0yOTQsNiArMjk2LDcgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0FuaW1h
dGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpOwogICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJpbmdTdGF0cyhXZWJSZW5kZXJpbmdTdGF0cyYpIGNvbnN0OworICAgIHZpcnR1
YWwgV2ViVmlld0JlbmNobWFya1N1cHBvcnQqIGJlbmNobWFya1N1cHBvcnQoKTsKIAogICAgIC8v
IFdlYkxheWVyVHJlZVZpZXdDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlZ2luRnJhbWUo
KTsKQEAgLTUwNiw2ICs1MDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRJ
bnB1dEV2ZW50OwogICAgIH0KIAorICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RHcmFw
aGljc0xheWVyKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGJvb2wg
YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIHZvaWQgc2V0Um9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwpAQCAtNzg3LDYgKzc5MSw4IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBtX2Z1bGxTY3JlZW5GcmFtZTsKICAgICBi
b29sIG1faXNDYW5jZWxpbmdGdWxsU2NyZWVuOwogCisgICAgV2ViVmlld0JlbmNobWFya1N1cHBv
cnRJbXBsIG1fYmVuY2htYXJrU3VwcG9ydDsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlOwogICAg
IE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>