<?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>46203</bug_id>
          
          <creation_ts>2010-09-21 11:24:40 -0700</creation_ts>
          <short_desc>getClientRects()[0] != getBoundingClientRect()</short_desc>
          <delta_ts>2016-10-12 06:11:52 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://bl.ocks.org/590163</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mike Bostock">mbostock</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>donggwan.kim</cc>
    
    <cc>krit</cc>
    
    <cc>lmcliste</cc>
    
    <cc>mvujovic</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>282444</commentid>
    <comment_count>0</comment_count>
      <attachid>68265</attachid>
    <who name="Mike Bostock">mbostock</who>
    <bug_when>2010-09-21 11:24:40 -0700</bug_when>
    <thetext>Created attachment 68265
CSSOM-SVG test case.

According to CSSOM View 7.1, getClientRects():

&quot;&quot;&quot;
If the element does not have an associated CSS layout box and is in the http://www.w3.org/2000/svg namespace return a ClientRectList object containing a single ClientRect object that describes the bounding box of the element as defined by SVG specification.
&quot;&quot;&quot;

The expected behavior of getClientRects() is that it return a single-element array containing the &quot;tight bounding box ... on the geometry of all contained graphics elements&quot; per SVGLocatable.getBBox. The value of svg.getClientRects()[0] should therefore equal svg.getBBox(). Furthermore, svg.getClientRects()[0] should equal svg.getBoundingClientRect(), per CSSOM &quot;Otherwise, return a ClientRect object describing the smallest rectangle that includes the first rectangle in list and all of the remaining rectangles of which the height or width is not zero.&quot;

However, the actual behavior of getClientRects() is that it returns a single-element array with the size of the SVG container.

This is partly a regression from Safari 5, where getClientRects()[0] and getBoundingClientRect() were consistent. However, in Safari 5 the returned value did not equal getBBox(). Firefox (3.6 &amp; 4) arguably does not pass this test, either. For Firefox getBoundingClientRect() and getClientRects()[0] are equal, but slightly larger than the value of getBBox(), perhaps because of padding / margin / borders. Opera exhibits the opposite behavior of WebKit nightlies: it returns the correct value for getBoundingClientRect(), but the SVG container size for getClientRects()[0].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474666</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-28 04:52:39 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=68265) [details]
&gt; CSSOM-SVG test case.
&gt; 
&gt; According to CSSOM View 7.1, getClientRects():
&gt; 
&gt; &quot;&quot;&quot;
&gt; If the element does not have an associated CSS layout box and is in the http://www.w3.org/2000/svg namespace return a ClientRectList object containing a single ClientRect object that describes the bounding box of the element as defined by SVG specification.
&gt; &quot;&quot;&quot;
&gt;
I wonder what it means for the outer most SVGSVGElement. I expect that in this case we can have a list of more than jut one entries:

&quot;&quot;&quot;
Return a ClientRectList object containing a list of ClientRect objects in content order describing the border boxes (including those with a height or width of zero) with the following constraints:

If the element on which the method was invoked has a computed value for display property of table or inline-table include both the table box and the caption box, if any, but not the anonymous container box.

Replace each anonymous block box with its child box(es) and repeat this until no anonymous block boxes are left in the final list.
&quot;&quot;&quot;

http://www.w3.org/TR/cssom-view/#dom-element-getclientrects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547305</commentid>
    <comment_count>2</comment_count>
      <attachid>124996</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-01 12:54:32 -0800</bug_when>
    <thetext>Created attachment 124996
Same example as above

Same example as above to have an example that works directly after clicking on the link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547458</commentid>
    <comment_count>3</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-02-01 16:02:44 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)

&gt; I wonder what it means for the outer most SVGSVGElement. I expect that in this case we can have a list of more than jut one entries:

This is one potential interpretation. As you pointed out, it really depends on the spec (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods).

Section 6.1 states:
&quot;&quot;&quot;
The getClientRects() method, when invoked, must return the result of the following algorithm:

1. If the element on which it was invoked does not have an associated CSS layout box and is not in the http://www.w3.org/2000/svg namespace return an empty ClientRectList object and stop this algorithm.

2. If the element does not have an associated CSS layout box and is in the http://www.w3.org/2000/svg namespace return a ClientRectList object containing a single ClientRect object that describes the bounding box of the element as defined by the SVG specification. [SVG]

3. Return a ClientRectList object containing a list of ClientRect objects in content order describing the border boxes (including those with a height or width of zero) with the following constraints:

If the element on which the method was invoked has a computed value for display property of table or inline-table include both the table box and the caption box, if any, but not the anonymous container box.

Replace each anonymous block box with its child box(es) and repeat this until no anonymous block boxes are left in the final list.
&quot;&quot;&quot;

As a summary, I want to reiterate what we&apos;ve established as I understand it:

(1) The SVG root element does not fall under case #1 because the SVG root element is in the &quot;http://www.w3.org/2000/svg&quot; namespace.

(2) The SVG root element does not fall under case #2 because it does have an associated CSS layout box. (I&apos;d like to find which spec specifies that the SVG root element has an associated CSS layout box, but I haven&apos;t been able to locate it yet).

(3) Thus, the SVG root element must fall under case #3. In this case, the getClientRects() method returns a list of ClientRects &quot;describing the border boxes&quot;. Then, the question is:

What are the border boxes of an SVG root element?

One interpretation is that the SVG root element&apos;s &quot;border boxes&quot; simply consist of its own border box. This is what Rik Cabanier suggested, and it seems reasonable. This is what the current implementation of getClientRects() returns.

However, with this interpretation, getBoundingClientRect() should be equal to getClientRects()[0], based on the spec:

&quot;&quot;&quot;
The getBoundingClientRect() method, when invoked, must return the result of the following algorithm:

1. Let list be the result of invoking getClientRects() on the same element this method was invoked on.

2. If the list is empty return a ClientRect object whose top, right, bottom and left members are zero.

3. Otherwise, return a ClientRect object describing the smallest rectangle that includes the first rectangle in list and all of the remaining rectangles of which the height or width is not zero.
&quot;&quot;&quot;

For the SVG root element, we fall into case #3 for getBoundingClientRect(). This case should just return the one item from the getClientRects() list.

However, WebKit returns the smallest bounding rectangle surrounding the SVG root element&apos;s children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547485</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-01 16:46:48 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; However, with this interpretation, getBoundingClientRect() should be equal to getClientRects()[0], based on the spec:
&gt; 
&gt; &quot;&quot;&quot;
&gt; The getBoundingClientRect() method, when invoked, must return the result of the following algorithm:
&gt; 
&gt; 1. Let list be the result of invoking getClientRects() on the same element this method was invoked on.
&gt; 
&gt; 2. If the list is empty return a ClientRect object whose top, right, bottom and left members are zero.
&gt; 
&gt; 3. Otherwise, return a ClientRect object describing the smallest rectangle that includes the first rectangle in list and all of the remaining rectangles of which the height or width is not zero.
&gt; &quot;&quot;&quot;
&gt; 
&gt; For the SVG root element, we fall into case #3 for getBoundingClientRect(). This case should just return the one item from the getClientRects() list.
&gt; 
&gt; However, WebKit returns the smallest bounding rectangle surrounding the SVG root element&apos;s children.

You are getting something wrong here for getBoundingClientRect():
Step 1 says: take the list of getClientsRect() (which just includes the rect 960 x 400)
Step 2 don&apos;t consider empty rects from the list (we don&apos;t have empty rects here)
Step 3 take the unit of all rects of the remaining list
--&gt; The result is: 960 x 400

That means, for the SVG root element in the example we should get  getClientRects()[0] == getBoundingClientRect() == 960 x 400 !!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547926</commentid>
    <comment_count>5</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-02-02 09:28:23 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; You are getting something wrong here for getBoundingClientRect():
&gt; Step 1 says: take the list of getClientsRect() (which just includes the rect 960 x 400)
&gt; Step 2 don&apos;t consider empty rects from the list (we don&apos;t have empty rects here)
&gt; Step 3 take the unit of all rects of the remaining list
&gt; --&gt; The result is: 960 x 400
&gt; 
&gt; That means, for the SVG root element in the example we should get  getClientRects()[0] == getBoundingClientRect() == 960 x 400 !!!

I completely agree! In the example, getClientRects()[0] should equal getBoundingClientRect(), which should equal 960 x 400. Sorry for the confusion :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552648</commentid>
    <comment_count>6</comment_count>
      <attachid>126194</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-02-08 17:04:38 -0800</bug_when>
    <thetext>Created attachment 126194
Patch

Hi Dirk,

I&apos;ve put up a patch for review. I&apos;ll wait for EWS bots to finish before setting cq?.

I&apos;ve tried to detail my changes and approach in the WebCore ChangeLog and the LayoutTests ChangeLog.

Here is the most important information from the WebCore ChangeLog. You can also see this in the patch:
&quot;&quot;&quot;
        Change the behavior of Element::getClientRects and Element::getBoundingClientRect for SVG
        elements to match the CSSOM View Module spec:
        http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods.

        Before, Element::getClientRects would return an empty list for inner SVG elements that did 
        not descend from RenderBoxModelObject. Now, Element::getClientRects returns a list with one
        ClientRect corresponding to the element&apos;s SVG bounding box, as specified in CSSOM.

        Before, Element::getBoundingClientRect would return the SVG bounding box for SVG root
        elements. Now, Element::getBoundingClientRect returns the CSS bounding box for SVG root
        elements, as specified in CSSOM.

        This patch uses RenderBox::absoluteQuads to compute the CSS bounding box for SVG root
        elements. This is the correct approach. However, there is a separate bug which causes
        RenderBox::absoluteQuads to return an incorrect value on RenderSVGRoot in certain cases.
        The absoluteQuads bug is:

        https://bugs.webkit.org/show_bug.cgi?id=78165

        This means that Element::getClientRects and Element::getBoundingClientRect will not return
        the correct value for SVG root elements in certain cases until the absoluteQuads bug is
        fixed.

        The test files for Element::getClientRects and Element::getBoundingClientRect on SVG
        elements have been updated. However, one of the test files will fail until the
        absoluteQuads bug is fixed. The test file is:

        LayoutTests/svg/custom/zoom-zoom-coords.xhtml.

        Updating the zoom-zoom-coords test file to match the CSSOM spec also revealed a separate bug
        that involves Element::getClientRects, HTML elements, and CSS zoom:
        https://bugs.webkit.org/show_bug.cgi?id=77998.

        This bug must also be fixed for the entire zoom-zoom-coords test file to pass.
&quot;&quot;&quot;

Thank you,
Max</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552820</commentid>
    <comment_count>7</comment_count>
      <attachid>126194</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-02-08 20:55:19 -0800</bug_when>
    <thetext>Comment on attachment 126194
Patch

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

You can set cq? from the beginning. If one bot fails, it will set the cq automatically to cq-.

&gt; LayoutTests/svg/custom/boundingBox.html:5
&gt; +    body { margin: 0 0 0 0; }

margin: 0; would be enough.

&gt; LayoutTests/svg/custom/boundingBox.html:24
&gt; +        document.getElementById(&quot;result&quot;).innerHTML = boundingBoxMatchesExpected ? 
&gt; +            &quot;PASS&quot; : &quot;FAIL: boundingBox is &quot; + boundingBox.width + &quot; x &quot; + boundingBox.height + &quot; @ (&quot; + boundingBox.left + &quot;, &quot; + boundingBox.top + &quot;), but should be  &quot;
&gt; +            + expectedBoundingBox.width + &quot; x &quot; + expectedBoundingBox.height + &quot; @ (&quot; + expectedBoundingBox.left + &quot;, &quot; + expectedBoundingBox.top + &quot;).&quot;;

Who is responsible for that?!? Can you order it a bit more and use more lines? An if else might make it more readable.

