<?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>5727</bug_id>
          
          <creation_ts>2005-11-13 10:14:35 -0800</creation_ts>
          <short_desc>We want to evaluate scripts in viewless documents</short_desc>
          <delta_ts>2016-08-03 11:55:05 -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>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>adamk</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>bburg</cc>
    
    <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>ian</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>rafaelw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23983</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-11-13 10:14:35 -0800</bug_when>
    <thetext>For xbl, hyatt says that we need to be able to evaluate scripts in viewless documents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82502</commentid>
    <comment_count>1</comment_count>
      <attachid>21540</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-06 19:52:04 -0700</bug_when>
    <thetext>Created attachment 21540
Draft - No test case (will be added on the final version) - Should also have used &apos;svn mv&apos;

This is a first draft. It is based on the empty client work around (see https://bugs.webkit.org/show_bug.cgi?id=5971) and adds a dummy Page / Frame / FrameView hierarchy to use for viewless element.

I am particularly concerned about the security issues that could arise from this approach (but lacks the knowledge to assess them). Especially since it adds the possibility to run some JavaScript using our dummy hierarchy.

Any comments are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82984</commentid>
    <comment_count>2</comment_count>
      <attachid>21540</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 12:04:05 -0700</bug_when>
    <thetext>Comment on attachment 21540
Draft - No test case (will be added on the final version) - Should also have used &apos;svn mv&apos;

Factoring out the empty clients is great. Maybe it would be best to do that in a separate check-in, first.

Why does the setDummyFrame function have a &quot;shouldEnableJavaScript&quot; boolean parameter? All the callers pass true.

I&apos;m not sure setDummyFrame should be a Document member function. It seems to me that this is more of a controller operation, and we should try to avoid adding more controller functions into the model object, Document.

Perhaps it should just be a static member of FrameLoader that takes a Document argument.

The fakeLoad function definitely should *not* be added to Frame. This clearly belongs on FrameLoader.

The dummyFrame function should return PassRefPtr&lt;Frame&gt; rather than just a Frame*. I think the function&apos;s name should have a verb in it, such as createDummyFrame. While it&apos;s marginally OK to have this on Frame, I think this function, too, would be better on FrameLoader, which has the responsibility to create new frames. The Frame class itself is just the &quot;hub&quot; of Frame features, and should have very little code in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83072</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-11 17:31:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 21540 [edit])
&gt; Factoring out the empty clients is great. Maybe it would be best to do that in
&gt; a separate check-in, first.

Good idea, I will split the patch.

&gt; Why does the setDummyFrame function have a &quot;shouldEnableJavaScript&quot; boolean
&gt; parameter? All the callers pass true.

You have missed one: SVGImage does not need JavaScript and thus does not pass true but uses the default (that is false).
Some elements need a Frame to load a remote resource (using fakeLoad) and may not need access to JavaScript (that was the previous behaviour that I try to keep using this parameter).

&gt; I&apos;m not sure setDummyFrame should be a Document member function. It seems to me
&gt; that this is more of a controller operation, and we should try to avoid adding
&gt; more controller functions into the model object, Document.
&gt; 
&gt; Perhaps it should just be a static member of FrameLoader that takes a Document
&gt; argument.

Currently Document has no Frame setter so that&apos;s why I had to put in Document. I guess there is a reason why we did not want to be able to modify a Document&apos;s Frame (that&apos;s why I add this particular setter and not a setFrame() method).

A solution would be to add a private setFrame() to Document and add a friend method Frame::setDummyFrameFor(Document*).

&gt; The fakeLoad function definitely should *not* be added to Frame. This clearly
&gt; belongs on FrameLoader.

I will change that.

&gt; The dummyFrame function should return PassRefPtr&lt;Frame&gt; rather than just a
&gt; Frame*. 

I will correct that too.

&gt; I think the function&apos;s name should have a verb in it, such as
&gt; createDummyFrame. While it&apos;s marginally OK to have this on Frame, I think this
&gt; function, too, would be better on FrameLoader, which has the responsibility to
&gt; create new frames. The Frame class itself is just the &quot;hub&quot; of Frame features,
&gt; and should have very little code in it.

For this one, I would tend to prefer it on Frame as we are returning a Frame (or a PassRefPtr&lt;Frame&gt;). IMHO it is also more logical to call it with Frame::createDummyFrame() than FrameLoader::createDummyFrame().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83142</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-12 18:44:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 21540 [edit] [edit])
&gt; &gt; Factoring out the empty clients is great. Maybe it would be best to do that in
&gt; &gt; a separate check-in, first.
&gt; 
&gt; Good idea, I will split the patch.
&gt; 

Filed bug 19529 for the refactoring part.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84040</commentid>
    <comment_count>5</comment_count>
      <attachid>21870</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-21 06:26:51 -0700</bug_when>
    <thetext>Created attachment 21870
2nd version - updated with Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84156</commentid>
    <comment_count>6</comment_count>
      <attachid>21870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 10:39:57 -0700</bug_when>
    <thetext>Comment on attachment 21870
2nd version - updated with Darin&apos;s comments

Here&apos;s better wording for this comment:

+    // Changing the Document frame should not occurs under normal condition.
+    // Currently only the dummyFrame issue requires it.

    // Changing the Document frame should not occur under normal conditions.
    // Currently only createDummyFrame requires it.

And since this function will be rarely used, it should be moved farther down in the source file. The most used functions should be up at the top if possible.

This seems to be indented incorrectly:

+    if (!doc-&gt;frame())
+            Frame::setDummyFrameFor(doc, true);

In the createDummyFrame function:

+    Page* page = new Page(dummyChromeClient, dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient);

What owns this page? It seems to me that this Page object leaks permanently. This is the most serious problem with the patch.

+    Frame* frame = new Frame(page, 0, dummyFrameLoaderClient);
+    [...]
+    return adoptRef(frame);

The correct style is to do adoptRef right on the same line as the &quot;new&quot; and keep it in a RefPtr. So it should be:

    RefPtr&lt;Frame&gt; frame = adoptRef(new Frame(page, 0, dummyFrameLoaderClient));
    [...]
    return frame.release();

We want the new and the adoptRef to be as close to each other as possible.

How about skipping the local variable here:

+    FrameView* frameView = new FrameView(frame);
+    frame-&gt;setView(frameView);

Do this instead:

    frame-&gt;setView(new FrameView(frame));

This reads strangely to me:

    frame-&gt;d-&gt;m_loader.init(false);

Please consider the more usual:

    frame-&gt;loader()-&gt;init(false);

I think the right thing to do is to put the Document::setFrame function call into createDummyFrame. Everyone will call that function directly. Simply have it attach the dummy frame to the document automatically if you passed a document into createDummyFrame. Then we can get rid of the awkwardly name setDummyFrameFor.

+    static void setDummyFrameFor(Document*, bool shouldEnableJavaScript);

I still think that createDummyFrame belongs in FrameLoader, but I guess you weren&apos;t convinced last time I suggested it.

For this:

+        Document* doc = document();
+        if (!doc-&gt;frame())

the style I now prefer is:

    Document* document = this-&gt;document();
    if (!document-&gt;frame())

I don&apos;t like using various mixed abbreviations just to dodge member names.

I still don&apos;t see any callers passing false for shouldEnableJavaScript to setDummyFrameFor, despite your earlier comments. Is that coming in a future patch?

review- because of the Page ownership issue.

I&apos;d also like you to refine the arguments to createDummyFrame and its behavior further and consider my other comments. But the only essential issue is the ownership one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84394</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-25 06:35:38 -0700</bug_when>
    <thetext>[Removed other comments that I will tackle]

&gt; In the createDummyFrame function:
&gt; 
&gt; +    Page* page = new Page(dummyChromeClient, dummyContextMenuClient,
&gt; dummyEditorClient, dummyDragClient, dummyInspectorClient);
&gt; 
&gt; What owns this page? It seems to me that this Page object leaks permanently.
&gt; This is the most serious problem with the patch.

You are right. The Frame owns the Frame-FrameView-Page hierarchy and thus should clean them. I will make the modifications to ensure that.

&gt; I think the right thing to do is to put the Document::setFrame function call
&gt; into createDummyFrame. Everyone will call that function directly. Simply have
&gt; it attach the dummy frame to the document automatically if you passed a
&gt; document into createDummyFrame. Then we can get rid of the awkwardly name
&gt; setDummyFrameFor.
&gt; 
&gt; +    static void setDummyFrameFor(Document*, bool shouldEnableJavaScript);
&gt; 
&gt; I still think that createDummyFrame belongs in FrameLoader, but I guess you
&gt; weren&apos;t convinced last time I suggested it.

It seems strange but I could live with it.

&gt; I still don&apos;t see any callers passing false for shouldEnableJavaScript to
&gt; setDummyFrameFor, despite your earlier comments. Is that coming in a future
&gt; patch?

There is none for setDummyFrameFor but there is one for createDummyFrame. Here is the code snippet:

Index: WebCore/svg/graphics/SVGImage.cpp
===================================================================
--- WebCore/svg/graphics/SVGImage.cpp	(revision 34713)
+++ WebCore/svg/graphics/SVGImage.cpp	(working copy)
[...]
-        m_page-&gt;settings()-&gt;setJavaScriptEnabled(false);
[...]
+        m_frame = Frame::createDummyFrame(false);

This was the original behaviour that I wanted to keep.

I do not intend to do any modification on the caller&apos;s argument so there will be only 2 use cases: we provide a Document because we need to execute JavaScript or we do not provide one because we just want to load some resources.
I guess we could use the Document&apos;s argument to enable JavaScript or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84444</commentid>
    <comment_count>8</comment_count>
      <attachid>21939</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-06-25 16:43:26 -0700</bug_when>
    <thetext>Created attachment 21939
3nd attempt - Correct minor issues and should not leak the Page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86240</commentid>
    <comment_count>9</comment_count>
      <attachid>21939</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-17 10:44:27 -0700</bug_when>
    <thetext>Comment on attachment 21939
3nd attempt - Correct minor issues and should not leak the Page

+    void setFrame(Frame* frame) { m_frame = frame; }

should probably be private.  FrameLoader could be a friend class then (if it isn&apos;t already).

+        Document* document = this-&gt;document();

Just call it &quot;doc&quot;, then you don&apos;t need to use this-&gt; all over.

You seem to be fixing SVG image transparency issues here too?  That sounds like a test case is in order...

Seems like +        bool m_isDummyFrame; should be grouped with the other bools.

Darin should see this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86877</commentid>
    <comment_count>10</comment_count>
      <attachid>21939</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-24 11:39:00 -0700</bug_when>
    <thetext>Comment on attachment 21939
3nd attempt - Correct minor issues and should not leak the Page

r- for my above comments.  If you&apos;re fixing an SVG issue, you need a separate SVG test (and that change should really go in a separate patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92139</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-22 09:40:52 -0700</bug_when>
    <thetext>Adding Eric so that he could see the forthcoming question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92140</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-22 09:43:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 21939 [edit])
&gt; 
&gt; You seem to be fixing SVG image transparency issues here too?  That sounds like
&gt; a test case is in order...

I have though about that a few times and I fail to see which SVG issue I could have fixed, could you provide an example of what kind of issue should be fixed so that I could test and understand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92171</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-22 12:20:55 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 21939 [edit] [edit])
&gt; &gt; 
&gt; &gt; You seem to be fixing SVG image transparency issues here too?  That sounds like
&gt; &gt; a test case is in order...
&gt; 
&gt; I have though about that a few times and I fail to see which SVG issue I could
&gt; have fixed, could you provide an example of what kind of issue should be fixed
&gt; so that I could test and understand?

I was just confused.  That&apos;s all. :)  I also don&apos;t see any SVG-related code in this patch. 
&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92500</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-24 03:58:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 21939 [edit])
&gt; +    void setFrame(Frame* frame) { m_frame = frame; }
&gt; 
&gt; should probably be private.  FrameLoader could be a friend class then (if it
&gt; isn&apos;t already).

I would rather not to. It would break the abstraction between Document and FrameLoader and I do not see any advantages over a public method with a warning.

&gt; 
&gt; +        Document* document = this-&gt;document();
&gt; 
&gt; Just call it &quot;doc&quot;, then you don&apos;t need to use this-&gt; all over.

Originally I called it doc but Darin asked me to change to that. The 2 notations are used in WebCore but this one is more coherent with our coding style (though a bit heavy here).

&gt; Seems like +        bool m_isDummyFrame; should be grouped with the other
&gt; bools.
&gt; 
You&apos;re right.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92501</commentid>
    <comment_count>15</comment_count>
      <attachid>23746</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-24 04:06:14 -0700</bug_when>
    <thetext>Created attachment 23746
Next iteration: updated to ToT, should address the lastest comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92585</commentid>
    <comment_count>16</comment_count>
      <attachid>23746</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-24 14:10:18 -0700</bug_when>
    <thetext>Comment on attachment 23746
Next iteration: updated to ToT, should address the lastest comments

This:
 5175     if (document) {
 5176         // If a document was provided we need to initialize
 5177         // the loader but should not create an empty document.
 5178         frame-&gt;setDocument(document);
 5179         frame-&gt;loader()-&gt;init(false);
 5180     } else
 5181         frame-&gt;init();
 5182 
 5183     if (document)
 5184         document-&gt;setFrame(frame.get());
can be one unified if block.  There is no need for a second if (document) block there.

I don&apos;t think there shoudl be a setIsDummyFrame call.  Instead, there should be a Frame::create() version which creates a dummy frame.

Does a frame ever need the ability to become a non-dummy?

Otherwise this looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92728</commentid>
    <comment_count>17</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-25 09:10:54 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 23746 [edit])
&gt; This:
&gt;  5175     if (document) {
&gt;  5176         // If a document was provided we need to initialize
&gt;  5177         // the loader but should not create an empty document.
&gt;  5178         frame-&gt;setDocument(document);
&gt;  5179         frame-&gt;loader()-&gt;init(false);
&gt;  5180     } else
&gt;  5181         frame-&gt;init();
&gt;  5182 
&gt;  5183     if (document)
&gt;  5184         document-&gt;setFrame(frame.get());
&gt; can be one unified if block.  There is no need for a second if (document) block
&gt; there.

Right, I will change that.

&gt; 
&gt; I don&apos;t think there shoudl be a setIsDummyFrame call.  Instead, there should be
&gt; a Frame::create() version which creates a dummy frame.

Right here too (I got confused in the first version and forgot to change that).

&gt; Does a frame ever need the ability to become a non-dummy?

Nope, once it is created, we should not be able to modify it. I will change that too.

Thanks! I will attach the new version here for another round of review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92881</commentid>
    <comment_count>18</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-26 00:52:54 -0700</bug_when>
    <thetext>&gt; &gt; I don&apos;t think there shoudl be a setIsDummyFrame call.  Instead, there should be
&gt; &gt; a Frame::create() version which creates a dummy frame.
&gt; 
&gt; Right here too (I got confused in the first version and forgot to change that).

In fact this was a request from Darin to avoid adding code to the Frame (see comment 2) so I think I will stick to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93218</commentid>
    <comment_count>19</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-09-29 04:51:27 -0700</bug_when>
    <thetext>Committed in r37060 with the following changes:
- left the createDummyFrame in FrameLoader (asked by Darin)
- removed the bool parameter in setIsDummyFrame as we do not need to switch from a dummy frame to a normal one.