&gt; LayoutTests/svg/custom/getClientRects.html:20
&gt; +            function $(id)
&gt; +            {

We usually use the same style rules for tests like for normal code, so
function name() {
    ....

&gt; Source/WebCore/ChangeLog:50
&gt; +            Now, both Element::getClientRects and Element::getBoundingClientRect use the helper
&gt; +            method Element::clientQuads, eliminating duplicate code that adjusted the element&apos;s
&gt; +            absolute quads for viewport zoom and scroll position.

This code differed before your patch!

&gt; Source/WebCore/ChangeLog:60
&gt; +            Now, this method calls Element::clientQuads. It unites the quads and returns a single
&gt; +            bounding ClientRect, as before.

It does something different than before.

&gt; Source/WebCore/dom/Element.cpp:506
&gt; +    RenderObject* ro = renderer();

please use RenderObject* renderer = this-&gt;renderer():

At first: WebKit demands full names; second: renderer is common name.

&gt; Source/WebCore/dom/Element.cpp:507
&gt; +    if (isSVGElement() &amp;&amp; (!ro || (ro &amp;&amp; !ro-&gt;isSVGRoot()))) {

that doesn&apos;t make sense. Remove the !ro, use:
if (isSVGElement() &amp;&amp; renderer &amp;&amp; !renderer-&gt;isSVGRoot()) instead.

&gt; Source/WebCore/dom/Element.cpp:508
&gt; +        // This case handles inner SVG elements which do not have a CSS layout box.

This comment is wrong, at least partly. Just

// This case handles SVG elements which do not have a CSS layout box.

Remove the &apos;inner&apos;.

&gt; Source/WebCore/dom/Element.cpp:520
&gt; +    if (RenderBoxModelObject* box = renderBoxModelObject()) {
&gt; +        // This case handles elements with a CSS layout box.

Can you move that to an early return:

RenderBoxModelObject* box = renderBoxModelObject():
if (!box)
    return;

When you are on it, can you name it renderBoxModelObject please?

&gt; Source/WebCore/dom/Element.cpp:552
&gt; +    clientQuads(quads);

This is different than it was before. Before you just asked the current renderer for the absoluteQuads(quads) and than moved just the first entry. Now you move every quad in the list.

The problem is...

&gt; Source/WebCore/dom/Element.cpp:559
&gt;      for (size_t i = 1; i &lt; quads.size(); ++i)
&gt;          result.unite(quads[i].boundingBox());

...that you create the unit from quads that might now be different than on the previous code.

&gt; Source/WebCore/dom/Element.cpp:-564
&gt; -        adjustFloatRectForPageScale(result, page-&gt;pageScaleFactor());

also here you adjust the result, not every quad.

At least moving every quad instead of just the first is a code difference. I can not say if it is correct with your patch or before your patch. You have to test it. http://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx might help.

But we can not land it before we are not sure if the code change is correct. For me it is indeed strange that we just move the first quad in the list on getBoundingClientRect(). Your behavior seems to make more sense. Nevertheless we need to verify that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239263</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2016-10-12 06:11:52 -0700</bug_when>
    <thetext>Has been fixed in the meantime.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>68265</attachid>
            <date>2010-09-21 11:24:40 -0700</date>
            <delta_ts>2010-09-21 11:24:40 -0700</delta_ts>
            <desc>CSSOM-SVG test case.</desc>
            <filename>url.txt</filename>
            <type>text/plain</type>
            <size>85</size>
            <attacher name="Mike Bostock">mbostock</attacher>
            
              <data encoding="base64">aHR0cDovL2dpc3QuZ2l0aHViLmNvbS9yYXcvNTkwMTYzLzUzZjY2ODAxOTI4MjI1NTBkMDVhZDVh
M2U0ZTVkYjI4MmIyZTI0NjMvaW5kZXguaHRtbA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124996</attachid>
            <date>2012-02-01 12:54:32 -0800</date>
            <delta_ts>2012-02-01 12:54:32 -0800</delta_ts>
            <desc>Same example as above</desc>
            <filename>html-getClientRect.html</filename>
            <type>text/html</type>
            <size>1004</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgogIDx0aXRsZT48L3RpdGxlPgogIDxzdHlsZT4KICBkaXYgewogICAgd2lkdGg6IDk2
MHB4OwogICAgbWFyZ2luOiBhdXRvOwogIH0KCiAgcmVjdCB7CiAgICBzdHJva2U6ICMwMDA7CiAg
ICBmaWxsOiAjZWVlOwogIH0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2PgogIDxzdmcg
d2lkdGg9Ijk2MCIgaGVpZ2h0PSI0MDAiPgogICAgPHJlY3QgeD0iMTAlIiB5PSIxMCUiIHdpZHRo
PSI4MCUiIGhlaWdodD0iODAlIiBmaWxsPSIjMDAwIiBzdHJva2U9IiNlZWUiIHN0cm9rZS13aWR0
aD0iNiIgLz4KICA8L3N2Zz4KPC9kaXY+Cgo8c2NyaXB0Pgp2YXIgc3ZnID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdOwoKdGV4dCgiRVhQRUNURUQiLCB7d2lkdGg6IDc2
OCwgaGVpZ2h0OiAzMjB9KTsKdGV4dCgiZ2V0QkJveCgpIiwgc3ZnLmdldEJCb3goKSk7CnRleHQo
ImdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIiwgc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTsK
dGV4dCgiZ2V0Q2xpZW50UmVjdHMoKVswXSIsIHN2Zy5nZXRDbGllbnRSZWN0cygpWzBdKTsKCmZ1
bmN0aW9uIHRleHQobmFtZSwgc2l6ZSkgewogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSkKICAgICAgLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRoIikpCiAgICAgIC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShuYW1lKSkKICAgICAgLnBhcmVudE5vZGUKICAgICAgLnBhcmVudE5vZGUKICAgICAgLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpCiAgICAgIC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzaXplLndpZHRoICsgIiBceGQ3ICIgKyBzaXplLmhl
aWdodCkpOwp9Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126194</attachid>
            <date>2012-02-08 17:04:38 -0800</date>
            <delta_ts>2012-02-08 20:55:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>46203.patch</filename>
            <type>text/plain</type>
            <size>43358</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZjNkNWYzLi5jZTg1ZGNjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAy
LTA4ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBnZXRDbGll
bnRSZWN0cygpWzBdICE9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjIwMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2N1c3RvbS9ib3VuZGluZ0JveC5o
dG1sOgorCisgICAgICAgICAgICBkb2N1bWVudC5pbnRlcm5hbHMuYm91bmRpbmdCb3ggb24gaW5u
ZXIgU1ZHIGVsZW1lbnRzIHdhcyB0ZXN0ZWQgYWdhaW5zdCB0aGUgcHJldmlvdXMKKyAgICAgICAg
ICAgIGJlaGF2aW9yIG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdCwgd2hpY2ggcmV0dXJuZWQgdGhl
IHBvc2l0aW9uIGFuZCBzaXplIG9mIGlubmVyIFNWRworICAgICAgICAgICAgZWxlbWVudHMgaW4g
c2NyZWVuIHNwYWNlLiBOb3cgdGhhdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgcmV0dXJucyBjb29y
ZGluYXRlcyBpbiBTVkcKKyAgICAgICAgICAgIHNwYWNlIG9uIGlubmVyIFNWRyBlbGVtZW50cywg
dGhpcyB0ZXN0IGNoZWNrcyBhZ2FpbnN0IHByZWRlZmluZWQgdmFsdWVzIGluc3RlYWQgb2YKKyAg
ICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdC4KKworICAgICAgICAqIHN2Zy9jdXN0b20v
Z2V0Qm91bmRpbmdDbGllbnRSZWN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvY3VzdG9t
L2dldEJvdW5kaW5nQ2xpZW50UmVjdC54aHRtbDoKKworICAgICAgICAgICAgVGhpcyB0ZXN0IHZl
cmlmaWVkIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24g
aW5uZXIgU1ZHIGVsZW1lbnRzLgorICAgICAgICAgICAgSXRzIGV4cGVjdGVkIHZhbHVlcyBoYXZl
IGJlZW4gdXBkYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSBuZXcgYmVoYXZpb3IgYW5kIHRoZSBD
U1NPTQorICAgICAgICAgICAgc3BlYzoKKworICAgICAgICAgICAgaHR0cDovL3d3dy53My5vcmcv
VFIvY3Nzb20tdmlldy8jdGhlLWdldGNsaWVudHJlY3RzLWFuZC1nZXRib3VuZGluZ2NsaWVudHJl
Y3QtbWV0aG9kcworCisgICAgICAgICogc3ZnL2N1c3RvbS9nZXRDbGllbnRSZWN0cy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vZ2V0Q2xpZW50UmVjdHMuaHRtbDog
QWRkZWQuCisKKyAgICAgICAgICAgIFRoaXMgbmV3IHRlc3QgdmVyaWZpZXMgdGhhdCBnZXRDbGll
bnRSZWN0cygpWzBdID09IGdldEJvdW5kaW5nQ2xpZW50UmVjdHMoKSA9PSBnZXRCQm94KCkKKyAg
ICAgICAgICAgIG9uIFNWRyBlbGVtZW50cy4KKworICAgICAgICAqIHN2Zy96b29tL3BhZ2Uvem9v
bS1nZXRCb3VuZGluZ0NsaWVudFJlY3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy96b29t
L3BhZ2Uvem9vbS1nZXRCb3VuZGluZ0NsaWVudFJlY3QueGh0bWw6CisKKyAgICAgICAgICAgIFRo
aXMgdGVzdCB2ZXJpZmllZCB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2YgZ2V0Qm91bmRpbmdDbGll
bnRSZWN0IG9uIGlubmVyIFNWRyBlbGVtZW50cworICAgICAgICAgICAgd2hlbiBwYWdlIHpvb20g
d2FzIGFwcGxpZWQuIEl0cyBleHBlY3RlZCB2YWx1ZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gY29y
cmVzcG9uZCB0byB0aGUKKyAgICAgICAgICAgIG5ldyBiZWhhdmlvciBhbmQgdGhlIENTU09NIHNw
ZWMuCisKKyAgICAgICAgKiBzdmcvem9vbS9wYWdlL3pvb20tem9vbS1jb29yZHMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHN2Zy96b29tL3BhZ2Uvem9vbS16b29tLWNvb3Jkcy54aHRtbDoKKwor
ICAgICAgICAgICAgVGhpcyB0ZXN0IGNoZWNrcyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBvbiBI
VE1MIGVsZW1lbnRzIGFuZCBTVkcgZWxlbWVudHMgd2hlbiBwYWdlCisgICAgICAgICAgICB6b29t
LCBDU1Mgem9vbSwgYW5kIFNWRyB2aWV3Ym94IGFyZSBpbnZvbHZlZC4gSXRzIGV4cGVjdGVkIHZh
bHVlcyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgICAgICAgICAgY29ycmVzcG9uZCB0byB0aGUg
Q1NTT00gc3BlYy4gSG93ZXZlciwgc2V2ZXJhbCBvZiB0aGUgdGVzdCBjYXNlcyB3aWxsIGZhaWwg
YmVjYXVzZSB0aGV5CisgICAgICAgICAgICBkZXBlbmQgb24gZml4ZXMgdG8gdGhlIGZvbGxvd2lu
ZyBidWdzOgorCisgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgxNjUKKyAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03Nzk5OAorCiAyMDEyLTAyLTA4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRml4IG9wYXF1ZSB0cmFja2luZyBmb3IgYm94
IHNoYWRvd3MgYW5kIG5vbi1jb21wb3NpdGVkIGNoaWxkIGVsZW1lbnRzCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL2JvdW5kaW5nQm94Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL2JvdW5kaW5nQm94Lmh0bWwKaW5kZXggNjQyMjBkYS4uY2JmZjNiNiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9ib3VuZGluZ0JveC5odG1sCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vYm91bmRpbmdCb3guaHRtbApAQCAtMSw2ICsxLDkgQEAKIDwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgbWFyZ2luOiAwIDAg
MCAwOyB9Cis8L3N0eWxlPgogPHNjcmlwdD4KIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCiAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKQpAQCAtOSwx
NSArMTIsMTYgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiB7CiAgICAgdmFyIHRhcmdldCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKICAgICBpZiAod2luZG93LmludGVybmFscykg
eworICAgICAgICB2YXIgZXhwZWN0ZWRCb3VuZGluZ0JveCA9IHtsZWZ0OiA1MCwgdG9wOiAyNTAs
IHdpZHRoOiAyMDAsIGhlaWdodDogMjAwfTsKICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gaW50
ZXJuYWxzLmJvdW5kaW5nQm94KHRhcmdldCk7Ci0gICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJl
Y3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgIHZhciByZWN0c0Fy
ZUVxdWFsID0gKGJvdW5kaW5nQm94LndpZHRoID09PSBib3VuZGluZ0NsaWVudFJlY3Qud2lkdGgK
LSAgICAgICAgICAgICYmIGJvdW5kaW5nQm94LmhlaWdodCA9PT0gYm91bmRpbmdDbGllbnRSZWN0
LmhlaWdodAotICAgICAgICAgICAgJiYgYm91bmRpbmdCb3gubGVmdCA9PT0gYm91bmRpbmdDbGll
bnRSZWN0LmxlZnQKLSAgICAgICAgICAgICYmIGJvdW5kaW5nQm94LnRvcCA9PT0gYm91bmRpbmdD
bGllbnRSZWN0LnRvcCk7CisgICAgICAgIHZhciBib3VuZGluZ0JveE1hdGNoZXNFeHBlY3RlZCA9
IChib3VuZGluZ0JveC53aWR0aCA9PT0gZXhwZWN0ZWRCb3VuZGluZ0JveC53aWR0aAorICAgICAg
ICAgICAgJiYgYm91bmRpbmdCb3guaGVpZ2h0ID09PSBleHBlY3RlZEJvdW5kaW5nQm94LmhlaWdo
dAorICAgICAgICAgICAgJiYgYm91bmRpbmdCb3gubGVmdCA9PT0gZXhwZWN0ZWRCb3VuZGluZ0Jv
eC5sZWZ0CisgICAgICAgICAgICAmJiBib3VuZGluZ0JveC50b3AgPT09IGV4cGVjdGVkQm91bmRp
bmdCb3gudG9wKTsKIAotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
aW5uZXJIVE1MID0gcmVjdHNBcmVFcXVhbCA/ICJQQVNTIiA6ICJGQUlMOiBib3VuZGluZ0JveDog
IiArIGJvdW5kaW5nQm94LndpZHRoICsgIiB4ICIgKyBib3VuZGluZ0JveC5oZWlnaHQgKyAiIEAg
KCIgKyBib3VuZGluZ0JveC5sZWZ0ICsgIiwgIiArIGJvdW5kaW5nQm94LnRvcCArICIpLCBib3Vu
ZGluZ0NsaWVudFJlY3Q6ICIKLSAgICAgICAgICAgICsgYm91bmRpbmdDbGllbnRSZWN0LndpZHRo
ICsgIiB4ICIgKyBib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ICsgIiBAICgiICsgYm91bmRpbmdD
bGllbnRSZWN0LmxlZnQgKyAiLCAiICsgYm91bmRpbmdDbGllbnRSZWN0LnRvcCArICIpIjsKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCA9IGJvdW5k
aW5nQm94TWF0Y2hlc0V4cGVjdGVkID8gCisgICAgICAgICAgICAiUEFTUyIgOiAiRkFJTDogYm91
bmRpbmdCb3ggaXMgIiArIGJvdW5kaW5nQm94LndpZHRoICsgIiB4ICIgKyBib3VuZGluZ0JveC5o
ZWlnaHQgKyAiIEAgKCIgKyBib3VuZGluZ0JveC5sZWZ0ICsgIiwgIiArIGJvdW5kaW5nQm94LnRv
cCArICIpLCBidXQgc2hvdWxkIGJlICAiCisgICAgICAgICAgICArIGV4cGVjdGVkQm91bmRpbmdC
b3gud2lkdGggKyAiIHggIiArIGV4cGVjdGVkQm91bmRpbmdCb3guaGVpZ2h0ICsgIiBAICgiICsg
ZXhwZWN0ZWRCb3VuZGluZ0JveC5sZWZ0ICsgIiwgIiArIGV4cGVjdGVkQm91bmRpbmdCb3gudG9w
ICsgIikuIjsKICAgICB9CiB9CiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy9jdXN0b20vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LWV4cGVjdGVkLnR4dAppbmRleCA1ZDcy
MWI0Li4wYTE5YzJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2dldEJvdW5k
aW5nQ2xpZW50UmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9n
ZXRCb3VuZGluZ0NsaWVudFJlY3QtZXhwZWN0ZWQudHh0CkBAIC0xMSwyNSArMTEsMjUgQEAgUEFT
UyByMS5yaWdodCBpcyA2MAogUEFTUyByMS5ib3R0b20gaXMgODAKIAogQ2hlY2tpbmcgYSByZXNp
emVkIHJlY3RhbmdsZSBhdCByZWxhdGl2ZSBjb29yZGluYXRlczoKLVBBU1MgcjIubGVmdCBpcyAx
ODAKLVBBU1MgcjIudG9wIGlzIDE1Ci1QQVNTIHIyLndpZHRoIGlzIDE2MAotUEFTUyByMi5oZWln
aHQgaXMgMjUKLVBBU1MgcjIucmlnaHQgaXMgMzQwCi1QQVNTIHIyLmJvdHRvbSBpcyA0MAorUEFT
UyByMi5sZWZ0IGlzIDIwCitQQVNTIHIyLnRvcCBpcyAzMAorUEFTUyByMi53aWR0aCBpcyA0MAor
UEFTUyByMi5oZWlnaHQgaXMgNTAKK1BBU1MgcjIucmlnaHQgaXMgNjAKK1BBU1MgcjIuYm90dG9t
IGlzIDgwCiAKIENoZWNraW5nIHJlY3RhbmdsZXMgd2l0aCBvdmVyZmxvdzoKLVBBU1MgcjMubGVm
dCBpcyAzMDAKK1BBU1MgcjMubGVmdCBpcyAwCiBQQVNTIHIzLnRvcCBpcyAwCiBQQVNTIHIzLndp
ZHRoIGlzIDIxMAogUEFTUyByMy5oZWlnaHQgaXMgNTAKLVBBU1MgcjMucmlnaHQgaXMgNTEwCitQ
QVNTIHIzLnJpZ2h0IGlzIDIxMAogUEFTUyByMy5ib3R0b20gaXMgNTAKLVBBU1MgcjQubGVmdCBp
cyAzMDAKK1BBU1MgcjQubGVmdCBpcyAwCiBQQVNTIHI0LnRvcCBpcyA1MAogUEFTUyByNC53aWR0
aCBpcyAyMTAKIFBBU1MgcjQuaGVpZ2h0IGlzIDYwCi1QQVNTIHI0LnJpZ2h0IGlzIDUxMAorUEFT
UyByNC5yaWdodCBpcyAyMTAKIFBBU1MgcjQuYm90dG9tIGlzIDExMAogCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2dl
dEJvdW5kaW5nQ2xpZW50UmVjdC54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0Qm91
bmRpbmdDbGllbnRSZWN0LnhodG1sCmluZGV4IDE2ZTNkN2EuLmQwNGFkMGIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LnhodG1sCisrKyBi
L0xheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LnhodG1sCkBAIC00
LDIwICs0LDIwIEBACiA8Ym9keSBzdHlsZT0ibWFyZ2luOjA7IGJvcmRlcjowOyBwYWRkaW5nOjA7
Ij4KIAogPGRpdiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjEwMHB4OyI+Ci08c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIgotICAgICB3aWR0aD0i
MTAwcHgiIGhlaWdodD0iMTAwcHgiPgotICA8cmVjdCBpZD0icjEiIHg9IjIwIiB5PSIzMCIgd2lk
dGg9IjQwIiBoZWlnaHQ9IjUwIiBmaWxsPSJibHVlIiAvPgotPC9zdmc+PHN2ZyB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIKLSAgICAgd2lkdGg9IjIwMHB4
IiBoZWlnaHQ9IjEwMHB4IiB2aWV3Qm94PSIwIDAgNTAgMjAwIgotICAgICBwcmVzZXJ2ZUFzcGVj
dFJhdGlvPSJub25lIj4KLSAgPHJlY3QgaWQ9InIyIiB4PSIyMCIgeT0iMzAiIHdpZHRoPSI0MCIg
aGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+Ci08L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIgotICAgICB3aWR0aD0iMjAwcHgiIGhlaWdo
dD0iMTAwcHgiPgotICA8c3ZnIHg9IjAiIHk9IjAiIHdpZHRoPSIxMDBweCIgaGVpZ2h0PSIxMDBw
eCI+Ci0gICAgPHJlY3QgaWQ9InIzIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjEwcHgiIGhlaWdodD0i
NTBweCIgZmlsbD0ieWVsbG93IiBvdmVyZmxvdz0iaGlkZGVuIiAvPgotICAgIDxyZWN0IGlkPSJy
NCIgeD0iMCIgeT0iNTBweCIgd2lkdGg9IjIxMHB4IiBoZWlnaHQ9IjYwcHgiIGZpbGw9Im9yYW5n
ZSIgb3ZlcmZsb3c9InZpc2libGUiIC8+Ci0gIDwvc3ZnPgotPC9zdmc+CisgICAgPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIKKyAgICAgICAgIHdp
ZHRoPSIxMDBweCIgaGVpZ2h0PSIxMDBweCI+CisgICAgICAgIDxyZWN0IGlkPSJyMSIgeD0iMjAi
IHk9IjMwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTAiIGZpbGw9ImJsdWUiIC8+CisgICAgPC9zdmc+
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIKKyAg
ICAgICAgIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSIxMDBweCIgdmlld0JveD0iMCAwIDUwIDIwMCIK
KyAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPgorICAgICAgICA8cmVjdCBpZD0i
cjIiIHg9IjIwIiB5PSIzMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjUwIiBmaWxsPSJncmVlbiIgLz4K
KyAgICA8L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lv
bj0iMS4xIgorICAgICAgICAgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjEwMHB4Ij4KKyAgICAgICAg
PHN2ZyB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwcHgiIGhlaWdodD0iMTAwcHgiPgorICAgICAgICAg
ICAgPHJlY3QgaWQ9InIzIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjEwcHgiIGhlaWdodD0iNTBweCIg
ZmlsbD0ieWVsbG93IiBvdmVyZmxvdz0iaGlkZGVuIiAvPgorICAgICAgICAgICAgPHJlY3QgaWQ9
InI0IiB4PSIwIiB5PSI1MHB4IiB3aWR0aD0iMjEwcHgiIGhlaWdodD0iNjBweCIgZmlsbD0ib3Jh
bmdlIiBvdmVyZmxvdz0idmlzaWJsZSIgLz4KKyAgICAgICAgPC9zdmc+CisgICAgPC9zdmc+CiA8
L2Rpdj4KIAogPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgpAQCAtNDAsMjkgKzQwLDI5IEBA
IGRlYnVnKCIiKTsKIAogZGVidWcoIkNoZWNraW5nIGEgcmVzaXplZCByZWN0YW5nbGUgYXQgcmVs
YXRpdmUgY29vcmRpbmF0ZXM6Iik7CiB2YXIgcjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cjIiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLXNob3VsZEJlKCdyMi5sZWZ0JywgJzE4MCcp
Owotc2hvdWxkQmUoJ3IyLnRvcCcsICcxNScpOwotc2hvdWxkQmUoJ3IyLndpZHRoJywgJzE2MCcp
Owotc2hvdWxkQmUoJ3IyLmhlaWdodCcsICcyNScpOwotc2hvdWxkQmUoJ3IyLnJpZ2h0JywgJzM0
MCcpOwotc2hvdWxkQmUoJ3IyLmJvdHRvbScsICc0MCcpOworc2hvdWxkQmUoJ3IyLmxlZnQnLCAn
MjAnKTsKK3Nob3VsZEJlKCdyMi50b3AnLCAnMzAnKTsKK3Nob3VsZEJlKCdyMi53aWR0aCcsICc0
MCcpOworc2hvdWxkQmUoJ3IyLmhlaWdodCcsICc1MCcpOworc2hvdWxkQmUoJ3IyLnJpZ2h0Jywg
JzYwJyk7CitzaG91bGRCZSgncjIuYm90dG9tJywgJzgwJyk7CiBkZWJ1ZygiIik7CiAKIGRlYnVn
KCJDaGVja2luZyByZWN0YW5nbGVzIHdpdGggb3ZlcmZsb3c6Iik7CiB2YXIgcjMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicjMiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLXNob3VsZEJl
KCdyMy5sZWZ0JywgJzMwMCcpOworc2hvdWxkQmUoJ3IzLmxlZnQnLCAnMCcpOwogc2hvdWxkQmUo
J3IzLnRvcCcsICcwJyk7CiBzaG91bGRCZSgncjMud2lkdGgnLCAnMjEwJyk7CiBzaG91bGRCZSgn
cjMuaGVpZ2h0JywgJzUwJyk7Ci1zaG91bGRCZSgncjMucmlnaHQnLCAnNTEwJyk7CitzaG91bGRC
ZSgncjMucmlnaHQnLCAnMjEwJyk7CiBzaG91bGRCZSgncjMuYm90dG9tJywgJzUwJyk7CiAKIHZh
ciByNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyNCIpLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOwotc2hvdWxkQmUoJ3I0LmxlZnQnLCAnMzAwJyk7CitzaG91bGRCZSgncjQubGVmdCcsICcw
Jyk7CiBzaG91bGRCZSgncjQudG9wJywgJzUwJyk7CiBzaG91bGRCZSgncjQud2lkdGgnLCAnMjEw
Jyk7CiBzaG91bGRCZSgncjQuaGVpZ2h0JywgJzYwJyk7Ci1zaG91bGRCZSgncjQucmlnaHQnLCAn
NTEwJyk7CitzaG91bGRCZSgncjQucmlnaHQnLCAnMjEwJyk7CiBzaG91bGRCZSgncjQuYm90dG9t
JywgJzExMCcpOwogZGVidWcoIiIpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3Vz
dG9tL2dldENsaWVudFJlY3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20v
Z2V0Q2xpZW50UmVjdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVhMWE2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L2dldENsaWVudFJlY3RzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYzIEBACitUaGlzIHRlc3Qg
Y2hlY2tzIHRoYXQgZ2V0Q2xpZW50UmVjdHMoKVswXSA9PSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KSA9PSBnZXRCQm94KCkgb24gdGhlIHJvb3QgU1ZHIGVsZW1lbnQgYW5kIGlubmVyIFNWRyBlbGVt
ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitUZXN0aW5nIHN2Z1Jvb3QuLi4K
KworUEFTUyAkKCdzdmdSb290JykuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggaXMgMQorUEFTUyAk
KCdzdmdSb290JykuZ2V0Q2xpZW50UmVjdHMoKVswXS50b3AgaXMgJCgnc3ZnUm9vdCcpLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLnRvcAorUEFTUyAkKCdzdmdSb290JykuZ2V0Q2xpZW50UmVjdHMo
KVswXS5yaWdodCBpcyAkKCdzdmdSb290JykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQK
K1BBU1MgJCgnc3ZnUm9vdCcpLmdldENsaWVudFJlY3RzKClbMF0uYm90dG9tIGlzICQoJ3N2Z1Jv
b3QnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20KK1BBU1MgJCgnc3ZnUm9vdCcpLmdl
dENsaWVudFJlY3RzKClbMF0ubGVmdCBpcyAkKCdzdmdSb290JykuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkubGVmdAorUEFTUyAkKCdzdmdSb290JykuZ2V0Q2xpZW50UmVjdHMoKVswXS53aWR0aCBp
cyAkKCdzdmdSb290JykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgKK1BBU1MgJCgnc3Zn
Um9vdCcpLmdldENsaWVudFJlY3RzKClbMF0uaGVpZ2h0IGlzICQoJ3N2Z1Jvb3QnKS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQKKworVGVzdGluZyBncm91cC4uLgorCitQQVNTICQoJ2dy
b3VwJykuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggaXMgMQorUEFTUyAkKCdncm91cCcpLmdldENs
aWVudFJlY3RzKClbMF0udG9wIGlzICQoJ2dyb3VwJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wCitQQVNTICQoJ2dyb3VwJykuZ2V0Q2xpZW50UmVjdHMoKVswXS5yaWdodCBpcyAkKCdncm91
cCcpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0CitQQVNTICQoJ2dyb3VwJykuZ2V0Q2xp
ZW50UmVjdHMoKVswXS5ib3R0b20gaXMgJCgnZ3JvdXAnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KS5ib3R0b20KK1BBU1MgJCgnZ3JvdXAnKS5nZXRDbGllbnRSZWN0cygpWzBdLmxlZnQgaXMgJCgn
Z3JvdXAnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0CitQQVNTICQoJ2dyb3VwJykuZ2V0
Q2xpZW50UmVjdHMoKVswXS53aWR0aCBpcyAkKCdncm91cCcpLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLndpZHRoCitQQVNTICQoJ2dyb3VwJykuZ2V0Q2xpZW50UmVjdHMoKVswXS5oZWlnaHQgaXMg
JCgnZ3JvdXAnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQKKworUEFTUyAkKCdncm91
cCcpLmdldENsaWVudFJlY3RzKClbMF0udG9wIGlzICQoJ2dyb3VwJykuZ2V0QkJveCgpLngKK1BB
U1MgJCgnZ3JvdXAnKS5nZXRDbGllbnRSZWN0cygpWzBdLmxlZnQgaXMgJCgnZ3JvdXAnKS5nZXRC
Qm94KCkueQorUEFTUyAkKCdncm91cCcpLmdldENsaWVudFJlY3RzKClbMF0ud2lkdGggaXMgJCgn
Z3JvdXAnKS5nZXRCQm94KCkud2lkdGgKK1BBU1MgJCgnZ3JvdXAnKS5nZXRDbGllbnRSZWN0cygp
WzBdLmhlaWdodCBpcyAkKCdncm91cCcpLmdldEJCb3goKS5oZWlnaHQKKworVGVzdGluZyByZWN0
Li4uCisKK1BBU1MgJCgncmVjdCcpLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIGlzIDEKK1BBU1Mg
JCgncmVjdCcpLmdldENsaWVudFJlY3RzKClbMF0udG9wIGlzICQoJ3JlY3QnKS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AKK1BBU1MgJCgncmVjdCcpLmdldENsaWVudFJlY3RzKClbMF0ucmln
aHQgaXMgJCgncmVjdCcpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0CitQQVNTICQoJ3Jl
Y3QnKS5nZXRDbGllbnRSZWN0cygpWzBdLmJvdHRvbSBpcyAkKCdyZWN0JykuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCkuYm90dG9tCitQQVNTICQoJ3JlY3QnKS5nZXRDbGllbnRSZWN0cygpWzBdLmxl
ZnQgaXMgJCgncmVjdCcpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQKK1BBU1MgJCgncmVj
dCcpLmdldENsaWVudFJlY3RzKClbMF0ud2lkdGggaXMgJCgncmVjdCcpLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLndpZHRoCitQQVNTICQoJ3JlY3QnKS5nZXRDbGllbnRSZWN0cygpWzBdLmhlaWdo
dCBpcyAkKCdyZWN0JykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0CisKK1BBU1MgJCgn
cmVjdCcpLmdldENsaWVudFJlY3RzKClbMF0udG9wIGlzICQoJ3JlY3QnKS5nZXRCQm94KCkueAor
UEFTUyAkKCdyZWN0JykuZ2V0Q2xpZW50UmVjdHMoKVswXS5sZWZ0IGlzICQoJ3JlY3QnKS5nZXRC
Qm94KCkueQorUEFTUyAkKCdyZWN0JykuZ2V0Q2xpZW50UmVjdHMoKVswXS53aWR0aCBpcyAkKCdy
ZWN0JykuZ2V0QkJveCgpLndpZHRoCitQQVNTICQoJ3JlY3QnKS5nZXRDbGllbnRSZWN0cygpWzBd
LmhlaWdodCBpcyAkKCdyZWN0JykuZ2V0QkJveCgpLmhlaWdodAorCitUZXN0aW5nIGNpcmNsZS4u
LgorCitQQVNTICQoJ2NpcmNsZScpLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIGlzIDEKK1BBU1Mg
JCgnY2lyY2xlJykuZ2V0Q2xpZW50UmVjdHMoKVswXS50b3AgaXMgJCgnY2lyY2xlJykuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkudG9wCitQQVNTICQoJ2NpcmNsZScpLmdldENsaWVudFJlY3RzKClb
MF0ucmlnaHQgaXMgJCgnY2lyY2xlJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQKK1BB
U1MgJCgnY2lyY2xlJykuZ2V0Q2xpZW50UmVjdHMoKVswXS5ib3R0b20gaXMgJCgnY2lyY2xlJyku
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tCitQQVNTICQoJ2NpcmNsZScpLmdldENsaWVu
dFJlY3RzKClbMF0ubGVmdCBpcyAkKCdjaXJjbGUnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5s
ZWZ0CitQQVNTICQoJ2NpcmNsZScpLmdldENsaWVudFJlY3RzKClbMF0ud2lkdGggaXMgJCgnY2ly
Y2xlJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgKK1BBU1MgJCgnY2lyY2xlJykuZ2V0
Q2xpZW50UmVjdHMoKVswXS5oZWlnaHQgaXMgJCgnY2lyY2xlJykuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkuaGVpZ2h0CisKK1BBU1MgJCgnY2lyY2xlJykuZ2V0Q2xpZW50UmVjdHMoKVswXS50b3Ag
aXMgJCgnY2lyY2xlJykuZ2V0QkJveCgpLngKK1BBU1MgJCgnY2lyY2xlJykuZ2V0Q2xpZW50UmVj
dHMoKVswXS5sZWZ0IGlzICQoJ2NpcmNsZScpLmdldEJCb3goKS55CitQQVNTICQoJ2NpcmNsZScp
LmdldENsaWVudFJlY3RzKClbMF0ud2lkdGggaXMgJCgnY2lyY2xlJykuZ2V0QkJveCgpLndpZHRo
CitQQVNTICQoJ2NpcmNsZScpLmdldENsaWVudFJlY3RzKClbMF0uaGVpZ2h0IGlzICQoJ2NpcmNs
ZScpLmdldEJCb3goKS5oZWlnaHQKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0
Q2xpZW50UmVjdHMuaHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0Q2xpZW50UmVjdHMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMxODlhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRDbGllbnRSZWN0cy5odG1sCkBA
IC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAg
PC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8c3ZnIGlkPSJzdmdSb290IiB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAorICAgICAgICAgICAgIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIgorICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBibHVlIj4KKyAg
ICAgICAgICAgICA8ZyBpZD0iZ3JvdXAiPgorICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJyZWN0
IiB4PSIxMDAiIHk9IjEwMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVuIi8+
CisgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iY2lyY2xlIiBjeD0iMjAwIiBjeT0iMjAwIiBy
PSI1MCIgZmlsbD0icmVkIi8+CisgICAgICAgICAgICAgPC9nPgorICAgICAgICA8L3N2Zz4KKyAg
ICAgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICAg
ICAgZnVuY3Rpb24gJChpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmdW5jdGlvbiBjaGVja1JlY3RzRm9ySWQoaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVidWcoIlRlc3RpbmcgIiArIGlkICsgIi4uLlxuIik7CisKKyAgICAgICAgICAgICAg
ICBzaG91bGRFdmFsdWF0ZVRvKCIkKCciICsgaWQgKyAiJykuZ2V0Q2xpZW50UmVjdHMoKS5sZW5n
dGgiLCAxKTsKKyAgICAgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCIkKCciICsgaWQgKyAi
JykuZ2V0Q2xpZW50UmVjdHMoKVswXS50b3AiLCAiJCgnIiArIGlkICsgIicpLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcCIpOworICAgICAgICAgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oIiQo
JyIgKyBpZCArICInKS5nZXRDbGllbnRSZWN0cygpWzBdLnJpZ2h0IiwgIiQoJyIgKyBpZCArICIn
KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCIpOworICAgICAgICAgICAgICAgIHNob3Vs
ZEV2YWx1YXRlVG8oIiQoJyIgKyBpZCArICInKS5nZXRDbGllbnRSZWN0cygpWzBdLmJvdHRvbSIs
ICIkKCciICsgaWQgKyAiJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIik7CisgICAg
ICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygiJCgnIiArIGlkICsgIicpLmdldENsaWVudFJl
Y3RzKClbMF0ubGVmdCIsICIkKCciICsgaWQgKyAiJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
bGVmdCIpOworICAgICAgICAgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oIiQoJyIgKyBpZCArICIn
KS5nZXRDbGllbnRSZWN0cygpWzBdLndpZHRoIiwgIiQoJyIgKyBpZCArICInKS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS53aWR0aCIpOworICAgICAgICAgICAgICAgIHNob3VsZEV2YWx1YXRlVG8o
IiQoJyIgKyBpZCArICInKS5nZXRDbGllbnRSZWN0cygpWzBdLmhlaWdodCIsICIkKCciICsgaWQg
KyAiJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0Iik7CisKKyAgICAgICAgICAgICAg
ICAvLyBTVkcgcm9vdCBlbGVtZW50cyBkbyBub3QgaGF2ZSBhIGdldEJCb3goKSBtZXRob2QuCisg
ICAgICAgICAgICAgICAgaWYgKGlkICE9ICJzdmdSb290IikgeworICAgICAgICAgICAgICAgICAg
ICBkZWJ1ZygiIik7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oIiQoJyIg
KyBpZCArICInKS5nZXRDbGllbnRSZWN0cygpWzBdLnRvcCIsICIkKCciICsgaWQgKyAiJykuZ2V0
QkJveCgpLngiKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygiJCgnIiAr
IGlkICsgIicpLmdldENsaWVudFJlY3RzKClbMF0ubGVmdCIsICIkKCciICsgaWQgKyAiJykuZ2V0
QkJveCgpLnkiKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygiJCgnIiAr
IGlkICsgIicpLmdldENsaWVudFJlY3RzKClbMF0ud2lkdGgiLCAiJCgnIiArIGlkICsgIicpLmdl
dEJCb3goKS53aWR0aCIpOworICAgICAgICAgICAgICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCIk
KCciICsgaWQgKyAiJykuZ2V0Q2xpZW50UmVjdHMoKVswXS5oZWlnaHQiLCAiJCgnIiArIGlkICsg
IicpLmdldEJCb3goKS5oZWlnaHQiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWJ1ZygiIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ2V0Q2xpZW50UmVjdHMoKVswXSA9PSBnZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKSA9PSBnZXRCQm94KCkgb24gdGhlIHJvb3QgU1ZHIGVsZW1lbnQgYW5kIGlu
bmVyIFNWRyBlbGVtZW50cy4iKTsKKworICAgICAgICAgICAgY2hlY2tSZWN0c0ZvcklkKCJzdmdS
b290Iik7CisgICAgICAgICAgICBjaGVja1JlY3RzRm9ySWQoImdyb3VwIik7CisgICAgICAgICAg
ICBjaGVja1JlY3RzRm9ySWQoInJlY3QiKTsKKyAgICAgICAgICAgIGNoZWNrUmVjdHNGb3JJZCgi
Y2lyY2xlIik7CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICAgIDwvYm9k
eT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdmcvem9vbS9wYWdlL3pvb20tZ2V0Qm91bmRpbmdDbGllbnRSZWN0LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N2Zy96b29tL3BhZ2Uvem9vbS1nZXRCb3VuZGluZ0NsaWVudFJl
Y3QtZXhwZWN0ZWQudHh0CmluZGV4IDg3OWY2NDYuLjQ5NWQ3OTggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N2Zy96b29tL3BhZ2Uvem9vbS1nZXRCb3VuZGluZ0NsaWVudFJlY3QtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N2Zy96b29tL3BhZ2Uvem9vbS1nZXRCb3VuZGluZ0NsaWVu
dFJlY3QtZXhwZWN0ZWQudHh0CkBAIC0xMSwyNSArMTEsMjUgQEAgUEFTUyByMS5yaWdodC50b0Zp
eGVkKDIpIGlzICI2MC4wMCIKIFBBU1MgcjEuYm90dG9tLnRvRml4ZWQoMikgaXMgIjgwLjAwIgog
CiBDaGVja2luZyBhIHJlc2l6ZWQgcmVjdGFuZ2xlIGF0IHJlbGF0aXZlIGNvb3JkaW5hdGVzOgot
UEFTUyByMi5sZWZ0LnRvRml4ZWQoMikgaXMgIjE4MC4wMCIKLVBBU1MgcjIudG9wLnRvRml4ZWQo
MikgaXMgIjE1LjAwIgotUEFTUyByMi53aWR0aC50b0ZpeGVkKDIpIGlzICIxNjAuMDAiCi1QQVNT
IHIyLmhlaWdodC50b0ZpeGVkKDIpIGlzICIyNS4wMCIKLVBBU1MgcjIucmlnaHQudG9GaXhlZCgy
KSBpcyAiMzQwLjAwIgotUEFTUyByMi5ib3R0b20udG9GaXhlZCgyKSBpcyAiNDAuMDAiCitQQVNT
IHIyLmxlZnQudG9GaXhlZCgyKSBpcyAiMjAuMDAiCitQQVNTIHIyLnRvcC50b0ZpeGVkKDIpIGlz
ICIzMC4wMCIKK1BBU1MgcjIud2lkdGgudG9GaXhlZCgyKSBpcyAiNDAuMDAiCitQQVNTIHIyLmhl
aWdodC50b0ZpeGVkKDIpIGlzICI1MC4wMCIKK1BBU1MgcjIucmlnaHQudG9GaXhlZCgyKSBpcyAi
NjAuMDAiCitQQVNTIHIyLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI4MC4wMCIKIAogQ2hlY2tpbmcg
cmVjdGFuZ2xlcyB3aXRoIG92ZXJmbG93OgotUEFTUyByMy5sZWZ0LnRvRml4ZWQoMikgaXMgIjMw
MC4wMCIKK1BBU1MgcjMubGVmdC50b0ZpeGVkKDIpIGlzICIwLjAwIgogUEFTUyByMy50b3AudG9G
aXhlZCgyKSBpcyAiMC4wMCIKIFBBU1MgcjMud2lkdGgudG9GaXhlZCgyKSBpcyAiMjEwLjAwIgog
UEFTUyByMy5oZWlnaHQudG9GaXhlZCgyKSBpcyAiNTAuMDAiCi1QQVNTIHIzLnJpZ2h0LnRvRml4
ZWQoMikgaXMgIjUxMC4wMCIKK1BBU1MgcjMucmlnaHQudG9GaXhlZCgyKSBpcyAiMjEwLjAwIgog
UEFTUyByMy5ib3R0b20udG9GaXhlZCgyKSBpcyAiNTAuMDAiCi1QQVNTIHI0LmxlZnQudG9GaXhl
ZCgyKSBpcyAiMzAwLjAwIgorUEFTUyByNC5sZWZ0LnRvRml4ZWQoMikgaXMgIjAuMDAiCiBQQVNT
IHI0LnRvcC50b0ZpeGVkKDIpIGlzICI1MC4wMCIKIFBBU1MgcjQud2lkdGgudG9GaXhlZCgyKSBp
cyAiMjEwLjAwIgogUEFTUyByNC5oZWlnaHQudG9GaXhlZCgyKSBpcyAiNjAuMDAiCi1QQVNTIHI0
LnJpZ2h0LnRvRml4ZWQoMikgaXMgIjUxMC4wMCIKK1BBU1MgcjQucmlnaHQudG9GaXhlZCgyKSBp
cyAiMjEwLjAwIgogUEFTUyByNC5ib3R0b20udG9GaXhlZCgyKSBpcyAiMTEwLjAwIgogCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcv
em9vbS9wYWdlL3pvb20tZ2V0Qm91bmRpbmdDbGllbnRSZWN0LnhodG1sIGIvTGF5b3V0VGVzdHMv
c3ZnL3pvb20vcGFnZS96b29tLWdldEJvdW5kaW5nQ2xpZW50UmVjdC54aHRtbAppbmRleCAxNDFk
YzFjLi43NWU4MTcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdmcvem9vbS9wYWdlL3pvb20t
Z2V0Qm91bmRpbmdDbGllbnRSZWN0LnhodG1sCisrKyBiL0xheW91dFRlc3RzL3N2Zy96b29tL3Bh
Z2Uvem9vbS1nZXRCb3VuZGluZ0NsaWVudFJlY3QueGh0bWwKQEAgLTM5LDI5ICszOSwyOSBAQCBm
dW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKIAogICAgIGRlYnVnKCJDaGVja2luZyBhIHJlc2l6ZWQg
cmVjdGFuZ2xlIGF0IHJlbGF0aXZlIGNvb3JkaW5hdGVzOiIpOwogICAgIHIyID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInIyIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdyMi5sZWZ0LnRvRml4ZWQoMiknLCAnMTgwLjAwJyk7Ci0gICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdyMi50b3AudG9GaXhlZCgyKScsICcxNS4wMCcpOwotICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygncjIud2lkdGgudG9GaXhlZCgyKScsICcxNjAuMDAnKTsKLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3IyLmhlaWdodC50b0ZpeGVkKDIpJywgJzI1LjAwJyk7
Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyMi5yaWdodC50b0ZpeGVkKDIpJywgJzM0MC4w
MCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncjIuYm90dG9tLnRvRml4ZWQoMiknLCAn
NDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3IyLmxlZnQudG9GaXhlZCgyKScs
ICcyMC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncjIudG9wLnRvRml4ZWQoMikn
LCAnMzAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3IyLndpZHRoLnRvRml4ZWQo
MiknLCAnNDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3IyLmhlaWdodC50b0Zp
eGVkKDIpJywgJzUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyMi5yaWdodC50
b0ZpeGVkKDIpJywgJzYwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyMi5ib3R0
b20udG9GaXhlZCgyKScsICc4MC4wMCcpOwogICAgIGRlYnVnKCIiKTsKIAogICAgIGRlYnVnKCJD
aGVja2luZyByZWN0YW5nbGVzIHdpdGggb3ZlcmZsb3c6Iik7CiAgICAgcjMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicjMiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3IzLmxlZnQudG9GaXhlZCgyKScsICczMDAuMDAnKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ3IzLmxlZnQudG9GaXhlZCgyKScsICcwLjAwJyk7CiAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdyMy50b3AudG9GaXhlZCgyKScsICcwLjAwJyk7CiAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdyMy53aWR0aC50b0ZpeGVkKDIpJywgJzIxMC4wMCcpOwogICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygncjMuaGVpZ2h0LnRvRml4ZWQoMiknLCAnNTAuMDAnKTsK
LSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3IzLnJpZ2h0LnRvRml4ZWQoMiknLCAnNTEwLjAw
Jyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyMy5yaWdodC50b0ZpeGVkKDIpJywgJzIx
MC4wMCcpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncjMuYm90dG9tLnRvRml4ZWQoMikn
LCAnNTAuMDAnKTsKIAogICAgIHI0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInI0IikuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyNC5sZWZ0
LnRvRml4ZWQoMiknLCAnMzAwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyNC5s
ZWZ0LnRvRml4ZWQoMiknLCAnMC4wMCcpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncjQu
dG9wLnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3I0
LndpZHRoLnRvRml4ZWQoMiknLCAnMjEwLjAwJyk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdyNC5oZWlnaHQudG9GaXhlZCgyKScsICc2MC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygncjQucmlnaHQudG9GaXhlZCgyKScsICc1MTAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ3I0LnJpZ2h0LnRvRml4ZWQoMiknLCAnMjEwLjAwJyk7CiAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdyNC5ib3R0b20udG9GaXhlZCgyKScsICcxMTAuMDAnKTsKICAgICBkZWJ1
ZygiIik7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvem9vbS9wYWdlL3pvb20tem9v
bS1jb29yZHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL3pvb20vcGFnZS96b29tLXpv
b20tY29vcmRzLWV4cGVjdGVkLnR4dAppbmRleCA0OWY0OGJlLi5jMGJkNDljIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdmcvem9vbS9wYWdlL3pvb20tem9vbS1jb29yZHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N2Zy96b29tL3BhZ2Uvem9vbS16b29tLWNvb3Jkcy1leHBlY3Rl
ZC50eHQKQEAgLTE5LDE4ICsxOSwxOCBAQCBQQVNTIGRpdjEucmlnaHQudG9GaXhlZCgyKSBpcyAi
MTAwLjAwIgogUEFTUyBkaXYxLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI1MC4wMCIKIAogUEFTUyBk
aXYyLmxlZnQudG9GaXhlZCgyKSBpcyAiMC4wMCIKLVBBU1MgZGl2Mi50b3AudG9GaXhlZCgyKSBp
cyAiMjUuMDAiCi1QQVNTIGRpdjIud2lkdGgudG9GaXhlZCgyKSBpcyAiMTAwLjAwIgotUEFTUyBk
aXYyLmhlaWdodC50b0ZpeGVkKDIpIGlzICI1MC4wMCIKLVBBU1MgZGl2Mi5yaWdodC50b0ZpeGVk
KDIpIGlzICIxMDAuMDAiCi1QQVNTIGRpdjIuYm90dG9tLnRvRml4ZWQoMikgaXMgIjc1LjAwIgor
UEFTUyBkaXYyLnRvcC50b0ZpeGVkKDIpIGlzICI1MC4wMCIuCitQQVNTIGRpdjIud2lkdGgudG9G
aXhlZCgyKSBpcyAiMjAwLjAwIgorUEFTUyBkaXYyLmhlaWdodC50b0ZpeGVkKDIpIGlzICIxMDAu
MDAiCitQQVNTIGRpdjIucmlnaHQudG9GaXhlZCgyKSBpcyAiMjAwLjAwIgorUEFTUyBkaXYyLmJv
dHRvbS50b0ZpeGVkKDIpIGlzICIxNTAuMDAiCiAKIFBBU1MgZGl2My5sZWZ0LnRvRml4ZWQoMikg
aXMgIjAuMDAiCi1QQVNTIGRpdjMudG9wLnRvRml4ZWQoMikgaXMgIjMwMC4wMCIKLVBBU1MgZGl2
My53aWR0aC50b0ZpeGVkKDIpIGlzICIyMDAuMDAiCi1QQVNTIGRpdjMuaGVpZ2h0LnRvRml4ZWQo
MikgaXMgIjEwMC4wMCIKLVBBU1MgZGl2My5yaWdodC50b0ZpeGVkKDIpIGlzICIyMDAuMDAiCi1Q
QVNTIGRpdjMuYm90dG9tLnRvRml4ZWQoMikgaXMgIjQwMC4wMCIKK1BBU1MgZGl2My50b3AudG9G
aXhlZCgyKSBpcyAiMTUwLjAwIgorUEFTUyBkaXYzLndpZHRoLnRvRml4ZWQoMikgaXMgIjEwMC4w
MCIKK1BBU1MgZGl2My5oZWlnaHQudG9GaXhlZCgyKSBpcyAiNTAuMDAiCitQQVNTIGRpdjMucmln
aHQudG9GaXhlZCgyKSBpcyAiMTUwLjAwIgorUEFTUyBkaXYzLmJvdHRvbS50b0ZpeGVkKDIpIGlz
ICIyMDAuMDAiCiAKIENoZWNraW5nIFNWRyBlbGVtZW50czoKIApAQCAtNDEsMjMgKzQxLDIzIEBA
IFBBU1Mgc3ZnMS5oZWlnaHQudG9GaXhlZCgyKSBpcyAiNTAuMDAiCiBQQVNTIHN2ZzEucmlnaHQu
dG9GaXhlZCgyKSBpcyAiMTUwLjAwIgogUEFTUyBzdmcxLmJvdHRvbS50b0ZpeGVkKDIpIGlzICIz
MDAuMDAiCiBQQVNTIHJlY3QxLmxlZnQudG9GaXhlZCgyKSBpcyAiMC4wMCIKLVBBU1MgcmVjdDEu
dG9wLnRvRml4ZWQoMikgaXMgIjI1MC4wMCIKK1BBU1MgcmVjdDEudG9wLnRvRml4ZWQoMikgaXMg
IjAuMDAiCiBQQVNTIHJlY3QxLndpZHRoLnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKLVBBU1MgcmVj
dDEuaGVpZ2h0LnRvRml4ZWQoMikgaXMgIjUwLjAwIgorUEFTUyByZWN0MS5oZWlnaHQudG9GaXhl
ZCgyKSBpcyAiMTAwLjAwIgogUEFTUyByZWN0MS5yaWdodC50b0ZpeGVkKDIpIGlzICIxMDAuMDAi
Ci1QQVNTIHJlY3QxLmJvdHRvbS50b0ZpeGVkKDIpIGlzICIzMDAuMDAiCitQQVNTIHJlY3QxLmJv
dHRvbS50b0ZpeGVkKDIpIGlzICIxMDAuMDAiCiBQQVNTIGltYWdlMS5sZWZ0LnRvRml4ZWQoMikg
aXMgIjEwMC4wMCIKLVBBU1MgaW1hZ2UxLnRvcC50b0ZpeGVkKDIpIGlzICIyNTAuMDAiCitQQVNT
IGltYWdlMS50b3AudG9GaXhlZCgyKSBpcyAiMC4wMCIKIFBBU1MgaW1hZ2UxLndpZHRoLnRvRml4
ZWQoMikgaXMgIjUwLjAwIgotUEFTUyBpbWFnZTEuaGVpZ2h0LnRvRml4ZWQoMikgaXMgIjI1LjAw
IgorUEFTUyBpbWFnZTEuaGVpZ2h0LnRvRml4ZWQoMikgaXMgIjUwLjAwIgogUEFTUyBpbWFnZTEu
cmlnaHQudG9GaXhlZCgyKSBpcyAiMTUwLjAwIgotUEFTUyBpbWFnZTEuYm90dG9tLnRvRml4ZWQo
MikgaXMgIjI3NS4wMCIKK1BBU1MgaW1hZ2UxLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI1MC4wMCIK
IFBBU1MgdGV4dDEubGVmdC50b0ZpeGVkKDIpIGlzICIxMDAuMDAiCi1QQVNTIHRleHQxLnRvcC50
b0ZpeGVkKDIpIGlzICIyODIuNTAiCitQQVNTIHRleHQxLnRvcC50b0ZpeGVkKDIpIGlzICI2NS4w
MCIKIFBBU1MgdGV4dDEud2lkdGgudG9GaXhlZCgyKSBpcyAiNTAuMDAiCi1QQVNTIHRleHQxLmhl
aWdodC50b0ZpeGVkKDIpIGlzICI2LjUwIgorUEFTUyB0ZXh0MS5oZWlnaHQudG9GaXhlZCgyKSBp
cyAiMTMuMDAiCiBQQVNTIHRleHQxLnJpZ2h0LnRvRml4ZWQoMikgaXMgIjE1MC4wMCIKLVBBU1Mg
dGV4dDEuYm90dG9tLnRvRml4ZWQoMikgaXMgIjI4OS4wMCIKK1BBU1MgdGV4dDEuYm90dG9tLnRv
Rml4ZWQoMikgaXMgIjc4LjAwIgogCiBQQVNTIHN2ZzIubGVmdC50b0ZpeGVkKDIpIGlzICI3NS4w
MCIKIFBBU1Mgc3ZnMi50b3AudG9GaXhlZCgyKSBpcyAiMTAwLjAwIgpAQCAtNjUsMjQgKzY1LDI0
IEBAIFBBU1Mgc3ZnMi53aWR0aC50b0ZpeGVkKDIpIGlzICIxNTAuMDAiCiBQQVNTIHN2ZzIuaGVp
Z2h0LnRvRml4ZWQoMikgaXMgIjUwLjAwIgogUEFTUyBzdmcyLnJpZ2h0LnRvRml4ZWQoMikgaXMg
IjIyNS4wMCIKIFBBU1Mgc3ZnMi5ib3R0b20udG9GaXhlZCgyKSBpcyAiMTUwLjAwIgotUEFTUyBy
ZWN0Mi5sZWZ0LnRvRml4ZWQoMikgaXMgIjc1LjAwIgotUEFTUyByZWN0Mi50b3AudG9GaXhlZCgy
KSBpcyAiMTAwLjAwIgorUEFTUyByZWN0Mi5sZWZ0LnRvRml4ZWQoMikgaXMgIjAuMDAiCitQQVNT
IHJlY3QyLnRvcC50b0ZpeGVkKDIpIGlzICIwLjAwIgogUEFTUyByZWN0Mi53aWR0aC50b0ZpeGVk
KDIpIGlzICIxMDAuMDAiCi1QQVNTIHJlY3QyLmhlaWdodC50b0ZpeGVkKDIpIGlzICI1MC4wMCIK
LVBBU1MgcmVjdDIucmlnaHQudG9GaXhlZCgyKSBpcyAiMTc1LjAwIgotUEFTUyByZWN0Mi5ib3R0
b20udG9GaXhlZCgyKSBpcyAiMTUwLjAwIgotUEFTUyBpbWFnZTIubGVmdC50b0ZpeGVkKDIpIGlz
ICIxNzUuMDAiCi1QQVNTIGltYWdlMi50b3AudG9GaXhlZCgyKSBpcyAiMTAwLjAwIgorUEFTUyBy
ZWN0Mi5oZWlnaHQudG9GaXhlZCgyKSBpcyAiMTAwLjAwIgorUEFTUyByZWN0Mi5yaWdodC50b0Zp
eGVkKDIpIGlzICIxMDAuMDAiCitQQVNTIHJlY3QyLmJvdHRvbS50b0ZpeGVkKDIpIGlzICIxMDAu
MDAiCitQQVNTIGltYWdlMi5sZWZ0LnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKK1BBU1MgaW1hZ2Uy
LnRvcC50b0ZpeGVkKDIpIGlzICIwLjAwIgogUEFTUyBpbWFnZTIud2lkdGgudG9GaXhlZCgyKSBp
cyAiNTAuMDAiCi1QQVNTIGltYWdlMi5oZWlnaHQudG9GaXhlZCgyKSBpcyAiMjUuMDAiCi1QQVNT
IGltYWdlMi5yaWdodC50b0ZpeGVkKDIpIGlzICIyMjUuMDAiCi1QQVNTIGltYWdlMi5ib3R0b20u
dG9GaXhlZCgyKSBpcyAiMTI1LjAwIgotUEFTUyB0ZXh0Mi5sZWZ0LnRvRml4ZWQoMikgaXMgIjE3
NS4wMCIKLVBBU1MgdGV4dDIudG9wLnRvRml4ZWQoMikgaXMgIjEzMi41MCIKK1BBU1MgaW1hZ2Uy
LmhlaWdodC50b0ZpeGVkKDIpIGlzICI1MC4wMCIKK1BBU1MgaW1hZ2UyLnJpZ2h0LnRvRml4ZWQo
MikgaXMgIjE1MC4wMCIKK1BBU1MgaW1hZ2UyLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI1MC4wMCIK
K1BBU1MgdGV4dDIubGVmdC50b0ZpeGVkKDIpIGlzICIxMDAuMDAiCitQQVNTIHRleHQyLnRvcC50
b0ZpeGVkKDIpIGlzICI2NS4wMCIKIFBBU1MgdGV4dDIud2lkdGgudG9GaXhlZCgyKSBpcyAiNDgu
MDAiCi1QQVNTIHRleHQyLmhlaWdodC50b0ZpeGVkKDIpIGlzICI2LjUwIgotUEFTUyB0ZXh0Mi5y
aWdodC50b0ZpeGVkKDIpIGlzICIyMjMuMDAiCi1QQVNTIHRleHQyLmJvdHRvbS50b0ZpeGVkKDIp
IGlzICIxMzkuMDAiCitQQVNTIHRleHQyLmhlaWdodC50b0ZpeGVkKDIpIGlzICIxMy4wMCIKK1BB
U1MgdGV4dDIucmlnaHQudG9GaXhlZCgyKSBpcyAiMTQ4LjAwIgorUEFTUyB0ZXh0Mi5ib3R0b20u
dG9GaXhlZCgyKSBpcyAiNzguMDAiCiAKIFBBU1Mgc3ZnMy5sZWZ0LnRvRml4ZWQoMikgaXMgIjkw
MC4wMCIKIFBBU1Mgc3ZnMy50b3AudG9GaXhlZCgyKSBpcyAiNTAwLjAwIgpAQCAtOTAsMjQgKzkw
LDI0IEBAIFBBU1Mgc3ZnMy53aWR0aC50b0ZpeGVkKDIpIGlzICIzMDAuMDAiCiBQQVNTIHN2ZzMu
aGVpZ2h0LnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKIFBBU1Mgc3ZnMy5yaWdodC50b0ZpeGVkKDIp
IGlzICIxMjAwLjAwIgogUEFTUyBzdmczLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI2MDAuMDAiCi1Q
QVNTIHJlY3QzLmxlZnQudG9GaXhlZCgyKSBpcyAiOTAwLjAwIgotUEFTUyByZWN0My50b3AudG9G
aXhlZCgyKSBpcyAiNTAwLjAwIgotUEFTUyByZWN0My53aWR0aC50b0ZpeGVkKDIpIGlzICIyMDAu
MDAiCitQQVNTIHJlY3QzLmxlZnQudG9GaXhlZCgyKSBpcyAiMC4wMCIKK1BBU1MgcmVjdDMudG9w
LnRvRml4ZWQoMikgaXMgIjAuMDAiCitQQVNTIHJlY3QzLndpZHRoLnRvRml4ZWQoMikgaXMgIjEw
MC4wMCIKIFBBU1MgcmVjdDMuaGVpZ2h0LnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKLVBBU1MgcmVj
dDMucmlnaHQudG9GaXhlZCgyKSBpcyAiMTEwMC4wMCIKLVBBU1MgcmVjdDMuYm90dG9tLnRvRml4
ZWQoMikgaXMgIjYwMC4wMCIKLVBBU1MgaW1hZ2UzLmxlZnQudG9GaXhlZCgyKSBpcyAiMTEwMC4w
MCIKLVBBU1MgaW1hZ2UzLnRvcC50b0ZpeGVkKDIpIGlzICI1MDAuMDAiCi1QQVNTIGltYWdlMy53
aWR0aC50b0ZpeGVkKDIpIGlzICIxMDAuMDAiCitQQVNTIHJlY3QzLnJpZ2h0LnRvRml4ZWQoMikg
aXMgIjEwMC4wMCIKK1BBU1MgcmVjdDMuYm90dG9tLnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKK1BB
U1MgaW1hZ2UzLmxlZnQudG9GaXhlZCgyKSBpcyAiMTAwLjAwIgorUEFTUyBpbWFnZTMudG9wLnRv
Rml4ZWQoMikgaXMgIjAuMDAiCitQQVNTIGltYWdlMy53aWR0aC50b0ZpeGVkKDIpIGlzICI1MC4w
MCIKIFBBU1MgaW1hZ2UzLmhlaWdodC50b0ZpeGVkKDIpIGlzICI1MC4wMCIKLVBBU1MgaW1hZ2Uz
LnJpZ2h0LnRvRml4ZWQoMikgaXMgIjEyMDAuMDAiCi1QQVNTIGltYWdlMy5ib3R0b20udG9GaXhl
ZCgyKSBpcyAiNTUwLjAwIgotUEFTUyB0ZXh0My5sZWZ0LnRvRml4ZWQoMikgaXMgIjExMDAuMDAi
Ci1QQVNTIHRleHQzLnRvcC50b0ZpeGVkKDIpIGlzICI1NjUuMDAiCi1QQVNTIHRleHQzLndpZHRo
LnRvRml4ZWQoMikgaXMgIjEwMC4wMCIKK1BBU1MgaW1hZ2UzLnJpZ2h0LnRvRml4ZWQoMikgaXMg
IjE1MC4wMCIKK1BBU1MgaW1hZ2UzLmJvdHRvbS50b0ZpeGVkKDIpIGlzICI1MC4wMCIKK1BBU1Mg
dGV4dDMubGVmdC50b0ZpeGVkKDIpIGlzICIxMDAuMDAiCitQQVNTIHRleHQzLnRvcC50b0ZpeGVk
KDIpIGlzICI2NS4wMCIKK1BBU1MgdGV4dDMud2lkdGgudG9GaXhlZCgyKSBpcyAiNTAuMDAiCiBQ
QVNTIHRleHQzLmhlaWdodC50b0ZpeGVkKDIpIGlzICIxMy4wMCIKLVBBU1MgdGV4dDMucmlnaHQu
dG9GaXhlZCgyKSBpcyAiMTIwMC4wMCIKLVBBU1MgdGV4dDMuYm90dG9tLnRvRml4ZWQoMikgaXMg
IjU3OC4wMCIKK1BBU1MgdGV4dDMucmlnaHQudG9GaXhlZCgyKSBpcyAiMTUwLjAwIgorUEFTUyB0
ZXh0My5ib3R0b20udG9GaXhlZCgyKSBpcyAiNzguMDAiCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL3pvb20vcGFnZS96b29t
LXpvb20tY29vcmRzLnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL3pvb20vcGFnZS96b29tLXpvb20t
Y29vcmRzLnhodG1sCmluZGV4IDE2YmFkNWYuLjM5ZTg0NWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N2Zy96b29tL3BhZ2Uvem9vbS16b29tLWNvb3Jkcy54aHRtbAorKysgYi9MYXlvdXRUZXN0
cy9zdmcvem9vbS9wYWdlL3pvb20tem9vbS1jb29yZHMueGh0bWwKQEAgLTI0LDcgKzI0LDcgQEAK
IDxkaXYgaWQ9ImRpdjMiIHN0eWxlPSJ3aWR0aDoyMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3Vu
ZC1jb2xvcjpibHVlOyI+PC9kaXY+CiA8ZGl2IHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ9MTAw
cHg7Ij4KIDxzdmcgaWQ9InN2ZzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIK
LSAgICAgd2lkdGg9IjE1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxNTAgMTAwIgor
ICAgICB3aWR0aD0iMTUwcHgiIGhlaWdodD0iNTBweCIgdmlld0JveD0iMCAwIDE1MCA1MCIKICAg
ICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgIDxyZWN0IGlkPSJyZWN0MSIgeD0iMCIg
eT0iMCIgd2lkdGg9IjEwMHB4IiBoZWlnaHQ9IjEwMHB4IiBmaWxsPSJncmF5IiAvPgogICA8aW1h
Z2UgaWQ9ImltYWdlMSIgeD0iMTAwcHgiIHk9IjAiIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgi
IHhsaW5rOmhyZWY9Ii4uLy4uL1czQy1TVkctMS4xL3Jlc291cmNlcy9tYWduaWZ5LnBuZyIgLz4K
QEAgLTcwLDIwICs3MCwyMCBAQCBmdW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKIAogICAgIGRpdjIg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MiIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2Mi5sZWZ0LnRvRml4ZWQoMiknLCAnMC4w
MCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2Mi50b3AudG9GaXhlZCgyKScsICcy
NS4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2Mi53aWR0aC50b0ZpeGVkKDIp
JywgJzEwMC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2Mi5oZWlnaHQudG9G
aXhlZCgyKScsICc1MC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2Mi5yaWdo
dC50b0ZpeGVkKDIpJywgJzEwMC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2
Mi5ib3R0b20udG9GaXhlZCgyKScsICc3NS4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnZGl2Mi50b3AudG9GaXhlZCgyKScsICc1MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnZGl2Mi53aWR0aC50b0ZpeGVkKDIpJywgJzIwMC4wMCcpOworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnZGl2Mi5oZWlnaHQudG9GaXhlZCgyKScsICcxMDAuMDAnKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2RpdjIucmlnaHQudG9GaXhlZCgyKScsICcyMDAuMDAnKTsKKyAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2RpdjIuYm90dG9tLnRvRml4ZWQoMiknLCAnMTUwLjAw
Jyk7CiAgICAgZGVidWcoIiIpOwogCiAgICAgZGl2MyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJkaXYzIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdkaXYzLmxlZnQudG9GaXhlZCgyKScsICcwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdkaXYzLnRvcC50b0ZpeGVkKDIpJywgJzMwMC4wMCcpOwotICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnZGl2My53aWR0aC50b0ZpeGVkKDIpJywgJzIwMC4wMCcpOwotICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnZGl2My5oZWlnaHQudG9GaXhlZCgyKScsICcxMDAuMDAnKTsKLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2RpdjMucmlnaHQudG9GaXhlZCgyKScsICcyMDAuMDAn
KTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2RpdjMuYm90dG9tLnRvRml4ZWQoMiknLCAn
NDAwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdkaXYzLnRvcC50b0ZpeGVkKDIp
JywgJzE1MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2My53aWR0aC50b0Zp
eGVkKDIpJywgJzEwMC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2My5oZWln
aHQudG9GaXhlZCgyKScsICc1MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZGl2
My5yaWdodC50b0ZpeGVkKDIpJywgJzE1MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnZGl2My5ib3R0b20udG9GaXhlZCgyKScsICcyMDAuMDAnKTsKICAgICBkZWJ1ZygiIik7CiAK
ICAgICBkZWJ1ZygiQ2hlY2tpbmcgU1ZHIGVsZW1lbnRzOiIpOwpAQCAtOTgsMjUgKzk4LDI1IEBA
IGZ1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgewogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnc3Zn
MS5ib3R0b20udG9GaXhlZCgyKScsICczMDAuMDAnKTsKICAgICByZWN0MSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZWN0MSIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygncmVjdDEubGVmdC50b0ZpeGVkKDIpJywgJzAuMDAnKTsKLSAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3QxLnRvcC50b0ZpeGVkKDIpJywgJzI1MC4wMCcpOwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVjdDEudG9wLnRvRml4ZWQoMiknLCAnMC4wMCcp
OwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVjdDEud2lkdGgudG9GaXhlZCgyKScsICcx
MDAuMDAnKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3QxLmhlaWdodC50b0ZpeGVk
KDIpJywgJzUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZWN0MS5oZWlnaHQu
dG9GaXhlZCgyKScsICcxMDAuMDAnKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3Qx
LnJpZ2h0LnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdyZWN0MS5ib3R0b20udG9GaXhlZCgyKScsICczMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ3JlY3QxLmJvdHRvbS50b0ZpeGVkKDIpJywgJzEwMC4wMCcpOwogICAgIGltYWdl
MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWFnZTEiKS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMS5sZWZ0LnRvRml4ZWQoMikn
LCAnMTAwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFnZTEudG9wLnRvRml4
ZWQoMiknLCAnMjUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFnZTEudG9w
LnRvRml4ZWQoMiknLCAnMC4wMCcpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2Ux
LndpZHRoLnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ltYWdlMS5oZWlnaHQudG9GaXhlZCgyKScsICcyNS4wMCcpOworICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnaW1hZ2UxLmhlaWdodC50b0ZpeGVkKDIpJywgJzUwLjAwJyk7CiAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbWFnZTEucmlnaHQudG9GaXhlZCgyKScsICcxNTAuMDAnKTsKLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMS5ib3R0b20udG9GaXhlZCgyKScsICcyNzUu
MDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMS5ib3R0b20udG9GaXhlZCgy
KScsICc1MC4wMCcpOwogICAgIHRleHQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQx
IikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0
ZXh0MS5sZWZ0LnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCd0ZXh0MS50b3AudG9GaXhlZCgyKScsICcyODIuNTAnKTsKLSAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ3RleHQxLndpZHRoLnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKLSAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3RleHQxLmhlaWdodC50b0ZpeGVkKDIpJywgJzYuNTAnKTsKLSAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQxLnJpZ2h0LnRvRml4ZWQoMiknLCAnMTUwLjAwJyk7
Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0MS5ib3R0b20udG9GaXhlZCgyKScsICcy
ODkuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQxLnRvcC50b0ZpeGVkKDIp
JywgJzY1LjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0MS53aWR0aC50b0Zp
eGVkKDIpJywgJzQ4LjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0MS5oZWln
aHQudG9GaXhlZCgyKScsICcxMy4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4
dDEucmlnaHQudG9GaXhlZCgyKScsICcxNDguMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ3RleHQxLmJvdHRvbS50b0ZpeGVkKDIpJywgJzc4LjAwJyk7CiAgICAgZGVidWcoIiIpOwog
CiAgICAgc3ZnMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdmcyIikuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CkBAIC0xMjcsMjYgKzEyNywyNiBAQCBmdW5jdGlvbiBleGVjdXRlVGVzdCgp
IHsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3N2ZzIucmlnaHQudG9GaXhlZCgyKScsICcy
MjUuMDAnKTsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3N2ZzIuYm90dG9tLnRvRml4ZWQo
MiknLCAnMTUwLjAwJyk7CiAgICAgcmVjdDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVj
dDIiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J3JlY3QyLmxlZnQudG9GaXhlZCgyKScsICc3NS4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygncmVjdDIudG9wLnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdyZWN0Mi5sZWZ0LnRvRml4ZWQoMiknLCAnMC4wMCcpOworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygncmVjdDIudG9wLnRvRml4ZWQoMiknLCAnMC4wMCcpOwogICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygncmVjdDIud2lkdGgudG9GaXhlZCgyKScsICcxMDAuMDAnKTsKLSAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3QyLmhlaWdodC50b0ZpeGVkKDIpJywgJzUwLjAw
Jyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZWN0Mi5yaWdodC50b0ZpeGVkKDIpJywg
JzE3NS4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVjdDIuYm90dG9tLnRvRml4
ZWQoMiknLCAnMTUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZWN0Mi5oZWln
aHQudG9GaXhlZCgyKScsICcxMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Jl
Y3QyLnJpZ2h0LnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdyZWN0Mi5ib3R0b20udG9GaXhlZCgyKScsICcxMDAuMDAnKTsKICAgICBpbWFnZTIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2UyIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFnZTIubGVmdC50b0ZpeGVkKDIpJywgJzE3
NS4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UyLnRvcC50b0ZpeGVkKDIp
JywgJzEwMC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UyLmxlZnQudG9G
aXhlZCgyKScsICcxMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMi50
b3AudG9GaXhlZCgyKScsICcwLjAwJyk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFn
ZTIud2lkdGgudG9GaXhlZCgyKScsICc1MC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnaW1hZ2UyLmhlaWdodC50b0ZpeGVkKDIpJywgJzI1LjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdpbWFnZTIucmlnaHQudG9GaXhlZCgyKScsICcyMjUuMDAnKTsKLSAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMi5ib3R0b20udG9GaXhlZCgyKScsICcxMjUuMDAnKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMi5oZWlnaHQudG9GaXhlZCgyKScsICc1
MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UyLnJpZ2h0LnRvRml4ZWQo
MiknLCAnMTUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFnZTIuYm90dG9t
LnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKICAgICB0ZXh0MiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXh0MiIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygndGV4dDIubGVmdC50b0ZpeGVkKDIpJywgJzE3NS4wMCcpOwotICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygndGV4dDIudG9wLnRvRml4ZWQoMiknLCAnMTMyLjUwJyk7CisgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0Mi5sZWZ0LnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0Mi50b3AudG9GaXhlZCgyKScsICc2NS4wMCcp
OwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4dDIud2lkdGgudG9GaXhlZCgyKScsICc0
OC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4dDIuaGVpZ2h0LnRvRml4ZWQo
MiknLCAnNi41MCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4dDIucmlnaHQudG9G
aXhlZCgyKScsICcyMjMuMDAnKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQyLmJv
dHRvbS50b0ZpeGVkKDIpJywgJzEzOS4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
dGV4dDIuaGVpZ2h0LnRvRml4ZWQoMiknLCAnMTMuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ3RleHQyLnJpZ2h0LnRvRml4ZWQoMiknLCAnMTQ4LjAwJyk7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCd0ZXh0Mi5ib3R0b20udG9GaXhlZCgyKScsICc3OC4wMCcpOwogICAgIGRl
YnVnKCIiKTsKIAogICAgIHN2ZzMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3ZnMyIpLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwpAQCAtMTU3LDI2ICsxNTcsMjYgQEAgZnVuY3Rpb24gZXhl
Y3V0ZVRlc3QoKSB7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdzdmczLnJpZ2h0LnRvRml4
ZWQoMiknLCAnMTIwMC4wMCcpOwogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnc3ZnMy5ib3R0
b20udG9GaXhlZCgyKScsICc2MDAuMDAnKTsKICAgICByZWN0MyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZWN0MyIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygncmVjdDMubGVmdC50b0ZpeGVkKDIpJywgJzkwMC4wMCcpOwotICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygncmVjdDMudG9wLnRvRml4ZWQoMiknLCAnNTAwLjAwJyk7Ci0gICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZWN0My53aWR0aC50b0ZpeGVkKDIpJywgJzIwMC4wMCcp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygncmVjdDMubGVmdC50b0ZpeGVkKDIpJywgJzAu
MDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3QzLnRvcC50b0ZpeGVkKDIpJywg
JzAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3QzLndpZHRoLnRvRml4ZWQo
MiknLCAnMTAwLjAwJyk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdyZWN0My5oZWlnaHQu
dG9GaXhlZCgyKScsICcxMDAuMDAnKTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3JlY3Qz
LnJpZ2h0LnRvRml4ZWQoMiknLCAnMTEwMC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygncmVjdDMuYm90dG9tLnRvRml4ZWQoMiknLCAnNjAwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdyZWN0My5yaWdodC50b0ZpeGVkKDIpJywgJzEwMC4wMCcpOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygncmVjdDMuYm90dG9tLnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7CiAg
ICAgaW1hZ2UzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlMyIpLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UzLmxlZnQudG9G
aXhlZCgyKScsICcxMTAwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbWFnZTMu
dG9wLnRvRml4ZWQoMiknLCAnNTAwLjAwJyk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdp
bWFnZTMud2lkdGgudG9GaXhlZCgyKScsICcxMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ltYWdlMy5sZWZ0LnRvRml4ZWQoMiknLCAnMTAwLjAwJyk7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdpbWFnZTMudG9wLnRvRml4ZWQoMiknLCAnMC4wMCcpOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UzLndpZHRoLnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ltYWdlMy5oZWlnaHQudG9GaXhlZCgyKScsICc1MC4w
MCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UzLnJpZ2h0LnRvRml4ZWQoMikn
LCAnMTIwMC4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2UzLmJvdHRvbS50
b0ZpeGVkKDIpJywgJzU1MC4wMCcpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW1hZ2Uz
LnJpZ2h0LnRvRml4ZWQoMiknLCAnMTUwLjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdpbWFnZTMuYm90dG9tLnRvRml4ZWQoMiknLCAnNTAuMDAnKTsKICAgICB0ZXh0MyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0MyIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4dDMubGVmdC50b0ZpeGVkKDIpJywgJzExMDAuMDAn
KTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQzLnRvcC50b0ZpeGVkKDIpJywgJzU2
NS4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGV4dDMud2lkdGgudG9GaXhlZCgy
KScsICcxMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQzLmxlZnQudG9G
aXhlZCgyKScsICcxMDAuMDAnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQzLnRv
cC50b0ZpeGVkKDIpJywgJzY1LjAwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0
My53aWR0aC50b0ZpeGVkKDIpJywgJzUwLjAwJyk7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCd0ZXh0My5oZWlnaHQudG9GaXhlZCgyKScsICcxMy4wMCcpOwotICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygndGV4dDMucmlnaHQudG9GaXhlZCgyKScsICcxMjAwLjAwJyk7Ci0gICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCd0ZXh0My5ib3R0b20udG9GaXhlZCgyKScsICc1NzguMDAnKTsKKyAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3RleHQzLnJpZ2h0LnRvRml4ZWQoMiknLCAnMTUwLjAw
Jyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXh0My5ib3R0b20udG9GaXhlZCgyKScs
ICc3OC4wMCcpOwogICAgIGRlYnVnKCIiKTsKIH0KIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUw
ZGI4ODQuLmQ1OThlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAxMi0wMi0wOCAg
TWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisKKyAgICAgICAgZ2V0Q2xpZW50UmVj
dHMoKVswXSAhPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYyMDMKKworICAgICAgICBDaGFuZ2UgdGhlIGJl
aGF2aW9yIG9mIEVsZW1lbnQ6OmdldENsaWVudFJlY3RzIGFuZCBFbGVtZW50OjpnZXRCb3VuZGlu
Z0NsaWVudFJlY3QgZm9yIFNWRworICAgICAgICBlbGVtZW50cyB0byBtYXRjaCB0aGUgQ1NTT00g
VmlldyBNb2R1bGUgc3BlYzoKKyAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvY3Nzb20tdmll
dy8jdGhlLWdldGNsaWVudHJlY3RzLWFuZC1nZXRib3VuZGluZ2NsaWVudHJlY3QtbWV0aG9kcy4K
KworICAgICAgICBCZWZvcmUsIEVsZW1lbnQ6OmdldENsaWVudFJlY3RzIHdvdWxkIHJldHVybiBh
biBlbXB0eSBsaXN0IGZvciBpbm5lciBTVkcgZWxlbWVudHMgdGhhdCBkaWQgCisgICAgICAgIG5v
dCBkZXNjZW5kIGZyb20gUmVuZGVyQm94TW9kZWxPYmplY3QuIE5vdywgRWxlbWVudDo6Z2V0Q2xp
ZW50UmVjdHMgcmV0dXJucyBhIGxpc3Qgd2l0aCBvbmUKKyAgICAgICAgQ2xpZW50UmVjdCBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBlbGVtZW50J3MgU1ZHIGJvdW5kaW5nIGJveCwgYXMgc3BlY2lmaWVk
IGluIENTU09NLgorCisgICAgICAgIEJlZm9yZSwgRWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRS
ZWN0IHdvdWxkIHJldHVybiB0aGUgU1ZHIGJvdW5kaW5nIGJveCBmb3IgU1ZHIHJvb3QKKyAgICAg
ICAgZWxlbWVudHMuIE5vdywgRWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0IHJldHVybnMg
dGhlIENTUyBib3VuZGluZyBib3ggZm9yIFNWRyByb290CisgICAgICAgIGVsZW1lbnRzLCBhcyBz
cGVjaWZpZWQgaW4gQ1NTT00uCisKKyAgICAgICAgVGhpcyBwYXRjaCB1c2VzIFJlbmRlckJveDo6
YWJzb2x1dGVRdWFkcyB0byBjb21wdXRlIHRoZSBDU1MgYm91bmRpbmcgYm94IGZvciBTVkcgcm9v
dAorICAgICAgICBlbGVtZW50cy4gVGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4gSG93ZXZl
ciwgdGhlcmUgaXMgYSBzZXBhcmF0ZSBidWcgd2hpY2ggY2F1c2VzCisgICAgICAgIFJlbmRlckJv
eDo6YWJzb2x1dGVRdWFkcyB0byByZXR1cm4gYW4gaW5jb3JyZWN0IHZhbHVlIG9uIFJlbmRlclNW
R1Jvb3QgaW4gY2VydGFpbiBjYXNlcy4KKyAgICAgICAgVGhlIGFic29sdXRlUXVhZHMgYnVnIGlz
OgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODE2
NQorCisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBFbGVtZW50OjpnZXRDbGllbnRSZWN0cyBhbmQg
RWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0IHdpbGwgbm90IHJldHVybgorICAgICAgICB0
aGUgY29ycmVjdCB2YWx1ZSBmb3IgU1ZHIHJvb3QgZWxlbWVudHMgaW4gY2VydGFpbiBjYXNlcyB1
bnRpbCB0aGUgYWJzb2x1dGVRdWFkcyBidWcgaXMKKyAgICAgICAgZml4ZWQuCisKKyAgICAgICAg
VGhlIHRlc3QgZmlsZXMgZm9yIEVsZW1lbnQ6OmdldENsaWVudFJlY3RzIGFuZCBFbGVtZW50Ojpn
ZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gU1ZHCisgICAgICAgIGVsZW1lbnRzIGhhdmUgYmVlbiB1
cGRhdGVkLiBIb3dldmVyLCBvbmUgb2YgdGhlIHRlc3QgZmlsZXMgd2lsbCBmYWlsIHVudGlsIHRo
ZQorICAgICAgICBhYnNvbHV0ZVF1YWRzIGJ1ZyBpcyBmaXhlZC4gVGhlIHRlc3QgZmlsZSBpczoK
KworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3pvb20tem9vbS1jb29yZHMueGh0bWwu
CisKKyAgICAgICAgVXBkYXRpbmcgdGhlIHpvb20tem9vbS1jb29yZHMgdGVzdCBmaWxlIHRvIG1h
dGNoIHRoZSBDU1NPTSBzcGVjIGFsc28gcmV2ZWFsZWQgYSBzZXBhcmF0ZSBidWcKKyAgICAgICAg
dGhhdCBpbnZvbHZlcyBFbGVtZW50OjpnZXRDbGllbnRSZWN0cywgSFRNTCBlbGVtZW50cywgYW5k
IENTUyB6b29tOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzc5OTguCisKKyAgICAgICAgVGhpcyBidWcgbXVzdCBhbHNvIGJlIGZpeGVkIGZvciB0aGUg
ZW50aXJlIHpvb20tem9vbS1jb29yZHMgdGVzdCBmaWxlIHRvIHBhc3MuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogc3ZnL2N1c3RvbS9nZXRD
bGllbnRSZWN0cy5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpjbGllbnRRdWFkcyk6CisKKyAgICAgICAgICAgIE5vdywgYm90aCBF
bGVtZW50OjpnZXRDbGllbnRSZWN0cyBhbmQgRWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0
IHVzZSB0aGUgaGVscGVyCisgICAgICAgICAgICBtZXRob2QgRWxlbWVudDo6Y2xpZW50UXVhZHMs
IGVsaW1pbmF0aW5nIGR1cGxpY2F0ZSBjb2RlIHRoYXQgYWRqdXN0ZWQgdGhlIGVsZW1lbnQncwor
ICAgICAgICAgICAgYWJzb2x1dGUgcXVhZHMgZm9yIHZpZXdwb3J0IHpvb20gYW5kIHNjcm9sbCBw
b3NpdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMpOgor
CisgICAgICAgICAgICBOb3csIHRoaXMgbWV0aG9kIGp1c3QgY2FsbHMgRWxlbWVudDo6Y2xpZW50
UXVhZHMgYW5kIHJldHVybnMgdGhlIHF1YWRzIGFzIGEKKyAgICAgICAgICAgIENsaWVudFJlY3RM
aXN0LgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVudFJlY3Qp
OgorCisgICAgICAgICAgICBOb3csIHRoaXMgbWV0aG9kIGNhbGxzIEVsZW1lbnQ6OmNsaWVudFF1
YWRzLiBJdCB1bml0ZXMgdGhlIHF1YWRzIGFuZCByZXR1cm5zIGEgc2luZ2xlCisgICAgICAgICAg
ICBib3VuZGluZyBDbGllbnRSZWN0LCBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFbGVtZW50KToKKwogMjAxMi0wMi0w
OCAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgUkVH
UkVTU0lPTihyODQxOTQpOiBCdWlsZCBmYWlscyB3aGVuIHR1cm5pbmcgb24gRU5BQkxFX0ZJTEVf
U1lTVEVNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggOWIwMjNkZi4uMjNmMTczMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcApAQCAtNDk2LDU2ICs0OTYsNjAgQEAgTGF5b3V0UmVjdCBFbGVtZW50
Ojpib3VuZHNJblJvb3RWaWV3U3BhY2UoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NS
ZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEVsZW1lbnQ6OmdldENsaWVudFJlY3RzKCkKK2lubGluZSB2
b2lkIEVsZW1lbnQ6OmNsaWVudFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKIHsKICAg
ICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAot
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCA9IHRoaXMtPnJl
bmRlckJveE1vZGVsT2JqZWN0KCk7Ci0gICAgaWYgKCFyZW5kZXJCb3hNb2RlbE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUoKTsKLQotICAgIC8vIEZJWE1FOiBI
YW5kbGUgU1ZHIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGFibGUvaW5saW5lLXRh
YmxlIHdpdGggYSBjYXB0aW9uLgogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAg
cmVuZGVyQm94TW9kZWxPYmplY3QtPmFic29sdXRlUXVhZHMocXVhZHMpOwotCi0gICAgZmxvYXQg
cGFnZVNjYWxlID0gMTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkg
Ci0gICAgICAgIHBhZ2VTY2FsZSA9IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwotCi0gICAgaWYg
KEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZpZXcoKSkgewotICAgICAgICBMYXlvdXRS
ZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRl
bnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20o
cXVhZHNbaV0sIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKLSAgICAgICAgICAgIGlmIChwYWdlU2Nh
bGUgIT0gMSkKLSAgICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRGb3JQYWdlU2NhbGUocXVh
ZHNbaV0sIHBhZ2VTY2FsZSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBSZW5kZXJPYmplY3QqIHJv
ID0gcmVuZGVyZXIoKTsKKyAgICBpZiAoaXNTVkdFbGVtZW50KCkgJiYgKCFybyB8fCAocm8gJiYg
IXJvLT5pc1NWR1Jvb3QoKSkpKSB7CisgICAgICAgIC8vIFRoaXMgY2FzZSBoYW5kbGVzIGlubmVy
IFNWRyBlbGVtZW50cyB3aGljaCBkbyBub3QgaGF2ZSBhIENTUyBsYXlvdXQgYm94LgorICAgICAg
ICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMp
OworCisgICAgICAgIEZsb2F0UmVjdCBzdmdCb3VuZGluZ0JveDsKKyAgICAgICAgaWYgKHN2Z0Vs
ZW1lbnQtPmJvdW5kaW5nQm94KHN2Z0JvdW5kaW5nQm94KSkKKyAgICAgICAgICAgIHF1YWRzLmFw
cGVuZChzdmdCb3VuZGluZ0JveCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpKSB7CisgICAgICAgIC8vIFRoaXMgY2FzZSBoYW5kbGVzIGVsZW1lbnRzIHdpdGggYSBDU1Mg
bGF5b3V0IGJveC4KKyAgICAgICAgLy8gUm9vdCBTVkcgZWxlbWVudHMgZmFsbCB1bmRlciB0aGlz
IGNhc2UuCisgICAgICAgIGJveC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICAgICAgZmxv
YXQgcGFnZVNjYWxlID0gMTsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5w
YWdlKCkpIAorICAgICAgICAgICAgcGFnZVNjYWxlID0gcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7
CisKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZpZXcoKSkgewor
ICAgICAgICAgICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29u
dGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAg
YWRqdXN0RmxvYXRRdWFkRm9yQWJzb2x1dGVab29tKHF1YWRzW2ldLCBib3gpOworICAgICAgICAg
ICAgICAgIGlmIChwYWdlU2NhbGUgIT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rmxv
YXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KK30KIAorUGFzc1JlZlB0cjxDbGll
bnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0Q2xpZW50UmVjdHMoKQoreworICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHF1YWRzOworICAgIGNsaWVudFF1YWRzKHF1YWRzKTsKICAgICByZXR1cm4gQ2xpZW50
UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CiB9CiAKIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxl
bWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkKIHsKLSAgICBkb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLQogICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRl
cmVyKCkpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUg
U1ZHIG1vZGVsLgotICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0OwotICAgICAg
ICBpZiAoc3ZnRWxlbWVudC0+Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKLSAgICAgICAgICAgIHF1
YWRzLmFwcGVuZChyZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwot
ICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICAvLyBHZXQgdGhlIGJvdW5kaW5nIHJl
Y3RhbmdsZSBmcm9tIHRoZSBib3ggbW9kZWwuCi0gICAgICAgIGlmIChyZW5kZXJCb3hNb2RlbE9i
amVjdCgpKQotICAgICAgICAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+YWJzb2x1dGVRdWFk
cyhxdWFkcyk7Ci0gICAgfQorICAgIGNsaWVudFF1YWRzKHF1YWRzKTsKIAogICAgIGlmIChxdWFk
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoKTsKQEAgLTU1
NCwxNSArNTU4LDYgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKQogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKIAotICAg
IGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsK
LSAgICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29u
dGVudFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpv
b20ocmVzdWx0LCByZW5kZXJlcigpKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKSkKLSAgICAgICAgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgcGFn
ZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotCiAgICAgcmV0dXJuIENsaWVudFJlY3Q6OmNyZWF0ZShy
ZXN1bHQpOwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggOTM4MWUyZi4uZTliY2Y2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIENsaWVudFJlY3RMaXN0
OwogY2xhc3MgRE9NU3RyaW5nTWFwOwogY2xhc3MgRE9NVG9rZW5MaXN0OwogY2xhc3MgRWxlbWVu
dFJhcmVEYXRhOworY2xhc3MgRmxvYXRRdWFkOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYWRv
d1Jvb3Q7CiBjbGFzcyBXZWJLaXRBbmltYXRpb25MaXN0OwpAQCAtNDc1LDYgKzQ3Niw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB1cGRhdGVOYW1lZEl0ZW1SZWdpc3RyYXRpb24oY29uc3QgQXRvbWlj
U3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOwogICAgIHZvaWQg
dXBkYXRlRXh0cmFOYW1lZEl0ZW1SZWdpc3RyYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBvbGRO
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOwogCisgICAgdm9pZCBjbGllbnRRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpOworCiBwcml2YXRlOgogICAgIG11dGFibGUgT3du
UHRyPE5hbWVkTm9kZU1hcD4gbV9hdHRyaWJ1dGVNYXA7CiB9Owo=
</data>
<flag name="review"
          id="127997"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>