(the changes were too small to do another round of review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93428</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-30 14:05:56 -0700</bug_when>
    <thetext>This was rolled out in r37112 as it introduced a large number of leaks on the layout tests.  You can easily reproduce these by doing &quot;run-webkit-tests --leaks fast/backgrounds&quot; with a debug build of WebKit.  With the patch applied I see over 2,200 leaks from that small set of tests.  After reverting the patch I was down to a much smaller number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94318</commentid>
    <comment_count>21</comment_count>
      <attachid>23746</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-06 18:22:57 -0700</bug_when>
    <thetext>Comment on attachment 23746
Next iteration: updated to ToT, should address the lastest comments

Marking r- since this was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99232</commentid>
    <comment_count>22</comment_count>
      <attachid>25249</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-18 15:24:36 -0800</bug_when>
    <thetext>Created attachment 25249
Fixed version - Should not leak

Ok, it took me a while but I have finally understood the way to go: we should create a dummyPage that holds the whole hierarchy and is responsible for cleaning.

As a side note, I have added the createDummyPage to the Page but I am ok with moving it to a more appropriate place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99233</commentid>
    <comment_count>23</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-18 15:29:15 -0800</bug_when>
    <thetext>And this time I have tested it with --leaks with no abnormal increase in the number of leaks. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122035</commentid>
    <comment_count>24</comment_count>
      <attachid>25249</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-19 20:55:12 -0700</bug_when>
    <thetext>Comment on attachment 25249
Fixed version - Should not leak

You could ASSERT here that the page is a dummy page:
80     // Changing the Document frame should not occur under normal conditions.
 781     // Currently only used by the dummyPage mechanism.
 782     void setFrame(Frame* frame) { m_frame = frame; }

You should ASSERT(document-&gt;frame()) after:
     if (!document-&gt;frame())
142          return;
 141         dummyPage.set(Page::createDummyPage(document));


We&apos;re allowing Scripts to execute in viewless documents even though the user/embedder could have turned them off via settings:

3     // Giving a document implies that we need to execute JavaScript.
 644     page-&gt;settings()-&gt;setJavaScriptEnabled(document);

I think dummy page might be the wrong model.  We may need a way to always get to a page, even if you&apos;re not in a frame.  And use that way when executing scripts.  We can&apos;t allow scripts to execute when embedders have turned them off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729097</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-26 17:29:48 -0700</bug_when>
    <thetext>Just found this while reading through ScriptElement.cpp, and got a little worried since the proposed HTMLTemplateElement relies on scripts in viewless documents not running. Perhaps this bug is obsolete, since the reason for needing this was XBL, and XBL is dead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217018</commentid>
    <comment_count>26</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-08-03 11:10:43 -0700</bug_when>
    <thetext>Per prior comment, I think this bug is stale. Please reopen if not the case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21540</attachid>
            <date>2008-06-06 19:52:04 -0700</date>
            <delta_ts>2010-06-10 17:13:44 -0700</delta_ts>
            <desc>Draft - No test case (will be added on the final version) - Should also have used &apos;svn mv&apos;</desc>
            <filename>ViewLess-1-CL.patch</filename>
            <type>text/plain</type>
            <size>64092</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDQxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcxIEBACisyMDA4LTA2LTA2ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFp
eEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyA1NzI3OiBXZSB3YW50IHRvIGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3Mg
ZG9jdW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NzI3CisKKyAgICAgICAgV2hlbiBhIHZpZXdsZXNzIGVsZW1lbnQgbmVlZHMgYSBGcmFtZSBo
aWVyYXJjaHkgKGZvciBwYXJzaW5nCisgICAgICAgIG9yIEphdmFTY3JpcHQgcHVycG9zZSksIHdl
IGhhbmQgaXQgYSBmYWtlIGhpZXJhcmNoeS4gVGhpcworICAgICAgICBoaWVyYXJjaHkgdXNlcyB0
aGUgU1ZHSW1hZ2UgZW1wdHkgY2xpZW50cyB0byB3b3JrIGFyb3VuZCB0aGUKKyAgICAgICAgbmVl
ZGVkIGNsaWVudCBpc3N1ZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6c2V0RHVtbXlGcmFtZSk6IFRoaXMgY3JlYXRlcyB0aGUgcmVx
dWlyZWQKKyAgICAgICAgRnJhbWUgYW5kIHNldCBpdHMgRG9jdW1lbnQgdG8gaXRzZWxmIGlmIHdl
IGFyZSBleGVjdXRpbmcgSmF2YVNjcmlwdC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQWRkIGNhbGwgdG8KKyAg
ICAgICAgc2V0RHVtbXlGcmFtZSBpZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgb3duIG9uZS4KKwor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6On5FbXB0eUNocm9tZUNsaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlD
aHJvbWVDbGllbnQ6OmZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50
Ojp1bmZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpjYW5UYWtl
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnRha2VGb2N1cyk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpzaG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpjYW5SdW5Nb2RhbCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6cnVuTW9kYWwpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJv
bWVDbGllbnQ6OnNldFRvb2xiYXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNo
cm9tZUNsaWVudDo6dG9vbGJhcnNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjpzZXRTdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
Q2hyb21lQ2xpZW50OjpzdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
Q2hyb21lQ2xpZW50OjpzZXRTY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlDaHJvbWVDbGllbnQ6OnNldE1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5Q2hyb21lQ2xpZW50OjptZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
Q2hyb21lQ2xpZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5Q2hyb21lQ2xpZW50OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Y2xvc2VXaW5kb3dTb29u
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRD
b25maXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpydW5KYXZhU2Ny
aXB0UHJvbXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50
OjpzZXRTdGF0dXNiYXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50
Ojp0YWJzVG9MaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6d2lu
ZG93UmVzaXplclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnNj
cm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6
dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50
Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9t
ZUNsaWVudDo6c2V0VG9vbFRpcCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVu
dDo6cHJpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OmV4Y2VlZGVk
RGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
Ojp+RW1wdHlGcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRlckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpoYXNXZWJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6Omhhc0ZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjptYWtlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUhpc3RvcnlGb3JD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRl
SGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlSGlz
dG9yeUZvckludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVy
Q2xpZW50Ojp1cGRhdGVIaXN0b3J5QWZ0ZXJDbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZXRDb3BpZXNPblNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQyKToK
KyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBh
cmVudDMpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNo
ZWRGcm9tUGFyZW50NCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojph
c3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVJlc3Bv
bnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZp
bmlzaERvY3VtZW50TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hTaG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNl
bFBvbGljeUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Q
cm92aXNpb25hbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGll
bnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVM
b2FkZXJDbGllbnQ6OndpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcyk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcyk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NT
dGFydGVkTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojpz
ZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVM
b2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFt
ZUxvYWRlckNsaWVudDo6d2lsbENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
RnJhbWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93VVJMRXJyb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6aW50ZXJydXB0Rm9yUG9saWN5
Q2hhbmdlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6
Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxv
YWRlckNsaWVudDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZEZhbGxCYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNhbkhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9y
VVJMU2NoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6Omdl
bmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJh
bWVMb2FkZXJDbGllbnQ6OmZyYW1lTG9hZENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkVHJlYXRVUkxBc1Nh
bWVBc0N1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6
YWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRG9jdW1lbnRM
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6dXNlckFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVQbGF0Zm9y
bURhdGFUb0NhY2hlZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNs
aWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZFBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3
UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVH
bG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6
OnNob3VsZEdvVG9IaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9h
ZGVyQ2xpZW50OjpzYXZlVmlld1N0YXRlVG9JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
RnJhbWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
b1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5k
b3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGll
bnQ6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlG
cmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojp+RW1wdHlFZGl0b3JDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnBhZ2VEZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG91bGRTaG93RGVsZXRlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzbWFydEluc2VydERl
bGV0ZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRp
dG9yQ2xpZW50Ojp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUVkaXRvckNsaWVudDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzZWxlY3RXb3JkQmVm
b3JlTWVudUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojppc0Vk
aXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG91bGRCZWdp
bkVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3VsZEVu
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6
OnNob3VsZEFwcGx5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6
OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRp
dG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0
b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmRpZFNldFNlbGVjdGlvblR5cGVz
Rm9yUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6cmVn
aXN0ZXJDb21tYW5kRm9yVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVu
dDo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRv
ckNsaWVudDo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlFZGl0b3JDbGllbnQ6OmNhblVuZG8pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JD
bGllbnQ6OmNhblJlZG8pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnVu
ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnJlZG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93
bik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVn
aW5FZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojp0ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojp0
ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JD
bGllbnQ6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUVkaXRvckNsaWVudDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6Om1hcmtlZFRleHRBYmFuZG9uZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpwYXN0ZWJvYXJkVHlwZXNG
b3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6Omlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGll
bnQ6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50
OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNs
aWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzaG93U3BlbGxpbmdVSSk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0Zvcldv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9k
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVudDo6fkVtcHR5
Q29udGV4dE1lbnVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNs
aWVudDo6Y29udGV4dE1lbnVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250
ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVudDo6Y29weUltYWdlVG9D
bGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVudDo6c2Vh
cmNoV2l0aEdvb2dsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNvbnRleHRNZW51Q2xpZW50
Ojpsb29rVXBJbkRpY3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVu
dUNsaWVudDo6c3BlYWspOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDb250ZXh0TWVudUNsaWVu
dDo6c3RvcFNwZWFraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q29udGV4dE1lbnVDbGll
bnQ6OnNlYXJjaFdpdGhTcG90bGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlEcmFnQ2xp
ZW50Ojp+RW1wdHlEcmFnQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RW1wdHlEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eURyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlEcmFnQ2xpZW50OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5RHJhZ0NsaWVudDo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6On5FbXB0eUluc3BlY3RvckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9y
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpjcmVh
dGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6
ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50Ojpz
aG93V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpjbG9z
ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVudDo6YXR0YWNo
V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkVVJM
Q2hhbmdlZCk6CisKKyAgICAgICAgQWxsIHRob3NlIG1ldGhvZHMgZG9lcyBub3RoaW5nIGFuZCBh
cmUgb25seSB1c2VkIGJ5IEZyYW1lOjpkdW1teUZyYW1lKCkuCisKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkdW1teUZyYW1lKTogQ3JlYXRlcyBh
IGR1bW15IGZyYW1lIGhpZXJhcmNoeS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmYWtlTG9h
ZCk6IEZha2VzIGRhdGEgbG9hZCBmcm9tIHRoZSBuZXR3b3JrLgorCisgICAgICAgICogcGFnZS9G
cmFtZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbWFnZTo6U1ZHSW1hZ2UpOiBSZXBsYWNlZCBwcmV2aW91cyBjb2RlIHdpdGgK
KyAgICAgICAgY2FsbCB0byBkdW1teUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lt
YWdlOjpkYXRhQ2hhbmdlZCk6IERpdHRvLgorCisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmg6IFJlbW92ZWQgdW51c2VkIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaDogUmVtb3ZlZC4KKwogMjAwOC0wNi0wNiAgSnVsaWVu
IENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzQ0MDkpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjYsNiArMTAyNiwxMiBAQCBGcmFtZVZp
ZXcqIERvY3VtZW50Ojp2aWV3KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUt
PnZpZXcoKSA6IDA7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnNldER1bW15RnJhbWUoYm9vbCBzaG91
bGRFbmFibGVKYXZhU2NyaXB0KQoreworICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSB0aGUgRG9jdW1l
bnQgaWYgd2UgaGF2ZSBlbmFibGVkIEphdmFTY3JpcHQuCisgICAgbV9mcmFtZSA9IEZyYW1lOjpk
dW1teUZyYW1lKHNob3VsZEVuYWJsZUphdmFTY3JpcHQsIHNob3VsZEVuYWJsZUphdmFTY3JpcHQg
PyB0aGlzIDogMCk7Cit9CisKIFBhZ2UqIERvY3VtZW50OjpwYWdlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnBhZ2UoKSA6IDA7ICAgIApJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiAzNDQwOSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0OSw2ICszNDksOSBAQCBwdWJsaWM6CiAgICAgUGFnZSogcGFnZSgpIGNvbnN0OyAvLyBjYW4g
YmUgTlVMTAogICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAog
CisgICAgLy8gVmlld2xlc3MgZG9jdW1lbnQgbWV0aG9kLgorICAgIHZvaWQgc2V0RHVtbXlGcmFt
ZShib29sIHNob3VsZEVuYWJsZUphdmFTY3JpcHQgPSBmYWxzZSk7CisKICAgICBQYXNzUmVmUHRy
PFJhbmdlPiBjcmVhdGVSYW5nZSgpOwogCiAgICAgUGFzc1JlZlB0cjxOb2RlSXRlcmF0b3I+IGNy
ZWF0ZU5vZGVJdGVyYXRvcihOb2RlKiByb290LCB1bnNpZ25lZCB3aGF0VG9TaG93LApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNDQwOSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NSwxMSArNzUsMTAgQEAgdm9pZCBIVE1MU2Ny
aXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBpZiAobV9ldmFsdWF0ZWQgfHwg
bV9jYWNoZWRTY3JpcHQgfHwgbV9jcmVhdGVkQnlQYXJzZXIgfHwgIWluRG9jdW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBGSVhNRTogRXZhbHVhdGUgc2NyaXB0cyBp
biB2aWV3bGVzcyBkb2N1bWVudHMuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3Ci0gICAgICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGRv
Y3VtZW50KCk7CisgICAgICAgIGlmICghZG9jLT5mcmFtZSgpKQorICAgICAgICAgICAgZG9jLT5z
ZXREdW1teUZyYW1lKHRydWUpOworCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0g
YXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0
KHVybCwgc2NyaXB0Q2hhcnNldCgpKTsKQEAgLTExMSwxMyArMTEwLDExIEBAIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3UKIAogICAgIGlmIChtX2NyZWF0ZWRCeVBhcnNl
cikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2Qg
bGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIGEgCi0gICAg
Ly8gdmlld2xlc3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8gZm9yIG5vdy4KLSAgICAvLyBTZWUg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwotICAgIGlmICghZG9j
dW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgRG9jdW1lbnQq
IGRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MtPmZyYW1lKCkpCisgICAgICAgIGRvYy0+
c2V0RHVtbXlGcmFtZSh0cnVlKTsKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0gZ2V0
QXR0cmlidXRlKHNyY0F0dHIpOwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICBt
X2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVy
bCwgc2NyaXB0Q2hhcnNldCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEVyaWMgU2VpZGVsIChlcmljQHdl
YmtpdC5vcmcpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFbXB0eUNsaWVudHNfaAorI2RlZmluZSBFbXB0eUNs
aWVudHNfaAorCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29udGV4dE1l
bnVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkRyYWdD
bGllbnQuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VF
cnJvci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisvKgorIFRoaXMgZmlsZSBob2xk
cyBlbXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgorIFZpZXdsZXNzIGVsZW1l
bnQgbmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmlldyB0cmVlIGZv
ciB1c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KKyBUaGlzIHRyZWUgZGVw
ZW5kcyBoZWF2aWx5IG9uIENsaWVudHMgKHVzdWFsbHkgcHJvdmlkZWQgYnkgV2ViS2l0IGNsYXNz
ZXMpLgorCisgVGhlIG9ubHkgdXNlciBvZiB0aGlzIGNsYXNzIGlzIEZyYW1lOjpkdW1teUZyYW1l
KCkgd2hpY2ggZ2l2ZXMgYSBkdW1teSBoaWVyYXJjaHkgZm9yIGVsZW1lbnQgd2l0aCBubworIFBh
Z2UgLyBGcmFtZSBhY2Nlc3MuCisgU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU5NzEgZm9yIHRoZSBvcmlnaW5hbCBkaXNjdXNzaW9uIGFib3V0IHRoaXMgZmlsZS4K
KyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNyBmb3IgbW9y
ZSBkaXNjdXNzaW9uIG9uIHRoaXMgaXNzdWUuCisKKyBJZGVhbGx5LCB3aGVuZXZlciB5b3UgY2hh
bmdlIGEgQ2xpZW50IGNsYXNzLCB5b3Ugc2hvdWxkIGFkZCBhIHN0dWIgaGVyZS4KKyBCcml0dGxl
LCB5ZXMuICBVbmZvcnR1bmF0ZSwgeWVzLiAgSG9wZWZ1bGx5IHRlbXBvcmFyeS4KKyovCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRW1wdHlDaHJvbWVDbGllbnQgOiBwdWJsaWMgQ2hy
b21lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FbXB0eUNocm9tZUNsaWVudCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorCisgICAgdmlydHVh
bCBGbG9hdFJlY3QgcGFnZVJlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorCisgICAgdmly
dHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpIHsgcmV0dXJuIDEuZjsgfQorCisgICAgdmlydHVhbCB2
b2lkIGZvY3VzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikgeyB9CisKKyAgICB2
aXJ0dWFsIFBhZ2UqIGNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
LCBjb25zdCBXaW5kb3dGZWF0dXJlcyYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpIHsgfQorCisgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCkgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIHRvb2xiYXJz
VmlzaWJsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
YmFyVmlzaWJsZShib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgp
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2li
bGUoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWVudWJhclZpc2libGUoKSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCB2b2lkIHNldFJlc2l6YWJsZShib29sKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpIHsgfQorCisgICAgdmlydHVh
bCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGNsb3NlV2luZG93U29vbigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFT
Y3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBy
dW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3Vs
dCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2
YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
YmFyVGV4dChjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCB0YWJzVG9MaW5r
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93
UmVzaXplclJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
Vmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQmFja2luZ1N0b3JlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3Mp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJikgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUqKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBl
eGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmKSB7IH0KK307CisKK2Ns
YXNzIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgOiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkVtcHR5RnJhbWVMb2FkZXJDbGllbnQoKSB7ICB9CisgICAg
dmlydHVhbCB2b2lkIGZyYW1lTG9hZGVyRGVzdHJveWVkKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gLy8gbWFpbmx5IGZvciBhc3Nl
cnRpb25zCisgICAgdmlydHVhbCBib29sIGhhc0ZyYW1lVmlldygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0gLy8gZGl0dG8KKworICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9j
dW1lbnRMb2FkZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1MKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlSGlzdG9yeUZvclJlbG9hZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVI
aXN0b3J5Rm9yU3RhbmRhcmRMb2FkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3Rv
cnlGb3JJbnRlcm5hbExvYWQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0b3J5
QWZ0ZXJDbGllbnRSZWRpcmVjdCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENvcGllc09u
U2Nyb2xsKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkb3du
bG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2
ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGludCBsZW5ndGhSZWNlaXZlZCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
RmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiwgaW50IGxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBL
VVJMJiwgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVJY29uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQ
cm92aXNpb25hbExvYWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkQ29tbWl0TG9hZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92
aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmlyc3RMYXlvdXQoKSB7IH0KKworICAgIHZpcnR1YWwgRnJhbWUqIGRpc3BhdGNoQ3JlYXRl
UGFnZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFt
ZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZy
YW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUG9saWN5Q2hlY2soKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0
IFJlc291cmNlRXJyb3ImKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJt
aXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9h
ZGVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1
bWVudExvYWRlciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihE
b2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFBy
b2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJv
Z3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpIHsgfQorCisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKSB7IH0KKwor
ICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSB7IHJldHVybiBSZXNvdXJjZUVycm9yKCk7IH0KKyAgICB2aXJ0dWFsIFJlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgcmV0dXJuIFJlc291
cmNlRXJyb3IoKTsgfQorICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyByZXR1cm4gUmVzb3VyY2VFcnJvcigpOyB9Cisg
ICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQorCisgICAg
dmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKSB7IHJldHVybiBSZXNvdXJjZUVycm9yKCk7IH0KKyAgICB2aXJ0dWFsIFJl
c291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KSB7IHJldHVybiBSZXNvdXJjZUVycm9yKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRG
YWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJikgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZShjb25z
dCBTdHJpbmcmIE1JTUVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNj
aGVtZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0
ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3QgeyBy
ZXR1cm4gIiI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRDb21wbGV0ZWQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgeyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZFRy
ZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0IEtVUkwmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBhZGRIaXN0b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIHsgfQorCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkg
eyByZXR1cm4gbmV3IERvY3VtZW50TG9hZGVyKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJM
JikgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIHsgcmV0
dXJuICIiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkUGFn
ZShDYWNoZWRQYWdlKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRl
ZEZyb21DYWNoZWRQYWdlKENhY2hlZFBhZ2UqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNp
dGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdsb2JhbEhpc3RvcnkoY29uc3QgS1VSTCYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRH
b1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikgeyB9CisgICAg
dmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBi
b29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihjb25zdCBJbnRT
aXplJixFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVs
ZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUg
b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSB7IHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgb3Zl
cnJpZGVNZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQorCisgICAgdmlydHVh
bCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCopIHt9CisgICAgdmlydHVhbCB2b2lk
IHdpbmRvd09iamVjdENsZWFyZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmly
c3ROYXZpZ2F0aW9uKCkgY29uc3Qge30KKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvcklj
b25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pIHt9CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
dmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVz
cG9uc2UpIGNvbnN0IHsgcmV0dXJuIHJlc3BvbnNlOyB9CisjZW5kaWYKKworfTsKKworY2xhc3Mg
RW1wdHlFZGl0b3JDbGllbnQgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5FbXB0eUVkaXRvckNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVz
dHJveWVkKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50
ZXJmYWNlKEhUTUxFbGVtZW50KikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSB7IH0KKyAgICB2
aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIHsgcmV0dXJuIC0xOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgc2VsZWN0V29yZEJlZm9yZU1lbnVFdmVudCgpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzRWRpdGFibGUoKSB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSos
IEVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyAgdmlydHVhbCBi
b29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiByZXBsYWNpbmdSYW5nZSwgV2ViVmll
d0luc2VydEFjdGlvbikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
SW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHNob3VsZEFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5n
ZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VU
eXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBmcm9tU3R5bGUsIENTU1N0eWxlRGVjbGFy
YXRpb24qIHRvU3R5bGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gIHZpcnR1YWwgYm9vbCBk
b0NvbW1hbmRCeVNlbGVjdG9yKFNFTCBzZWxlY3RvcikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAv
LworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGlu
ZygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQo
KSB7IH0KKyAgICAvLyAgdmlydHVhbCB2b2lkIHdlYlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHlsZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24geyB9CisgICAgLy8gIHZpcnR1YWwgdm9pZCB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiB7
IH0KKyAgICAvLyAgdmlydHVhbCBOU1VuZG9NYW5hZ2VyKiB1bmRvTWFuYWdlckZvcldlYlZpZXc6
KFdlYlZpZXcgKil3ZWJWaWV3IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FuVW5kbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGNhblJlZG8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIHVuZG8oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkbygpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KikgeyB9
CisgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCopIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCosIEtl
eWJvYXJkRXZlbnQqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCB0ZXh0V2ls
bEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGV4
dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopIHsgfQorCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZpcnR1YWwgdm9pZCBtYXJrZWRUZXh0QWJhbmRvbmVkKEZyYW1lKikgeyB9CisKKyAgICB2
aXJ0dWFsIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopIHsgcmV0dXJuIDA7IH0K
KyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIHZpcnR1YWwgTlNBcnJheSogcGFzdGVib2Fy
ZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikgeyByZXR1cm4gMDsgfQorI2VuZGlmCisjZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVu
Z3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9u
LCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFp
bCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShi
b29sIHNob3cpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3Qg
U3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgeyB9CisKKworfTsKKworY2xhc3MgRW1w
dHlDb250ZXh0TWVudUNsaWVudCA6IHB1YmxpYyBDb250ZXh0TWVudUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+RW1wdHlDb250ZXh0TWVudUNsaWVudCgpIHsgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgY29udGV4dE1lbnVEZXN0cm95ZWQoKSB7IH0KKworICAgIHZpcnR1YWwgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gZ2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUq
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRNZW51KikgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKikgeyB9CisgICAgdmlydHVhbCB2
b2lkIGxvb2tVcEluRGljdGlvbmFyeShGcmFtZSopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzcGVh
ayhjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCkgeyB9
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIHNlYXJjaFdpdGhTcG90bGln
aHQoKSB7IH0KKyNlbmRpZgorfTsKKworY2xhc3MgRW1wdHlEcmFnQ2xpZW50IDogcHVibGljIERy
YWdDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkVtcHR5RHJhZ0NsaWVudCgpIHt9Cisg
ICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0
aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZv
cm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xp
cGJvYXJkKikgeyB9CisgICAgdmlydHVhbCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFz
a0ZvckRyYWcoRHJhZ0RhdGEqKSB7IHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOyB9
CisgICAgdmlydHVhbCBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmKSB7IHJldHVybiBEcmFnU291cmNlQWN0aW9uTm9uZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKSB7IH0KKyAgICB2aXJ0dWFs
IERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBGcmFtZSopIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRy
b2xsZXJEZXN0cm95ZWQoKSB7IH0KK307CisKK2NsYXNzIEVtcHR5SW5zcGVjdG9yQ2xpZW50IDog
cHVibGljIEluc3BlY3RvckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RW1wdHlJbnNw
ZWN0b3JDbGllbnQoKSB7fQorCisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgp
IHt9OworCisgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCkgeyByZXR1cm4gMDsgfTsKKwor
ICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSB7IHJldHVybiBTdHJpbmco
KTsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkge307CisgICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93KCkge307CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkg
e307CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpIHt9OworCisgICAgdmlydHVhbCB2
b2lkIGhpZ2hsaWdodChOb2RlKikge307CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQo
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcm
IG5ld1VSTCkge307Cit9OworCit9CisKKyNlbmRpZiAvLyBFbXB0eUNsaWVudHNfaApJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiAzNDQwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEyICszNCwxNCBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgorI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NT
dHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIK
ICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTIwMyw2ICsyMDUsNDggQEAgRnJhbWU6On5GcmFtZSgp
CiAgICAgZCA9IDA7CiB9CiAKK0ZyYW1lKiBGcmFtZTo6ZHVtbXlGcmFtZShib29sIHNob3VsZEVu
YWJsZUphdmFTY3JpcHQsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBzdGF0aWMgQ2hyb21l
Q2xpZW50KiBkdW1teUNocm9tZUNsaWVudCA9IG5ldyBFbXB0eUNocm9tZUNsaWVudDsKKyAgICBz
dGF0aWMgRnJhbWVMb2FkZXJDbGllbnQqIGR1bW15RnJhbWVMb2FkZXJDbGllbnQgPSAgbmV3IEVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ7CisgICAgc3RhdGljIEVkaXRvckNsaWVudCogZHVtbXlFZGl0
b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0b3JDbGllbnQ7CisgICAgc3RhdGljIENvbnRleHRNZW51
Q2xpZW50KiBkdW1teUNvbnRleHRNZW51Q2xpZW50ID0gbmV3IEVtcHR5Q29udGV4dE1lbnVDbGll
bnQ7CisgICAgc3RhdGljIERyYWdDbGllbnQqIGR1bW15RHJhZ0NsaWVudCA9IG5ldyBFbXB0eURy
YWdDbGllbnQ7CisgICAgc3RhdGljIEluc3BlY3RvckNsaWVudCogZHVtbXlJbnNwZWN0b3JDbGll
bnQgPSBuZXcgRW1wdHlJbnNwZWN0b3JDbGllbnQ7CisKKyAgICAvLyBUaGUgQ2FjaGUgY29kZSBk
b2VzIG5vdCBrbm93IGFib3V0IENhY2hlZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qg
a25vdyB0byBicmVhayB0aGUgY3ljbGUuCisgICAgUGFnZSogcGFnZSA9IG5ldyBQYWdlKGR1bW15
Q2hyb21lQ2xpZW50LCBkdW1teUNvbnRleHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwg
ZHVtbXlEcmFnQ2xpZW50LCBkdW1teUluc3BlY3RvckNsaWVudCk7CisKKyAgICBwYWdlLT5zZXR0
aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChzaG91bGRFbmFibGVKYXZhU2NyaXB0KTsKKwor
ICAgIEZyYW1lKiBmcmFtZSA9IG5ldyBGcmFtZShwYWdlLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xp
ZW50KTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhmcmFtZSk7
CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKworICAgIC8vIElmIHdlIGhhdmUgcHJv
dmlkZWQgYSBkb2N1bWVudCBzZXQgaXQuCisgICAgLy8gSWYgbm90LCBjYWxsIGluaXQoKSB0aGF0
IHdpbGwgY3JlYXRlIGFuIGVtcHR5IG9uZS4KKyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIGZy
YW1lLT5kLT5tX2RvYyA9IGRvY3VtZW50OworICAgIGVsc2UKKyAgICAgICAgZnJhbWUtPmluaXQo
KTsKKworICAgIHJldHVybiBmcmFtZTsKK30KKwordm9pZCBGcmFtZTo6ZmFrZUxvYWQoU2hhcmVk
QnVmZmVyKiBkYXRhLCBjb25zdCBjaGFyKiBNSU1FVHlwZSkKK3sKKyAgICBSZXNvdXJjZVJlcXVl
c3QgZmFrZVJlcXVlc3QoS1VSTCgiIikpOworICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9
IGxvYWRlcigpOworICAgIGZyYW1lTG9hZGVyLT5sb2FkKGZha2VSZXF1ZXN0KTsgLy8gTWFrZSBz
dXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCisgICAgZnJhbWVMb2FkZXItPmNhbmNl
bENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKKyAgICBm
cmFtZUxvYWRlci0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOworICAgIGZyYW1lTG9hZGVyLT5z
ZXRSZXNwb25zZU1JTUVUeXBlKE1JTUVUeXBlKTsKKyAgICBmcmFtZUxvYWRlci0+YmVnaW4oS1VS
TCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAorICAgIGZyYW1lTG9hZGVyLT53cml0
ZShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgZnJhbWVMb2FkZXItPmVuZCgpOwor
fQorCiB2b2lkIEZyYW1lOjppbml0KCkKIHsKICAgICBkLT5tX2xvYWRlci5pbml0KCk7CkluZGV4
OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUu
aAkocmV2aXNpb24gMzQ0MDkpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtODQsNiArODQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3KEZy
YW1lVmlldyopOwogICAgIHZpcnR1YWwgfkZyYW1lKCk7CiAgICAgCisgICAgLy8gRHVtbXkgZnJh
bWUgbWV0aG9kcy4KKyAgICBzdGF0aWMgRnJhbWUqIGR1bW15RnJhbWUoYm9vbCBzaG91bGRFbmFi
bGVKYXZhU2NyaXB0ID0gZmFsc2UsIERvY3VtZW50KiBkb2N1bWVudCA9IDApOworICAgIHZvaWQg
ZmFrZUxvYWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBjb25zdCBjaGFyKiBNSU1FVHlwZSk7CisKICAg
ICB2b2lkIGluaXQoKTsKIAogICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDM0NDA5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTIgQEAKICNpbmNs
dWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAotI2luY2x1ZGUg
IlNWR0ltYWdlRW1wdHlDbGllbnRzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHSW1h
Z2U6OlNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2
ZXIpCiAgICAgLCBtX2RvY3VtZW50KDApCi0gICAgLCBtX3BhZ2UoMCkKICAgICAsIG1fZnJhbWUo
MCkKLSAgICAsIG1fZnJhbWVWaWV3KDApCiB7CiB9CiAKQEAgLTE5NSwzNCArMTkxLDExIEBAIGJv
b2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVIKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgaWYgKGFsbERhdGFSZWNlaXZlZCkgewotICAgICAgICBzdGF0aWMgQ2hy
b21lQ2xpZW50KiBkdW1teUNocm9tZUNsaWVudCA9IG5ldyBTVkdFbXB0eUNocm9tZUNsaWVudDsK
LSAgICAgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xpZW50KiBkdW1teUZyYW1lTG9hZGVyQ2xpZW50
ID0gIG5ldyBTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OwotICAgICAgICBzdGF0aWMgRWRpdG9y
Q2xpZW50KiBkdW1teUVkaXRvckNsaWVudCA9IG5ldyBTVkdFbXB0eUVkaXRvckNsaWVudDsKLSAg
ICAgICAgc3RhdGljIENvbnRleHRNZW51Q2xpZW50KiBkdW1teUNvbnRleHRNZW51Q2xpZW50ID0g
bmV3IFNWR0VtcHR5Q29udGV4dE1lbnVDbGllbnQ7Ci0gICAgICAgIHN0YXRpYyBEcmFnQ2xpZW50
KiBkdW1teURyYWdDbGllbnQgPSBuZXcgU1ZHRW1wdHlEcmFnQ2xpZW50OwotICAgICAgICBzdGF0
aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVudCA9IG5ldyBTVkdFbXB0eUlu
c3BlY3RvckNsaWVudDsKLQotICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1cCBs
b2FkaW5nIGl0c2VsZiwgd2UnbGwgbGVhayB0aGlzIEZyYW1lIChhbmQgYXNzb2NpYXRlZCBET00g
JiByZW5kZXIgdHJlZXMpLgotICAgICAgICAvLyBUaGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93
IGFib3V0IENhY2hlZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVh
ayB0aGUgY3ljbGUuCi0gICAgICAgIG1fcGFnZS5zZXQobmV3IFBhZ2UoZHVtbXlDaHJvbWVDbGll
bnQsIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9yQ2xpZW50LCBkdW1teURyYWdD
bGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KSk7Ci0gICAgICAgIG1fcGFnZS0+c2V0dGluZ3Mo
KS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2UpOwotCi0gICAgICAgIG1fZnJhbWUgPSBuZXcg
RnJhbWUobV9wYWdlLmdldCgpLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKLSAgICAgICAg
bV9mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KG1fZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2Zy
YW1lVmlldy0+ZGVyZWYoKTsgLy8gRklYTUU6IEZyYW1lVmlldyBzdGFydHMgd2l0aCBhIHJlZmNv
dW50IG9mIDEKLSAgICAgICAgbV9mcmFtZS0+c2V0VmlldyhtX2ZyYW1lVmlldy5nZXQoKSk7Ci0g
ICAgICAgIG1fZnJhbWUtPmluaXQoKTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1
ZXN0KEtVUkwoIiIpKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmxvYWQoZmFrZVJlcXVl
c3QpOyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKLSAgICAgICAg
bV9mcmFtZS0+bG9hZGVyKCktPmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwg
YW55IHBvbGljeSBjaGVja3MKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdFByb3Zp
c2lvbmFsTG9hZCgwKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldFJlc3BvbnNlTUlN
RVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2lu
KEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKLSAgICAgICAgbV9mcmFtZS0+
bG9hZGVyKCktPndyaXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci0gICAgICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5lbmQoKTsKLSAgICAgICAgbV9mcmFtZVZpZXctPnNldFRyYW5z
cGFyZW50KHRydWUpOyAvLyBTVkcgSW1hZ2VzIGFyZSB0cmFuc3BhcmVudC4KKyAgICAgICAgbV9m
cmFtZSA9IGFkb3B0UmVmKEZyYW1lOjpkdW1teUZyYW1lKCkpOworICAgICAgICBtX2ZyYW1lLT5m
YWtlTG9hZChtX2RhdGEuZ2V0KCksICJpbWFnZS9zdmcreG1sIik7CisgICAgICAgIG1fZnJhbWUt
PnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFy
ZW50LgogICAgIH0KLSAgICByZXR1cm4gbV9mcmFtZVZpZXc7CisgICAgcmV0dXJuIG1fZnJhbWUt
PnZpZXcoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAz
NDQwOSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDkgKzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAKICAgICAgICAgU1ZHRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgIE93blB0cjxQYWdlPiBtX3BhZ2U7CiAgICAgICAg
IFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKLSAgICAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV9mcmFt
ZVZpZXc7CiAgICAgICAgIEludFNpemUgbV9taW5TaXplOwogICAgICAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IG1fZnJhbWVDYWNoZTsKICAgICB9OwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAzNDQwOSkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDA1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgKGVyaWNAd2Vi
a2l0Lm9yZykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTVkdJbWFnZUVtcHR5Q2xpZW50c19oCi0jZGVmaW5l
IFNWR0ltYWdlRW1wdHlDbGllbnRzX2gKLQotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUg
IkRyYWdDbGllbnQuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGb2N1
c0RpcmVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLS8qCi0gVGhp
cyBmaWxlIGhvbGRzIGVtcHR5IENsaWVudCBzdHVicyBmb3IgdXNlIGJ5IFNWR0ltYWdlLgotIFNW
R0ltYWdlIG5lZWRzIHRvIGNyZWF0ZSBhIGR1bW15IFBhZ2UtPkZyYW1lLT5GcmFtZVZpZXcgdHJl
ZSBmb3IgdXNlIGluIHBhcnNpbmcgYW4gU1ZHRG9jdW1lbnQuCi0gVGhpcyB0cmVlIGRlcGVuZHMg
aGVhdmlseSBvbiBDbGllbnRzICh1c3VhbGx5IHByb3ZpZGVkIGJ5IFdlYktpdCBjbGFzc2VzKS4K
LSAKLSBTVkdJbWFnZSBoYXMgbm8gd2F5IHRvIGFjY2VzcyB0aGUgY3VycmVudCBQYWdlIChub3Ig
c2hvdWxkIGl0LCBzaW5jZSBJbWFnZXMgYXJlIG5vdCB0aWVkIHRvIGEgcGFnZSkuCi0gU2VlIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NzEgZm9yIG1vcmUgZGlzY3Vz
c2lvbiBvbiB0aGlzIGlzc3VlLgotIAotIElkZWFsbHksIHdoZW5ldmVyIHlvdSBjaGFuZ2UgYSBD
bGllbnQgY2xhc3MsIHlvdSBzaG91bGQgYWRkIGEgc3R1YiBoZXJlLgotIEJyaXR0bGUsIHllcy4g
IFVuZm9ydHVuYXRlLCB5ZXMuICBIb3BlZnVsbHkgdGVtcG9yYXJ5LgotKi8KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBTVkdFbXB0eUNocm9tZUNsaWVudCA6IHB1YmxpYyBDaHJvbWVD
bGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflNWR0VtcHR5Q2hyb21lQ2xpZW50KCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpIHsgfQotICAgIAotICAgIHZpcnR1
YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIAotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCkgeyByZXR1cm4gMS5mOyB9Ci0gICAg
Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVuZm9jdXMo
KSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9u
KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJl
Y3Rpb24pIHsgfQotICAgIAotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlV2luZG93KEZyYW1lKiwg
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJikgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29s
IGNhblJ1bk1vZGFsKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuTW9k
YWwoKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCB0b29sYmFyc1Zpc2libGUoKSB7IHJldHVybiBmYWxzZTsg
fQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpIHsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCkgeyB9Ci0gICAg
dmlydHVhbCBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIG1lbnViYXJWaXNpYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpIHsgfQotICAgIAotICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBGcmFtZSogZnJhbWUpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgY2xvc2VXaW5kb3dTb29uKCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJ1
bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwg
Ym9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcm
IHJlc3VsdCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJy
dXB0SmF2YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IHNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJikgeyB9Ci0gICAgCi0gICAgdmlydHVhbCBi
b29sIHRhYnNUb0xpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29u
c3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCkgeyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2ln
bmVkIG1vZGlmaWVyRmxhZ3MpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlw
KGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lKikgeyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJikgeyB9Ci19OwotCi1jbGFzcyBTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IDogcHVi
bGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TVkdFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50KCkgeyAgfQotICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ry
b3llZCgpIHsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfSAvLyBtYWlubHkgZm9yIGFzc2VydGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wg
aGFzRnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAvLyBkaXR0bwotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VM
YXlvdXRGb3JOb25IVE1MKCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3Rv
cnlGb3JDb21taXQoKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUZv
ckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0
b3J5Rm9yUmVsb2FkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JTdGFu
ZGFyZExvYWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUZvckludGVybmFs
TG9hZCgpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0b3J5QWZ0ZXJDbGll
bnRSZWRpcmVjdCgpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9s
bCgpIHsgfQotICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50Migp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDQoKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VF
cnJvciYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21N
ZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIAot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTG9hZCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJl
ZGlyZWN0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRS
ZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZy
YW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoU2hvdygpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFN0cmluZyYgTUlN
RVR5cGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBmcmFtZU5hbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlv
bkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxQb2xpY3lDaGVjaygpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVu
YWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPikgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCByZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VFc3RpbWF0
ZWRQcm9ncmVzcygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9n
cmVzcygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0
aW9uKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5v
dGlmaWNhdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5v
dGlmaWNhdGlvbigpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KGJvb2wpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzdGFydERvd25sb2Fk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB3aWxs
Q2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0dGVkTG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikgeyByZXR1cm4gUmVzb3VyY2VFcnJvcigpOyB9Ci0gICAgdmlydHVhbCBSZXNvdXJjZUVy
cm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IHJldHVybiBSZXNvdXJj
ZUVycm9yKCk7IH0KLSAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQotICAg
IHZpcnR1YWwgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKSB7IHJldHVybiBSZXNvdXJjZUVycm9yKCk7IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQotICAgIHZpcnR1YWwg
UmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJikgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAgICAgCi0gICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2hv
d01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0
IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2No
ZW1lKSBjb25zdCB7IHJldHVybiAiIjsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxv
YWRDb21wbGV0ZWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgeyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZFRyZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0IEtVUkwmKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRIaXN0b3J5SXRlbUZvckZy
YWdtZW50U2Nyb2xsKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIHsgfQot
ICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1l
bnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRl
RGF0YSYgc3Vic3RpdHV0ZURhdGEpIHsgcmV0dXJuIG5ldyBEb2N1bWVudExvYWRlcihyZXF1ZXN0
LCBzdWJzdGl0dXRlRGF0YSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgY29uc3QgS1VSTCYpIHsgfQotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIHVz
ZXJBZ2VudChjb25zdCBLVVJMJikgeyByZXR1cm4gIiI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBz
YXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRQYWdlKENhY2hlZFBhZ2UqKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZFBhZ2UoQ2FjaGVkUGFnZSopIHsg
fQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkgeyB9
ICAgIAotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoY29uc3QgS1VSTCYp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0q
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRl
VG9JdGVtKEhpc3RvcnlJdGVtKikgeyB9Ci0gICAgdmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWU+
IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1h
cmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBX
aWRnZXQqIGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJixFbGVtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJp
bmcmLCBib29sKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFB
cHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgcmV0dXJuIDA7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyByZXR1cm4gT2JqZWN0Q29udGVu
dFR5cGUoKTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1Bs
dWdpbihXaWRnZXQqKSB7fQotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkg
e30KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0IHt9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlz
dGVuKSB7fQotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgTlNDYWNoZWRVUkxSZXNw
b25zZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBjb25zdCB7IHJldHVybiBy
ZXNwb25zZTsgfQotI2VuZGlmCi0KLX07Ci0KLWNsYXNzIFNWR0VtcHR5RWRpdG9yQ2xpZW50IDog
cHVibGljIEVkaXRvckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U1ZHRW1wdHlFZGl0
b3JDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgfQotICAg
IAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVs
ZW1lbnQqKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfSAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpIHsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSB7IH0KLSAgICB2aXJ0dWFsIGludCBz
cGVsbENoZWNrZXJEb2N1bWVudFRhZygpIHsgcmV0dXJuIC0xOyB9Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIHNlbGVjdFdvcmRCZWZvcmVNZW51RXZlbnQoKSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0VkaXRhYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKikgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRp
dG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVybiBmYWxzZTsgfQotICAgIC8vICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqIHJlcGxhY2luZ1JhbmdlLCBXZWJWaWV3SW5z
ZXJ0QWN0aW9uKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJh
bmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2UqKSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVR5cGlu
Z1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIGZyb21TdHlsZSwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogdG9TdHlsZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyAgdmlydHVhbCBib29sIGRvQ29t
bWFuZEJ5U2VsZWN0b3IoU0VMIHNlbGVjdG9yKSB7IHJldHVybiBmYWxzZTsgfQotICAgIC8vCi0g
ICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5nKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCgpIHsg
fQotICAgIC8vICB2aXJ0dWFsIHZvaWQgd2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiB7IH0KLSAgICAvLyAgdmlydHVhbCB2b2lkIHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIHsgfQot
ICAgIC8vICB2aXJ0dWFsIE5TVW5kb01hbmFnZXIqIHVuZG9NYW5hZ2VyRm9yV2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgeyByZXR1cm4gMDsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgeyB9Ci0gICAg
Ci0gICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBjYW5SZWRvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5kbygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZWRvKCkgeyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50
KikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1l
bnQqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50
KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50
KikgeyB9Ci0gICAgdmlydHVhbCBib29sIGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVt
ZW50KiwgS2V5Ym9hcmRFdmVudCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCopIHsgfQotICAgIHZpcnR1YWwg
dm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KikgeyB9Ci0gICAgCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCBtYXJrZWRUZXh0QWJhbmRvbmVkKEZyYW1lKikg
eyB9Ci0gICAgCi0gICAgdmlydHVhbCBOU1N0cmluZyogdXNlclZpc2libGVTdHJpbmcoTlNVUkwq
KSB7IHJldHVybiAwOyB9Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICB2aXJ0dWFsIE5T
QXJyYXkqIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihGcmFtZSopIHsgcmV0dXJuIDA7IH0K
LSNlbmRpZgotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1l
bnQoY29uc3QgU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBT
dHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3Nw
ZWxsaW5nTGVuZ3RoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmco
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdV
SUlzU2hvd2luZygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNz
ZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIHsgfQotICAK
LSAgICAKLX07Ci0KLWNsYXNzIFNWR0VtcHR5Q29udGV4dE1lbnVDbGllbnQgOiBwdWJsaWMgQ29u
dGV4dE1lbnVDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflNWR0VtcHR5Q29udGV4dE1l
bnVDbGllbnQoKSB7ICB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCkg
eyB9Ci0gICAgCi0gICAgdmlydHVhbCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBnZXRDdXN0b21N
ZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0TWVudSopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3Qg
Q29udGV4dE1lbnUqKSB7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWRVUkwoY29u
c3QgS1VSTCYgdXJsKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29weUltYWdlVG9DbGlwYm9hcmQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29v
Z2xlKGNvbnN0IEZyYW1lKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGljdGlvbmFy
eShGcmFtZSopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzcGVhayhjb25zdCBTdHJpbmcmKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCkgeyB9Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgdmlydHVhbCB2b2lkIHNlYXJjaFdpdGhTcG90bGlnaHQoKSB7IH0KLSNlbmRpZgotfTsK
LQotY2xhc3MgU1ZHRW1wdHlEcmFnQ2xpZW50IDogcHVibGljIERyYWdDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgflNWR0VtcHR5RHJhZ0NsaWVudCgpIHt9Ci0gICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
RHJhZ0RhdGEqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikgeyB9Ci0g
ICAgdmlydHVhbCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWcoRHJhZ0Rh
dGEqKSB7IHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOyB9Ci0gICAgdmlydHVhbCBE
cmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmKSB7IHJldHVybiBEcmFnU291cmNlQWN0aW9uTm9uZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jiwg
Q2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKSB7IH0KLSAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBGcmFtZSop
IHsgcmV0dXJuIDA7IH0gCi0gICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVk
KCkgeyB9Ci19OwotCi1jbGFzcyBTVkdFbXB0eUluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBJbnNw
ZWN0b3JDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflNWR0VtcHR5SW5zcGVjdG9yQ2xp
ZW50KCkge30KLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSB7fTsKLQot
ICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH07Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyByZXR1cm4gU3RyaW5nKCk7IH07Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpIHt9OwotICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZVdpbmRvdygpIHt9OwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpIHt9OwotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSB7fTsKLQotICAgIHZpcnR1YWwgdm9pZCBoaWdo
bGlnaHQoTm9kZSopIHt9OwotICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkge307Ci0g
ICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwp
IHt9OwotfTsKLSAgICAKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KLSNlbmRpZiAvLyBT
VkdJbWFnZUVtcHR5Q2xpZW50c19oCi0K
</data>
<flag name="review"
          id="9429"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21870</attachid>
            <date>2008-06-21 06:26:51 -0700</date>
            <delta_ts>2008-06-23 10:39:57 -0700</delta_ts>
            <desc>2nd version - updated with Darin&apos;s comments</desc>
            <filename>bug5727-CL.patch</filename>
            <type>text/plain</type>
            <size>15173</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDcxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDgtMDYtMjEgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBk
b2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjcKKworICAgICAgICBBZGQgdGhlIHBvc2liaWxpdHkgdG8gZXZhbHVhdGUgc2NyaXB0IG9y
IGZldGNoIHJlc291cmNlcyBvbiB2aWV3bGVzcworICAgICAgICBkb2N1bWVudCB1c2luZyB0aGUg
RW1wdHlDbGllbnQgd29ya2Fyb3VuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGcmFtZSk6IE1ldGhvZCB0byBzZXQgdGhlIERvY3VtZW50
J3MKKyAgICAgICAgRnJhbWUsIGFkZGVkIGEgd2FybmluZyB0aGF0IGl0IHNob3VsZCBiZSB1c2Vk
IHVuZGVyIHNwZWNpYWwKKyAgICAgICAgY2lyY3Vtc3RhbmNlcy4KKworICAgICAgICAqIGh0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IElmIHRoZQorICAgICAgICBmcmFtZSBpcyBl
bXB0eSAodmlld2xlc3MgZG9jdW1lbnQpLCBnZXQgYSBkdW1teSBGcmFtZSB0byBiZQorICAgICAg
ICBhYmxlIHRvIGV2YWx1dGUgdGhlIHNjcmlwdC4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aW5pdCk6IFRha2UgYSBi
b29sIHRvIHN3aXRjaCBhbgorICAgICAgICBlbXB0eSBEb2N1bWVudCBjcmVhdGlvbi4KKworICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmZha2VMb2FkKTogRmFrZSByZW1vdmUgcmVzb3Vy
Y2UgbG9hZC4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAqIHBh
Z2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZUR1bW15RnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldER1bW15RnJhbWVGb3IpOgorICAgICAgICAq
IHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OlNWR0ltYWdlKTogUmVtb3ZlZCB1bnVzZWQgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkYXRhQ2hhbmdlZCk6IFVzZSB0aGUgZHVt
bXkgRnJhbWUgCisgICAgICAgIHdvcmstYXJvdW5kLgorCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmg6CisKIDIwMDgtMDYtMjAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggV2luZG93cyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzQ3MTMp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTYsNiArMzU2
LDEwIEBAIHB1YmxpYzoKICAgICBQYWdlKiBwYWdlKCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCiAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCiAKKyAgICAvLyBD
aGFuZ2luZyB0aGUgRG9jdW1lbnQgZnJhbWUgc2hvdWxkIG5vdCBvY2N1cnMgdW5kZXIgbm9ybWFs
IGNvbmRpdGlvbi4KKyAgICAvLyBDdXJyZW50bHkgb25seSB0aGUgZHVtbXlGcmFtZSBpc3N1ZSBy
ZXF1aXJlcyBpdC4KKyAgICB2b2lkIHNldEZyYW1lKEZyYW1lKiBmcmFtZSkgeyBtX2ZyYW1lID0g
ZnJhbWU7IH0KKwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZVJhbmdlKCk7CiAKICAgICBQ
YXNzUmVmUHRyPE5vZGVJdGVyYXRvcj4gY3JlYXRlTm9kZUl0ZXJhdG9yKE5vZGUqIHJvb3QsIHVu
c2lnbmVkIHdoYXRUb1Nob3csCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDM0NzEzKQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTc1LDExICs3NSwxMCBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpCiAgICAgICAgIGlmIChtX2V2YWx1YXRlZCB8fCBtX2NhY2hlZFNjcmlwdCB8fCBt
X2NyZWF0ZWRCeVBhcnNlciB8fCAhaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIC8vIEZJWE1FOiBFdmFsdWF0ZSBzY3JpcHRzIGluIHZpZXdsZXNzIGRvY3VtZW50
cy4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjcKLSAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIAorICAgICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKKyAgICAgICAg
aWYgKCFkb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBGcmFtZTo6c2V0RHVtbXlGcmFtZUZvcihk
b2MsIHRydWUpOworCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0gYXR0ci0+dmFs
dWUoKTsKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2NhY2hl
ZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVybCwgc2Ny
aXB0Q2hhcnNldCgpKTsKQEAgLTExMSwxMyArMTEwLDExIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3UKIAogICAgIGlmIChtX2NyZWF0ZWRCeVBhcnNlcikKICAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBl
dmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIGEgCi0gICAgLy8gdmlld2xl
c3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8gZm9yIG5vdy4KLSAgICAvLyBTZWUgaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwotICAgIGlmICghZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgRG9jdW1lbnQqIGRvYyA9IGRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBGcmFtZTo6c2V0
RHVtbXlGcmFtZUZvcihkb2MsIHRydWUpOworCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmwg
PSBnZXRBdHRyaWJ1dGUoc3JjQXR0cik7CiAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1fY2FjaGVkU2NyaXB0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3Jp
cHQodXJsLCBzY3JpcHRDaGFyc2V0KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2
aXNpb24gMzQ3MTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCBGcmFtZUxvYWRlcjo6fkZyYW1lTG9hZGVyKCkKICAg
ICBtX2NsaWVudC0+ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
cjo6aW5pdCgpCit2b2lkIEZyYW1lTG9hZGVyOjppbml0KGJvb2wgc2hvdWxkQ3JlYXRlRW1wdHlE
b2N1bWVudCkKIHsKICAgICAvLyB0aGlzIHNvbWV3aGF0IG9kZCBzZXQgb2Ygc3RlcHMgaXMgbmVl
ZGVkIHRvIGdpdmUgdGhlIGZyYW1lIGFuIGluaXRpYWwgZW1wdHkgZG9jdW1lbnQKICAgICBtX2lz
RGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50ID0gZmFsc2U7CkBAIC0yOTQsOCArMjk0LDEy
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmluaXQoKQogICAgIHNldFN0YXRlKEZyYW1lU3RhdGVQcm92
aXNpb25hbCk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zZXRSZXNwb25zZShS
ZXNvdXJjZVJlc3BvbnNlKEtVUkwoKSwgInRleHQvaHRtbCIsIDAsIFN0cmluZygpLCBTdHJpbmco
KSkpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+ZmluaXNoZWRMb2FkaW5nKCk7
Ci0gICAgYmVnaW4oS1VSTCgpLCBmYWxzZSk7Ci0gICAgZW5kKCk7CisKKyAgICBpZiAoc2hvdWxk
Q3JlYXRlRW1wdHlEb2N1bWVudCkgeworICAgICAgICBiZWdpbihLVVJMKCksIGZhbHNlKTsKKyAg
ICAgICAgZW5kKCk7CisgICAgfQorCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuY2VsUGFy
c2luZygpOwogICAgIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IGZhbHNlOwogICAg
IG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSB0cnVlOwpAQCAtMjI0OCw2ICsyMjUyLDE4IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWQoRG9jdW1lbnRMb2FkZXIqIGwKICAgICAgICAgY2FsbENvbnRp
bnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSwgdGhpcyk7CiB9CiAKK3ZvaWQgRnJhbWVMb2Fk
ZXI6OmZha2VMb2FkKFNoYXJlZEJ1ZmZlciogZGF0YSwgY29uc3QgY2hhciogTUlNRVR5cGUpCit7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1ZXN0KEtVUkwoIiIpKTsKKyAgICBsb2FkKGZh
a2VSZXF1ZXN0KTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCisg
ICAgY2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNr
cworICAgIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICBzZXRSZXNwb25zZU1JTUVUeXBl
KE1JTUVUeXBlKTsKKyAgICBiZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3Vt
ZW50CisgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIGVuZCgpOwor
fQorCiAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSB0aGVz
ZSBpbnRvIG9uZSBvciB0d28gZnVuY3Rpb25zLgogYm9vbCBGcmFtZUxvYWRlcjo6Y2FuTG9hZChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCiB7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgJKHJldmlzaW9uIDM0NzEzKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgRnJhbWVMb2FkZXIoRnJhbWUqLCBGcmFtZUxvYWRlckNsaWVudCopOwogICAgICAg
ICB+RnJhbWVMb2FkZXIoKTsKIAotICAgICAgICB2b2lkIGluaXQoKTsKKyAgICAgICAgdm9pZCBp
bml0KGJvb2wgc2hvdWxkQ3JlYXRlRW1wdHlEb2N1bWVudCA9IHRydWUpOwogCiAgICAgICAgIEZy
YW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIApAQCAtMTYyLDYgKzE2Miw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJh
bWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqKTsKICAgICAgICAg
dm9pZCBsb2FkQXJjaGl2ZShQYXNzUmVmUHRyPEFyY2hpdmU+IGFyY2hpdmUpOwogCisgICAgICAg
IHZvaWQgZmFrZUxvYWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBjb25zdCBjaGFyKiBNSU1FVHlwZSk7
CisKICAgICAgICAgc3RhdGljIGJvb2wgY2FuTG9hZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiByZWZlcnJlcik7CiAgICAgICAgIHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNv
bnN0IERvY3VtZW50Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGNhbkxvYWQoY29uc3QgQ2FjaGVk
UmVzb3VyY2UmLCBjb25zdCBEb2N1bWVudCopOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzNDcxMykK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwx
NCBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRUeXBlLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGll
bnQuaCIKKyNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
QEAgLTE5OSw2ICsyMDEsNDMgQEAgRnJhbWU6On5GcmFtZSgpCiAgICAgZCA9IDA7CiB9CiAKK1Bh
c3NSZWZQdHI8RnJhbWU+IEZyYW1lOjpjcmVhdGVEdW1teUZyYW1lKGJvb2wgc2hvdWxkRW5hYmxl
SmF2YVNjcmlwdCwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHN0YXRpYyBDaHJvbWVDbGll
bnQqIGR1bW15Q2hyb21lQ2xpZW50ID0gbmV3IEVtcHR5Q2hyb21lQ2xpZW50OworICAgIHN0YXRp
YyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9ICBuZXcgRW1wdHlG
cmFtZUxvYWRlckNsaWVudDsKKyAgICBzdGF0aWMgRWRpdG9yQ2xpZW50KiBkdW1teUVkaXRvckNs
aWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVudDsKKyAgICBzdGF0aWMgQ29udGV4dE1lbnVDbGll
bnQqIGR1bW15Q29udGV4dE1lbnVDbGllbnQgPSBuZXcgRW1wdHlDb250ZXh0TWVudUNsaWVudDsK
KyAgICBzdGF0aWMgRHJhZ0NsaWVudCogZHVtbXlEcmFnQ2xpZW50ID0gbmV3IEVtcHR5RHJhZ0Ns
aWVudDsKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVudCA9
IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKKworICAgIC8vIFRoZSBDYWNoZSBjb2RlIGRvZXMg
bm90IGtub3cgYWJvdXQgQ2FjaGVkSW1hZ2VzIGhvbGRpbmcgRnJhbWVzIGFuZCB3b24ndCBrbm93
IHRvIGJyZWFrIHRoZSBjeWNsZS4KKyAgICBQYWdlKiBwYWdlID0gbmV3IFBhZ2UoZHVtbXlDaHJv
bWVDbGllbnQsIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9yQ2xpZW50LCBkdW1t
eURyYWdDbGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KTsKKworICAgIHBhZ2UtPnNldHRpbmdz
KCktPnNldEphdmFTY3JpcHRFbmFibGVkKHNob3VsZEVuYWJsZUphdmFTY3JpcHQpOworCisgICAg
RnJhbWUqIGZyYW1lID0gbmV3IEZyYW1lKHBhZ2UsIDAsIGR1bW15RnJhbWVMb2FkZXJDbGllbnQp
OworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lKTsKKyAg
ICBmcmFtZS0+c2V0VmlldyhmcmFtZVZpZXcpOworCisgICAgaWYgKGRvY3VtZW50KSB7CisgICAg
ICAgIC8vIElmIGEgZG9jdW1lbnQgd2FzIHByb3ZpZGVkIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZQor
ICAgICAgICAvLyB0aGUgbG9hZGVyIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSBhbiBlbXB0eSBkb2N1
bWVudC4KKyAgICAgICAgZnJhbWUtPmQtPm1fZG9jID0gZG9jdW1lbnQ7CisgICAgICAgIGZyYW1l
LT5kLT5tX2xvYWRlci5pbml0KGZhbHNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnJhbWUtPmlu
aXQoKTsKKworICAgIHJldHVybiBhZG9wdFJlZihmcmFtZSk7Cit9CisKK3ZvaWQgRnJhbWU6OnNl
dER1bW15RnJhbWVGb3IoRG9jdW1lbnQqIGRvYywgYm9vbCBzaG91bGRFbmFibGVKYXZhU2NyaXB0
KQoreworICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSB0aGUgRG9jdW1lbnQgaWYgd2UgaGF2ZSBlbmFi
bGVkIEphdmFTY3JpcHQuCisgICAgUGFzc1JlZlB0cjxGcmFtZT4gZHVtbXlGcmFtZSA9IEZyYW1l
OjpjcmVhdGVEdW1teUZyYW1lKHNob3VsZEVuYWJsZUphdmFTY3JpcHQsIHNob3VsZEVuYWJsZUph
dmFTY3JpcHQgPyBkb2MgOiAwKTsKKyAgICBkb2MtPnNldEZyYW1lKGR1bW15RnJhbWUuZ2V0KCkp
OworfQorCiB2b2lkIEZyYW1lOjppbml0KCkKIHsKICAgICBkLT5tX2xvYWRlci5pbml0KCk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJh
bWUuaAkocmV2aXNpb24gMzQ3MTMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtODcsNiArODcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmlldyhGcmFtZVZp
ZXcqKTsKICAgICB+RnJhbWUoKTsKICAgICAKKyAgICAvLyBEdW1teSBmcmFtZSBtZXRob2RzLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVEdW1teUZyYW1lKGJvb2wgc2hvdWxk
RW5hYmxlSmF2YVNjcmlwdCwgRG9jdW1lbnQqID0gMCk7CisgICAgc3RhdGljIHZvaWQgc2V0RHVt
bXlGcmFtZUZvcihEb2N1bWVudCosIGJvb2wgc2hvdWxkRW5hYmxlSmF2YVNjcmlwdCk7CisKICAg
ICB2b2lkIGluaXQoKTsKIAogICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDM0NzEzKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikK
ICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9kb2N1bWVudCgwKQotICAgICwgbV9wYWdl
KDApCiAgICAgLCBtX2ZyYW1lKDApCi0gICAgLCBtX2ZyYW1lVmlldygwKQogewogfQogCkBAIC0x
OTQsMzQgKzE5MiwxMSBAQCBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFS
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGlmIChhbGxEYXRhUmVjZWl2ZWQpIHsK
LSAgICAgICAgc3RhdGljIENocm9tZUNsaWVudCogZHVtbXlDaHJvbWVDbGllbnQgPSBuZXcgRW1w
dHlDaHJvbWVDbGllbnQ7Ci0gICAgICAgIHN0YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlG
cmFtZUxvYWRlckNsaWVudCA9ICBuZXcgRW1wdHlGcmFtZUxvYWRlckNsaWVudDsKLSAgICAgICAg
c3RhdGljIEVkaXRvckNsaWVudCogZHVtbXlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0b3JD
bGllbnQ7Ci0gICAgICAgIHN0YXRpYyBDb250ZXh0TWVudUNsaWVudCogZHVtbXlDb250ZXh0TWVu
dUNsaWVudCA9IG5ldyBFbXB0eUNvbnRleHRNZW51Q2xpZW50OwotICAgICAgICBzdGF0aWMgRHJh
Z0NsaWVudCogZHVtbXlEcmFnQ2xpZW50ID0gbmV3IEVtcHR5RHJhZ0NsaWVudDsKLSAgICAgICAg
c3RhdGljIEluc3BlY3RvckNsaWVudCogZHVtbXlJbnNwZWN0b3JDbGllbnQgPSBuZXcgRW1wdHlJ
bnNwZWN0b3JDbGllbnQ7Ci0KLSAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgU1ZHIGVuZHMgdXAg
bG9hZGluZyBpdHNlbGYsIHdlJ2xsIGxlYWsgdGhpcyBGcmFtZSAoYW5kIGFzc29jaWF0ZWQgRE9N
ICYgcmVuZGVyIHRyZWVzKS4KLSAgICAgICAgLy8gVGhlIENhY2hlIGNvZGUgZG9lcyBub3Qga25v
dyBhYm91dCBDYWNoZWRJbWFnZXMgaG9sZGluZyBGcmFtZXMgYW5kIHdvbid0IGtub3cgdG8gYnJl
YWsgdGhlIGN5Y2xlLgotICAgICAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKGR1bW15Q2hyb21lQ2xp
ZW50LCBkdW1teUNvbnRleHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFn
Q2xpZW50LCBkdW1teUluc3BlY3RvckNsaWVudCkpOwotICAgICAgICBtX3BhZ2UtPnNldHRpbmdz
KCktPnNldEphdmFTY3JpcHRFbmFibGVkKGZhbHNlKTsKLQotICAgICAgICBtX2ZyYW1lID0gRnJh
bWU6OmNyZWF0ZShtX3BhZ2UuZ2V0KCksIDAsIGR1bW15RnJhbWVMb2FkZXJDbGllbnQpOwotICAg
ICAgICBtX2ZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcobV9mcmFtZS5nZXQoKSk7Ci0gICAgICAg
IG1fZnJhbWVWaWV3LT5kZXJlZigpOyAvLyBGSVhNRTogRnJhbWVWaWV3IHN0YXJ0cyB3aXRoIGEg
cmVmY291bnQgb2YgMQotICAgICAgICBtX2ZyYW1lLT5zZXRWaWV3KG1fZnJhbWVWaWV3LmdldCgp
KTsKLSAgICAgICAgbV9mcmFtZS0+aW5pdCgpOwotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgZmFr
ZVJlcXVlc3QoS1VSTCgiIikpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZChmYWtl
UmVxdWVzdCk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAotICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7IC8vIGNh
bmNlbCBhbnkgcG9saWN5IGNoZWNrcwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKDApOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0UmVzcG9u
c2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAotICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+d3JpdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKLSAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmVuZCgpOwotICAgICAgICBtX2ZyYW1lVmlldy0+c2V0
VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFyZW50LgorICAgICAg
ICBtX2ZyYW1lID0gRnJhbWU6OmNyZWF0ZUR1bW15RnJhbWUoZmFsc2UpOworICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+ZmFrZUxvYWQobV9kYXRhLmdldCgpLCAiaW1hZ2Uvc3ZnK3htbCIpOwor
ICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcgSW1h
Z2VzIGFyZSB0cmFuc3BhcmVudC4KICAgICB9Ci0gICAgcmV0dXJuIG1fZnJhbWVWaWV3OworICAg
IHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+dmlldygpIDogMDsKIH0KIAogfQpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAzNDcxMykKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgICAgICAKICAgICAgICAgU1ZHRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAg
IE93blB0cjxQYWdlPiBtX3BhZ2U7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKLSAg
ICAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV9mcmFtZVZpZXc7CiAgICAgICAgIEludFNpemUgbV9t
aW5TaXplOwogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZnJhbWVDYWNoZTsKICAgICB9
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMzQ3MTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0wNi0yMSAgSnVsaWVuIENoYWZmcmFp
eCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBCdWcgNTcyNzogV2Ugd2FudCB0byBldmFsdWF0ZSBzY3JpcHRz
IGluIHZpZXdsZXNzIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTcyNworCisgICAgICAgICogZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9j
dW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci92aWV3bGVz
cy1kb2N1bWVudC5odG1sOiBBZGRlZC4KKwogMjAwOC0wNi0yMCAgRGF2aWQgSHlhdHQgIDxoeWF0
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIENTUyB2YXJpYWJsZXMgd29yayBpbnNp
ZGUgdGhlIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci92aWV3bGVzcy1kb2N1bWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK2J1ZyA1NzI3OiBXZSB3YW50IHRv
IGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3MgZG9jdW1lbnRzCisKK1lvdSBzaG91bGQgc2Vl
IFBBU1NFRCBvbmNlLgorCitQQVNTRUQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Zp
ZXdsZXNzLWRvY3VtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBidWcgPGEgaHJlZj0iaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjciPjU3Mjc8L2E+OiBXZSB3YW50IHRv
IGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3MgZG9jdW1lbnRzIDwvcD4KKzxwPiBZb3Ugc2hv
dWxkIHNlZSBQQVNTRUQgb25jZS4gPC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisg
ICAgdmFyIHRlc3REb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgi
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJodG1sIiwgbnVsbCk7CisgICAgdmFyIHRl
c3RCb2R5ID0gdGVzdERvYy5jcmVhdGVFbGVtZW50KCJib2R5Iik7CisgICAgdmFyIHRlc3RQID0g
dGVzdERvYy5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgdGVzdFAuaWQgPSAicmVzdWx0IjsKKyAg
ICB0ZXN0UC5pbm5lckhUTUwgPSAiRkFJTEVEIjsKKyAgICB0ZXN0Qm9keS5hcHBlbmRDaGlsZCh0
ZXN0UCk7CisKKyAgICAvLyBDcmVhdGUgYSBzY3JpcHQgZWxlbWVudCBhbmQgZmlsbCBpdCB3aXRo
IGlubmVySFRNTCBzbyB0aGF0IGl0IGlzIGludGVycHJldGVkLgorICAgIC8vIFRoZSBzY3JpcHQg
dHJ5IHRvIG1vZGlmeSB0aGUgInAiIGVsZW1lbnQgd2UgaGF2ZSBqdXN0IGNyZWF0ZWQuCisgICAg
dmFyIHRlc3RTY3JpcHQgPSB0ZXN0RG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIsICJzY3JpcHQiKTsKKyAgICB0ZXN0U2NyaXB0LmlubmVySFRNTCA9ICJ2
YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpOyByZXN1bHQuaW5u
ZXJIVE1MID0gJ1BBU1NFRCc7IjsKKyAgICB0ZXN0Qm9keS5hcHBlbmRDaGlsZCh0ZXN0U2NyaXB0
KTsKKyAgICB0ZXN0RG9jLmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0ZXN0Qm9keSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRlc3RE
b2MuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTDsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="9605"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21939</attachid>
            <date>2008-06-25 16:43:26 -0700</date>
            <delta_ts>2008-07-24 11:39:00 -0700</delta_ts>
            <desc>3nd attempt - Correct minor issues and should not leak the Page</desc>
            <filename>bug5727-updated.patch</filename>
            <type>text/plain</type>
            <size>17929</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMDgtMDYtMjUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBk
b2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjcKKworICAgICAgICBBZGQgdGhlIHBvc2liaWxpdHkgdG8gZXZhbHVhdGUgc2NyaXB0IG9y
IGZldGNoIHJlc291cmNlcyBvbiB2aWV3bGVzcworICAgICAgICBkb2N1bWVudCB1c2luZyB0aGUg
RW1wdHlDbGllbnQgd29ya2Fyb3VuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGcmFtZSk6IE1ldGhvZCB0byBzZXQgdGhlIERvY3VtZW50
J3MKKyAgICAgICAgRnJhbWUsIGFkZGVkIGEgd2FybmluZyB0aGF0IGl0IHNob3VsZCBiZSB1c2Vk
IHVuZGVyIHNwZWNpYWwKKyAgICAgICAgY2lyY3Vtc3RhbmNlcy4KKworICAgICAgICAqIGh0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IElmIHRoZQorICAgICAgICBmcmFtZSBpcyBl
bXB0eSAodmlld2xlc3MgZG9jdW1lbnQpLCBnZXQgYSBkdW1teSBGcmFtZSB0byBiZQorICAgICAg
ICBhYmxlIHRvIGV2YWx1dGUgdGhlIHNjcmlwdC4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aW5pdCk6IFRha2UgYSBi
b29sIHRvIHRvb2dsZQorICAgICAgICBlbXB0eSBEb2N1bWVudCBjcmVhdGlvbi4KKworICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmZha2VMb2FkKTogRmFrZSByZW1vdGUgcmVzb3VyY2Ug
bG9hZC4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUR1bW15RnJhbWUp
OgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAqIHBhZ2UvRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmlzRHVtbXlGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0SXNEdW1teUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVByaXZhdGU6OkZyYW1lUHJp
dmF0ZSk6IEFkZGVkIG1faXNEdW1teUZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVQcml2
YXRlOjp+RnJhbWVQcml2YXRlKTogV2UgaGF2ZSB0byBmcmVlIHRoZSBQYWdlIGlmIGl0IGlzIGEg
ZHVtbXlGcmFtZQorICAgICAgICAoYSBkdW1teUZyYW1lIG93biBpdHMgUGFnZSkuCisKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDoKKworICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZTo6U1ZHSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2Vk
KTogVXNlIHRoZSBkdW1teSBGcmFtZQorICAgICAgICB3b3JrLWFyb3VuZC4KKworICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOiBSZW1vdmVkIHVudXNlZCBtZW1iZXJzLgorCiAyMDA4
LTA2LTI0ICBBbm9ueW1vdXMKIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4gIENv
bW1pdHRlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNDc5MykKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1Miw2ICs3NTIsMTAgQEAg
cHVibGljOgogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4
dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25z
dCBTdHJpbmcmIG5hbWUpOwogCisgICAgLy8gQ2hhbmdpbmcgdGhlIERvY3VtZW50IGZyYW1lIHNo
b3VsZCBub3Qgb2NjdXIgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMuCisgICAgLy8gQ3VycmVudGx5
IG9ubHkgY3JlYXRlRHVtbXlGcmFtZSByZXF1aXJlcyBpdC4KKyAgICB2b2lkIHNldEZyYW1lKEZy
YW1lKiBmcmFtZSkgeyBtX2ZyYW1lID0gZnJhbWU7IH0KKwogcHJvdGVjdGVkOgogICAgIERvY3Vt
ZW50KEZyYW1lKiwgYm9vbCBpc1hIVE1MKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
KyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03NSwxNCArNzUsMTMgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBpZiAobV9ldmFsdWF0ZWQgfHwgbV9jYWNoZWRT
Y3JpcHQgfHwgbV9jcmVhdGVkQnlQYXJzZXIgfHwgIWluRG9jdW1lbnQoKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICAvLyBGSVhNRTogRXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVz
cyBkb2N1bWVudHMuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzI3Ci0gICAgICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAg
IEZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lKGRvY3VtZW50KTsKKwogICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHVybCA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmICghdXJsLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudCgpLT5kb2NM
b2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1cmwsIHNjcmlwdENoYXJzZXQoKSk7CisgICAgICAgICAg
ICBtX2NhY2hlZFNjcmlwdCA9IHRoaXMtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0
U2NyaXB0KHVybCwgc2NyaXB0Q2hhcnNldCgpKTsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZFNj
cmlwdCkKICAgICAgICAgICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwog
ICAgICAgICAgICAgZWxzZQpAQCAtMTExLDE2ICsxMTAsMTQgQEAgdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdQogCiAgICAgaWYgKG1fY3JlYXRlZEJ5UGFyc2VyKQogICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnZCBsaWtlIHRv
IGV2YWx1YXRlIHNjcmlwdHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8gYSAKLSAgICAvLyB2aWV3
bGVzcyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Igbm93LgotICAgIC8vIFNlZSBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3Ci0gICAgaWYgKCFkb2N1bWVudCgp
LT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCisgICAg
ICAgIEZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lKGRvY3VtZW50KTsKKwogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJsID0gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwogICAgIGlmICghdXJs
LmlzRW1wdHkoKSkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xv
YWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVybCwgc2NyaXB0Q2hhcnNldCgpKTsKKyAgICAgICAgbV9j
YWNoZWRTY3JpcHQgPSB0aGlzLT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlw
dCh1cmwsIHNjcmlwdENoYXJzZXQoKSk7CiAgICAgICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKICAg
ICAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgIGVsc2UK
QEAgLTEzMyw3ICsxMzAsNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1CiAgICAgLy8gaXQgc2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9u
bHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9uY2UuCiAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IHRl
eHQoKTsgICAgCiAgICAgaWYgKCFzY3JpcHRTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBldmFs
dWF0ZVNjcmlwdChkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgc2NyaXB0U3RyaW5nKTsKKyAg
ICAgICAgZXZhbHVhdGVTY3JpcHQodGhpcy0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIHNj
cmlwdFN0cmluZyk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9j
dW1lbnQoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMzQ3OTMpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CkBAIC0yODQsNyArMjg1LDcgQEAgRnJhbWVMb2FkZXI6On5GcmFtZUxvYWRlcigpCiAgICAgbV9j
bGllbnQtPmZyYW1lTG9hZGVyRGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6Omlu
aXQoKQordm9pZCBGcmFtZUxvYWRlcjo6aW5pdChib29sIHNob3VsZENyZWF0ZUVtcHR5RG9jdW1l
bnQpCiB7CiAgICAgLy8gdGhpcyBzb21ld2hhdCBvZGQgc2V0IG9mIHN0ZXBzIGlzIG5lZWRlZCB0
byBnaXZlIHRoZSBmcmFtZSBhbiBpbml0aWFsIGVtcHR5IGRvY3VtZW50CiAgICAgbV9pc0Rpc3Bs
YXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IGZhbHNlOwpAQCAtMjk0LDggKzI5NSwxMiBAQCB2
b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlUHJvdmlzaW9u
YWwpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+c2V0UmVzcG9uc2UoUmVzb3Vy
Y2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpKTsK
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPmZpbmlzaGVkTG9hZGluZygpOwotICAg
IGJlZ2luKEtVUkwoKSwgZmFsc2UpOwotICAgIGVuZCgpOworCisgICAgaWYgKHNob3VsZENyZWF0
ZUVtcHR5RG9jdW1lbnQpIHsKKyAgICAgICAgYmVnaW4oS1VSTCgpLCBmYWxzZSk7CisgICAgICAg
IGVuZCgpOworICAgIH0KKwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmNhbmNlbFBhcnNpbmco
KTsKICAgICBtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBmYWxzZTsKICAgICBtX2Rp
ZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKQEAgLTIyNDgsNiArMjI1MywxOCBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpsb2FkKERvY3VtZW50TG9hZGVyKiBsCiAgICAgICAgIGNhbGxDb250aW51ZUxv
YWRBZnRlck5hdmlnYXRpb25Qb2xpY3ksIHRoaXMpOwogfQogCit2b2lkIEZyYW1lTG9hZGVyOjpm
YWtlTG9hZChTaGFyZWRCdWZmZXIqIGRhdGEsIGNvbnN0IGNoYXIqIE1JTUVUeXBlKQoreworICAg
IFJlc291cmNlUmVxdWVzdCBmYWtlUmVxdWVzdChLVVJMKCIiKSk7CisgICAgbG9hZChmYWtlUmVx
dWVzdCk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAorICAgIGNh
bmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKKyAg
ICBjb21taXRQcm92aXNpb25hbExvYWQoMCk7CisgICAgc2V0UmVzcG9uc2VNSU1FVHlwZShNSU1F
VHlwZSk7CisgICAgYmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAor
ICAgIHdyaXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBlbmQoKTsKK30KKwog
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgY29sbGFwc2UgdGhlc2UgaW50
byBvbmUgb3IgdHdvIGZ1bmN0aW9ucy4KIGJvb2wgRnJhbWVMb2FkZXI6OmNhbkxvYWQoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewpAQCAtNTAzNiw0ICs1MDUzLDM5
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN3aXRjaE91dExvd0JhbmR3aWR0aEQKIAogI2VuZGlmCiAK
K1Bhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBzdGF0aWMgQ2hyb21lQ2xpZW50KiBkdW1teUNocm9tZUNsaWVu
dCA9IG5ldyBFbXB0eUNocm9tZUNsaWVudDsKKyAgICBzdGF0aWMgRnJhbWVMb2FkZXJDbGllbnQq
IGR1bW15RnJhbWVMb2FkZXJDbGllbnQgPSAgbmV3IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ7Cisg
ICAgc3RhdGljIEVkaXRvckNsaWVudCogZHVtbXlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0
b3JDbGllbnQ7CisgICAgc3RhdGljIENvbnRleHRNZW51Q2xpZW50KiBkdW1teUNvbnRleHRNZW51
Q2xpZW50ID0gbmV3IEVtcHR5Q29udGV4dE1lbnVDbGllbnQ7CisgICAgc3RhdGljIERyYWdDbGll
bnQqIGR1bW15RHJhZ0NsaWVudCA9IG5ldyBFbXB0eURyYWdDbGllbnQ7CisgICAgc3RhdGljIElu
c3BlY3RvckNsaWVudCogZHVtbXlJbnNwZWN0b3JDbGllbnQgPSBuZXcgRW1wdHlJbnNwZWN0b3JD
bGllbnQ7CisKKyAgICAvLyBUaGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hl
ZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0aGUgY3ljbGUu
CisgICAgUGFnZSogcGFnZSA9IG5ldyBQYWdlKGR1bW15Q2hyb21lQ2xpZW50LCBkdW1teUNvbnRl
eHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFnQ2xpZW50LCBkdW1teUlu
c3BlY3RvckNsaWVudCk7CisKKyAgICAvLyBHaXZpbmcgYSBkb2N1bWVudCBpbXBsaWVzIHRoYXQg
d2UgbmVlZCB0byBleGVjdXRlIEphdmFTY3JpcHQuCisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0
SmF2YVNjcmlwdEVuYWJsZWQoZG9jdW1lbnQpOworCisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IEZyYW1lOjpjcmVhdGUocGFnZSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisKKyAgICAv
LyBUaGUgRnJhbWUgb3ducyBpdHMgUGFnZSBhbmQgaGFzIHRvIGZyZWUgaXQgd2hlbiByZWxlYXNl
ZC4KKyAgICBmcmFtZS0+c2V0SXNEdW1teUZyYW1lKHRydWUpOworICAgIGZyYW1lLT5zZXRWaWV3
KG5ldyBGcmFtZVZpZXcoZnJhbWUuZ2V0KCkpKTsKKworICAgIGlmIChkb2N1bWVudCkgeworICAg
ICAgICAvLyBJZiBhIGRvY3VtZW50IHdhcyBwcm92aWRlZCB3ZSBuZWVkIHRvIGluaXRpYWxpemUK
KyAgICAgICAgLy8gdGhlIGxvYWRlciBidXQgc2hvdWxkIG5vdCBjcmVhdGUgYW4gZW1wdHkgZG9j
dW1lbnQuCisgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChkb2N1bWVudCk7CisgICAgICAgIGZy
YW1lLT5sb2FkZXIoKS0+aW5pdChmYWxzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYW1lLT5p
bml0KCk7CisKKyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIGRvY3VtZW50LT5zZXRGcmFtZShm
cmFtZS5nZXQoKSk7CisKKyAgICByZXR1cm4gZnJhbWUucmVsZWFzZSgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDM0NzkzKQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcg
KzEzNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWVMb2FkZXIoRnJhbWUq
LCBGcmFtZUxvYWRlckNsaWVudCopOwogICAgICAgICB+RnJhbWVMb2FkZXIoKTsKIAotICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgdm9pZCBpbml0KGJvb2wgc2hvdWxkQ3JlYXRlRW1wdHlE
b2N1bWVudCA9IHRydWUpOwogCiAgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KIApAQCAtMTYyLDYgKzE2Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJlciwgRnJhbWUqKTsKICAgICAgICAgdm9pZCBsb2FkQXJjaGl2ZShQYXNzUmVmUHRy
PEFyY2hpdmU+IGFyY2hpdmUpOwogCisgICAgICAgIHZvaWQgZmFrZUxvYWQoU2hhcmVkQnVmZmVy
KiBkYXRhLCBjb25zdCBjaGFyKiBNSU1FVHlwZSk7CisKICAgICAgICAgc3RhdGljIGJvb2wgY2Fu
TG9hZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CiAgICAgICAgIHN0YXRp
YyBib29sIGNhbkxvYWQoY29uc3QgS1VSTCYsIGNvbnN0IERvY3VtZW50Kik7CiAgICAgICAgIHN0
YXRpYyBib29sIGNhbkxvYWQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBEb2N1bWVudCop
OwpAQCAtNDQ0LDYgKzQ0Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lk
IGFwcGx5VXNlckFnZW50KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0ZUR1bW15RnJhbWUoRG9jdW1lbnQqID0gMCk7CisK
ICAgICBwcml2YXRlOgogICAgICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVIaXN0
b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKTsKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRl
bT4gY3JlYXRlSGlzdG9yeUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRU
YXJnZXQpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDQsNiArMTIwNCwyMSBAQCBSZW5kZXJQYXJ0KiBG
cmFtZTo6b3duZXJSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clBhcnQqPihvYmplY3QpOwogfQogCitib29sIEZyYW1lOjppc0R1bW15RnJhbWUoKQoreworICAg
IHJldHVybiBkLT5tX2lzRHVtbXlGcmFtZTsKK30KKwordm9pZCBGcmFtZTo6c2V0SXNEdW1teUZy
YW1lKGJvb2wgaXNEdW1teUZyYW1lKQoreworICAgIGQtPm1faXNEdW1teUZyYW1lID0gaXNEdW1t
eUZyYW1lOworfQorCit2b2lkIEZyYW1lOjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQp
Cit7CisgICAgZC0+bV9kb2MgPSBkb2N1bWVudDsKK30KKwogLy8gcmV0dXJucyBGbG9hdFJlY3Qg
YmVjYXVzZSBnb2luZyB0aHJvdWdoIEludFJlY3Qgd291bGQgdHJ1bmNhdGUgYW55IGZsb2F0cwog
RmxvYXRSZWN0IEZyYW1lOjpzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQp
IGNvbnN0CiB7CkBAIC0xOTM2LDYgKzE5NTEsNyBAQCBGcmFtZVByaXZhdGU6OkZyYW1lUHJpdmF0
ZShQYWdlKiBwYWdlLCBGCiAgICAgLCBmcmFtZUNvdW50KDApCiAgICAgLCBtX3Byb2hpYml0c1Nj
cm9sbGluZyhmYWxzZSkKICAgICAsIG1fbmVlZHNSZWFwcGx5U3R5bGVzKGZhbHNlKQorICAgICwg
bV9pc0R1bW15RnJhbWUoZmFsc2UpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgLCBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KDApCiAjZW5kaWYKQEAgLTE5NTAsNiArMTk2Niw5
IEBAIEZyYW1lUHJpdmF0ZTo6RnJhbWVQcml2YXRlKFBhZ2UqIHBhZ2UsIEYKIAogRnJhbWVQcml2
YXRlOjp+RnJhbWVQcml2YXRlKCkKIHsKKyAgICAvLyBBIGR1bW15RnJhbWUgb3ducyBpdHMgUGFn
ZS4KKyAgICBpZiAobV9pc0R1bW15RnJhbWUpCisgICAgICAgIGRlbGV0ZSBtX3BhZ2U7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNv
cmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDEyIEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJWaWV3KiBjb250ZW50UmVuZGVyZXIoKSBjb25zdDsgLy8gcm9vdCByZW5k
ZXJlciBmb3IgdGhlIGRvY3VtZW50IGNvbnRhaW5lZCBpbiB0aGlzIGZyYW1lCiAgICAgUmVuZGVy
UGFydCogb3duZXJSZW5kZXJlcigpIGNvbnN0OyAvLyByZW5kZXJlciBmb3IgdGhlIGVsZW1lbnQg
dGhhdCBjb250YWlucyB0aGlzIGZyYW1lCiAKKyAgICB2b2lkIHNldElzRHVtbXlGcmFtZShib29s
KTsKKyAgICBib29sIGlzRHVtbXlGcmFtZSgpOworCisgICAgLy8gVGhpcyBtZXRob2QgaXMgb25s
eSB1c2VkIGJ5IEZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lLgorICAgIHZvaWQgc2V0RG9j
dW1lbnQoRG9jdW1lbnQqKTsKKwogICAgIGZyaWVuZCBjbGFzcyBGcmFtZVByaXZhdGU7CiAKIHBy
aXZhdGU6CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNvcmUv
cGFnZS9GcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVGhlIHJvb3Qgb2JqZWN0IHVzZWQgZm9yIG9i
amVjdHMgYm91bmQgb3V0c2lkZSB0aGUgY29udGV4dCBvZiBhIHBsdWdpbi4KICAgICAgICAgUmVm
UHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IG1fYmluZGluZ1Jvb3RPYmplY3Q7IAogICAg
ICAgICBSb290T2JqZWN0TWFwIG1fcm9vdE9iamVjdHM7CisKKyAgICAgICAgYm9vbCBtX2lzRHVt
bXlGcmFtZTsKKwogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICBOUE9i
amVjdCogbV93aW5kb3dTY3JpcHROUE9iamVjdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMzQ3OTMpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogU1ZHSW1hZ2U6OlNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAg
IDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2RvY3VtZW50KDApCi0gICAgLCBtX3BhZ2UoMCkK
ICAgICAsIG1fZnJhbWUoMCkKLSAgICAsIG1fZnJhbWVWaWV3KDApCiB7CiB9CiAKQEAgLTE5NCwz
NCArMTkyLDExIEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVIKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgaWYgKGFsbERhdGFSZWNlaXZlZCkgewotICAg
ICAgICBzdGF0aWMgQ2hyb21lQ2xpZW50KiBkdW1teUNocm9tZUNsaWVudCA9IG5ldyBFbXB0eUNo
cm9tZUNsaWVudDsKLSAgICAgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xpZW50KiBkdW1teUZyYW1l
TG9hZGVyQ2xpZW50ID0gIG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OwotICAgICAgICBzdGF0
aWMgRWRpdG9yQ2xpZW50KiBkdW1teUVkaXRvckNsaWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVu
dDsKLSAgICAgICAgc3RhdGljIENvbnRleHRNZW51Q2xpZW50KiBkdW1teUNvbnRleHRNZW51Q2xp
ZW50ID0gbmV3IEVtcHR5Q29udGV4dE1lbnVDbGllbnQ7Ci0gICAgICAgIHN0YXRpYyBEcmFnQ2xp
ZW50KiBkdW1teURyYWdDbGllbnQgPSBuZXcgRW1wdHlEcmFnQ2xpZW50OwotICAgICAgICBzdGF0
aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVudCA9IG5ldyBFbXB0eUluc3Bl
Y3RvckNsaWVudDsKLQotICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1cCBsb2Fk
aW5nIGl0c2VsZiwgd2UnbGwgbGVhayB0aGlzIEZyYW1lIChhbmQgYXNzb2NpYXRlZCBET00gJiBy
ZW5kZXIgdHJlZXMpLgotICAgICAgICAvLyBUaGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFi
b3V0IENhY2hlZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0
aGUgY3ljbGUuCi0gICAgICAgIG1fcGFnZS5zZXQobmV3IFBhZ2UoZHVtbXlDaHJvbWVDbGllbnQs
IGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9yQ2xpZW50LCBkdW1teURyYWdDbGll
bnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KSk7Ci0gICAgICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+
c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2UpOwotCi0gICAgICAgIG1fZnJhbWUgPSBGcmFtZTo6
Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7Ci0gICAgICAg
IG1fZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhtX2ZyYW1lLmdldCgpKTsKLSAgICAgICAgbV9m
cmFtZVZpZXctPmRlcmVmKCk7IC8vIEZJWE1FOiBGcmFtZVZpZXcgc3RhcnRzIHdpdGggYSByZWZj
b3VudCBvZiAxCi0gICAgICAgIG1fZnJhbWUtPnNldFZpZXcobV9mcmFtZVZpZXcuZ2V0KCkpOwot
ICAgICAgICBtX2ZyYW1lLT5pbml0KCk7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCBmYWtlUmVx
dWVzdChLVVJMKCIiKSk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkKGZha2VSZXF1
ZXN0KTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCi0gICAgICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxDb250ZW50UG9saWN5Q2hlY2soKTsgLy8gY2FuY2Vs
IGFueSBwb2xpY3kgY2hlY2tzCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb21taXRQcm92
aXNpb25hbExvYWQoMCk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zZXRSZXNwb25zZU1J
TUVUeXBlKCJpbWFnZS9zdmcreG1sIik7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5iZWdp
bihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50Ci0gICAgICAgIG1fZnJhbWUt
PmxvYWRlcigpLT53cml0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgICAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZW5kKCk7Ci0gICAgICAgIG1fZnJhbWVWaWV3LT5zZXRUcmFu
c3BhcmVudCh0cnVlKTsgLy8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJlbnQuCisgICAgICAgIG1f
ZnJhbWUgPSBGcmFtZUxvYWRlcjo6Y3JlYXRlRHVtbXlGcmFtZSgpOworICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZmFrZUxvYWQobV9kYXRhLmdldCgpLCAiaW1hZ2Uvc3ZnK3htbCIpOworICAg
ICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcgSW1hZ2Vz
IGFyZSB0cmFuc3BhcmVudC4KICAgICB9Ci0gICAgcmV0dXJuIG1fZnJhbWVWaWV3OworICAgIHJl
dHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+dmlldygpIDogMDsKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAzNDc5MykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwogICAgICAgICAKICAgICAgICAgU1ZHRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgIE93
blB0cjxQYWdlPiBtX3BhZ2U7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKLSAgICAg
ICAgUmVmUHRyPEZyYW1lVmlldz4gbV9mcmFtZVZpZXc7CiAgICAgICAgIEludFNpemUgbV9taW5T
aXplOwogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZnJhbWVDYWNoZTsKICAgICB9OwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMzQ3OTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0wNi0yNSAgSnVsaWVuIENoYWZmcmFpeCAg
PGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBCdWcgNTcyNzogV2Ugd2FudCB0byBldmFsdWF0ZSBzY3JpcHRzIGlu
IHZpZXdsZXNzIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTcyNworCisgICAgICAgICogZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1l
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci92aWV3bGVzcy1k
b2N1bWVudC5odG1sOiBBZGRlZC4KKwogMjAwOC0wNi0yNCAgQW5vbnltb3VzCiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuICBDb21taXR0ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAor
YnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBkb2N1bWVu
dHMKKworWW91IHNob3VsZCBzZWUgUEFTU0VEIG9uY2UuCisKK1BBU1NFRApJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPHA+IGJ1
ZyA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNyI+
NTcyNzwvYT46IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBkb2N1bWVu
dHMgPC9wPgorPHA+IFlvdSBzaG91bGQgc2VlIFBBU1NFRCBvbmNlLiA8L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgICB2YXIgdGVzdERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0
aW9uLmNyZWF0ZURvY3VtZW50KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgImh0bWwi
LCBudWxsKTsKKyAgICB2YXIgdGVzdEJvZHkgPSB0ZXN0RG9jLmNyZWF0ZUVsZW1lbnQoImJvZHki
KTsKKyAgICB2YXIgdGVzdFAgPSB0ZXN0RG9jLmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICB0ZXN0
UC5pZCA9ICJyZXN1bHQiOworICAgIHRlc3RQLmlubmVySFRNTCA9ICJGQUlMRUQiOworICAgIHRl
c3RCb2R5LmFwcGVuZENoaWxkKHRlc3RQKTsKKworICAgIC8vIENyZWF0ZSBhIHNjcmlwdCBlbGVt
ZW50IGFuZCBmaWxsIGl0IHdpdGggaW5uZXJIVE1MIHNvIHRoYXQgaXQgaXMgaW50ZXJwcmV0ZWQu
CisgICAgLy8gVGhlIHNjcmlwdCB0cnkgdG8gbW9kaWZ5IHRoZSAicCIgZWxlbWVudCB3ZSBoYXZl
IGp1c3QgY3JlYXRlZC4KKyAgICB2YXIgdGVzdFNjcmlwdCA9IHRlc3REb2MuY3JlYXRlRWxlbWVu
dE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgInNjcmlwdCIpOworICAgIHRlc3RT
Y3JpcHQuaW5uZXJIVE1MID0gInZhciByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
cmVzdWx0Jyk7IHJlc3VsdC5pbm5lckhUTUwgPSAnUEFTU0VEJzsiOworICAgIHRlc3RCb2R5LmFw
cGVuZENoaWxkKHRlc3RTY3JpcHQpOworICAgIHRlc3REb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVu
ZENoaWxkKHRlc3RCb2R5KTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuaW5uZXJIVE1MID0gdGVzdERvYy5nZXRFbGVtZW50QnlJZCgncmVzdWx0JykuaW5uZXJIVE1M
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="9640"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23746</attachid>
            <date>2008-09-24 04:06:14 -0700</date>
            <delta_ts>2008-10-06 18:22:57 -0700</delta_ts>
            <desc>Next iteration: updated to ToT, should address the lastest comments</desc>
            <filename>bug5727-updated2.patch</filename>
            <type>text/plain</type>
            <size>17146</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMDktMjQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBk
b2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjcKKworICAgICAgICBBZGQgdGhlIHBvc2liaWxpdHkgdG8gZXZhbHVhdGUgc2NyaXB0IG9y
IGZldGNoIHJlc291cmNlcyBvbiB2aWV3bGVzcworICAgICAgICBkb2N1bWVudCB1c2luZyB0aGUg
RW1wdHlDbGllbnQgd29ya2Fyb3VuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGcmFtZSk6IE1ldGhvZCB0byBzZXQgdGhlIERvY3VtZW50
J3MKKyAgICAgICAgRnJhbWUsIGFkZGVkIGEgd2FybmluZyB0aGF0IGl0IHNob3VsZCBiZSB1c2Vk
IHVuZGVyIHNwZWNpYWwKKyAgICAgICAgY2lyY3Vtc3RhbmNlcy4KKworICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpy
ZXF1ZXN0U2NyaXB0KTogSWYgdGhlCisgICAgICAgIGZyYW1lIGlzIGVtcHR5ICh2aWV3bGVzcyBk
b2N1bWVudCksIGdldCBhIGR1bW15IEZyYW1lIHRvIGJlCisgICAgICAgIGFibGUgdG8gZXZhbHV0
ZSB0aGUgc2NyaXB0LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OmV2YWx1
YXRlU2NyaXB0KTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQpOiBUYWtlIGEgYm9vbCB0byB0b29n
bGUKKyAgICAgICAgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpmYWtlTG9hZCk6IEZha2UgcmVtb3RlIHJlc291cmNlIGxvYWQuCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppc0R1bW15RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldElzRHVtbXlGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1l
bnQpOgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVByaXZhdGU6OkZyYW1lUHJpdmF0ZSk6IEFk
ZGVkIG1faXNEdW1teUZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVQcml2YXRlOjp+RnJh
bWVQcml2YXRlKTogV2UgaGF2ZSB0byBmcmVlIHRoZSBQYWdlIGlmIGl0IGlzIGEgZHVtbXlGcmFt
ZQorICAgICAgICAoYSBkdW1teUZyYW1lIG93biBpdHMgUGFnZSkuCisKKyAgICAgICAgKiBwYWdl
L0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDoKKworICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6U1ZH
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKTogVXNlIHRo
ZSBkdW1teSBGcmFtZQorICAgICAgICB3b3JrLWFyb3VuZC4KKworICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5oOiBSZW1vdmVkIHVudXNlZCBtZW1iZXJzLgorCiAyMDA4LTA5LTIzICBK
dWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEBwbGV5by5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWxwIFRva2VyLiBMYW5kZWQgYnkgSmFuIEFsb256by4KSW5kZXg6IFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNp
b24gMzY4NDYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NjcsNiArNzY3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRETlNQcmVmZXRjaCgpOwogICAg
IHZvaWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKKyAg
ICAvLyBDaGFuZ2luZyB0aGUgRG9jdW1lbnQgZnJhbWUgc2hvdWxkIG5vdCBvY2N1ciB1bmRlciBu
b3JtYWwgY29uZGl0aW9ucy4KKyAgICAvLyBDdXJyZW50bHkgb25seSBjcmVhdGVEdW1teUZyYW1l
IHJlcXVpcmVzIGl0LgorICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUqIGZyYW1lKSB7IG1fZnJhbWUg
PSBmcmFtZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhU
TUwpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMzY4NDYpCisrKyBXZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMs
OCBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpyZXF1ZXN0U2NyaXB0KGNvCiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpOwogCi0gICAgLy8gRklYTUU6
IEV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGV2YWx1YXRlIHNjcmlwdHMgd2hpY2ggYXJlIGluc2Vy
dGVkIGludG8gYSAKLSAgICAvLyB2aWV3bGVzcyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Ig
bm93LgotICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzI3CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBGcmFtZUxvYWRlcjo6Y3JlYXRlRHVtbXlGcmFtZShkb2N1bWVudCk7CiAKICAgICBBU1NFUlQo
IW1fY2FjaGVkU2NyaXB0KTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50LT5kb2NMb2Fk
ZXIoKS0+cmVxdWVzdFNjcmlwdChzb3VyY2VVcmwsIHNjcmlwdENoYXJzZXQoKSk7CkBAIC0xNjAs
MTcgKzE1NywyNCBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdChjCiAg
ICAgaWYgKG1fZXZhbHVhdGVkIHx8IGNvbnRlbnQuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRl
QXNKYXZhU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGcmFtZSogZnJhbWUg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1f
ZXZhbHVhdGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBGSVhNRTogVGhpcyBzdGFydGluZyBsaW5l
IG51bWJlciB3aWxsIGJlIGluY29ycmVjdCBmb3IgZXZhbHVhdGlvbiB0cmlnZ2VyZWQKLSAgICAg
ICAgLy8gZnJvbSBpbnNlcnRlZEludG9Eb2N1bWVudCBvciBjaGlsZHJlbkNoYW5nZWQuCi0gICAg
ICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGUoc291cmNlVXJsLCAxLCBjb250ZW50KTsKLSAg
ICAgICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOworICAgIEZyYW1lKiBm
cmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAvLyBIYW5kbGUgdmll
d2xlc3MgZG9jdW1lbnQKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgIEZyYW1lTG9hZGVyOjpj
cmVhdGVEdW1teUZyYW1lKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGZyYW1lID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIH0KKworICAgIEFTU0VSVChmcmFt
ZSk7CisKKyAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+aXNFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZXZhbHVhdGVkID0gdHJ1ZTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHN0
YXJ0aW5nIGxpbmUgbnVtYmVyIHdpbGwgYmUgaW5jb3JyZWN0IGZvciBldmFsdWF0aW9uIHRyaWdn
ZXJlZAorICAgIC8vIGZyb20gaW5zZXJ0ZWRJbnRvRG9jdW1lbnQgb3IgY2hpbGRyZW5DaGFuZ2Vk
LgorICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGUoc291cmNlVXJsLCAxLCBjb250ZW50KTsK
KyAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7CiB9CiAKIHZvaWQgU2Ny
aXB0RWxlbWVudERhdGE6OnN0b3BMb2FkUmVxdWVzdCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiAzNjg0NikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
bXB0eUNsaWVudHMuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTI4NCw3ICsyODUsNyBAQCBGcmFtZUxvYWRl
cjo6fkZyYW1lTG9hZGVyKCkKICAgICBtX2NsaWVudC0+ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6aW5pdCgpCit2b2lkIEZyYW1lTG9hZGVyOjppbml0KGJv
b2wgc2hvdWxkQ3JlYXRlRW1wdHlEb2N1bWVudCkKIHsKICAgICAvLyB0aGlzIHNvbWV3aGF0IG9k
ZCBzZXQgb2Ygc3RlcHMgaXMgbmVlZGVkIHRvIGdpdmUgdGhlIGZyYW1lIGFuIGluaXRpYWwgZW1w
dHkgZG9jdW1lbnQKICAgICBtX2lzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50ID0gZmFs
c2U7CkBAIC0yOTQsOCArMjk1LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmluaXQoKQogICAgIHNl
dFN0YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKEtVUkwoKSwgInRleHQvaHRtbCIs
IDAsIFN0cmluZygpLCBTdHJpbmcoKSkpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
ci0+ZmluaXNoZWRMb2FkaW5nKCk7Ci0gICAgYmVnaW4oS1VSTCgpLCBmYWxzZSk7Ci0gICAgZW5k
KCk7CisKKyAgICBpZiAoc2hvdWxkQ3JlYXRlRW1wdHlEb2N1bWVudCkgeworICAgICAgICBiZWdp
bihLVVJMKCksIGZhbHNlKTsKKyAgICAgICAgZW5kKCk7CisgICAgfQorCiAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlE
b2N1bWVudCA9IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSB0cnVlOwpAQCAt
MjI5Myw2ICsyMjk4LDE4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNhbkxvYWQoY29uc3QgS1VSTCYg
dXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEZyYW1lTG9hZGVyOjpmYWtlTG9h
ZChTaGFyZWRCdWZmZXIqIGRhdGEsIGNvbnN0IGNoYXIqIE1JTUVUeXBlKQoreworICAgIFJlc291
cmNlUmVxdWVzdCBmYWtlUmVxdWVzdChLVVJMKCIiKSk7CisgICAgbG9hZChmYWtlUmVxdWVzdCk7
IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAorICAgIGNhbmNlbENv
bnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKKyAgICBjb21t
aXRQcm92aXNpb25hbExvYWQoMCk7CisgICAgc2V0UmVzcG9uc2VNSU1FVHlwZShNSU1FVHlwZSk7
CisgICAgYmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAorICAgIHdy
aXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBlbmQoKTsKK30KKwogdm9pZCBG
cmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKQEAgLTUxMzEsNCArNTE0
OCw0MiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzd2l0Y2hPdXRMb3dCYW5kd2lkdGhECiAKICNlbmRp
ZgogCitQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlcjo6Y3JlYXRlRHVtbXlGcmFtZShEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgc3RhdGljIENocm9tZUNsaWVudCogZHVtbXlDaHJvbWVD
bGllbnQgPSBuZXcgRW1wdHlDaHJvbWVDbGllbnQ7CisgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xp
ZW50KiBkdW1teUZyYW1lTG9hZGVyQ2xpZW50ID0gIG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
OworICAgIHN0YXRpYyBFZGl0b3JDbGllbnQqIGR1bW15RWRpdG9yQ2xpZW50ID0gbmV3IEVtcHR5
RWRpdG9yQ2xpZW50OworICAgIHN0YXRpYyBDb250ZXh0TWVudUNsaWVudCogZHVtbXlDb250ZXh0
TWVudUNsaWVudCA9IG5ldyBFbXB0eUNvbnRleHRNZW51Q2xpZW50OworICAgIHN0YXRpYyBEcmFn
Q2xpZW50KiBkdW1teURyYWdDbGllbnQgPSBuZXcgRW1wdHlEcmFnQ2xpZW50OworICAgIHN0YXRp
YyBJbnNwZWN0b3JDbGllbnQqIGR1bW15SW5zcGVjdG9yQ2xpZW50ID0gbmV3IEVtcHR5SW5zcGVj
dG9yQ2xpZW50OworCisgICAgLy8gVGhlIENhY2hlIGNvZGUgZG9lcyBub3Qga25vdyBhYm91dCBD
YWNoZWRJbWFnZXMgaG9sZGluZyBGcmFtZXMgYW5kIHdvbid0IGtub3cgdG8gYnJlYWsgdGhlIGN5
Y2xlLgorICAgIFBhZ2UqIHBhZ2UgPSBuZXcgUGFnZShkdW1teUNocm9tZUNsaWVudCwgZHVtbXlD
b250ZXh0TWVudUNsaWVudCwgZHVtbXlFZGl0b3JDbGllbnQsIGR1bW15RHJhZ0NsaWVudCwgZHVt
bXlJbnNwZWN0b3JDbGllbnQpOworCisgICAgLy8gR2l2aW5nIGEgZG9jdW1lbnQgaW1wbGllcyB0
aGF0IHdlIG5lZWQgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0LgorICAgIHBhZ2UtPnNldHRpbmdzKCkt
PnNldEphdmFTY3JpcHRFbmFibGVkKGRvY3VtZW50KTsKKworICAgIC8vIERpc2FibGUgcGx1Z2lu
cyBvbiBkdW1teSBmcmFtZSAoaXQgY3Jhc2hlcyBvbiBRdCkuCisgICAgcGFnZS0+c2V0dGluZ3Mo
KS0+c2V0UGx1Z2luc0VuYWJsZWQoZmFsc2UpOworCisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IEZyYW1lOjpjcmVhdGUocGFnZSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisKKyAgICAv
LyBUaGUgRnJhbWUgb3ducyBpdHMgUGFnZSBhbmQgaGFzIHRvIGZyZWUgaXQgd2hlbiByZWxlYXNl
ZC4KKyAgICBmcmFtZS0+c2V0SXNEdW1teUZyYW1lKHRydWUpOworICAgIGZyYW1lLT5zZXRWaWV3
KG5ldyBGcmFtZVZpZXcoZnJhbWUuZ2V0KCkpKTsKKworICAgIGlmIChkb2N1bWVudCkgeworICAg
ICAgICAvLyBJZiBhIGRvY3VtZW50IHdhcyBwcm92aWRlZCB3ZSBuZWVkIHRvIGluaXRpYWxpemUK
KyAgICAgICAgLy8gdGhlIGxvYWRlciBidXQgc2hvdWxkIG5vdCBjcmVhdGUgYW4gZW1wdHkgZG9j
dW1lbnQuCisgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChkb2N1bWVudCk7CisgICAgICAgIGZy
YW1lLT5sb2FkZXIoKS0+aW5pdChmYWxzZSk7CisgICAgfSBlbHNlCisgICAgICAgIGZyYW1lLT5p
bml0KCk7CisKKyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIGRvY3VtZW50LT5zZXRGcmFtZShm
cmFtZS5nZXQoKSk7CisKKyAgICByZXR1cm4gZnJhbWUucmVsZWFzZSgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDM2ODQ2KQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcg
KzEzNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWVMb2FkZXIoRnJhbWUq
LCBGcmFtZUxvYWRlckNsaWVudCopOwogICAgICAgICB+RnJhbWVMb2FkZXIoKTsKIAotICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgdm9pZCBpbml0KGJvb2wgc2hvdWxkQ3JlYXRlRW1wdHlE
b2N1bWVudCA9IHRydWUpOwogCiAgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KIApAQCAtMTY3LDYgKzE2Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEFyY2hpdmUoUGFzc1JlZlB0cjxBcmNoaXZlPiBhcmNo
aXZlKTsKIAorICAgICAgICB2b2lkIGZha2VMb2FkKFNoYXJlZEJ1ZmZlciogZGF0YSwgY29uc3Qg
Y2hhciogTUlNRVR5cGUpOworCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBmb3IgYW55IG5vbi1s
b2NhbCBVUkwuIElmIERvY3VtZW50IHBhcmFtZXRlciBpcyBzdXBwbGllZCwgaXRzIGxvY2FsIGxv
YWQgcG9saWN5IGRpY3RhdGVzLAogICAgICAgICAvLyBvdGhlcndpc2UgaWYgcmVmZXJyZXIgaXMg
bm9uLWVtcHR5IGFuZCByZXByZXNlbnRzIGEgbG9jYWwgZmlsZSwgdGhlbiB0aGUgbG9jYWwgbG9h
ZCBpcyBhbGxvd2VkLgogICAgICAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBEb2N1bWVudCogdGhlRG9jdW1lbnQgPSAwKTsK
QEAgLTQ1OCw2ICs0NjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBh
cHBseVVzZXJBZ2VudChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVEdW1teUZyYW1lKERvY3VtZW50KiA9IDApOworCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSGlzdG9y
eUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CiAgICAgICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+
IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFy
Z2V0KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMzY4NDYpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE0LDYgKzExMTQsMjEgQEAgdm9pZCBGcmFtZTo6c2V0
RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJvbwogICAgIGQtPm1fZXhjbHVkZUZyb21UZXh0U2VhcmNo
ID0gZXhjbHVkZTsKIH0KIAorYm9vbCBGcmFtZTo6aXNEdW1teUZyYW1lKCkKK3sKKyAgICByZXR1
cm4gZC0+bV9pc0R1bW15RnJhbWU7Cit9CisKK3ZvaWQgRnJhbWU6OnNldElzRHVtbXlGcmFtZShi
b29sIGlzRHVtbXlGcmFtZSkKK3sKKyAgICBkLT5tX2lzRHVtbXlGcmFtZSA9IGlzRHVtbXlGcmFt
ZTsKK30KKwordm9pZCBGcmFtZTo6c2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIGQtPm1fZG9jID0gZG9jdW1lbnQ7Cit9CisKIC8vIHJldHVybnMgRmxvYXRSZWN0IGJlY2F1
c2UgZ29pbmcgdGhyb3VnaCBJbnRSZWN0IHdvdWxkIHRydW5jYXRlIGFueSBmbG9hdHMKIEZsb2F0
UmVjdCBGcmFtZTo6c2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25z
dAogewpAQCAtMTg4NCw2ICsxODk5LDcgQEAgRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFn
ZSogcGFnZSwgRgogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMoZmFsc2UpCiAgICAgLCBtX2lz
RGlzY29ubmVjdGVkKGZhbHNlKQogICAgICwgbV9leGNsdWRlRnJvbVRleHRTZWFyY2goZmFsc2Up
CisgICAgLCBtX2lzRHVtbXlGcmFtZShmYWxzZSkKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxF
U0hFRVQKICAgICAsIG1fdXNlclN0eWxlU2hlZXRMb2FkZXIoMCkKICNlbmRpZgpAQCAtMTg5Miw2
ICsxOTA4LDkgQEAgRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFnZSogcGFnZSwgRgogCiBG
cmFtZVByaXZhdGU6On5GcmFtZVByaXZhdGUoKQogeworICAgIC8vIEEgZHVtbXlGcmFtZSBvd25z
IGl0cyBQYWdlLgorICAgIGlmIChtX2lzRHVtbXlGcmFtZSkKKyAgICAgICAgZGVsZXRlIG1fcGFn
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDM2ODQ2KQor
KysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTIg
QEAgcHVibGljOgogICAgIGJvb2wgZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRFeGNsdWRlRnJvbVRleHRTZWFyY2goYm9vbCk7CiAKKyAgICB2b2lkIHNldElzRHVt
bXlGcmFtZShib29sKTsKKyAgICBib29sIGlzRHVtbXlGcmFtZSgpOworCisgICAgLy8gVGhpcyBt
ZXRob2QgaXMgb25seSB1c2VkIGJ5IEZyYW1lTG9hZGVyOjpjcmVhdGVEdW1teUZyYW1lLgorICAg
IHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqKTsKKwogICAgIGZyaWVuZCBjbGFzcyBGcmFtZVBy
aXZhdGU7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiAzNjg0NikK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr
OTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9pc0Rpc2Nvbm5lY3Rl
ZDsKICAgICAgICAgYm9vbCBtX2V4Y2x1ZGVGcm9tVGV4dFNlYXJjaDsKIAorICAgICAgICBib29s
IG1faXNEdW1teUZyYW1lOwogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAogICAgICAg
ICBVc2VyU3R5bGVTaGVldExvYWRlciogbV91c2VyU3R5bGVTaGVldExvYWRlcjsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMzY4NDYpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogU1ZHSW1hZ2U6OlNWR0ltYWdlKEltYWdlT2JzZXJ2
ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2RvY3VtZW50KDAp
Ci0gICAgLCBtX3BhZ2UoMCkKICAgICAsIG1fZnJhbWUoMCkKLSAgICAsIG1fZnJhbWVWaWV3KDAp
CiB7CiB9CiAKQEAgLTE4NSwzNSArMTgzLDExIEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2Vk
KGJvb2wgYWxsRGF0YVIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgaWYgKGFsbERh
dGFSZWNlaXZlZCkgewotICAgICAgICBzdGF0aWMgQ2hyb21lQ2xpZW50KiBkdW1teUNocm9tZUNs
aWVudCA9IG5ldyBFbXB0eUNocm9tZUNsaWVudDsKLSAgICAgICAgc3RhdGljIEZyYW1lTG9hZGVy
Q2xpZW50KiBkdW1teUZyYW1lTG9hZGVyQ2xpZW50ID0gIG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50OwotICAgICAgICBzdGF0aWMgRWRpdG9yQ2xpZW50KiBkdW1teUVkaXRvckNsaWVudCA9IG5l
dyBFbXB0eUVkaXRvckNsaWVudDsKLSAgICAgICAgc3RhdGljIENvbnRleHRNZW51Q2xpZW50KiBk
dW1teUNvbnRleHRNZW51Q2xpZW50ID0gbmV3IEVtcHR5Q29udGV4dE1lbnVDbGllbnQ7Ci0gICAg
ICAgIHN0YXRpYyBEcmFnQ2xpZW50KiBkdW1teURyYWdDbGllbnQgPSBuZXcgRW1wdHlEcmFnQ2xp
ZW50OwotICAgICAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVu
dCA9IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKLQotICAgICAgICAvLyBGSVhNRTogSWYgdGhp
cyBTVkcgZW5kcyB1cCBsb2FkaW5nIGl0c2VsZiwgd2UnbGwgbGVhayB0aGlzIEZyYW1lIChhbmQg
YXNzb2NpYXRlZCBET00gJiByZW5kZXIgdHJlZXMpLgotICAgICAgICAvLyBUaGUgQ2FjaGUgY29k
ZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hlZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29u
J3Qga25vdyB0byBicmVhayB0aGUgY3ljbGUuCi0gICAgICAgIG1fcGFnZS5zZXQobmV3IFBhZ2Uo
ZHVtbXlDaHJvbWVDbGllbnQsIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9yQ2xp
ZW50LCBkdW1teURyYWdDbGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KSk7Ci0gICAgICAgIG1f
cGFnZS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBt
X3BhZ2UtPnNldHRpbmdzKCktPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsKLQotICAgICAgICBt
X2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShtX3BhZ2UuZ2V0KCksIDAsIGR1bW15RnJhbWVMb2FkZXJD
bGllbnQpOwotICAgICAgICBtX2ZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcobV9mcmFtZS5nZXQo
KSk7Ci0gICAgICAgIG1fZnJhbWVWaWV3LT5kZXJlZigpOyAvLyBGSVhNRTogRnJhbWVWaWV3IHN0
YXJ0cyB3aXRoIGEgcmVmY291bnQgb2YgMQotICAgICAgICBtX2ZyYW1lLT5zZXRWaWV3KG1fZnJh
bWVWaWV3LmdldCgpKTsKLSAgICAgICAgbV9mcmFtZS0+aW5pdCgpOwotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgZmFrZVJlcXVlc3QoS1VSTCgiIikpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+bG9hZChmYWtlUmVxdWVzdCk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMg
Y3JlYXRlZAotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNo
ZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwotICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAot
ICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+
c2l6ZSgpKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmVuZCgpOwotICAgICAgICBtX2Zy
YW1lVmlldy0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFy
ZW50LgorICAgICAgICBtX2ZyYW1lID0gRnJhbWVMb2FkZXI6OmNyZWF0ZUR1bW15RnJhbWUoKTsK
KyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmZha2VMb2FkKG1fZGF0YS5nZXQoKSwgImltYWdl
L3N2Zyt4bWwiKTsKKyAgICAgICAgbV9mcmFtZS0+dmlldygpLT5zZXRUcmFuc3BhcmVudCh0cnVl
KTsgLy8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJlbnQuCiAgICAgfQotICAgIHJldHVybiBtX2Zy
YW1lVmlldzsKKyAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnZpZXcoKSA6IDA7CiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMzY4NDYpCisrKyBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgCiAgICAgICAgIFNWR0RvY3VtZW50KiBtX2RvY3Vt
ZW50OwotICAgICAgICBPd25QdHI8UGFnZT4gbV9wYWdlOwogICAgICAgICBSZWZQdHI8RnJhbWU+
IG1fZnJhbWU7Ci0gICAgICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fZnJhbWVWaWV3OwogICAgICAg
ICBJbnRTaXplIG1fbWluU2l6ZTsKICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ZyYW1l
Q2FjaGU7CiAgICAgfTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2ODQ3KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMDktMjQgIEp1
bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZh
bHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjcKKworICAgICAgICAqIGZhc3QvbG9hZGVy
L3ZpZXdsZXNzLWRvY3VtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9s
b2FkZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbDogQWRkZWQuCisKIDIwMDgtMDktMjMgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIgSHVudC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorYnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2
aWV3bGVzcyBkb2N1bWVudHMKKworWW91IHNob3VsZCBzZWUgUEFTU0VEIG9uY2UuCisKK1BBU1NF
RApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9j
dW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4K
Kzxib2R5PgorPHA+IGJ1ZyA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTcyNyI+NTcyNzwvYT46IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2
aWV3bGVzcyBkb2N1bWVudHMgPC9wPgorPHA+IFlvdSBzaG91bGQgc2VlIFBBU1NFRCBvbmNlLiA8
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB2YXIgdGVzdERvYyA9IGRvY3Vt
ZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiwgImh0bWwiLCBudWxsKTsKKyAgICB2YXIgdGVzdEJvZHkgPSB0ZXN0RG9jLmNyZWF0
ZUVsZW1lbnQoImJvZHkiKTsKKyAgICB2YXIgdGVzdFAgPSB0ZXN0RG9jLmNyZWF0ZUVsZW1lbnQo
InAiKTsKKyAgICB0ZXN0UC5pZCA9ICJyZXN1bHQiOworICAgIHRlc3RQLmlubmVySFRNTCA9ICJG
QUlMRUQiOworICAgIHRlc3RCb2R5LmFwcGVuZENoaWxkKHRlc3RQKTsKKworICAgIC8vIENyZWF0
ZSBhIHNjcmlwdCBlbGVtZW50IGFuZCBmaWxsIGl0IHdpdGggaW5uZXJIVE1MIHNvIHRoYXQgaXQg
aXMgaW50ZXJwcmV0ZWQuCisgICAgLy8gVGhlIHNjcmlwdCB0cnkgdG8gbW9kaWZ5IHRoZSAicCIg
ZWxlbWVudCB3ZSBoYXZlIGp1c3QgY3JlYXRlZC4KKyAgICB2YXIgdGVzdFNjcmlwdCA9IHRlc3RE
b2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgInNjcmlw
dCIpOworICAgIHRlc3RTY3JpcHQuaW5uZXJIVE1MID0gInZhciByZXN1bHQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7IHJlc3VsdC5pbm5lckhUTUwgPSAnUEFTU0VEJzsiOwor
ICAgIHRlc3RCb2R5LmFwcGVuZENoaWxkKHRlc3RTY3JpcHQpOworICAgIHRlc3REb2MuZG9jdW1l
bnRFbGVtZW50LmFwcGVuZENoaWxkKHRlc3RCb2R5KTsKKworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gdGVzdERvYy5nZXRFbGVtZW50QnlJZCgncmVz
dWx0JykuaW5uZXJIVE1MOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="10673"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25249</attachid>
            <date>2008-11-18 15:24:36 -0800</date>
            <delta_ts>2009-05-19 20:55:12 -0700</delta_ts>
            <desc>Fixed version - Should not leak</desc>
            <filename>bug5727-Page.diff</filename>
            <type>text/plain</type>
            <size>22610</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODU3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMDgtMTEtMTggIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDU3Mjc6IFdlIHdhbnQgdG8gZXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBk
b2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjcKKworICAgICAgICBBZGQgdGhlIHBvc2liaWxpdHkgdG8gZXZhbHVhdGUgc2NyaXB0IG9y
IGZldGNoIHJlc291cmNlcyBvbiB2aWV3bGVzcworICAgICAgICBkb2N1bWVudCB1c2luZyB0aGUg
RW1wdHlDbGllbnQgd29ya2Fyb3VuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2xvYWRlci92aWV3
bGVzcy1kb2N1bWVudC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGcmFtZSk6IE1ldGhvZCB0byBzZXQgdGhlIERvY3VtZW50
J3MKKyAgICAgICAgRnJhbWUsIGFkZGVkIGEgd2FybmluZyB0aGF0IGl0IHNob3VsZCBiZSB1c2Vk
IHVuZGVyIHNwZWNpYWwKKyAgICAgICAgY2lyY3Vtc3RhbmNlcy4KKworICAgICAgICAqIGRvbS9T
Y3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpy
ZXF1ZXN0U2NyaXB0KTogSWYgdGhlCisgICAgICAgIGZyYW1lIGlzIGVtcHR5ICh2aWV3bGVzcyBk
b2N1bWVudCksIGNyZWF0ZSBhIGR1bW15IFBhZ2UgdG8gYmUKKyAgICAgICAgYWJsZSB0byBldmFs
dXRlIHRoZSBzY3JpcHQuIFdlIHVzZSBPd25QdHIgdG8gYmUgc3VyZSB0byBkZWxldGUKKyAgICAg
ICAgdGhlIFBhZ2UgYW5kIGF2b2lkIGxlYWtzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxl
bWVudERhdGE6OmV2YWx1YXRlU2NyaXB0KTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQpOiBUYWtl
IGEgYm9vbCB0byB0b29nbGUKKyAgICAgICAgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24uCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpmYWtlTG9hZCk6IEZha2UgcmVtb3RlIHJlc291
cmNlIGxvYWQuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpvdmVycmlkZURvY3VtZW50
KTogVXNlZCBieSBjcmVhdGVEdW1teVBhZ2UuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgor
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp+UGFnZSk6IFJlbW92ZSB0aGUgcmVmZXJlbmNlcyB0
byB0aGUgbWFpbkZyYW1lCisgICAgICAgIHRvIGF2b2lkIGxlYWtpbmcuCisKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OmNyZWF0ZUR1bW15UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRJc0R1bW15UGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjppc0R1bW15UGFnZSk6IEdldHRlciAvIFNldHRlciBmb3IgZHVtbXlQYWdlCisgICAg
ICAgIHN0YXR1cy4KKworICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6U1ZHSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW1hZ2U6On5TVkdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2V0Q29udGFp
bmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6dXNlc0NvbnRhaW5lclNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6Omhhc1JlbGF0aXZlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6
Omhhc1JlbGF0aXZlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW1hZ2U6OmRvY3VtZW50KTogVXNlZCB0byBnZXQKKyAgICAgICAgdGhlIHBhZ2Un
cyBtYWluZnJhbWUncyBkb2N1bWVudCB3aXRoIHRoZSBwcm9wZXIgY2hlY2tzLgorCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6IEtlcHQgb25seSB0aGUgT3duUHRyIHRvIGEKKyAg
ICAgICAgZHVtbXlQYWdlIHdoaWNoIHdpbGwgY2xlYW4gaXRzZWxmLgorCisKIDIwMDgtMTEtMTgg
IE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
Mzg1NzMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nzcs
NiArNzc3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRETlNQcmVmZXRjaCgpOwogICAgIHZv
aWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKKyAgICAv
LyBDaGFuZ2luZyB0aGUgRG9jdW1lbnQgZnJhbWUgc2hvdWxkIG5vdCBvY2N1ciB1bmRlciBub3Jt
YWwgY29uZGl0aW9ucy4KKyAgICAvLyBDdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBkdW1teVBh
Z2UgbWVjaGFuaXNtLgorICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUqIGZyYW1lKSB7IG1fZnJhbWUg
PSBmcmFtZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhU
TUwpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMzg1NzMpCisrKyBXZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgpAQCAtMTM1LDExICsxMzYsOSBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpyZXF1ZXN0U2Ny
aXB0KGNvCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
OwogCi0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGV2YWx1YXRlIHNjcmlw
dHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8gYSAKLSAgICAvLyB2aWV3bGVzcyBkb2N1bWVudCBi
dXQgdGhpcydsbCBkbyBmb3Igbm93LgotICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NzI3CisgICAgT3duUHRyPFBhZ2U+IGR1bW15UGFnZTsKICAgICBp
ZiAoIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGR1bW15UGFn
ZS5zZXQoUGFnZTo6Y3JlYXRlRHVtbXlQYWdlKGRvY3VtZW50KSk7CiAKICAgICBBU1NFUlQoIW1f
Y2FjaGVkU2NyaXB0KTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50LT5kb2NMb2FkZXIo
KS0+cmVxdWVzdFNjcmlwdChzb3VyY2VVcmwsIHNjcmlwdENoYXJzZXQoKSk7CkBAIC0xNjIsMTcg
KzE2MSwyNiBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdChjCiAgICAg
aWYgKG1fZXZhbHVhdGVkIHx8IGNvbnRlbnQuaXNFbXB0eSgpIHx8ICFzaG91bGRFeGVjdXRlQXNK
YXZhU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGcmFtZSogZnJhbWUgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+c2Ny
aXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZXZh
bHVhdGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBGSVhNRTogVGhpcyBzdGFydGluZyBsaW5lIG51
bWJlciB3aWxsIGJlIGluY29ycmVjdCBmb3IgZXZhbHVhdGlvbiB0cmlnZ2VyZWQKLSAgICAgICAg
Ly8gZnJvbSBpbnNlcnRlZEludG9Eb2N1bWVudCBvciBjaGlsZHJlbkNoYW5nZWQuCi0gICAgICAg
IGZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGUoc291cmNlVXJsLCAxLCBjb250ZW50KTsKLSAgICAg
ICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKworICAgIGlmIChmcmFtZSAmJiAh
ZnJhbWUtPnNjcmlwdCgpLT5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SGFuZGxlIHZpZXdsZXNzIGRvY3VtZW50CisgICAgT3duUHRyPFBhZ2U+IGR1bW15UGFnZTsKKyAg
ICBpZiAoIWZyYW1lKSB7CisgICAgICAgIGR1bW15UGFnZS5zZXQoUGFnZTo6Y3JlYXRlRHVtbXlQ
YWdlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICBmcmFtZSA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICB9CisKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAg
bV9ldmFsdWF0ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IFRoaXMgc3RhcnRpbmcgbGluZSBu
dW1iZXIgd2lsbCBiZSBpbmNvcnJlY3QgZm9yIGV2YWx1YXRpb24gdHJpZ2dlcmVkCisgICAgLy8g
ZnJvbSBpbnNlcnRlZEludG9Eb2N1bWVudCBvciBjaGlsZHJlbkNoYW5nZWQuCisgICAgZnJhbWUt
PnNjcmlwdCgpLT5ldmFsdWF0ZShzb3VyY2VVcmwsIDEsIGNvbnRlbnQpOworICAgIERvY3VtZW50
Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50RGF0
YTo6c3RvcExvYWRSZXF1ZXN0KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9u
IDM4NTczKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODksNyArMjg5LDcgQEAgRnJhbWVMb2FkZXI6On5GcmFtZUxvYWRlcigpCiAgICAgbV9j
bGllbnQtPmZyYW1lTG9hZGVyRGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6Omlu
aXQoKQordm9pZCBGcmFtZUxvYWRlcjo6aW5pdChib29sIHNob3VsZENyZWF0ZUVtcHR5RG9jdW1l
bnQpCiB7CiAgICAgLy8gdGhpcyBzb21ld2hhdCBvZGQgc2V0IG9mIHN0ZXBzIGlzIG5lZWRlZCB0
byBnaXZlIHRoZSBmcmFtZSBhbiBpbml0aWFsIGVtcHR5IGRvY3VtZW50CiAgICAgbV9pc0Rpc3Bs
YXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IGZhbHNlOwpAQCAtMjk5LDggKzI5OSwxMiBAQCB2
b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlUHJvdmlzaW9u
YWwpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+c2V0UmVzcG9uc2UoUmVzb3Vy
Y2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpKTsK
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPmZpbmlzaGVkTG9hZGluZygpOwotICAg
IGJlZ2luKEtVUkwoKSwgZmFsc2UpOwotICAgIGVuZCgpOworCisgICAgaWYgKHNob3VsZENyZWF0
ZUVtcHR5RG9jdW1lbnQpIHsKKyAgICAgICAgYmVnaW4oS1VSTCgpLCBmYWxzZSk7CisgICAgICAg
IGVuZCgpOworICAgIH0KKwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmNhbmNlbFBhcnNpbmco
KTsKICAgICBtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgPSBmYWxzZTsKICAgICBtX2Rp
ZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKQEAgLTIzMDksNiArMjMxMywxOCBAQCBib29sIEZy
YW1lTG9hZGVyOjpjYW5Mb2FkKGNvbnN0IEtVUkwmIHVyCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IH0KIAordm9pZCBGcmFtZUxvYWRlcjo6ZmFrZUxvYWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBjb25z
dCBjaGFyKiBNSU1FVHlwZSkKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgZmFrZVJlcXVlc3QoS1VS
TCgiIikpOworICAgIGxvYWQoZmFrZVJlcXVlc3QpOyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50
TG9hZGVyIGlzIGNyZWF0ZWQKKyAgICBjYW5jZWxDb250ZW50UG9saWN5Q2hlY2soKTsgLy8gY2Fu
Y2VsIGFueSBwb2xpY3kgY2hlY2tzCisgICAgY29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOworICAg
IHNldFJlc3BvbnNlTUlNRVR5cGUoTUlNRVR5cGUpOworICAgIGJlZ2luKEtVUkwoKSk7IC8vIGNy
ZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKKyAgICB3cml0ZShkYXRhLT5kYXRhKCksIGRhdGEtPnNp
emUoKSk7CisgICAgZW5kKCk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9h
ZEZhaWxlZChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVCgh
dXJsLmlzRW1wdHkoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDM4NTczKQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcg
KzEzMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWVMb2FkZXIoRnJhbWUq
LCBGcmFtZUxvYWRlckNsaWVudCopOwogICAgICAgICB+RnJhbWVMb2FkZXIoKTsKIAotICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgdm9pZCBpbml0KGJvb2wgc2hvdWxkQ3JlYXRlRW1wdHlE
b2N1bWVudCA9IHRydWUpOwogCiAgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KIApAQCAtMTY0LDYgKzE2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEFyY2hpdmUoUGFzc1JlZlB0cjxBcmNoaXZlPiBhcmNo
aXZlKTsKIAorICAgICAgICB2b2lkIGZha2VMb2FkKFNoYXJlZEJ1ZmZlciogZGF0YSwgY29uc3Qg
Y2hhciogTUlNRVR5cGUpOworCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBmb3IgYW55IG5vbi1s
b2NhbCBVUkwuIElmIERvY3VtZW50IHBhcmFtZXRlciBpcyBzdXBwbGllZCwgaXRzIGxvY2FsIGxv
YWQgcG9saWN5IGRpY3RhdGVzLAogICAgICAgICAvLyBvdGhlcndpc2UgaWYgcmVmZXJyZXIgaXMg
bm9uLWVtcHR5IGFuZCByZXByZXNlbnRzIGEgbG9jYWwgZmlsZSwgdGhlbiB0aGUgbG9jYWwgbG9h
ZCBpcyBhbGxvd2VkLgogICAgICAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBEb2N1bWVudCogdGhlRG9jdW1lbnQgPSAwKTsK
SW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAkocmV2aXNpb24gMzg1NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUsMTEgQEAgdm9pZCBGcmFtZTo6Y2FuY2VsQWxs
S2VlcEFsaXZlKCkKIH0KICNlbmRpZgogCit2b2lkIEZyYW1lOjpvdmVycmlkZURvY3VtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBkLT5tX2RvYyA9IGRvY3VtZW50OworfQorCiB2b2lk
IEZyYW1lOjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQoVGltZXI8RnJhbWU+KikKIHsKICNpZm5kZWYg
TkRFQlVHCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMzg1NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
RG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4pOwogCisgICAgLy8gVGhpcyBtZXRob2QgaXMg
bWVhbnQgZm9yIHNwZWNpYWwgY2FzZXMgYW5kIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgY3Jl
YXRlRHVtbXlQYWdlLgorICAgIHZvaWQgb3ZlcnJpZGVEb2N1bWVudChEb2N1bWVudCopOworCiAg
ICAgdm9pZCBjbGVhclRpbWVycygpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFyVGltZXJzKEZyYW1l
VmlldyosIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDM4NTczKQorKysgV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CkBAIC0xMjIsNiArMTIzLDcgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVu
dCwgQwogICAgICwgbV9mcmFtZUNvdW50KDApCiAgICAgLCBtX3RhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50cyh0cnVlKQogICAgICwgbV9kZWZlcnNMb2FkaW5nKGZhbHNlKQorICAgICwgbV9pc0R1
bW15UGFnZShmYWxzZSkKICAgICAsIG1faW5Mb3dRdWFsaXR5SW50ZXJwb2xhdGlvbk1vZGUoZmFs
c2UpCiAgICAgLCBtX2Nvb2tpZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fbWVkaWFWb2x1bWUoMSkK
QEAgLTE1OCw3ICsxNjAsMTUgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVu
dCwgQwogCiBQYWdlOjp+UGFnZSgpCiB7Ci0gICAgbV9tYWluRnJhbWUtPnNldFZpZXcoMCk7Cisg
ICAgLy8gRm9yIGR1bW15UGFnZSwgYnJlYWsgYm90aCB0aGUgbG9hZGVyLCB2aWV3IGFuZCBkb2N1
bWVudCByZWZlcmVuY2VzIHRvIHRoZSBtYWluRnJhbWUKKyAgICBpZiAobV9pc0R1bW15UGFnZSkg
eworICAgICAgICBBU1NFUlQoIW1fbWFpbkZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKSk7Cisg
ICAgICAgIG1fbWFpbkZyYW1lLT52aWV3KCktPmNsZWFyRnJhbWUoKTsKKyAgICAgICAgbV9tYWlu
RnJhbWUtPmxvYWRlcigpLT5mcmFtZURldGFjaGVkKCk7CisgICAgICAgIG1fbWFpbkZyYW1lLT5k
b2N1bWVudCgpLT5zZXRGcmFtZSgwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9tYWluRnJhbWUt
PnNldFZpZXcoMCk7CisKICAgICBzZXRHcm91cE5hbWUoU3RyaW5nKCkpOwogICAgIGFsbFBhZ2Vz
LT5yZW1vdmUodGhpcyk7CiAgICAgCkBAIC02MTcsNCArNjI4LDQwIEBAIHZvaWQgUGFnZTo6c2V0
Q3VzdG9tSFRNTFRva2VuaXplckNodW5rU2kKICAgICBtX2N1c3RvbUhUTUxUb2tlbml6ZXJDaHVu
a1NpemUgPSBjdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplOwogfQogCitQYWdlKiBQYWdlOjpj
cmVhdGVEdW1teVBhZ2UoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHN0YXRpYyBDaHJvbWVD
bGllbnQqIGR1bW15Q2hyb21lQ2xpZW50ID0gbmV3IEVtcHR5Q2hyb21lQ2xpZW50OworICAgIHN0
YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9ICBuZXcgRW1w
dHlGcmFtZUxvYWRlckNsaWVudDsKKyAgICBzdGF0aWMgRWRpdG9yQ2xpZW50KiBkdW1teUVkaXRv
ckNsaWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVudDsKKyAgICBzdGF0aWMgQ29udGV4dE1lbnVD
bGllbnQqIGR1bW15Q29udGV4dE1lbnVDbGllbnQgPSBuZXcgRW1wdHlDb250ZXh0TWVudUNsaWVu
dDsKKyAgICBzdGF0aWMgRHJhZ0NsaWVudCogZHVtbXlEcmFnQ2xpZW50ID0gbmV3IEVtcHR5RHJh
Z0NsaWVudDsKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBkdW1teUluc3BlY3RvckNsaWVu
dCA9IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKKworICAgIC8vIFRoZSBDYWNoZSBjb2RlIGRv
ZXMgbm90IGtub3cgYWJvdXQgQ2FjaGVkSW1hZ2VzIGhvbGRpbmcgRnJhbWVzIGFuZCB3b24ndCBr
bm93IHRvIGJyZWFrIHRoZSBjeWNsZS4KKyAgICBQYWdlKiBwYWdlID0gbmV3IFBhZ2UoZHVtbXlD
aHJvbWVDbGllbnQsIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9yQ2xpZW50LCBk
dW1teURyYWdDbGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KTsKKworICAgIC8vIEdpdmluZyBh
IGRvY3VtZW50IGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdC4KKyAg
ICBwYWdlLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChkb2N1bWVudCk7CisKKyAg
ICAvLyBEaXNhYmxlIHBsdWdpbnMgb24gZHVtbXkgZnJhbWUgKGl0IGNyYXNoZXMgb24gUXQpLgor
ICAgIHBhZ2UtPnNldHRpbmdzKCktPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsKKworICAgIHBh
Z2UtPnNldElzRHVtbXlQYWdlKCk7CisKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6
OmNyZWF0ZShwYWdlLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKKworICAgIGZyYW1lLT5z
ZXRWaWV3KG5ldyBGcmFtZVZpZXcoZnJhbWUuZ2V0KCkpKTsKKworICAgIGlmIChkb2N1bWVudCkg
eworICAgICAgICAvLyBJZiBhIGRvY3VtZW50IHdhcyBwcm92aWRlZCB3ZSBuZWVkIHRvIGluaXRp
YWxpemUKKyAgICAgICAgLy8gdGhlIGxvYWRlciBidXQgc2hvdWxkIG5vdCBjcmVhdGUgYW4gZW1w
dHkgZG9jdW1lbnQuCisgICAgICAgIGZyYW1lLT5vdmVycmlkZURvY3VtZW50KGRvY3VtZW50KTsK
KyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5pbml0KGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQt
PnNldEZyYW1lKGZyYW1lLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnJhbWUtPmluaXQo
KTsKKworICAgIHJldHVybiBwYWdlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJ
KHJldmlzaW9uIDM4NTczKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkwLDYgKzE5MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaGFz
Q3VzdG9tSFRNTFRva2VuaXplckNodW5rU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tSFRN
TFRva2VuaXplckNodW5rU2l6ZSAhPSAtMTsgfQogICAgICAgICBpbnQgY3VzdG9tSFRNTFRva2Vu
aXplckNodW5rU2l6ZSgpIGNvbnN0IHsgQVNTRVJUKG1fY3VzdG9tSFRNTFRva2VuaXplckNodW5r
U2l6ZSAhPSAtMSk7IHJldHVybiBtX2N1c3RvbUhUTUxUb2tlbml6ZXJDaHVua1NpemU7IH0KIAor
ICAgICAgICAvLyBXZSBzaG91bGQgYmUgY2FyZWZ1bCB0byByZWxlYXNlIHRoZSByZXR1cm5lZCBQ
YWdlIGFzIGl0IGhvbGRzIGl0cyBGcmFtZSBhbmQgRG9jdW1lbnQuCisgICAgICAgIHN0YXRpYyBQ
YWdlKiBjcmVhdGVEdW1teVBhZ2UoRG9jdW1lbnQqID0gMCk7CisKKyAgICAgICAgdm9pZCBzZXRJ
c0R1bW15UGFnZSgpIHsgbV9pc0R1bW15UGFnZSA9IHRydWU7IH0KKyAgICAgICAgYm9vbCBpc0R1
bW15UGFnZSgpIHsgcmV0dXJuIG1faXNEdW1teVBhZ2U7IH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgaW5pdEdyb3VwKCk7CiAKQEAgLTIxNSw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7CiAgICAg
ICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogCisgICAgICAgIGJvb2wgbV9pc0R1bW15UGFnZTsK
ICAgICAgICAgYm9vbCBtX2luTG93UXVhbGl0eUludGVycG9sYXRpb25Nb2RlOwogICAgICAgICBi
b29sIG1fY29va2llRW5hYmxlZDsKICAgICAgICAgZmxvYXQgbV9tZWRpYVZvbHVtZTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDM4NTczKQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNyArNTIsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdJbWFnZTo6U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fZG9jdW1lbnQoMCkK
ICAgICAsIG1fcGFnZSgwKQotICAgICwgbV9mcmFtZSgwKQotICAgICwgbV9mcmFtZVZpZXcoMCkK
IHsKIH0KIAogU1ZHSW1hZ2U6On5TVkdJbWFnZSgpCiB7Ci0gICAgaWYgKG1fZnJhbWUpCi0gICAg
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5mcmFtZURldGFjaGVkKCk7IC8vIEJyZWFrIGJvdGggdGhl
IGxvYWRlciBhbmQgdmlldyByZWZlcmVuY2VzIHRvIHRoZSBmcmFtZQogfQogCiB2b2lkIFNWR0lt
YWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpCkBAIC03
MCw5ICs2NSwxMCBAQCB2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEluCiAg
ICAgaWYgKGNvbnRhaW5lclNpemUud2lkdGgoKSA8PSAwIHx8IGNvbnRhaW5lclNpemUuaGVpZ2h0
KCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1l
LT5kb2N1bWVudCgpKQorICAgIFNWR0RvY3VtZW50KiBmcmFtZURvY3VtZW50ID0gZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBTVkdTVkdF
bGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFtZS0+
ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1l
bnQgPSBmcmFtZURvY3VtZW50LT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKIApAQCAtODEsOSArNzcsMTAgQEAgdm9pZCBTVkdJbWFnZTo6c2V0
Q29udGFpbmVyU2l6ZShjb25zdCBJbgogCiBib29sIFNWR0ltYWdlOjp1c2VzQ29udGFpbmVyU2l6
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQor
ICAgIFNWR0RvY3VtZW50KiBmcmFtZURvY3VtZW50ID0gZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZy
YW1lRG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTVkdTVkdFbGVtZW50KiBy
b290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQo
KSktPnJvb3RFbGVtZW50KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBmcmFt
ZURvY3VtZW50LT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtOTIsMTAgKzg5LDExIEBAIGJvb2wgU1ZHSW1hZ2U6OnVzZXND
b250YWluZXJTaXplKCkgY29uc3QKIAogSW50U2l6ZSBTVkdJbWFnZTo6c2l6ZSgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIFNWR0RvY3Vt
ZW50KiBmcmFtZURvY3VtZW50ID0gZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAgICAgCi0gICAgU1ZHU1ZHRWxlbWVudCogcm9v
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkp
LT5yb290RWxlbWVudCgpOworICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gZnJhbWVE
b2N1bWVudC0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwogICAgIApAQCAtMTE4LDkgKzExNiwxMCBAQCBJbnRTaXplIFNWR0lt
YWdlOjpzaXplKCkgY29uc3QKIAogYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIFNW
R0RvY3VtZW50KiBmcmFtZURvY3VtZW50ID0gZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZyYW1lRG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTVkdTVkdFbGVtZW50KiByb290RWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKSktPnJv
b3RFbGVtZW50KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBmcmFtZURvY3Vt
ZW50LT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTI5LDkgKzEyOCwxMSBAQCBib29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2
ZVdpZHRoKCkgY29uc3QKIAogYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVIZWlnaHQoKSBjb25z
dAogewotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBTVkdE
b2N1bWVudCogZnJhbWVEb2N1bWVudCA9IGRvY3VtZW50KCk7CisgICAgaWYgKCFmcmFtZURvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290
RWxlbWVudCgpOworCisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBmcmFtZURvY3Vt
ZW50LT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTQwLDcgKzE0MSw3IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZl
SGVpZ2h0KCkgY29uc3QKIAogdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisg
ICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjb250ZXh0LT5zYXZl
KCk7CkBAIC0xNTEsOSArMTUyLDkgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGNvbgogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkueCgpLCBk
c3RSZWN0LmxvY2F0aW9uKCkueSgpKTsKICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoZHN0
UmVjdC53aWR0aCgpL3NyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKS9zcmNSZWN0Lmhl
aWdodCgpKSk7CiAgICAgCi0gICAgaWYgKG1fZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkK
LSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLSAgICBtX2ZyYW1lLT52aWV3KCkt
PnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCkpOworICAgIGlmIChtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+bGF5b3V0KCk7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsKIAogICAg
IGlmIChjb21wb3NpdGVPcCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyKQogICAgICAgICBjb250ZXh0
LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwpAQCAtMTczLDcgKzE3NCw3IEBAIE5hdGl2ZUltYWdl
UHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKICAgICAgICAgbV9mcmFtZUNhY2hlLnNldChJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgZmFsc2UpLnJlbGVhc2UoKSk7CiAgICAgICAgIGlm
ICghbV9mcmFtZUNhY2hlKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZW5kZXJTdWJ0cmVlVG9JbWFnZShtX2ZyYW1lQ2FjaGUuZ2V0
KCksIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKTsKKyAgICAgICAgcmVuZGVyU3VidHJlZVRv
SW1hZ2UobV9mcmFtZUNhY2hlLmdldCgpLCBtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVu
ZGVyZXIoKSk7CiAgICAgfQogICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPmltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiB9CkBAIC0xODUsMzUgKzE4NiwxNyBAQCBib29sIFNW
R0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIAogICAgIGlmIChhbGxEYXRhUmVjZWl2ZWQpIHsKLSAgICAgICAgc3RhdGljIENocm9tZUNs
aWVudCogZHVtbXlDaHJvbWVDbGllbnQgPSBuZXcgRW1wdHlDaHJvbWVDbGllbnQ7Ci0gICAgICAg
IHN0YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVudCA9ICBuZXcg
RW1wdHlGcmFtZUxvYWRlckNsaWVudDsKLSAgICAgICAgc3RhdGljIEVkaXRvckNsaWVudCogZHVt
bXlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0b3JDbGllbnQ7Ci0gICAgICAgIHN0YXRpYyBD
b250ZXh0TWVudUNsaWVudCogZHVtbXlDb250ZXh0TWVudUNsaWVudCA9IG5ldyBFbXB0eUNvbnRl
eHRNZW51Q2xpZW50OwotICAgICAgICBzdGF0aWMgRHJhZ0NsaWVudCogZHVtbXlEcmFnQ2xpZW50
ID0gbmV3IEVtcHR5RHJhZ0NsaWVudDsKLSAgICAgICAgc3RhdGljIEluc3BlY3RvckNsaWVudCog
ZHVtbXlJbnNwZWN0b3JDbGllbnQgPSBuZXcgRW1wdHlJbnNwZWN0b3JDbGllbnQ7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IElmIHRoaXMgU1ZHIGVuZHMgdXAgbG9hZGluZyBpdHNlbGYsIHdlJ2xsIGxl
YWsgdGhpcyBGcmFtZSAoYW5kIGFzc29jaWF0ZWQgRE9NICYgcmVuZGVyIHRyZWVzKS4KLSAgICAg
ICAgLy8gVGhlIENhY2hlIGNvZGUgZG9lcyBub3Qga25vdyBhYm91dCBDYWNoZWRJbWFnZXMgaG9s
ZGluZyBGcmFtZXMgYW5kIHdvbid0IGtub3cgdG8gYnJlYWsgdGhlIGN5Y2xlLgotICAgICAgICBt
X3BhZ2Uuc2V0KG5ldyBQYWdlKGR1bW15Q2hyb21lQ2xpZW50LCBkdW1teUNvbnRleHRNZW51Q2xp
ZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFnQ2xpZW50LCBkdW1teUluc3BlY3RvckNs
aWVudCkpOwotICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEphdmFTY3JpcHRFbmFibGVk
KGZhbHNlKTsKLSAgICAgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRQbHVnaW5zRW5hYmxlZChm
YWxzZSk7Ci0KLSAgICAgICAgbV9mcmFtZSA9IEZyYW1lOjpjcmVhdGUobV9wYWdlLmdldCgpLCAw
LCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKLSAgICAgICAgbV9mcmFtZVZpZXcgPSBuZXcgRnJh
bWVWaWV3KG1fZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2ZyYW1lVmlldy0+ZGVyZWYoKTsgLy8g
RklYTUU6IEZyYW1lVmlldyBzdGFydHMgd2l0aCBhIHJlZmNvdW50IG9mIDEKLSAgICAgICAgbV9m
cmFtZS0+c2V0VmlldyhtX2ZyYW1lVmlldy5nZXQoKSk7Ci0gICAgICAgIG1fZnJhbWUtPmluaXQo
KTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1ZXN0KEtVUkwoIiIpKTsKLSAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmxvYWQoZmFrZVJlcXVlc3QpOyAvLyBNYWtlIHN1cmUgdGhl
IERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNh
bmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKLSAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKLSAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldFJlc3BvbnNlTUlNRVR5cGUoImltYWdlL3N2Zyt4bWwi
KTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0
aGUgZW1wdHkgZG9jdW1lbnQKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlKG1fZGF0
YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5l
bmQoKTsKLSAgICAgICAgbV9mcmFtZVZpZXctPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcg
SW1hZ2VzIGFyZSB0cmFuc3BhcmVudC4KKyAgICAgICAgbV9wYWdlLnNldChQYWdlOjpjcmVhdGVE
dW1teVBhZ2UoKSk7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5mYWtl
TG9hZChtX2RhdGEuZ2V0KCksICJpbWFnZS9zdmcreG1sIik7CisgICAgICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJl
IHRyYW5zcGFyZW50LgogICAgIH0KLSAgICByZXR1cm4gbV9mcmFtZVZpZXc7CisgICAgcmV0dXJu
IG1fcGFnZSA/IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSA6IDA7Cit9CisKK1NWR0RvY3Vt
ZW50KiBTVkdJbWFnZTo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIElmIHRoZSBQYWdlIGhh
cyBiZWVuIGNyZWF0ZWQgdGhlbiBpdCBzaG91bGQgaGF2ZSBhbiBhc3NvY2lhdGVkIEZyYW1lLgor
ICAgIHJldHVybiBtX3BhZ2UgPyBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fcGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCkpIDogMDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5oCShyZXZpc2lvbiAzODU3MykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgICAgIAotICAgICAgICBTVkdEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICAgICAg
U1ZHRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKICAgICAgICAgT3duUHRyPFBhZ2U+IG1f
cGFnZTsKLSAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwotICAgICAgICBSZWZQdHI8RnJh
bWVWaWV3PiBtX2ZyYW1lVmlldzsKICAgICAgICAgSW50U2l6ZSBtX21pblNpemU7CiAgICAgICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9mcmFtZUNhY2hlOwogICAgIH07CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAzODU3NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDA4LTExLTE4ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEJ1ZyA1NzI3OiBXZSB3YW50IHRvIGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3MgZG9j
dW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzI3CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50Lmh0bWw6
IEFkZGVkLgorCiAyMDA4LTExLTE4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1l
cm1hbm5AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci92aWV3bGVzcy1kb2N1bWVudC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9j
dW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvdmlld2xlc3MtZG9jdW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUgQEAKK2J1ZyA1NzI3OiBXZSB3YW50IHRvIGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3Mg
ZG9jdW1lbnRzCisKK1lvdSBzaG91bGQgc2VlIFBBU1NFRCBvbmNlLgorCitQQVNTRUQKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvdmlld2xlc3MtZG9jdW1lbnQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3ZpZXdsZXNzLWRvY3VtZW50Lmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwPiBidWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3MjciPjU3Mjc8L2E+OiBXZSB3YW50IHRvIGV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3Mg
ZG9jdW1lbnRzIDwvcD4KKzxwPiBZb3Ugc2hvdWxkIHNlZSBQQVNTRUQgb25jZS4gPC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgdmFyIHRlc3REb2MgPSBkb2N1bWVudC5pbXBs
ZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIs
ICJodG1sIiwgbnVsbCk7CisgICAgdmFyIHRlc3RCb2R5ID0gdGVzdERvYy5jcmVhdGVFbGVtZW50
KCJib2R5Iik7CisgICAgdmFyIHRlc3RQID0gdGVzdERvYy5jcmVhdGVFbGVtZW50KCJwIik7Cisg
ICAgdGVzdFAuaWQgPSAicmVzdWx0IjsKKyAgICB0ZXN0UC5pbm5lckhUTUwgPSAiRkFJTEVEIjsK
KyAgICB0ZXN0Qm9keS5hcHBlbmRDaGlsZCh0ZXN0UCk7CisKKyAgICAvLyBDcmVhdGUgYSBzY3Jp
cHQgZWxlbWVudCBhbmQgZmlsbCBpdCB3aXRoIGlubmVySFRNTCBzbyB0aGF0IGl0IGlzIGludGVy
cHJldGVkLgorICAgIC8vIFRoZSBzY3JpcHQgdHJ5IHRvIG1vZGlmeSB0aGUgInAiIGVsZW1lbnQg
d2UgaGF2ZSBqdXN0IGNyZWF0ZWQuCisgICAgdmFyIHRlc3RTY3JpcHQgPSB0ZXN0RG9jLmNyZWF0
ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJzY3JpcHQiKTsKKyAg
ICB0ZXN0U2NyaXB0LmlubmVySFRNTCA9ICJ2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Jlc3VsdCcpOyByZXN1bHQuaW5uZXJIVE1MID0gJ1BBU1NFRCc7IjsKKyAgICB0ZXN0
Qm9keS5hcHBlbmRDaGlsZCh0ZXN0U2NyaXB0KTsKKyAgICB0ZXN0RG9jLmRvY3VtZW50RWxlbWVu
dC5hcHBlbmRDaGlsZCh0ZXN0Qm9keSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29uc29sZScpLmlubmVySFRNTCA9IHRlc3REb2MuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlu
bmVySFRNTDsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="11672"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>