<?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>24168</bug_id>
          
          <creation_ts>2009-02-25 13:03:31 -0800</creation_ts>
          <short_desc>RTL: Home/End key does not behave correctly in mixed bidi text in RTL document</short_desc>
          <delta_ts>2009-04-29 17:58:42 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>playmobil</cc>
    
    <cc>progame+wk</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111013</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-25 13:03:31 -0800</bug_when>
    <thetext>for right-to-left document, in mixed RTL/LTR text, press Home and End key makes cursor showing at beginning or end of the English text rather than the whole line.

Cursor works fine for mixed text in left-to-right document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111014</commentid>
    <comment_count>1</comment_count>
      <attachid>27979</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-25 13:06:18 -0800</bug_when>
    <thetext>Created attachment 27979
test case -- rtl document with bidi text

Test cases attached.

Steps to reproduce the bug:
1. Open the attached html file.
2. Focus on the editable div
3. Press Home/End key to observe the cursor positioning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111015</commentid>
    <comment_count>2</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-25 13:08:33 -0800</bug_when>
    <thetext>Also reported in Chrome:
http://code.google.com/p/chromium/issues/detail?id=4556
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112299</commentid>
    <comment_count>3</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-03-04 15:08:29 -0800</bug_when>
    <thetext>I investigated a bit on this bug. Following is my finding. Please correct me if I mis-understood anything.

Given the following bidi text (in visual order) in RTL textbox:
&quot;def FED 123 CBA abc&quot;, in which, lower case letter are LTR text, and upper case letter are RTL text.

The position of the characters (with dummy_RTL added at the begin and end of the line) in the line is:
dummy_RTL(20)d(18)e(19)f(17) (16)F(15)E(14)D(13) (12)1(10)2(11)
3(9) (8)C(7)B(6)A(5) (4)a(2)b(3)c(1)dummy_RTL, in which, the number after the character is the visible position in the line.

The InlineBidiResolver constructs bidi runs in visual order.
The node list of the above line is: (def)( FED )(123)( CBA )(abc), in which the node (def) is the first leaf node, and node (abc) is the last node.

node (def) starts at position 17 and ends at position 20.
in &quot;static VisiblePosition startPositionForLine&quot;, start position of line is the start position of the start node of the line, that is why 17 is returned, and the cursor is at the (visual) position after &apos;f&apos; when HOME key is pressed.

Similarly, end position of line is the end position of the last node of the line, that is why 4 is returned, and the cursor is at the (visual) position before &apos;a&apos; when END key is pressed.

Similar for text &quot;IHG def FED xyz CBA&quot;, cursor is visually before &apos;d&apos; when HOME is pressed, and it is afer &apos;z&apos; when END is pressed.

Since HOME/END key are logical keys, I am wondering should we use logical node order? so that the first node is &quot;abc&quot; and the last node is &quot;def&quot;? Then, where is the logical node order saved?

Or in static VisiblePosition startPositionForLine(), we can simply check whether the line is in RTL environment, and use the start position of *last* node as the start position of the line if it is in RTL environment.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115849</commentid>
    <comment_count>4</comment_count>
      <attachid>29078</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-03-30 11:24:15 -0700</bug_when>
    <thetext>Created attachment 29078
a patch not completely working

Hi Mitz,

The attached patch is not completely working. It is just for your reference if needed.

I tried to provide functions that
return the logic start node (instead of the visual start node), and use the logic start node&apos;s start position as the start position for line.

The way I am getting the logic start node is to check whether the enclosing block is in RTL directionality, if it is, the logic start node is the visual end node, otherwise, the logic start node is still the visual start node.

It works fine for a simple block with bidi text, such as &lt;div dir=rtl&gt;abc ABC efg EFG&lt;/div&gt; (capital letter represents Hebrew Character).

But it does *not* work for cases such as &lt;div dir=rtl&gt;abc &lt;span&gt; efg hij&lt;/span&gt; xyz&lt;/div&gt;, for which, the assumption &quot;logic start node is the visual end node if the directionality is RTL&quot; is *not* true.


I would like to get advise on
1. what will be a correct way to get the logic start node of a block?
2. Or I am in a completely wrong direction of fixing it? 

Thanks and appreciated!
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116695</commentid>
    <comment_count>5</comment_count>
      <attachid>29294</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-06 17:18:47 -0700</bug_when>
    <thetext>Created attachment 29294
another test case (inline element with dir=&quot;rtl&quot;) Home/End key do not work

In the current webkit, 
home/end key works fine for
&lt;div dir=rtl  contenteditable&gt;Lorem &lt;span  style=&quot;direction: rtl&quot;&gt;ipsum dolor sit&lt;/span&gt; amet&lt;/div&gt;

But not for
&lt;div dir=rtl  contenteditable&gt;Lorem &lt;span  dir=&quot;rtl&quot;&gt;ipsum dolor sit&lt;/span&gt; amet&lt;/div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116698</commentid>
    <comment_count>6</comment_count>
      <attachid>29296</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-06 17:31:08 -0700</bug_when>
    <thetext>Created attachment 29296
patch w/ Layout test

Looks like I can use the comparison of bidi resolver&apos;s lastRun() and logicallyLastRun() to check whether the logic last node is the visual last node or not. 

If a line is an RTL line and its visual last node is not the same as its logic last node, its logic last node is its visual start node, such as bidi text in a RTL div, or &lt;div dir=rtl&gt; abc &lt;span dir=&quot;rtl&quot;&gt; efg hij &lt;/span&gt; xyz &lt;/div&gt;.
Otherwise, its logic last node is the same as its visual last node, such as 
&lt;div dir=rtl&gt; abc &lt;span style=&quot;direction:rtl&quot;&gt; efg hij &lt;/span&gt; xyz &lt;/div&gt;.

The same applies to logic start node.

This patch fixes the attached 2 test cases: bidi text in RTL document and RTL text with inline RTL element.

Please be noted:
1. I am fixing the home/end key in &quot;move&quot; + &quot;right&quot;/&quot;left&quot;, not &quot;move&quot; + &quot;forward&quot;/&quot;backward&quot;.
But I think it should be fixed in &quot;move&quot; + &quot;foward&quot;/&quot;backward&quot;.

2. All tests passed, but there are 22 tests with stderr output.
They looks like environment problem, and I do not think they are related to my change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117126</commentid>
    <comment_count>7</comment_count>
      <attachid>29296</attachid>
    <who name="">mitz</who>
    <bug_when>2009-04-09 23:52:08 -0700</bug_when>
    <thetext>Comment on attachment 29296
patch w/ Layout test

Resetting the review flag because Xiaomei is working on a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117187</commentid>
    <comment_count>8</comment_count>
      <attachid>29402</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-10 15:10:26 -0700</bug_when>
    <thetext>Created attachment 29402
patch w/ Layout test

Hi Mitz,

Thanks for your inputs on previous patch. They are very helpful!

I changed to reconstruct the logic order from line boxes by reversing L2 phase in Unicode Bidi algorithm.

I am reconstructing the logic order of leave boxes only. I think that should be enough.

But I still have 3 questions:
1. I am implementing the logic &quot;home/end&apos; key functionality in &quot;move&quot; + &quot;right&quot;/&quot;left&quot;, but I think it should be done in &quot;move&quot; + &quot;forward&quot;/&quot;backward&quot;.

2. The reconstruction is done in editing per home/end operation.
I am not sure whether it should be done in rendering code, after the whole structure of a line is fully constructed? and in-validate it if line structure changed? So it could save some performance overhead.

3. I am caching the logic chain in InlineBox because:
a) I need the chain (at least the &apos;next&apos;) for continuing reverse boxes during reconstruct logic order from low bidi level to high bidi level.
b) I need the chain to get the &apos;next&apos; (or &apos;prev&apos;) line box if the startBox-&gt;renderer()-&gt;node() == NULL (or the endBox-&gt;renderer()-&gt;node() == NULL) in getLogicStartBoxAndNode() (or getLogicEndBoxAndNode()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118350</commentid>
    <comment_count>9</comment_count>
      <attachid>29402</attachid>
    <who name="">mitz</who>
    <bug_when>2009-04-21 20:02:47 -0700</bug_when>
    <thetext>Comment on attachment 29402
patch w/ Layout test

I think you are right: you should change the backward/forward, not the left/right variant, and make the home/end keys map to back/forward.

Please use &quot;logical&quot; instead of the abbreviation &quot;logic&quot;.

A typical line contains very few leaf boxes (typically 1, perhaps 2 for contenteditable text with line-break: after-white-space, but hardly ever more than 10), so reconstructing the logical order every time for an operation like home/end is not a problem. Adding two pointer-sized members to InlineBox is not necessary, and has a severe impact on memory use.

I think it would actually be simpler to use a Vector&lt;InlineBox*&gt;, fill it up with the boxes in visual order (i.e. in nextLeafChild() order), then do the reordering in-place in the vector.

You could have one

static void getLeafBoxesInLogicalOrder(RootInlineBox*, Vector&lt;InlineBox*&gt;&amp;)

that did that. You wouldn&apos;t even need a helper function for reversing because you could use std::reverse().

+    unsigned char levelLow = 128;
+    unsigned char levelHigh = 0;

I know that the names levelLow and levelHigh are used in BidiResolver, but those are old and rather unusual names. minLevel and maxLevel would be better.

+    InlineBox* firstBox = NULL;
+    InlineBox* lastBox = NULL;

This will go away if you use a Vector-based getLeafBoxesInLogicalOrder(), but I just wanted to point out that WebKit style is to use 0, not NULL, for the null pointer, and that since you follow with a call to reconstructLogicOrder(), which initializes firstBox and lastBox, you do not need to initialize them when defining them anyway.

+    while (1) {
+        if (!startBox)
+            return;

Since there is nothing after the while loop, this can be written simply as
+    while (startBox)

+        RenderObject *startRenderer = startBox-&gt;renderer();

The star should go next to RenderObject.

+        if (!startRenderer) {
+            startNode = NULL;
+            return;
+        }

Can this ever happen? I know that there is other old code checking for this, but I don&apos;t think this case can happen. Maybe the code should assert that it doesn&apos;t happen. Again, if you leave this code in, please use 0 instead of NULL.

+    RootInlineBox *rootBox = rootBoxForLine(c);

The start should go next to the type name.

+    // Generated content (e.g. list markers and CSS :before and :after
+    // pseudoelements) have no corresponding DOM element, and so cannot be
+    // represented by a VisiblePosition.  Use whatever follows instead.

I don&apos;t understand this comment. Where is the part where you &quot;use whatever follows&quot;? I think it is actually part of getLogicStartBoxAndNode() now!

+    InlineBox *logicStartBox = NULL;
+    Node *logicStartNode = NULL;

I think the rule should be that getLogicStartBoxAndNode() initializes those. Also, please correct the placement of the stars.

+    if (logicStartBox == NULL || logicStartNode == NULL) {
+        return VisiblePosition();
+    }

The WebKit style of writing this is
+    if (!logicStartBox || !logicStartNode)
+        return VisiblePosition();

without NULL or 0 and without braces around the single-line clause. Also, shouldn&apos;t it be enough to only null-test the node?

+    int startOffset = 0;
+    if (logicStartBox-&gt;isInlineTextBox()) {
+        InlineTextBox *startTextBox = static_cast&lt;InlineTextBox *&gt;(logicStartBox);
+        startOffset = startTextBox-&gt;start();
+    }

I think you can use InlineBox::caretMinOffset() here instead of special-casing InlineTextBox.

+VisiblePosition logicStartOfLine(const VisiblePosition&amp; c)
+{
+    VisiblePosition visPos = logicStartPositionForLine(c);
+    
+    if (visPos.isNotNull()) {

You can change this to an early return.

+    int endOffset = 1;
+    if (logicEndNode-&gt;hasTagName(brTag)) {
+        endOffset = 0;
+    } else if (logicEndBox-&gt;isInlineTextBox()) {
+        InlineTextBox *endTextBox = static_cast&lt;InlineTextBox *&gt;(logicEndBox);
+        endOffset = endTextBox-&gt;start();
+        if (!endTextBox-&gt;isLineBreak())
+            endOffset += endTextBox-&gt;len();
+    }

And here you can use InlineBox::caretMaxOffset() in the else clause, instead of special-casing InlineTextBox. Can you use caretMaxOffset() to get the desired result for a &lt;br&gt; too?

+bool inSameLogicLine(const VisiblePosition &amp;a, const VisiblePosition &amp;b)

Can inSameLogicLine(a, b) and inSameLine(a, b) ever return a different result?

Finally, I want to ask about thse two cases:

+        // Make sure the start of line is not greater than the given input position.  Else use the previous position to 
+        // obtain start of line.  This condition happens when the input position is before the space character at the end 
+        // of a soft-wrapped non-editable line. In this scenario, logicStartPositionForLine would incorrectly hand back a position
+        // greater than the input position.  This fix is to account for the discrepancy between lines with webkit-line-break:after-white-space 
+        // style versus lines without that style, which would break before a space by default. 
+        Position p = visPos.deepEquivalent();
+        if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {

and

+    // Make sure the end of line is at the same line as the given input position.  Else use the previous position to 
+    // obtain end of line.  This condition happens when the input position is before the space character at the end 
+    // of a soft-wrapped non-editable line. In this scenario, logicEndPositionForLine would incorrectly hand back a position
+    // in the next line instead. This fix is to account for the discrepancy between lines with webkit-line-break:after-white-space style
+    // versus lines without that style, which would break before a space by default. 
+    if (!inSameLogicLine(c, visPos)) {

I don&apos;t fully understand the former and I am not sure the latter can happen. Are they covered by your test? Do we need them?

+//            positions.push({ node: sel.anchorNode, offset: sel.anchorOffset});

+ //           positions.push({ node: sel.anchorNode, offset: sel.anchorOffset});

Please remove commented-out code from the test.

Property changes on: LayoutTests/editing/selection/home-end.html
___________________________________________________________________
Name: svn:executable
   + *

This is unnecessary.

Looks like you are in the right direction, but you can do the same with simpler code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118441</commentid>
    <comment_count>10</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-22 16:39:44 -0700</bug_when>
    <thetext>Hi Mitz,

Thanks for your review and detailed feedback.
I am updating the code according to your suggestions.

But I would like to check with you on some comments first.
Please see my replies inline.


&gt; 
&gt; +        if (!startRenderer) {
&gt; +            startNode = NULL;
&gt; +            return;
&gt; +        }
&gt; 
&gt; Can this ever happen? I know that there is other old code checking for this,
&gt; but I don&apos;t think this case can happen. Maybe the code should assert that it
&gt; doesn&apos;t happen. Again, if you leave this code in, please use 0 instead of NULL.

I will run layout test against it to check whether it happens.
But I see checking whether renderer exists in many places of the code. I am thinking probably to leave it there. 
Or renderer of leave box is different, and should *never* be NULL?

&gt; 
&gt; +    if (logicStartBox == NULL || logicStartNode == NULL) {
&gt; +        return VisiblePosition();
&gt; +    }
&gt; 
&gt; The WebKit style of writing this is
&gt; +    if (!logicStartBox || !logicStartNode)
&gt; +        return VisiblePosition();
&gt; 
&gt; without NULL or 0 and without braces around the single-line clause. Also,
&gt; shouldn&apos;t it be enough to only null-test the node?

It is related to the above question that whether a leave box&apos;s renderer could ever be null. If it could, then, the logicStartBox is *not* NULL, but the logicStartNode is NULL.


&gt; 
&gt; +    int startOffset = 0;
&gt; +    if (logicStartBox-&gt;isInlineTextBox()) {
&gt; +        InlineTextBox *startTextBox = static_cast&lt;InlineTextBox
&gt; *&gt;(logicStartBox);
&gt; +        startOffset = startTextBox-&gt;start();
&gt; +    }
&gt; 
&gt; I think you can use InlineBox::caretMinOffset() here instead of special-casing
&gt; InlineTextBox.
&gt; 

Do you mean change the above to &quot;int startOffset = logicalStartBox-&gt;caretMinOffset()&quot;?
Then, is it the same as the above logic?
Could leaf box be InlineRunBox or InlineFlowBox? In which cases, 
will the caretMinOffset() be 0?

I am a bit confused about those virtual functions in InlineBox (and its derived classes) and RenderObject (and its derived classes). Who will use  RenderText::caretMaxOffset()?

&gt; 
&gt; +    int endOffset = 1;
&gt; +    if (logicEndNode-&gt;hasTagName(brTag)) {
&gt; +        endOffset = 0;
&gt; +    } else if (logicEndBox-&gt;isInlineTextBox()) {
&gt; +        InlineTextBox *endTextBox = static_cast&lt;InlineTextBox *&gt;(logicEndBox);
&gt; +        endOffset = endTextBox-&gt;start();
&gt; +        if (!endTextBox-&gt;isLineBreak())
&gt; +            endOffset += endTextBox-&gt;len();
&gt; +    }
&gt; 
&gt; And here you can use InlineBox::caretMaxOffset() in the else clause, instead of
&gt; special-casing InlineTextBox. Can you use caretMaxOffset() to get the desired
&gt; result for a &lt;br&gt; too?
&gt; 

Even for the &quot;else if&quot; case (the InlineTextBox), is the above logic the same as caretMaxOffset()?
caretMaxOffset() returns m_start + m_len for InlineTextBox. If the InlineTexBox isLineBreak(), is its m_len == 0? I did not find the related code by just quick browsing.


&gt; +bool inSameLogicLine(const VisiblePosition &amp;a, const VisiblePosition &amp;b)
&gt; 
&gt; Can inSameLogicLine(a, b) and inSameLine(a, b) ever return a different result?
&gt; 

It happens in my test, that is why I introduced isSameLogicLine (using isSameLine wont work). I will dig into the test for more information.


&gt; Finally, I want to ask about thse two cases:
&gt; 
&gt; +        // Make sure the start of line is not greater than the given input
&gt; position.  Else use the previous position to 
&gt; +        // obtain start of line.  This condition happens when the input
&gt; position is before the space character at the end 
&gt; +        // of a soft-wrapped non-editable line. In this scenario,
&gt; logicStartPositionForLine would incorrectly hand back a position
&gt; +        // greater than the input position.  This fix is to account for the
&gt; discrepancy between lines with webkit-line-break:after-white-space 
&gt; +        // style versus lines without that style, which would break before a
&gt; space by default. 
&gt; +        Position p = visPos.deepEquivalent();
&gt; +        if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp;
&gt; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {
&gt; 
&gt; and
&gt; 
&gt; +    // Make sure the end of line is at the same line as the given input
&gt; position.  Else use the previous position to 
&gt; +    // obtain end of line.  This condition happens when the input position is
&gt; before the space character at the end 
&gt; +    // of a soft-wrapped non-editable line. In this scenario,
&gt; logicEndPositionForLine would incorrectly hand back a position
&gt; +    // in the next line instead. This fix is to account for the discrepancy
&gt; between lines with webkit-line-break:after-white-space style
&gt; +    // versus lines without that style, which would break before a space by
&gt; default. 
&gt; +    if (!inSameLogicLine(c, visPos)) {
&gt; 
&gt; I don&apos;t fully understand the former and I am not sure the latter can happen.
&gt; Are they covered by your test? Do we need them?
&gt; 

I have to admit that I copied most of the logic from startOfLine/endOfLine by understanding the main part of them, but not every path. 
I did not quite understand the former logic, and I forgot whether it is ever been hit by the test. As to the latter logic, I think it is hit by the code, and that is why I changed isSameLine() to isSameLogicLine().
I will run test again to find out more.

Thanks,
Xiaomei
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118448</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-04-22 17:15:14 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; +        if (!startRenderer) {
&gt; &gt; +            startNode = NULL;
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; 
&gt; &gt; Can this ever happen? I know that there is other old code checking for this,
&gt; &gt; but I don&apos;t think this case can happen. Maybe the code should assert that it
&gt; &gt; doesn&apos;t happen. Again, if you leave this code in, please use 0 instead of NULL.
&gt; 
&gt; I will run layout test against it to check whether it happens.
&gt; But I see checking whether renderer exists in many places of the code. I am
&gt; thinking probably to leave it there. 
&gt; Or renderer of leave box is different, and should *never* be NULL?

A Node&apos;s renderer() can be null, but, as far as I can tell, an InlineBox&apos;s renderer() can never be null. Most places in WebCore that access an InlineBox&apos;s render() don&apos;t null check.

&gt; &gt; +    int startOffset = 0;
&gt; &gt; +    if (logicStartBox-&gt;isInlineTextBox()) {
&gt; &gt; +        InlineTextBox *startTextBox = static_cast&lt;InlineTextBox
&gt; &gt; *&gt;(logicStartBox);
&gt; &gt; +        startOffset = startTextBox-&gt;start();
&gt; &gt; +    }
&gt; &gt; 
&gt; &gt; I think you can use InlineBox::caretMinOffset() here instead of special-casing
&gt; &gt; InlineTextBox.
&gt; &gt; 
&gt; 
&gt; Do you mean change the above to &quot;int startOffset =
&gt; logicalStartBox-&gt;caretMinOffset()&quot;?

Yes.

&gt; Then, is it the same as the above logic?
&gt; Could leaf box be InlineRunBox or InlineFlowBox? In which cases, 
&gt; will the caretMinOffset() be 0?

An empty InlineFlowBox can be a leaf, in which case you will get 0.

&gt; I am a bit confused about those virtual functions in InlineBox (and its derived
&gt; classes) and RenderObject (and its derived classes). Who will use 
&gt; RenderText::caretMaxOffset()?

caretMaxOffset() in htmlediting.cpp looks like one place that calls it.

&gt; &gt; +    int endOffset = 1;
&gt; &gt; +    if (logicEndNode-&gt;hasTagName(brTag)) {
&gt; &gt; +        endOffset = 0;
&gt; &gt; +    } else if (logicEndBox-&gt;isInlineTextBox()) {
&gt; &gt; +        InlineTextBox *endTextBox = static_cast&lt;InlineTextBox *&gt;(logicEndBox);
&gt; &gt; +        endOffset = endTextBox-&gt;start();
&gt; &gt; +        if (!endTextBox-&gt;isLineBreak())
&gt; &gt; +            endOffset += endTextBox-&gt;len();
&gt; &gt; +    }
&gt; &gt; 
&gt; &gt; And here you can use InlineBox::caretMaxOffset() in the else clause, instead of
&gt; &gt; special-casing InlineTextBox. Can you use caretMaxOffset() to get the desired
&gt; &gt; result for a &lt;br&gt; too?
&gt; &gt; 
&gt; 
&gt; Even for the &quot;else if&quot; case (the InlineTextBox), is the above logic the same as
&gt; caretMaxOffset()?
&gt; caretMaxOffset() returns m_start + m_len for InlineTextBox. If the InlineTexBox
&gt; isLineBreak(), is its m_len == 0? I did not find the related code by just quick
&gt; browsing.

Oh, I think you are right! For pre-wrapped text, the \n will have an InlineTextBox with m_len == 1, but you want the offset before the newline character.

&gt; I have to admit that I copied most of the logic from startOfLine/endOfLine by
&gt; understanding the main part of them, but not every path. 
&gt; I did not quite understand the former logic, and I forgot whether it is ever
&gt; been hit by the test. As to the latter logic, I think it is hit by the code,
&gt; and that is why I changed isSameLine() to isSameLogicLine().
&gt; I will run test again to find out more.

I think some of that logic my actually apply to home/end but *not* to the actual current behavior of startOfLine() and endOfLine(), and it was just written assuming that the logical and visual orders are the same. You may be able to find cases where startOfLine() and endOfLine() fail with RTL or bidirectional text because of the wrong assumptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118559</commentid>
    <comment_count>12</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-23 16:10:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; 
&gt; &gt; &gt; +        if (!startRenderer) {
&gt; &gt; &gt; +            startNode = NULL;
&gt; &gt; &gt; +            return;
&gt; &gt; &gt; +        }
&gt; &gt; &gt; 
&gt; &gt; &gt; Can this ever happen? I know that there is other old code checking for this,
&gt; &gt; &gt; but I don&apos;t think this case can happen. Maybe the code should assert that it
&gt; &gt; &gt; doesn&apos;t happen. Again, if you leave this code in, please use 0 instead of NULL.
&gt; &gt; 
&gt; &gt; I will run layout test against it to check whether it happens.
&gt; &gt; But I see checking whether renderer exists in many places of the code. I am
&gt; &gt; thinking probably to leave it there. 
&gt; &gt; Or renderer of leave box is different, and should *never* be NULL?
&gt; 
&gt; A Node&apos;s renderer() can be null, but, as far as I can tell, an InlineBox&apos;s
&gt; renderer() can never be null. Most places in WebCore that access an InlineBox&apos;s
&gt; render() don&apos;t null check.

Running all the layout test of webkit, and InlineBox&apos;s renderer is never NULL.
So, I am removing the null check.


&gt; 
&gt; &gt; I have to admit that I copied most of the logic from startOfLine/endOfLine by
&gt; &gt; understanding the main part of them, but not every path. 
&gt; &gt; I did not quite understand the former logic, and I forgot whether it is ever
&gt; &gt; been hit by the test. As to the latter logic, I think it is hit by the code,
&gt; &gt; and that is why I changed isSameLine() to isSameLogicLine().
&gt; &gt; I will run test again to find out more.
&gt; 
&gt; I think some of that logic my actually apply to home/end but *not* to the
&gt; actual current behavior of startOfLine() and endOfLine(), and it was just
&gt; written assuming that the logical and visual orders are the same. You may be
&gt; able to find cases where startOfLine() and endOfLine() fail with RTL or
&gt; bidirectional text because of the wrong assumptions.
&gt; 

First, following is the case where inSameLine() and isLogicalSameLine() return different result:

For the test case:
&lt;div dir=rtl contenteditable class=&quot;test&quot;&gt;abc &amp;#1488;&amp;#1489;&amp;#1490; xyz &amp;#1491;&amp;#1492;&amp;#1493; def&lt;/div&gt;
If you place caret at visually right most point (right of &apos;c&apos;), which is position 1 in the line, the logicEndOfLine is position 20 in the line. These 2 positions are inSameLogicalLine(), but not inSame(Visual)Line().

The (visual)startOfLine() of position 20 is position 17, but the (visual)startOfLine() of position 1 falls into the following if block:
    if (visPos.isNotNull()) {
        // Make sure ....
        Position p = visPos.deepEquivalent();
        if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {
            visPos = c.previous();
            if (visPos.isNull())
                return VisiblePosition();
            visPos = startPositionForLine(visPos);
        }
    }

And returned &quot;VisiblePosition()&quot;. 

That is might be a bug in startOfLine() as you mentioned. And that is why I changed it to isLogicalSameLine().

==========================

Second, as to the 2 &apos;if&apos; block in logicalStartOfLine() and logicalEndOfLine().
I did not find test cases that hit the following &apos;if&apos; block in logicalStartOfLine():
    // Make sure the start of line is not greater than the given input position.  Else use the previous position to 
    // obtain start of line.  This condition happens when the input position is before the space character at the end 
    // of a soft-wrapped non-editable line. In this scenario, logicalStartPositionForLine would incorrectly hand back a position
    // greater than the input position.  This fix is to account for the discrepancy between lines with webkit-line-break:after-white-space 
    // style versus lines without that style, which would break before a space by default. 
    Position p = visPos.deepEquivalent();
    if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {
        visPos = c.previous();
        if (visPos.isNull())
            return VisiblePosition();
        visPos = logicalStartPositionForLine(visPos);
    }


But I did not find test cases that hit the  following &apos;if&apos; block in logicalEndOfLine().   
if (!inSameLogicalLine(c, visPos))

For a long line which needs wrapping, the logical end position for the lines which is not the last 2 lines might incorrectly hand back the logical beginning of the next line. So the input position and logical end position are not in the same logical line.
For example, &lt;div contenteditable dir=&quot;rtl&quot; style=&quot;line-break:before-white-space&quot;&gt;abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg &lt;/div&gt;

For such case, the following statement inside the &apos;if&apos; does not solve the problem because every previous point (except the right-most one) would still return the same logical end position for the line, while the right-most point&apos;s previous point will be null, and a VisiblePosition() will be returned which makes the END key does not have any effect if the caret is at the right-most of the line (right of any characters in the line).

    if (!inSameLogicLine(c, visPos)) {
        visPos = c.previous();
        if (visPos.isNull())
            return VisiblePosition();
        visPos = logicEndPositionForLine(visPos);
    }

For such case, I think the above should be changed to:
    // In this case, use the previous position of the computed logical end position.
    if (!inSameLogicalLine(c, visPos))
        visPos = visPos.previous();

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118672</commentid>
    <comment_count>13</comment_count>
      <attachid>29748</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-24 10:43:06 -0700</bug_when>
    <thetext>Created attachment 29748
patch w/ Layout test (version 5)

I&apos;ve incorporated all the changes except that:

1. I am leaving the following block in logicalStartOfLine()
    // Make sure the start of line is not greater than the given input position.  ....
    Position p = visPos.deepEquivalent();
    if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {
        ....
    }

2. I changed the inSameLogicalLine() block in logicalEndOfLine() to
    if (!inSameLogicalLine(c, visPos))
        visPos = visPos.previous();

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118675</commentid>
    <comment_count>14</comment_count>
    <who name="Yair Yogev">progame+wk</who>
    <bug_when>2009-04-24 11:01:54 -0700</bug_when>
    <thetext>i don&apos;t know if it&apos;s related or not to this fix... but i wanted to recommend checking that Ctrl+Home/End isn&apos;t affected by this fix by mistake (AFAIK that shortcut is working as it should right now):)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118676</commentid>
    <comment_count>15</comment_count>
    <who name="Yair Yogev">progame+wk</who>
    <bug_when>2009-04-24 11:05:53 -0700</bug_when>
    <thetext>oh and another thing to check is selection using Shift+Home/End (currently not working properly)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118678</commentid>
    <comment_count>16</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-24 11:30:49 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; i don&apos;t know if it&apos;s related or not to this fix... but i wanted to recommend
&gt; checking that Ctrl+Home/End isn&apos;t affected by this fix by mistake (AFAIK that
&gt; shortcut is working as it should right now):)
&gt; 

This fix only fix the problem with &quot;HOME&quot; or &quot;END&quot; key, nothing else.
So, ctrl+HOME/END key wont be touched.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118680</commentid>
    <comment_count>17</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-24 11:33:35 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; oh and another thing to check is selection using Shift+Home/End (currently not
&gt; working properly)
&gt; 

Unfortunately, the current fix only fixes problem with &quot;HOME/END&quot; key.
not including shift+HOME/END key.

I marked 2 FIXME in the code, but I did not plan to fix the problem with shift+HOME/END key in this patch.

Will it acceptable?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118683</commentid>
    <comment_count>18</comment_count>
    <who name="Yair Yogev">progame+wk</who>
    <bug_when>2009-04-24 11:39:33 -0700</bug_when>
    <thetext>Shift+Home/End is very commonly used so it&apos;s going to be the next issue posted then. Of course any fix you post makes us RTL users happier :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118702</commentid>
    <comment_count>19</comment_count>
      <attachid>29756</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-24 12:48:24 -0700</bug_when>
    <thetext>Created attachment 29756
patch w/ Layout test (version 6)

Comparing with version 5, this patch also fixed the problem in shift+HOME/END and includes corresponding tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119294</commentid>
    <comment_count>20</comment_count>
      <attachid>29756</attachid>
    <who name="">mitz</who>
    <bug_when>2009-04-29 10:58:27 -0700</bug_when>
    <thetext>Comment on attachment 29756
patch w/ Layout test (version 6)

&gt; +    if (!rootBox-&gt;renderer()-&gt;style()-&gt;visuallyOrdered()) {

It would be nicer to test for the opposite condition and bail out early if it&apos;s true.

&gt; +        // Reverse of reordering of the line (L2 according to Bidi spec):
&gt; +        // L2. From the highest level found in the text to the lowest odd level on each line,
&gt; +        // reverse any contiguous sequence of characters that are at that level or higher.
&gt; +
&gt; +        // reversing of L2 is only done up to the lowest odd level

That last comment should also be capitalized and end with a period. I don&apos;t understand what &quot;of L2&quot; means in that sentence.

&gt; +            Vector&lt;InlineBox*&gt;::iterator iter = leafBoxesInLogicalOrder.begin();

A Vector&lt;InlineBox*&gt;::iterator is just an InlineBox**, so usually we just write InlineBox**.

&gt; +            Vector&lt;InlineBox*&gt;::iterator end = leafBoxesInLogicalOrder.end();

This can go outside the outer while() loop, because it never changes.

&gt; +    size_t index = len - 1;
&gt; +    while (1) {
&gt; +        endBox = leafBoxesInLogicalOrder[index];
&gt; +        endNode = endBox-&gt;renderer()-&gt;node();
&gt; +        if (endNode || !index)
&gt; +            return;
&gt; +        --index;
&gt; +    }
&gt; +}

Please use while (true) instead of while (1). Also, I think it would be nicer to make this a for() loop, to be more like getLogicalStartBoxAndNode(). You can do something like

+     for (i = leafBoxesInLogicalOrder.size(); i &gt; 0; --i) {
+         endBox = leafBoxesInLogicalOrder[i - 1];
          ...

&gt; +    // Make sure the start of line is not greater than the given input position.  Else use the previous position to 
&gt; +    // obtain start of line.  This condition happens when the input position is before the space character at the end 
&gt; +    // of a soft-wrapped non-editable line. In this scenario, logicalStartPositionForLine would incorrectly hand back a position
&gt; +    // greater than the input position.  This fix is to account for the discrepancy between lines with webkit-line-break:after-white-space 
&gt; +    // style versus lines without that style, which would break before a space by default. 
&gt; +    Position p = visPos.deepEquivalent();
&gt; +    if (p.m_offset &gt; c.deepEquivalent().m_offset &amp;&amp; p.node()-&gt;isSameNode(c.deepEquivalent().node())) {
&gt; +        visPos = c.previous();
&gt; +        if (visPos.isNull())
&gt; +            return VisiblePosition();
&gt; +        visPos = logicalStartPositionForLine(visPos);
&gt; +    }

Since we think this cannot happen, please remove the above from logicalStartOfLine().

&gt; +        if (p.node()-&gt;renderer() &amp;&amp; p.node()-&gt;renderer()-&gt;isRenderBlock() &amp;&amp; p.m_offset == 0)

Please write !p.m_offset instead of p.m_offset == 0 (there are two instances of this).

&gt; +    if (logicalEndNode-&gt;hasTagName(brTag)) {
&gt; +        endOffset = 0;
&gt; +    } else if (logicalEndBox-&gt;isInlineTextBox()) {

Please remove the braces around the 1-line if clause.

&gt; +bool inSameLogicalLine(const VisiblePosition &amp;a, const VisiblePosition &amp;b)

The ampersands should go next to the type.

r=me but please make the style changes and consider making the other changes too before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119313</commentid>
    <comment_count>21</comment_count>
      <attachid>29889</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-29 12:37:55 -0700</bug_when>
    <thetext>Created attachment 29889
patch w/ Layout test (version 7)

Hi Mitz,

Thanks for the review! Appreciated!

I&apos;ve updated the visible_units.cpp per your suggestion.
Could you please review it again?

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119318</commentid>
    <comment_count>22</comment_count>
      <attachid>29889</attachid>
    <who name="">mitz</who>
    <bug_when>2009-04-29 13:03:27 -0700</bug_when>
    <thetext>Comment on attachment 29889
patch w/ Layout test (version 7)

r=me

&gt; +        InlineTextBox* endTextBox = static_cast&lt;InlineTextBox *&gt;(logicalEndBox);

No space needed before the last *.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119370</commentid>
    <comment_count>23</comment_count>
      <attachid>29895</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-29 15:11:48 -0700</bug_when>
    <thetext>Created attachment 29895
patch w/ Layout test (version 8)

Hi Mitz,

I&apos;ve removed the space within &quot;InlineTextBox *&quot;.
Could you please review it again?

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119372</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 15:17:18 -0700</bug_when>
    <thetext>I had to remove tabs from your test cases in order to commit this.  Otherwise the commit went smoothly.  Thank you for the patch!

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/editing/selection/extend-selection-expected.txt
	M	LayoutTests/editing/selection/extend-selection.html
	A	LayoutTests/editing/selection/home-end-expected.txt
	A	LayoutTests/editing/selection/home-end.html
	M	WebCore/ChangeLog
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/editing/visible_units.cpp
	M	WebCore/editing/visible_units.h
Committed r43019
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119373</commentid>
    <comment_count>25</comment_count>
      <attachid>29895</attachid>
    <who name="">mitz</who>
    <bug_when>2009-04-29 15:17:44 -0700</bug_when>
    <thetext>Comment on attachment 29895
patch w/ Layout test (version 8)

You don&apos;t have to ask for a review for such a minor style change if you can get the person landing the patch to include them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119384</commentid>
    <comment_count>26</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-29 15:52:51 -0700</bug_when>
    <thetext>I think that:

editing/selection/extend-selection.html
editing/selection/home-end.html 

started failing after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119388</commentid>
    <comment_count>27</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-04-29 16:17:24 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I think that:
&gt; 
&gt; editing/selection/extend-selection.html
&gt; editing/selection/home-end.html 

Looks like a result of removing the tabs when landing. Eric, can you look into it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119395</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 16:34:42 -0700</bug_when>
    <thetext>Rolled out due to test failures.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	LayoutTests/editing/selection/home-end-expected.txt
	D	LayoutTests/editing/selection/home-end.html
	M	LayoutTests/ChangeLog
	M	LayoutTests/editing/selection/extend-selection-expected.txt
	M	LayoutTests/editing/selection/extend-selection.html
	M	WebCore/ChangeLog
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/editing/visible_units.cpp
	M	WebCore/editing/visible_units.h
Committed r43028
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119396</commentid>
    <comment_count>29</comment_count>
      <attachid>29756</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 16:35:07 -0700</bug_when>
    <thetext>Comment on attachment 29756
patch w/ Layout test (version 6)

Clearing review flag to remove from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119397</commentid>
    <comment_count>30</comment_count>
      <attachid>29889</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 16:35:16 -0700</bug_when>
    <thetext>Comment on attachment 29889
patch w/ Layout test (version 7)

Clearing review flag to remove from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119398</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 16:36:06 -0700</bug_when>
    <thetext>I&apos;m not going to make a second attempt to land this. :)  I leave this to mitz...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119410</commentid>
    <comment_count>32</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-04-29 17:49:20 -0700</bug_when>
    <thetext>Landed in &lt;http://trac.webkit.org/projects/webkit/changeset/43032&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119412</commentid>
    <comment_count>33</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-29 17:56:39 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Landed in &lt;http://trac.webkit.org/projects/webkit/changeset/43032&gt;.
&gt; 

Hi Mitz,

Thanks!
I am just about to upload a patch with the tab-removal test and result files.

xiaomei
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119414</commentid>
    <comment_count>34</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-04-29 17:57:44 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 29889 [review])
&gt; Clearing review flag to remove from commit queue.
&gt; 

Hi Eric,

Thanks for the try! and sorry for the inconvenience.

Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119415</commentid>
    <comment_count>35</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-04-29 17:58:42 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; I am just about to upload a patch with the tab-removal test and result files.

I just replaced each tab with a single space in the tests and updated the results and landed the patch. I don&apos;t think any further changes are needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27979</attachid>
            <date>2009-02-25 13:06:18 -0800</date>
            <delta_ts>2009-02-25 13:06:18 -0800</delta_ts>
            <desc>test case -- rtl document with bidi text</desc>
            <filename>home_end_key.html</filename>
            <type>text/html</type>
            <size>395</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">77u/PGh0bWwgZGlyPSJydGwiPg0KPGRpdiBjb250ZW50ZWRpdGFibGU+DQphYmMgJiMxNDg4OyYj
MTQ4OTsmIzE0OTA7IDEyMyAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgZGVmDQo8L2Rpdj4NCjxkaXYg
Y29udGVudGVkaXRhYmxlPg0KJiMxNDg4OyYjMTQ4OTsmIzE0OTA7IDEyMyAmIzE0OTE7JiMxNDky
OyYjMTQ5MzsgZGVmICYjMTQ5NDsmIzE0OTU7JiMxNDk2Ow0KPC9kaXY+DQo8IS0tIDxkaXYgY29u
dGVudGVkaXRhYmxlPg0KJiMxNDg4OyYjMTQ4OTsmIzE0OTA7ICYjMTQ5MTsmIzE0OTI7JiMxNDkz
OyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0
ODk7JiMxNDkwOyAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsNCjwvZGl2PiAtLT4NCjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29078</attachid>
            <date>2009-03-30 11:24:15 -0700</date>
            <delta_ts>2009-04-29 13:03:49 -0700</delta_ts>
            <desc>a patch not completely working</desc>
            <filename>24168.v1</filename>
            <type>text/plain</type>
            <size>18184</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjExMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDMtMzAgIFhpYW9tZWkgSmkgIDxzZXQgRU1BSUxfQUREUkVT
UyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCisK
KyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nUmlnaHQpOiBBZGQgaGFuZGxp
bmcgd2hlbgorICAgICAgICBncmFudWxhcml0eSBpcyBMaW5lQm91bmRhcnkuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdMZWZ0KTogQWRkIGhhbmRs
aW5nIHdoZW4gCisgICAgICAgIGdyYW51bGFyaXR5IGlzIExpbmVCb3VuZGFyeS4KKyAgICAgICAg
KiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFs
U3RhcnRCb3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRWaXN1YWxFbmRC
b3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkaXJlY3Rpb25PZkVuY2xvc2lu
Z0Jsb2NrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY1N0YXJ0UG9zaXRpb25Gb3JM
aW5lKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY1N0YXJ0T2ZMaW5lKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpsb2dpY0VuZFBvc2l0aW9uRm9yTGluZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aW5TYW1lTG9naWNMaW5lKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpsb2dpY0VuZE9mTGluZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0
cy5oOgorCiAyMDA5LTAzLTMwICBHcmVnIEJvbHNpbmdhICA8Ym9sc2luZ2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQxOTE2KQorKysgV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsMTIgKzMw
MiwxNCBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmV4
dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKS5yaWdodCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKKyAgICAgICAgICAgIHBvcyA9IGxvZ2ljRW5k
T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgogICAgICAg
ICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6CiAgICAgICAgIGNhc2UgTGluZUdyYW51bGFyaXR5
OgogICAgICAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgogICAgICAgICBjYXNlIFNlbnRl
bmNlQm91bmRhcnk6Ci0gICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAgICBjYXNlIFBh
cmFncmFwaEJvdW5kYXJ5OgogICAgICAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CiAgICAgICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUuCkBAIC00MjAsMTIgKzQy
MiwxNCBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmV4
dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKS5sZWZ0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICAgICAgcG9zID0gbG9naWNTdGFy
dE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgogICAg
ICAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6CiAgICAgICAgIGNhc2UgTGluZUdyYW51bGFy
aXR5OgogICAgICAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgogICAgICAgICBjYXNlIFNl
bnRlbmNlQm91bmRhcnk6Ci0gICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAgICBjYXNl
IFBhcmFncmFwaEJvdW5kYXJ5OgogICAgICAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CiAgICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUuCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA0MTkxNikKKysrIFdlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMSw0ICsxMDIxLDE5MCBA
QCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uCiAgICAgcmV0dXJuIGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKK3N0YXRpYyB2
b2lkIGdldFZpc3VhbFN0YXJ0Qm94QW5kTm9kZShSb290SW5saW5lQm94KiByb290Qm94LCBJbmxp
bmVCb3gqJiBzdGFydEJveCwgTm9kZSomIHN0YXJ0Tm9kZSkKK3sKKyAgICBzdGFydEJveCA9IHJv
b3RCb3gtPmZpcnN0TGVhZkNoaWxkKCk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCFz
dGFydEJveCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJPYmplY3QgKnN0
YXJ0UmVuZGVyZXIgPSBzdGFydEJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFzdGFydFJl
bmRlcmVyKSB7CisgICAgICAgICAgICBzdGFydE5vZGUgPSBOVUxMOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnRSZW5kZXJlci0+bm9k
ZSgpOworICAgICAgICBpZiAoc3RhcnROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc3RhcnRCb3ggPSBzdGFydEJveC0+bmV4dExlYWZDaGlsZCgpOworICAgIH0K
KyB9CisKK3N0YXRpYyB2b2lkIGdldFZpc3VhbEVuZEJveEFuZE5vZGUoUm9vdElubGluZUJveCog
cm9vdEJveCwgSW5saW5lQm94KiYgZW5kQm94LCBOb2RlKiYgZW5kTm9kZSkKK3sKKyAgICBlbmRC
b3ggPSByb290Qm94LT5sYXN0TGVhZkNoaWxkKCk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
aWYgKCFlbmRCb3gpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVuZGVyT2JqZWN0
ICplbmRSZW5kZXJlciA9IGVuZEJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFlbmRSZW5k
ZXJlcikgeworICAgICAgICAgICAgZW5kTm9kZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4g
OworICAgICAgICB9CisKKyAgICAgICAgZW5kTm9kZSA9IGVuZFJlbmRlcmVyLT5ub2RlKCk7Cisg
ICAgICAgIGlmIChlbmROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgZW5kQm94ID0gZW5kQm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgfSAgIAorfQorCitzdGF0
aWMgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zKSB7CisgICAgTm9kZSAqbiA9IHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KTsKKyAgICBOb2RlKiBlbmNsb3NpbmdCbG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhuKTsKKyAg
ICBpZiAoZW5jbG9zaW5nQmxvY2tOb2RlKSB7CisgICAgICAgIFdlYkNvcmU6OlJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbmNsb3NpbmdCbG9ja05vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGlm
IChyZW5kZXJlcikgeworICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBXZWJDb3JlOjpSVEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRMOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBMVFI7Cit9CisKK3N0YXRp
YyBWaXNpYmxlUG9zaXRpb24gbG9naWNTdGFydFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGMpCit7CisgICAgaWYgKGMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKKworICAgIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3ggPSByb290Qm94Rm9y
TGluZShjKTsKKyAgICBpZiAoIXJvb3RCb3gpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2li
bGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tzIHdpdGhvdXQKKyAgICAgICAgLy8gUm9v
dElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxv
Y2tzLgorICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBp
ZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVy
QmxvY2soKSAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25B
dm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKGMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOworICAgIH0KKyAgICAKKyAgICAvLyBHZW5lcmF0ZWQgY29udGVu
dCAoZS5nLiBsaXN0IG1hcmtlcnMgYW5kIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXIKKyAgICAvLyBw
c2V1ZG9lbGVtZW50cykgaGF2ZSBubyBjb3JyZXNwb25kaW5nIERPTSBlbGVtZW50LCBhbmQgc28g
Y2Fubm90IGJlCisgICAgLy8gcmVwcmVzZW50ZWQgYnkgYSBWaXNpYmxlUG9zaXRpb24uICBVc2Ug
d2hhdGV2ZXIgZm9sbG93cyBpbnN0ZWFkLgorICAgIElubGluZUJveCAqbG9naWNTdGFydEJveDsK
KyAgICBOb2RlICpsb2dpY1N0YXJ0Tm9kZTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soYyk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIp
IHsKKyAgICAgICAgZ2V0VmlzdWFsU3RhcnRCb3hBbmROb2RlKHJvb3RCb3gsIGxvZ2ljU3RhcnRC
b3gsIGxvZ2ljU3RhcnROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBnZXRWaXN1YWxFbmRC
b3hBbmROb2RlKHJvb3RCb3gsIGxvZ2ljU3RhcnRCb3gsIGxvZ2ljU3RhcnROb2RlKTsKKyAgICB9
CisgICAgaWYgKGxvZ2ljU3RhcnRCb3ggPT0gTlVMTCB8fCBsb2dpY1N0YXJ0Tm9kZSA9PSBOVUxM
KSB7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICB9CisKKyAgICBpbnQg
c3RhcnRPZmZzZXQgPSAwOworICAgIGlmIChsb2dpY1N0YXJ0Qm94LT5pc0lubGluZVRleHRCb3go
KSkgeworICAgICAgICBJbmxpbmVUZXh0Qm94ICpzdGFydFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJ
bmxpbmVUZXh0Qm94ICo+KGxvZ2ljU3RhcnRCb3gpOworICAgICAgICBzdGFydE9mZnNldCA9IHN0
YXJ0VGV4dEJveC0+c3RhcnQoKTsKKyAgICB9CisgIAorICAgIFZpc2libGVQb3NpdGlvbiB2aXNQ
b3MgPSBWaXNpYmxlUG9zaXRpb24obG9naWNTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RS
RUFNKTsKKyAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKHZp
c1Bvcyk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBsb2dpY1N0YXJ0T2ZMaW5lKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gbG9naWNTdGFy
dFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAKKyAgICBpZiAodmlzUG9zLmlzTm90TnVsbCgpKSB7
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhcnQgb2YgbGluZSBpcyBub3QgZ3JlYXRlciB0
aGFuIHRoZSBnaXZlbiBpbnB1dCBwb3NpdGlvbi4gIEVsc2UgdXNlIHRoZSBwcmV2aW91cyBwb3Np
dGlvbiB0byAKKyAgICAgICAgLy8gb2J0YWluIHN0YXJ0IG9mIGxpbmUuICBUaGlzIGNvbmRpdGlv
biBoYXBwZW5zIHdoZW4gdGhlIGlucHV0IHBvc2l0aW9uIGlzIGJlZm9yZSB0aGUgc3BhY2UgY2hh
cmFjdGVyIGF0IHRoZSBlbmQgCisgICAgICAgIC8vIG9mIGEgc29mdC13cmFwcGVkIG5vbi1lZGl0
YWJsZSBsaW5lLiBJbiB0aGlzIHNjZW5hcmlvLCBsb2dpY1N0YXJ0UG9zaXRpb25Gb3JMaW5lIHdv
dWxkIGluY29ycmVjdGx5IGhhbmQgYmFjayBhIHBvc2l0aW9uCisgICAgICAgIC8vIGdyZWF0ZXIg
dGhhbiB0aGUgaW5wdXQgcG9zaXRpb24uICBUaGlzIGZpeCBpcyB0byBhY2NvdW50IGZvciB0aGUg
ZGlzY3JlcGFuY3kgYmV0d2VlbiBsaW5lcyB3aXRoIHdlYmtpdC1saW5lLWJyZWFrOmFmdGVyLXdo
aXRlLXNwYWNlIAorICAgICAgICAvLyBzdHlsZSB2ZXJzdXMgbGluZXMgd2l0aG91dCB0aGF0IHN0
eWxlLCB3aGljaCB3b3VsZCBicmVhayBiZWZvcmUgYSBzcGFjZSBieSBkZWZhdWx0LiAKKyAgICAg
ICAgUG9zaXRpb24gcCA9IHZpc1Bvcy5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBpZiAocC5t
X29mZnNldCA+IGMuZGVlcEVxdWl2YWxlbnQoKS5tX29mZnNldCAmJiBwLm5vZGUoKS0+aXNTYW1l
Tm9kZShjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkgeworICAgICAgICAgICAgdmlzUG9zID0g
Yy5wcmV2aW91cygpOworICAgICAgICAgICAgaWYgKHZpc1Bvcy5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgICAgICAgICB2aXNQb3MgPSBs
b2dpY1N0YXJ0UG9zaXRpb25Gb3JMaW5lKHZpc1Bvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gYy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQWZ0ZXIodmlzUG9zKTsKK30KKwor
c3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY0VuZFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGMpCit7CisgICAgaWYgKGMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKKworICAgIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3ggPSByb290Qm94
Rm9yTGluZShjKTsKKyAgICBpZiAoIXJvb3RCb3gpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIFZp
c2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tzIHdpdGhvdXQKKyAgICAgICAgLy8g
Um9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQg
YmxvY2tzLgorICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgICAg
ICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVu
ZGVyQmxvY2soKSAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAgICAgICAgICByZXR1cm4gYzsKKyAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIH0KKyAgICAKKyAgICAvLyBHZW5l
cmF0ZWQgY29udGVudCAoZS5nLiBsaXN0IG1hcmtlcnMgYW5kIENTUyA6YmVmb3JlIGFuZCA6YWZ0
ZXIKKyAgICAvLyBwc2V1ZG9lbGVtZW50cykgaGF2ZSBubyBjb3JyZXNwb25kaW5nIERPTSBlbGVt
ZW50LCBhbmQgc28gY2Fubm90IGJlCisgICAgLy8gcmVwcmVzZW50ZWQgYnkgYSBWaXNpYmxlUG9z
aXRpb24uICBVc2Ugd2hhdGV2ZXIgcHJlY2VkZXMgaW5zdGVhZC4KKyAgICBJbmxpbmVCb3ggKmxv
Z2ljRW5kQm94OworICAgIE5vZGUgKmxvZ2ljRW5kTm9kZTsKKyAgICBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soYyk7CisgICAgaWYgKGRpcmVjdGlv
biA9PSBMVFIpIHsKKyAgICAgICAgZ2V0VmlzdWFsRW5kQm94QW5kTm9kZShyb290Qm94LCBsb2dp
Y0VuZEJveCwgbG9naWNFbmROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBnZXRWaXN1YWxT
dGFydEJveEFuZE5vZGUocm9vdEJveCwgbG9naWNFbmRCb3gsIGxvZ2ljRW5kTm9kZSk7CisgICAg
fQorICAgIGlmIChsb2dpY0VuZEJveCA9PSBOVUxMIHx8IGxvZ2ljRW5kTm9kZSA9PSBOVUxMKSB7
CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgaW50
IGVuZE9mZnNldCA9IDE7CisgICAgaWYgKGxvZ2ljRW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykp
IHsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYgKGxvZ2ljRW5kQm94LT5p
c0lubGluZVRleHRCb3goKSkgeworICAgICAgICBJbmxpbmVUZXh0Qm94ICplbmRUZXh0Qm94ID0g
c3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihsb2dpY0VuZEJveCk7CisgICAgICAgIGVuZE9m
ZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CisgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNM
aW5lQnJlYWsoKSkKKyAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsb2dpY0VuZE5vZGUsIGVu
ZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworfQorCitib29sIGluU2FtZUxvZ2lj
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYikK
K3sKKyAgICByZXR1cm4gYS5pc05vdE51bGwoKSAmJiBsb2dpY1N0YXJ0T2ZMaW5lKGEpID09IGxv
Z2ljU3RhcnRPZkxpbmUoYik7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBsb2dpY0VuZE9mTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9
IGxvZ2ljRW5kUG9zaXRpb25Gb3JMaW5lKGMpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZW5kIG9mIGxpbmUgaXMgYXQgdGhlIHNhbWUgbGluZSBhcyB0aGUgZ2l2ZW4gaW5wdXQgcG9zaXRp
b24uICBFbHNlIHVzZSB0aGUgcHJldmlvdXMgcG9zaXRpb24gdG8gCisgICAgLy8gb2J0YWluIGVu
ZCBvZiBsaW5lLiAgVGhpcyBjb25kaXRpb24gaGFwcGVucyB3aGVuIHRoZSBpbnB1dCBwb3NpdGlv
biBpcyBiZWZvcmUgdGhlIHNwYWNlIGNoYXJhY3RlciBhdCB0aGUgZW5kIAorICAgIC8vIG9mIGEg
c29mdC13cmFwcGVkIG5vbi1lZGl0YWJsZSBsaW5lLiBJbiB0aGlzIHNjZW5hcmlvLCBsb2dpY0Vu
ZFBvc2l0aW9uRm9yTGluZSB3b3VsZCBpbmNvcnJlY3RseSBoYW5kIGJhY2sgYSBwb3NpdGlvbgor
ICAgIC8vIGluIHRoZSBuZXh0IGxpbmUgaW5zdGVhZC4gVGhpcyBmaXggaXMgdG8gYWNjb3VudCBm
b3IgdGhlIGRpc2NyZXBhbmN5IGJldHdlZW4gbGluZXMgd2l0aCB3ZWJraXQtbGluZS1icmVhazph
ZnRlci13aGl0ZS1zcGFjZSBzdHlsZQorICAgIC8vIHZlcnN1cyBsaW5lcyB3aXRob3V0IHRoYXQg
c3R5bGUsIHdoaWNoIHdvdWxkIGJyZWFrIGJlZm9yZSBhIHNwYWNlIGJ5IGRlZmF1bHQuIAorICAg
IGlmICghaW5TYW1lTG9naWNMaW5lKGMsIHZpc1BvcykpIHsKKyAgICAgICAgdmlzUG9zID0gYy5w
cmV2aW91cygpOworICAgICAgICBpZiAodmlzUG9zLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgICAgICB2aXNQb3MgPSBsb2dpY0VuZFBvc2l0aW9u
Rm9yTGluZSh2aXNQb3MpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYy5ob25vckVkaXRhYmxl
Qm91bmRhcnlBdE9yQmVmb3JlKHZpc1Bvcyk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuaAkocmV2aXNpb24gNDE5MTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gbmV4
dFNlbnRlbmNlUG9zaXRpb24oY29uCiAvLyBsaW5lcwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljU3RhcnRPZkxp
bmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljRW5kT2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xp
bmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBvc2l0
aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIGJv
b2wgaW5TYW1lTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYpOworYm9vbCBpblNhbWVMb2dpY0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIGJvb2wgaXNTdGFydE9mTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CiBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsK
IApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNDIxMTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw5IEBACisyMDA5LTAzLTMwICBYaWFvbWVpIEppICA8c2V0
IEVNQUlMX0FERFJFU1MgZW52aXJvbm1lbnQgdmFyaWFibGU+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVu
ZC5odG1sOiBBZGRlZC4KKwogMjAwOS0wMy0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTU5IEBACis8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5
cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CisgICAgPHN0eWxlPgorICAg
ICAgICBkaXYudGVzdCB7CisgICAgICAgICAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdy
aXRlOworICAgICAgICAgICAgcGFkZGluZzogNHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHgg
ZGFzaGVkIGxpZ2h0Ymx1ZTsKKyAgICAgICAgICAgIG1hcmdpbjogNHB4IDRweCA0cHggMjRweDsK
KyAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAgICBmb250LWZhbWlseTogTHVj
aWRhIEdyYW5kZTsKKyAgICAgICAgICAgIGNvdW50ZXItaW5jcmVtZW50OiB0ZXN0LW51bWJlcjsK
KyAgICAgICAgfQorICAgICAgICBkaXYudGVzdDpiZWZvcmUgeyBjb250ZW50OiBjb3VudGVyKHRl
c3QtbnVtYmVyKTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA4cHg7IGZvbnQtc2l6ZTogeC1z
bWFsbDsgdGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAyMHB4OyB9CisgICAgICAgIGRpdi50ZXN0
IHNwYW4geyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVmOyB9CisgICAgICAgIGRpdi50ZXN0IGltZyB7
IHdpZHRoOiAxZW07IGhlaWdodDogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuOyB9
CisgICAgICAgIGRpdi50ZXN0IGltZyArIGltZyB7IGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1
ZTsgfQorICAgICAgICBkaXYudGVzdCBkaXYgeyBib3JkZXI6IDFweCBkYXNoZWQgcGluazsgcGFk
ZGluZzogM3B4OyBoZWlnaHQ6IDJlbTsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcG9zaXRp
b25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCBkaXJlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKy8vICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBu
b2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0fSk7CisgICAgICAg
ICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5m
b2N1c09mZnNldH0pOworICAgICAgICAgICAgc2VsLm1vZGlmeSgibW92ZSIsIGRpcmVjdGlvbiwg
ImxpbmVCb3VuZGFyeSIpOworIC8vICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNl
bC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5hbmNob3JPZmZzZXR9KTsKKyAgICAgICAgICAgIHBv
c2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmZvY3VzT2Zm
c2V0fSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25zOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZm9sZChzdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZXN1
bHQgPSAiIjsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2hhciA+PSAweDA1ZDApCisgICAgICAgICAgICAgICAgICAg
IGNoYXIgLT0gMHgwNThmOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gMTApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJcXG4iOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9nUG9zaXRpb25z
KHBvc2l0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
b3NpdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAocG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5u
b2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJdIik7CisgICAgICAgICAgICAgICAg
ICAgIGxvZygiLCAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFp
IHx8IHBvc2l0aW9uc1tpXS5ub2RlICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgbG9nKChwb3NpdGlvbnNbaV0ubm9kZSBpbnN0YW5jZW9mIFRleHQgPyAnIicg
KyBmb2xkKHBvc2l0aW9uc1tpXS5ub2RlLmRhdGEpICsgJyInIDogIjwiICsgcG9zaXRpb25zW2ld
Lm5vZGUudGFnTmFtZSArICI+IikgKyAiWyIpOworICAgICAgICAgICAgICAgIGxvZyhwb3NpdGlv
bnNbaV0ub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZygiXSIpOworICAg
ICAgICB9CisKKyAgICAgICAgb25sb2FkID0gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICAgICAgdmFyIHRlc3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSgidGVzdCIpOworICAgICAgICAgICAgdmFyIHNlbCA9IGdldFNlbGVjdGlvbigpOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdSaWdodDsKKyAgICAgICAgICAgICAgICB2YXIgcG9z
aXRpb25zTW92aW5nTGVmdDsKKyAgICAKKyAgICAgICAgICAgICAgICBsb2coIlRlc3QgIiArIChp
ICsgMSkgKyAiLCBMVFI6XG4gIE1vdmluZyBmb3J3YXJkOiAiKTsKKyAgICAgICAgICAgICAgICBz
ZWwuc2V0UG9zaXRpb24odGVzdHNbaV0sIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9uc01v
dmluZ1JpZ2h0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiZm9yd2FyZCIpOwor
ICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAg
ICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAgICAgbG9nKCIgIE1vdmluZyBi
YWNrd2FyZDogICIpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uc01vdmluZ0xlZnQgPSBwb3Np
dGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJiYWNrd2FyZCIpOworICAgICAgICAgICAgICAg
IGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsKKyAgICAgICAgICAgICAgICBsb2co
IlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5nIFJpZ2h0OiAgIik7CisgICAg
ICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAg
ICBwb3NpdGlvbnNNb3ZpbmdSaWdodCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwg
InJpZ2h0Iik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ1Jp
Z2h0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2co
IiAgTW92aW5nIExlZnQ6ICAiKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdMZWZ0
ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAibGVmdCIpOworICAgICAgICAgICAg
ICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsKKyAgICAgICAgICAgICAgICBs
b2coIlxuIik7CisKKworICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpcmVjdGlvbiA9
ICJydGwiOworCisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgUlRM
OlxuICBNb3ZpbmcgYmFja3dhcmQ6ICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlv
bih0ZXN0c1tpXSwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nTGVmdCA9IHBv
c2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImJhY2t3YXJkIik7CisgICAgICAgICAgICAg
ICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xlZnQpOworICAgICAgICAgICAgICAgIGxv
ZygiXG4iKTsKKworICAgICAgICAgICAgICAgIGxvZygiICBNb3ZpbmcgZm9yd2FyZDogICIpOwor
ICAgICAgICAgICAgICAgIHBvc2l0aW9uc01vdmluZ1JpZ2h0ID0gcG9zaXRpb25zTW92aW5nSW5E
aXJlY3Rpb24oc2VsLCAiZm9yd2FyZCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhw
b3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAg
ICAgICAgICAgICAgbG9nKCIgIE1vdmluZyBSaWdodDogICIpOworICAgICAgICAgICAgICAgIHNl
bC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92
aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJyaWdodCIpOworICAg
ICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAg
ICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAgICAgbG9nKCIgIE1vdmluZyBMZWZ0
OiAgIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nTGVmdCA9IHBvc2l0aW9uc01v
dmluZ0luRGlyZWN0aW9uKHNlbCwgImxlZnQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlv
bnMocG9zaXRpb25zTW92aW5nTGVmdCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisg
ICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRp
diBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJjICYjMTQ4ODsmIzE0ODk7JiMxNDkw
OyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgorPC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSBjbGFzcz0idGVzdCI+CismIzE0ODg7JiMxNDg5OyYjMTQ5MDsgeHl6ICYjMTQ5MTsmIzE0
OTI7JiMxNDkzOyBkZWYgJiMxNDk0OyYjMTQ5NTsmIzE0OTY7Cis8L2Rpdj4KKzxkaXYgY29udGVu
dGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4ODsmIzE0ODk7JiMxNDkwOyAmIzE0OTE7JiMx
NDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7Cis8L2Rpdj4KKzxkaXYgY29udGVudGVk
aXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KK2FiYyBlZmQgZGFiZWIKKzwvZGl2PgorCis8ZGl2IGNvbnRl
bnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9uOiBy
dGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFi
bGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogcnRsIj5pcHN1
bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxk
aXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJydGwiPmlw
c3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xh
c3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1l
dDwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFu
ICBzdHlsZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2
PgorPGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9
ImRpcmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8
L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3Jl
bSA8c3BhbiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRp
diBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0ibHRyIj5pcHN1
bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4K
KzwvYm9keT4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2hvbWUtZW5kLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>29294</attachid>
            <date>2009-04-06 17:18:47 -0700</date>
            <delta_ts>2009-04-06 17:18:47 -0700</delta_ts>
            <desc>another test case (inline element with dir=&quot;rtl&quot;) Home/End key do not work</desc>
            <filename>home-end-span-simple.html</filename>
            <type>text/html</type>
            <size>511</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4NCjxo
ZWFkPg0KICAgIDx0aXRsZT5Ib21lL0VuZCBrZXkgdGVzdCBvbiBzcGFuIG9uIHN0eWxlIHNldHRp
bmcgYW5kIGRpcmVjdGlvbiBzZXR0aW5nPC90aXRsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBk
aXI9cnRsICBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0i
ZGlyZWN0aW9uOiBydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2Pgo8ZGl2IGRp
cj1ydGwgIGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIGRpcj0icnRs
Ij5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29296</attachid>
            <date>2009-04-06 17:31:08 -0700</date>
            <delta_ts>2009-04-29 13:03:51 -0700</delta_ts>
            <desc>patch w/ Layout test</desc>
            <filename>24168.patch.v1</filename>
            <type>text/plain</type>
            <size>28989</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjI2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMDQtMDYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pbXUub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRM
OiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRl
eHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ1JpZ2h0
KTogQWRkIGhhbmRsaW5nIHdoZW4KKyAgICAgICAgZ3JhbnVsYXJpdHkgaXMgTGluZUJvdW5kYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVm
dCk6IEFkZCBoYW5kbGluZyB3aGVuCisgICAgICAgIGdyYW51bGFyaXR5IGlzIExpbmVCb3VuZGFy
eS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0VmlzdWFsU3RhcnRCb3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpn
ZXRWaXN1YWxFbmRCb3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY1N0YXJ0
UG9zaXRpb25Gb3JMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gCisgICAgICAgIHN0YXJ0UG9zaXRp
b25Gb3JMaW5lIGV4Y2VwdCB0aGF0IGlmIHRoZSBsaW5lIGlzIGFuIFJUTCBsaW5lLAorICAgICAg
ICBhbmQgaXRzIGxvZ2ljYWxseSBsYXN0IGNoaWxkIGlzICpub3QqIHRoZSBzYW1lIGFzIGl0cyB2
aXN1YWxseSBsYXN0CisgICAgICAgIGNoaWxkLCB0aGUgbG9naWMgc3RhcnQgbm9kZSBpcyB0aGUg
dmlzdWFsIGVuZCBub2RlLiBPdGhlcndpc2UsIHRoZQorICAgICAgICBsb2dpYyBzdGFydCBub2Rl
IGlzIHRoZSB2aXN1YWwgc3RhcnQgbm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljU3RhcnRP
ZkxpbmUpOiBBZGRlZC4gU2ltaWxhciB0byBzdGFydE9mTGluZS4KKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljRW5kUG9zaXRpb25Gb3JMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gCisgICAgICAgIGVu
ZFBvc2l0aW9uRm9yTGluZSBleGNlcHQgdGhhdCBpZiB0aGUgbGluZSBpcyBhbiBSVEwgbGluZSwK
KyAgICAgICAgYW5kIGl0cyBsb2dpY2FsbHkgbGFzdCBjaGlsZCBpcyAqbm90KiB0aGUgc2FtZSBh
cyBpdHMgdmlzdWFsbHkgbGFzdAorICAgICAgICBjaGlsZCwgdGhlIGxvZ2ljIGVuZCBub2RlIGlz
IHRoZSB2aXN1YWwgc3RhcnQgbm9kZS4gT3RoZXJ3aXNlLCB0aGUKKyAgICAgICAgbG9naWMgZW5k
IG5vZGUgaXMgdGhlIHZpc3VhbCBlbmQgbm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OmluU2FtZUxv
Z2ljTGluZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNFbmRPZkxpbmUpOiBBZGRl
ZC4gU2ltaWFyIHRvIGVuZE9mTGluZS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMu
aDogRGVjbGFyYXRpb24gb2YgMyBuZXcgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpzZXRMb2dp
Y2FsbHlMYXN0Q2hpbGRJc1Zpc3VhbGx5TGFzdENoaWxkKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVGbG93Qm94Ojpsb2dpY2FsbHlMYXN0Q2hpbGRJc1Zpc3VhbGx5TGFzdENoaWxk
KTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6IEFkZCBvbmUgbW9y
ZSBwYXJhbWV0ZXIgdG8gY29uc3RydWN0TGluZSgpIHRvCisgICAgICAgIGluZGljYXRlIHdoZXRo
ZXIgdGhlIGxvZ2ljYWxseSBsYXN0IHJ1biBpcyB0aGUgc2FtZSBhcyB0aGUgdmlzdWFsbHkgbGFz
dAorICAgICAgICBydW4uCisgICAgICAgICogcmVuZGVyaW5nL2JpZGkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbmUpOiBTZXQgcGFyZW50Qm94J3Mgd2hl
dGhlciBsb2dpY2FsbHkKKyAgICAgICAgbGFzdCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB2aXN1YWxs
eSBsYXN0IGNoaWxkIGJhc2VkIG9uIHRoZSBwYXNzaW5nIGluIAorICAgICAgICBsYXN0IHBhcmFt
ZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bik6IFBhc3MgaW4gd2hldGhlciBiaWRpCisgICAgICAgIHJlc29sdmVyJ3MgbGFzdCBydW4gaXMg
dGhlIHNhbWUgYXMgbG9naWNhbGx5IGxhc3QgcnVuIGFzIHRoZSBsYXN0IAorICAgICAgICBwYXJh
bWV0ZXIgdG8gY29uc3RydWN0TGluZSgpLgorCiAyMDA5LTA0LTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDIyNTUpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0OCwxMiArMzQ4LDE0IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpt
b2QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWwuZXh0ZW50KCksIG1fc2VsLmFmZmluaXR5KCkpLnJpZ2h0KHRydWUpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICAgICAgcG9z
ID0gbG9naWNFbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZp
bml0eSgpKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXb3JkR3JhbnVsYXJp
dHk6CiAgICAgICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKICAgICAgICAgY2FzZSBMaW5l
R3JhbnVsYXJpdHk6CiAgICAgICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CiAgICAgICAg
IGNhc2UgU2VudGVuY2VCb3VuZGFyeToKLSAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6CiAgICAg
ICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFy
eToKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWxsIG9mIHRoZSBhYm92ZS4KQEAg
LTUwMCwxMiArNTAyLDE0IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpt
b2QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWwuZXh0ZW50KCksIG1fc2VsLmFmZmluaXR5KCkpLmxlZnQodHJ1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgICAgICBwb3Mg
PSBsb2dpY1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5h
ZmZpbml0eSgpKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXb3JkR3JhbnVs
YXJpdHk6CiAgICAgICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKICAgICAgICAgY2FzZSBM
aW5lR3JhbnVsYXJpdHk6CiAgICAgICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CiAgICAg
ICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKLSAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6CiAg
ICAgICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgIGNhc2UgRG9jdW1lbnRCb3Vu
ZGFyeToKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWxsIG9mIHRoZSBhYm92ZS4K
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDQyMjU1KQorKysgV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDQg
KzEwMjEsMTg3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkVkaXRhYmxlQ29udGVudChjb24KICAg
ICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKIH0K
IAorc3RhdGljIHZvaWQgZ2V0VmlzdWFsU3RhcnRCb3hBbmROb2RlKFJvb3RJbmxpbmVCb3gqIHJv
b3RCb3gsIElubGluZUJveComIHN0YXJ0Qm94LCBOb2RlKiYgc3RhcnROb2RlKQoreworICAgIHN0
YXJ0Qm94ID0gcm9vdEJveC0+Zmlyc3RMZWFmQ2hpbGQoKTsKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBpZiAoIXN0YXJ0Qm94KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRl
ck9iamVjdCAqc3RhcnRSZW5kZXJlciA9IHN0YXJ0Qm94LT5yZW5kZXJlcigpOworICAgICAgICBp
ZiAoIXN0YXJ0UmVuZGVyZXIpIHsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IE5VTEw7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzdGFydE5vZGUgPSBzdGFydFJl
bmRlcmVyLT5ub2RlKCk7CisgICAgICAgIGlmIChzdGFydE5vZGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBzdGFydEJveCA9IHN0YXJ0Qm94LT5uZXh0TGVhZkNoaWxk
KCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZXRWaXN1YWxFbmRCb3hBbmROb2RlKFJvb3RJ
bmxpbmVCb3gqIHJvb3RCb3gsIElubGluZUJveComIGVuZEJveCwgTm9kZSomIGVuZE5vZGUpCit7
CisgICAgZW5kQm94ID0gcm9vdEJveC0+bGFzdExlYWZDaGlsZCgpOworICAgIHdoaWxlICgxKSB7
CisgICAgICAgIGlmICghZW5kQm94KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJl
bmRlck9iamVjdCAqZW5kUmVuZGVyZXIgPSBlbmRCb3gtPnJlbmRlcmVyKCk7CisgICAgICAgIGlm
ICghZW5kUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIGVuZE5vZGUgPSBOVUxMOworICAgICAgICAg
ICAgcmV0dXJuIDsKKyAgICAgICAgfQorCisgICAgICAgIGVuZE5vZGUgPSBlbmRSZW5kZXJlci0+
bm9kZSgpOworICAgICAgICBpZiAoZW5kTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIGVuZEJveCA9IGVuZEJveC0+cHJldkxlYWZDaGlsZCgpOworICAgIH0gICAK
K30KKworc3RhdGljIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvcykgeworICAgIE5vZGUqIG4gPSBwb3MuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCk7CisgICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9zaW5nQmxv
Y2sobik7CisgICAgaWYgKCFlbmNsb3NpbmdCbG9ja05vZGUpCisgICAgICAgIHJldHVybiBMVFI7
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVuY2xvc2luZ0Jsb2NrTm9kZS0+cmVuZGVy
ZXIoKTsKKyAgICBpZiAocmVuZGVyZXIpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCk7CisgICAgcmV0dXJuIExUUjsKK30KKworc3RhdGljIFZpc2libGVQb3Np
dGlvbiBsb2dpY1N0YXJ0UG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykK
K3sKKyAgICBpZiAoYy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OworCisgICAgUm9vdElubGluZUJveCAqcm9vdEJveCA9IHJvb3RCb3hGb3JMaW5lKGMpOworICAg
IGlmICghcm9vdEJveCkgeworICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBh
dCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAorICAgICAgICAvLyBSb290SW5saW5lQm94ZXMs
IGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCisgICAgICAg
IFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIGlmIChwLm5vZGUoKS0+
cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAu
bV9vZmZzZXQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQ
b3NpdGlvbkluVGFibGUoYyk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7CisgICAgfQorICAgIAorICAgIC8vIEdlbmVyYXRlZCBjb250ZW50IChlLmcuIGxpc3Qg
bWFya2VycyBhbmQgQ1NTIDpiZWZvcmUgYW5kIDphZnRlcgorICAgIC8vIHBzZXVkb2VsZW1lbnRz
KSBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgRE9NIGVsZW1lbnQsIGFuZCBzbyBjYW5ub3QgYmUKKyAg
ICAvLyByZXByZXNlbnRlZCBieSBhIFZpc2libGVQb3NpdGlvbi4gIFVzZSB3aGF0ZXZlciBmb2xs
b3dzIGluc3RlYWQuCisgICAgSW5saW5lQm94ICpsb2dpY1N0YXJ0Qm94OworICAgIE5vZGUgKmxv
Z2ljU3RhcnROb2RlOworICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayhjKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IFJUTCAmJiAhcm9vdEJveC0+
bG9naWNhbGx5TGFzdENoaWxkSXNWaXN1YWxseUxhc3RDaGlsZCgpKSB7CisgICAgICAgIGdldFZp
c3VhbEVuZEJveEFuZE5vZGUocm9vdEJveCwgbG9naWNTdGFydEJveCwgbG9naWNTdGFydE5vZGUp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGdldFZpc3VhbFN0YXJ0Qm94QW5kTm9kZShyb290Qm94
LCBsb2dpY1N0YXJ0Qm94LCBsb2dpY1N0YXJ0Tm9kZSk7CisgICAgfQorICAgIGlmIChsb2dpY1N0
YXJ0Qm94ID09IE5VTEwgfHwgbG9naWNTdGFydE5vZGUgPT0gTlVMTCkgeworICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgfQorCisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsK
KyAgICBpZiAobG9naWNTdGFydEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKKyAgICAgICAgSW5s
aW5lVGV4dEJveCAqc3RhcnRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihs
b2dpY1N0YXJ0Qm94KTsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRleHRCb3gtPnN0YXJ0
KCk7CisgICAgfQorICAKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0
aW9uKGxvZ2ljU3RhcnROb2RlLCBzdGFydE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJu
IHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOworfQorCitWaXNp
YmxlUG9zaXRpb24gbG9naWNTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCit7
CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxvZ2ljU3RhcnRQb3NpdGlvbkZvckxpbmUo
Yyk7CisgICAgCisgICAgaWYgKHZpc1Bvcy5pc05vdE51bGwoKSkgeworICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIHN0YXJ0IG9mIGxpbmUgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gaW5w
dXQgcG9zaXRpb24uICBFbHNlIHVzZSB0aGUgcHJldmlvdXMgcG9zaXRpb24gdG8gCisgICAgICAg
IC8vIG9idGFpbiBzdGFydCBvZiBsaW5lLiAgVGhpcyBjb25kaXRpb24gaGFwcGVucyB3aGVuIHRo
ZSBpbnB1dCBwb3NpdGlvbiBpcyBiZWZvcmUgdGhlIHNwYWNlIGNoYXJhY3RlciBhdCB0aGUgZW5k
IAorICAgICAgICAvLyBvZiBhIHNvZnQtd3JhcHBlZCBub24tZWRpdGFibGUgbGluZS4gSW4gdGhp
cyBzY2VuYXJpbywgbG9naWNTdGFydFBvc2l0aW9uRm9yTGluZSB3b3VsZCBpbmNvcnJlY3RseSBo
YW5kIGJhY2sgYSBwb3NpdGlvbgorICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIGlucHV0IHBv
c2l0aW9uLiAgVGhpcyBmaXggaXMgdG8gYWNjb3VudCBmb3IgdGhlIGRpc2NyZXBhbmN5IGJldHdl
ZW4gbGluZXMgd2l0aCB3ZWJraXQtbGluZS1icmVhazphZnRlci13aGl0ZS1zcGFjZSAKKyAgICAg
ICAgLy8gc3R5bGUgdmVyc3VzIGxpbmVzIHdpdGhvdXQgdGhhdCBzdHlsZSwgd2hpY2ggd291bGQg
YnJlYWsgYmVmb3JlIGEgc3BhY2UgYnkgZGVmYXVsdC4gCisgICAgICAgIFBvc2l0aW9uIHAgPSB2
aXNQb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKHAubV9vZmZzZXQgPiBjLmRlZXBF
cXVpdmFsZW50KCkubV9vZmZzZXQgJiYgcC5ub2RlKCktPmlzU2FtZU5vZGUoYy5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHZpc1BvcyA9IGMucHJldmlvdXMoKTsKKyAg
ICAgICAgICAgIGlmICh2aXNQb3MuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOworICAgICAgICAgICAgdmlzUG9zID0gbG9naWNTdGFydFBvc2l0aW9u
Rm9yTGluZSh2aXNQb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGMuaG9ub3JF
ZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHZpc1Bvcyk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9z
aXRpb24gbG9naWNFbmRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQor
eworICAgIGlmIChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
CisKKyAgICBSb290SW5saW5lQm94ICpyb290Qm94ID0gcm9vdEJveEZvckxpbmUoYyk7CisgICAg
aWYgKCFyb290Qm94KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0
IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CisgICAgICAgIC8vIFJvb3RJbmxpbmVCb3hlcywg
bGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVkIGJsb2Nrcy4KKyAgICAgICAg
UG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKHAubm9kZSgpLT5y
ZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgcC5t
X29mZnNldCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgLy8gR2VuZXJhdGVkIGNvbnRlbnQgKGUu
Zy4gbGlzdCBtYXJrZXJzIGFuZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyCisgICAgLy8gcHNldWRv
ZWxlbWVudHMpIGhhdmUgbm8gY29ycmVzcG9uZGluZyBET00gZWxlbWVudCwgYW5kIHNvIGNhbm5v
dCBiZQorICAgIC8vIHJlcHJlc2VudGVkIGJ5IGEgVmlzaWJsZVBvc2l0aW9uLiAgVXNlIHdoYXRl
dmVyIHByZWNlZGVzIGluc3RlYWQuCisgICAgSW5saW5lQm94ICpsb2dpY0VuZEJveDsKKyAgICBO
b2RlICpsb2dpY0VuZE5vZGU7CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKGMpOworICAgIGlmIChkaXJlY3Rpb24gPT0gUlRMICYmICFyb290
Qm94LT5sb2dpY2FsbHlMYXN0Q2hpbGRJc1Zpc3VhbGx5TGFzdENoaWxkKCkpIHsKKyAgICAgICAg
Z2V0VmlzdWFsU3RhcnRCb3hBbmROb2RlKHJvb3RCb3gsIGxvZ2ljRW5kQm94LCBsb2dpY0VuZE5v
ZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdldFZpc3VhbEVuZEJveEFuZE5vZGUocm9vdEJv
eCwgbG9naWNFbmRCb3gsIGxvZ2ljRW5kTm9kZSk7CisgICAgfQorICAgIGlmIChsb2dpY0VuZEJv
eCA9PSBOVUxMIHx8IGxvZ2ljRW5kTm9kZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAg
aWYgKGxvZ2ljRW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpIHsKKyAgICAgICAgZW5kT2Zmc2V0
ID0gMDsKKyAgICB9IGVsc2UgaWYgKGxvZ2ljRW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgewor
ICAgICAgICBJbmxpbmVUZXh0Qm94ICplbmRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4
dEJveCAqPihsb2dpY0VuZEJveCk7CisgICAgICAgIGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0
YXJ0KCk7CisgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAg
ICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihsb2dpY0VuZE5vZGUsIGVuZE9mZnNldCwgVlBfVVBTVFJFQU1f
SUZfUE9TU0lCTEUpOworfQorCitib29sIGluU2FtZUxvZ2ljTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24gJmEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYikKK3sKKyAgICByZXR1cm4gYS5pc05v
dE51bGwoKSAmJiBsb2dpY1N0YXJ0T2ZMaW5lKGEpID09IGxvZ2ljU3RhcnRPZkxpbmUoYik7Cit9
CisKK1Zpc2libGVQb3NpdGlvbiBsb2dpY0VuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGMpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxvZ2ljRW5kUG9zaXRpb25Gb3JM
aW5lKGMpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgZW5kIG9mIGxpbmUgaXMgYXQgdGhl
IHNhbWUgbGluZSBhcyB0aGUgZ2l2ZW4gaW5wdXQgcG9zaXRpb24uICBFbHNlIHVzZSB0aGUgcHJl
dmlvdXMgcG9zaXRpb24gdG8gCisgICAgLy8gb2J0YWluIGVuZCBvZiBsaW5lLiAgVGhpcyBjb25k
aXRpb24gaGFwcGVucyB3aGVuIHRoZSBpbnB1dCBwb3NpdGlvbiBpcyBiZWZvcmUgdGhlIHNwYWNl
IGNoYXJhY3RlciBhdCB0aGUgZW5kIAorICAgIC8vIG9mIGEgc29mdC13cmFwcGVkIG5vbi1lZGl0
YWJsZSBsaW5lLiBJbiB0aGlzIHNjZW5hcmlvLCBsb2dpY0VuZFBvc2l0aW9uRm9yTGluZSB3b3Vs
ZCBpbmNvcnJlY3RseSBoYW5kIGJhY2sgYSBwb3NpdGlvbgorICAgIC8vIGluIHRoZSBuZXh0IGxp
bmUgaW5zdGVhZC4gVGhpcyBmaXggaXMgdG8gYWNjb3VudCBmb3IgdGhlIGRpc2NyZXBhbmN5IGJl
dHdlZW4gbGluZXMgd2l0aCB3ZWJraXQtbGluZS1icmVhazphZnRlci13aGl0ZS1zcGFjZSBzdHls
ZQorICAgIC8vIHZlcnN1cyBsaW5lcyB3aXRob3V0IHRoYXQgc3R5bGUsIHdoaWNoIHdvdWxkIGJy
ZWFrIGJlZm9yZSBhIHNwYWNlIGJ5IGRlZmF1bHQuIAorICAgIGlmICghaW5TYW1lTG9naWNMaW5l
KGMsIHZpc1BvcykpIHsKKyAgICAgICAgdmlzUG9zID0gYy5wcmV2aW91cygpOworICAgICAgICBp
ZiAodmlzUG9zLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OworICAgICAgICB2aXNQb3MgPSBsb2dpY0VuZFBvc2l0aW9uRm9yTGluZSh2aXNQb3MpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gYy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKHZp
c1Bvcyk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAkocmV2aXNpb24gNDIy
NTUpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw5ICs1MCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlUG9zaXRpb24oY29u
CiAvLyBsaW5lcwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIGJvb2wgaW5TYW1lTGluZShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworYm9vbCBpblNhbWVM
b2dpY0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
KTsKIGJvb2wgaXNTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBib29sIGlz
RW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaAkocmV2aXNpb24gNDIyNTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsMTYgQEAgcHVibGljOgog
ICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SGFzQmFkQ2hp
bGRMaXN0KCk7CiAKKyAgICB2b2lkIHNldExvZ2ljYWxseUxhc3RDaGlsZElzVmlzdWFsbHlMYXN0
Q2hpbGQoYm9vbCBsb2dpY2FsbHlMYXN0Q2hpbGRJc1Zpc3VhbGx5TGFzdENoaWxkKQorICAgIHsK
KyAgICAgICAgbV9sb2dpY2FsbHlMYXN0Q2hpbGRJc1Zpc3VhbGx5TGFzdENoaWxkID0gbG9naWNh
bGx5TGFzdENoaWxkSXNWaXN1YWxseUxhc3RDaGlsZDsKKyAgICB9CisKKyAgICBib29sIGxvZ2lj
YWxseUxhc3RDaGlsZElzVmlzdWFsbHlMYXN0Q2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbG9naWNhbGx5TGFzdENoaWxkSXNWaXN1YWxseUxhc3RDaGlsZDsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzSW5saW5lRmxvd0JveCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIApAQCAtMTYxLDYgKzE3MSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lu
Y2x1ZGVSaWdodEVkZ2UgOiAxOwogICAgIGJvb2wgbV9oYXNUZXh0Q2hpbGRyZW4gOiAxOwogCisg
ICAgYm9vbCBtX2xvZ2ljYWxseUxhc3RDaGlsZElzVmlzdWFsbHlMYXN0Q2hpbGQgOiAxOworCiAj
aWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9oYXNCYWRDaGlsZExpc3Q7CiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNDIyNTUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVi
bGljOgogICAgIGludCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiwg
Ym9vbCBmaXJzdExpbmUpOwogICAgIHZvaWQgZml0QmVsb3dGbG9hdHMoaW50IHdpZHRoVG9GaXQs
IGJvb2wgZmlyc3RMaW5lLCBpbnQmIGF2YWlsYWJsZVdpZHRoKTsKICAgICBJbmxpbmVJdGVyYXRv
ciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwg
RUNsZWFyKiBjbGVhciA9IDApOwotICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5z
aWduZWQgcnVuQ291bnQsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29s
IGZpcnN0TGluZSwgYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOworICAg
IFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJpZGlSdW4q
IGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0TGluZSwgYm9vbCBsYXN0TGlu
ZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QsIGJvb2wgbG9naWNhbGx5TGFzdFJ1bklzVmlzdWFs
bHlMYXN0UnVuKTsKICAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBmaXJzdExpbmUpOwogICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxQb3NpdGlv
bnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqLCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RS
dW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCk7CiAgICAgdm9p
ZCBjb21wdXRlVmVydGljYWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqLCBCaWRpUnVu
Kik7CkBAIC01MjgsMyArNTI4LDQgQEAgdm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJs
b2NrKiBvKQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVyQmxvY2tf
aAorCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9iaWRpLmNwcAkocmV2aXNpb24gNDIyNTUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDcgKzUzOSw3IEBAIElubGluZUZs
b3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm8KICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1Sb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5D
b3VudCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIGxhc3RSdW4sIGJvb2wgZmlyc3RMaW5l
LCBib29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCkKK1Jvb3RJbmxpbmVCb3gq
IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW5lKHVuc2lnbmVkIHJ1bkNvdW50LCBCaWRpUnVuKiBm
aXJzdFJ1biwgQmlkaVJ1biogbGFzdFJ1biwgYm9vbCBmaXJzdExpbmUsIGJvb2wgbGFzdExpbmUs
IFJlbmRlck9iamVjdCogZW5kT2JqZWN0LCBib29sIGxvZ2ljYWxseUxhc3RSdW5Jc1Zpc3VhbGx5
TGFzdFJ1bikKIHsKICAgICBBU1NFUlQoZmlyc3RSdW4pOwogCkBAIC01NTcsOSArNTU3LDExIEBA
IFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW4KICAgICAgICAgICAgIC8v
IElmIHdlIGhhdmUgbm8gcGFyZW50IGJveCB5ZXQsIG9yIGlmIHRoZSBydW4gaXMgbm90IHNpbXBs
eSBhIHNpYmxpbmcsCiAgICAgICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gY29uc3RydWN0IGlu
bGluZSBib3hlcyBhcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgZW5jbG9zZSB0aGUKICAgICAgICAg
ICAgIC8vIHJ1bidzIGlubGluZSBib3guCi0gICAgICAgICAgICBpZiAoIXBhcmVudEJveCB8fCBw
YXJlbnRCb3gtPnJlbmRlcmVyKCkgIT0gci0+bV9vYmplY3QtPnBhcmVudCgpKQorICAgICAgICAg
ICAgaWYgKCFwYXJlbnRCb3ggfHwgcGFyZW50Qm94LT5yZW5kZXJlcigpICE9IHItPm1fb2JqZWN0
LT5wYXJlbnQoKSkgewogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5saW5lIGJveGVz
IGFsbCB0aGUgd2F5IGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIGluc2VydGlvbiBwb2ludC4KICAg
ICAgICAgICAgICAgICBwYXJlbnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+bV9vYmplY3QtPnBh
cmVudCgpLCBmaXJzdExpbmUpOworICAgICAgICAgICAgICAgIHBhcmVudEJveC0+c2V0TG9naWNh
bGx5TGFzdENoaWxkSXNWaXN1YWxseUxhc3RDaGlsZChsb2dpY2FsbHlMYXN0UnVuSXNWaXN1YWxs
eUxhc3RSdW4pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGlu
bGluZSBib3ggdG8gdGhpcyBsaW5lLgogICAgICAgICAgICAgcGFyZW50Qm94LT5hZGRUb0xpbmUo
Ym94KTsKQEAgLTEwMDUsNyArMTAwNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKGIKIAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVCb3ggPSAw
OwogICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlci5ydW5Db3VudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKHJlc29sdmVyLnJ1bkNvdW50KCksIHJl
c29sdmVyLmZpcnN0UnVuKCksIHJlc29sdmVyLmxhc3RSdW4oKSwgZmlyc3RMaW5lLCAhZW5kLm9i
aiwgZW5kLm9iaiAmJiAhZW5kLnBvcyA/IGVuZC5vYmogOiAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGluZUJveCA9IGNvbnN0cnVjdExpbmUocmVzb2x2ZXIucnVuQ291bnQoKSwgcmVzb2x2ZXIu
Zmlyc3RSdW4oKSwgcmVzb2x2ZXIubGFzdFJ1bigpLCBmaXJzdExpbmUsICFlbmQub2JqLCBlbmQu
b2JqICYmICFlbmQucG9zID8gZW5kLm9iaiA6IDAsIHJlc29sdmVyLmxhc3RSdW4oKSA9PSByZXNv
bHZlci5sb2dpY2FsbHlMYXN0UnVuKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGluZUJv
eCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjI2MSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisy
MDA5LTA0LTA2ICBYaWFvbWVpIEppICA8eGppQGNocm9taW11Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTY4CisgICAgICAgIFJUTDogSG9tZS9FbmQga2V5IGRv
ZXMgbm90IGJlaGF2ZSBjb3JyZWN0bHkgaW4gbWl4ZWQgYmlkaSB0ZXh0IGluIFJUTCBkb2N1bWVu
dAorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbDogQWRkZWQuCisK
IDIwMDktMDQtMDYgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBOb3QgcmV2aWV3ZWQgYmVjYXVzZSBpdCdzIHN0dXBpZGx5IG9idmlvdXMuCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorVGVzdCAx
LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDIw
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzIwLCAxXQor
ICBNb3ZpbmcgUmlnaHQ6ICAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDIwXQorICBNb3Zp
bmcgTGVmdDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDEsIFJUTDoK
KyAgTW92aW5nIGJhY2t3YXJkOiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDFdCisgIE1v
dmluZyBmb3J3YXJkOiAgIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsxLCAxXQorICBNb3Zpbmcg
UmlnaHQ6ICAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDIwXQorICBNb3ZpbmcgTGVmdDog
ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDIsIExUUjoKKyAgTW92aW5n
IGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNr
d2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMjAsIDFdCisgIE1vdmluZyBSaWdodDog
ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBMZWZ0OiAgIlxuQUJD
IHh5eiBERUYgZGVmIEdISVxuIlsyMCwgMV0KK1Rlc3QgMiwgUlRMOgorICBNb3ZpbmcgYmFja3dh
cmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMV0KKyAgTW92aW5nIGZvcndhcmQ6ICAi
XG5BQkMgeHl6IERFRiBkZWYgR0hJXG4iWzEsIDFdCisgIE1vdmluZyBSaWdodDogICJcbkFCQyB4
eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBMZWZ0OiAgIlxuQUJDIHh5eiBERUYg
ZGVmIEdISVxuIlsyMCwgMV0KK1Rlc3QgMywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJD
IERFRiBBQkNcbiJbMSwgMTJdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyBERUYgQUJDXG4i
WzEyLCAxXQorICBNb3ZpbmcgUmlnaHQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsxLCAxMl0KKyAgTW92
aW5nIExlZnQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsxMiwgMV0KK1Rlc3QgMywgUlRMOgorICBNb3Zp
bmcgYmFja3dhcmQ6ICJcbkFCQyBERUYgQUJDXG4iWzEsIDFdCisgIE1vdmluZyBmb3J3YXJkOiAg
IlxuQUJDIERFRiBBQkNcbiJbMSwgMTJdCisgIE1vdmluZyBSaWdodDogICJcbkFCQyBERUYgQUJD
XG4iWzEsIDEyXQorICBNb3ZpbmcgTGVmdDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorVGVz
dCA0LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQor
ICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorICBNb3Zpbmcg
UmlnaHQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgTGVmdDogICJcbmFi
YyBlZmQgZGFiZWJcbiJbMTQsIDFdCitUZXN0IDQsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAi
XG5hYmMgZWZkIGRhYmViXG4iWzEsIDFdCisgIE1vdmluZyBmb3J3YXJkOiAgIlxuYWJjIGVmZCBk
YWJlYlxuIlsxLCAxNF0KKyAgTW92aW5nIFJpZ2h0OiAgIlxuYWJjIGVmZCBkYWJlYlxuIlsxLCAx
NF0KKyAgTW92aW5nIExlZnQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA1LCBM
VFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3Zpbmcg
YmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9y
ZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgTGVmdDogICIgYW1ldCJbNV0sICJMb3JlbSAi
WzBdCitUZXN0IDUsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBN
b3ZpbmcgZm9yd2FyZDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBSaWdodDog
ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxv
cmVtICJbMF0KK1Rlc3QgNiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICJp
cHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJpcHN1bSBkb2xvciJbMTFdLCAi
TG9yZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgImlwc3VtIGRvbG9yIlsx
MV0KKyAgTW92aW5nIExlZnQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3Qg
NiwgUlRMOgorICBNb3ZpbmcgYmFja3dhcmQ6ICJMb3JlbSAiWzAsIDBdCisgIE1vdmluZyBmb3J3
YXJkOiAgIkxvcmVtICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBSaWdodDogICJM
b3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgTGVmdDogICJpcHN1bSBkb2xv
ciJbMTFdLCAiTG9yZW0gIlswXQorVGVzdCA3LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9y
ZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9y
ZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3Zp
bmcgTGVmdDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCitUZXN0IDcsIFJUTDoKKyAgTW92aW5n
IGJhY2t3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0IlsxXQorICBNb3ZpbmcgZm9yd2FyZDogICIg
YW1ldCJbMV0sICJMb3JlbSAiWzVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFt
ZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOCwg
TFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJk
OiAgIkxvcmVtICJbNSwgMF0KKyAgTW92aW5nIFJpZ2h0OiAgIkxvcmVtICJbMCwgNV0KKyAgTW92
aW5nIExlZnQ6ICAiTG9yZW0gIls1LCAwXQorVGVzdCA4LCBSVEw6CisgIE1vdmluZyBiYWNrd2Fy
ZDogIkxvcmVtICJbMCwgMF0KKyAgTW92aW5nIGZvcndhcmQ6ICAiTG9yZW0gIlswLCA1XQorICBN
b3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswLCA1XQorICBNb3ZpbmcgTGVmdDogICJMb3JlbSAiWzUs
IDBdCitUZXN0IDksIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQi
WzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCisgIE1vdmlu
ZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0
Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOSwgUlRMOgorICBNb3ZpbmcgYmFja3dhcmQ6ICJMb3Jl
bSAiWzAsIDBdCisgIE1vdmluZyBmb3J3YXJkOiAgIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAg
TW92aW5nIFJpZ2h0OiAgIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIExlZnQ6ICAi
IGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCAxMCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDog
IkxvcmVtICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJpcHN1
bSBkb2xvciJbMTFdLCAiTG9yZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwg
Imlwc3VtIGRvbG9yIlsxMV0KKyAgTW92aW5nIExlZnQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxv
cmVtICJbMF0KK1Rlc3QgMTAsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAw
XQorICBNb3ZpbmcgZm9yd2FyZDogICJMb3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBN
b3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgImlwc3VtIGRvbG9yIlsxMV0KKyAgTW92aW5nIExl
ZnQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIExUUjoKKyAgTW92
aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDog
ICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAi
IGFtZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3Qg
MTEsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBNb3ZpbmcgZm9y
d2FyZDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAi
WzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0K
K1Rlc3QgMTIsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzAsIDVdCisgIE1vdmlu
ZyBiYWNrd2FyZDogICJMb3JlbSAiWzUsIDBdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzAs
IDVdCisgIE1vdmluZyBMZWZ0OiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgMTIsIFJUTDoKKyAgTW92
aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBNb3ZpbmcgZm9yd2FyZDogICJMb3JlbSAi
WzAsIDVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBMZWZ0OiAg
IkxvcmVtICJbNSwgMF0KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9o
b21lLWVuZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vaG9tZS1lbmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKzxoZWFkPgor
ICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBj
aGFyc2V0PXV0Zi04Ij4KKyAgICA8c3R5bGU+CisgICAgICAgIGRpdi50ZXN0IHsKKyAgICAgICAg
ICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7CisgICAgICAgICAgICBwYWRkaW5n
OiA0cHg7CisgICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgbGlnaHRibHVlOworICAgICAg
ICAgICAgbWFyZ2luOiA0cHggNHB4IDRweCAyNHB4OworICAgICAgICAgICAgb3V0bGluZTogbm9u
ZTsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlOworICAgICAgICAgICAg
Y291bnRlci1pbmNyZW1lbnQ6IHRlc3QtbnVtYmVyOworICAgICAgICB9CisgICAgICAgIGRpdi50
ZXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGNvdW50ZXIodGVzdC1udW1iZXIpOyBwb3NpdGlvbjogYWJz
b2x1dGU7IGxlZnQ6IDhweDsgZm9udC1zaXplOiB4LXNtYWxsOyB0ZXh0LWFsaWduOiByaWdodDsg
d2lkdGg6IDIwcHg7IH0KKyAgICAgICAgZGl2LnRlc3Qgc3BhbiB7IGJhY2tncm91bmQtY29sb3I6
ICNkZWY7IH0KKyAgICAgICAgZGl2LnRlc3QgaW1nIHsgd2lkdGg6IDFlbTsgaGVpZ2h0OiAxZW07
IGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JlZW47IH0KKyAgICAgICAgZGl2LnRlc3QgaW1nICsg
aW1nIHsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlOyB9CisgICAgICAgIGRpdi50ZXN0IGRp
diB7IGJvcmRlcjogMXB4IGRhc2hlZCBwaW5rOyBwYWRkaW5nOiAzcHg7IGhlaWdodDogMmVtOyB9
CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBsb2cobWVzc2Fn
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWws
IGRpcmVjdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdOwor
Ly8gICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZz
ZXQ6IHNlbC5hbmNob3JPZmZzZXR9KTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHsgbm9k
ZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmZvY3VzT2Zmc2V0fSk7CisgICAgICAgICAg
ICBzZWwubW9kaWZ5KCJtb3ZlIiwgZGlyZWN0aW9uLCAibGluZUJvdW5kYXJ5Iik7CisgLy8gICAg
ICAgICAgIHBvc2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2Vs
LmFuY2hvck9mZnNldH0pOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwu
YW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuZm9jdXNPZmZzZXR9KTsKKyAgICAgICAgICAgIHJldHVy
biBwb3NpdGlvbnM7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBmb2xkKHN0cmluZykK
KyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgICAgIGlmIChjaGFy
ID49IDB4MDVkMCkKKyAgICAgICAgICAgICAgICAgICAgY2hhciAtPSAweDA1OGY7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY2hhciA9PSAxMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gIlxcbiI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBsb2dQb3NpdGlvbnMocG9zaXRpb25zKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlv
bnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBsb2coIl0iKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCIsICIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0g
cG9zaXRpb25zW2kgLSAxXS5ub2RlKQorICAgICAgICAgICAgICAgICAgICBsb2coKHBvc2l0aW9u
c1tpXS5ub2RlIGluc3RhbmNlb2YgVGV4dCA/ICciJyArIGZvbGQocG9zaXRpb25zW2ldLm5vZGUu
ZGF0YSkgKyAnIicgOiAiPCIgKyBwb3NpdGlvbnNbaV0ubm9kZS50YWdOYW1lICsgIj4iKSArICJb
Iik7CisgICAgICAgICAgICAgICAgbG9nKHBvc2l0aW9uc1tpXS5vZmZzZXQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbG9nKCJdIik7CisgICAgICAgIH0KKworICAgICAgICBvbmxvYWQg
PSBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghd2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgdGVzdHMg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0Iik7CisgICAgICAgICAgICB2
YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmlu
Z1JpZ2h0OworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworICAgIAor
ICAgICAgICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpcbiAgTW92aW5n
IGZvcndhcmQ6ICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwg
MCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3Zp
bmdJbkRpcmVjdGlvbihzZWwsICJmb3J3YXJkIik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRp
b25zKHBvc2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisK
KyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAg
ICAgICAgcG9zaXRpb25zTW92aW5nTGVmdCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNl
bCwgImJhY2t3YXJkIik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01v
dmluZ0xlZnQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAg
IGxvZygiICBNb3ZpbmcgUmlnaHQ6ICAiKTsKKyAgICAgICAgICAgICAgICBzZWwuc2V0UG9zaXRp
b24odGVzdHNbaV0sIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9uc01vdmluZ1JpZ2h0ID0g
cG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAicmlnaHQiKTsKKyAgICAgICAgICAgICAg
ICBsb2dQb3NpdGlvbnMocG9zaXRpb25zTW92aW5nUmlnaHQpOworICAgICAgICAgICAgICAgIGxv
ZygiXG4iKTsKKworICAgICAgICAgICAgICAgIGxvZygiICBNb3ZpbmcgTGVmdDogICIpOworICAg
ICAgICAgICAgICAgIHBvc2l0aW9uc01vdmluZ0xlZnQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVj
dGlvbihzZWwsICJsZWZ0Iik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9u
c01vdmluZ0xlZnQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworCisgICAgICAgICAg
ICAgICAgdGVzdHNbaV0uc3R5bGUuZGlyZWN0aW9uID0gInJ0bCI7CisKKyAgICAgICAgICAgICAg
ICBsb2coIlRlc3QgIiArIChpICsgMSkgKyAiLCBSVEw6XG4gIE1vdmluZyBiYWNrd2FyZDogIik7
CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAgICAg
ICAgICAgICBwb3NpdGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24o
c2VsLCAiYmFja3dhcmQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25z
TW92aW5nTGVmdCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAg
ICAgbG9nKCIgIE1vdmluZyBmb3J3YXJkOiAgIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25z
TW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJmb3J3YXJkIik7
CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAg
ICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5n
IFJpZ2h0OiAgIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAw
KTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdSaWdodCA9IHBvc2l0aW9uc01vdmlu
Z0luRGlyZWN0aW9uKHNlbCwgInJpZ2h0Iik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25z
KHBvc2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAg
ICAgICAgICAgICAgICBsb2coIiAgTW92aW5nIExlZnQ6ICAiKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAibGVm
dCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsK
KyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICB0ZXN0c1tpXS5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICA8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0i
dGVzdCI+CithYmMgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7IHh5eiAmIzE0OTE7JiMxNDkyOyYjMTQ5
MzsgZGVmCis8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4
ODsmIzE0ODk7JiMxNDkwOyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZiAmIzE0OTQ7JiMx
NDk1OyYjMTQ5NjsKKzwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgor
JiMxNDg4OyYjMTQ4OTsmIzE0OTA7ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5
OyYjMTQ5MDsKKzwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJj
IGVmZCBkYWJlYgorPC9kaXY+CisKKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVzdCI+
TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IHJ0bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFu
PiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxz
cGFuICBzdHlsZT0iZGlyZWN0aW9uOiBydGwiPmlwc3VtIGRvbG9yPGRpdiA+IGp1c3QgYSB0ZXN0
PC9kaXY+IHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9
InRlc3QiPkxvcmVtIDxzcGFuICBkaXI9InJ0bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0
PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPGRpdiAgZGly
PSJydGwiPmlwc3VtIGRvbG9yIHNpdDwvZGl2PiBhbWV0PC9kaXY+CisKKzxkaXYgY29udGVudGVk
aXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+
aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAg
Y2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRv
bG9yPGRpdiA+IGp1c3QgYSB0ZXN0PC9kaXY+IHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBj
b250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBkaXI9Imx0ciI+aXBzdW0g
ZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0i
dGVzdCI+TG9yZW0gPGRpdiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvZGl2PiBhbWV0PC9k
aXY+CisKKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29402</attachid>
            <date>2009-04-10 15:10:26 -0700</date>
            <delta_ts>2009-04-29 13:03:53 -0700</delta_ts>
            <desc>patch w/ Layout test</desc>
            <filename>home-end.0410</filename>
            <type>text/plain</type>
            <size>29889</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjQwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDQtMTAgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6
IGVkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwKKworICAgICAgICBGaXggaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTY4CisgICAgICAgIFJUTDogSG9tZS9F
bmQga2V5IGRvZXMgbm90IGJlaGF2ZSBjb3JyZWN0bHkgaW4gbWl4ZWQgYmlkaSB0ZXh0IGluIFJU
TCBkb2N1bWVudAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ1JpZ2h0
KTogQWRkIGhhbmRsaW5nIHdoZW4KKyAgICAgICAgZ3JhbnVsYXJpdHkgaXMgTGluZUJvdW5kYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVm
dCk6IEFkZCBoYW5kbGluZyB3aGVuCisgICAgICAgIGdyYW51bGFyaXR5IGlzIExpbmVCb3VuZGFy
eS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cmV2ZXJzZUJveGVzKTogQWRkZWQuIFJldmVyc2UgbGVhZiBib3hlcyBpbiBhIGxpbmUuCisg
ICAgICAgIChXZWJDb3JlOjpyZWNvbnN0cnVjdExvZ2ljT3JkZXIpOiBBZGRlZC4gUmVjb25zdHJ1
Y3QgbG9naWMgb3JkZXIgb2YgbGVhZiBib3hlcworICAgICAgICBpbiBhIGxpbmUuCisgICAgICAg
IChXZWJDb3JlOjpnZXRMb2dpY1N0YXJ0Qm94QW5kTm9kZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TG9naWNFbmRCb3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjps
b2dpY1N0YXJ0UG9zaXRpb25Gb3JMaW5lKTogQWRkZWQuIFNpbWlsaWFyIHRvIHN0YXJ0UG9zaXRp
b25Gb3JMaW5lLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNTdGFydE9mTGluZSk6IEFkZGVkLiBT
aW1pbGFyIHRvIHN0YXJ0T2ZMaW5lLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNFbmRQb3NpdGlv
bkZvckxpbmUpOiBBZGRlZC4gU2ltaWxhciB0byBlbmRQb3NpdGlvbkZvckxpbmUuCisgICAgICAg
IChXZWJDb3JlOjppblNhbWVMb2dpY0xpbmUpOiBBZGRlZC4gU2ltaWxhciB0byBpc1NhbWVMaW5l
LgorICAgICAgICAoV2ViQ29yZTo6bG9naWNFbmRPZkxpbmUpOiBBZGRlZC4gU2ltaWxhciB0byBl
bmRPZkxpbmUuCisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmg6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpJbmxp
bmVCb3gpOiBBZGQgMiBtb3JlIGRhdGEgbWVtYmVyIGluaXRpYWxpemF0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY05leHRPbkxpbmUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6bG9naWNQcmV2T25MaW5lKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6OnNldExvZ2ljTmV4dE9uTGluZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lQm94OjpzZXRMb2dpY1ByZXZPbkxpbmUpOiBBZGRlZC4KKwogMjAwOS0wNC0x
MCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgR2l2ZSBXaW5kb3dz
J3MgPHNlbGVjdD4gcG9wdXAgbWVudXMgZHJvcCBzaGFkb3dzCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MjI1NSkKKysrIFdlYkNvcmUvZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDEyICsz
NDgsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbC5l
eHRlbnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkucmlnaHQodHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgICAgICBwb3MgPSBsb2dpY0Vu
ZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKICAgICAg
ICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgogICAgICAgICBjYXNlIExpbmVHcmFudWxhcml0
eToKICAgICAgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKICAgICAgICAgY2FzZSBTZW50
ZW5jZUJvdW5kYXJ5OgotICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKICAgICAgICAgY2FzZSBQ
YXJhZ3JhcGhCb3VuZGFyeToKICAgICAgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgogICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlLgpAQCAtNTAwLDEyICs1
MDIsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbC5l
eHRlbnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkubGVmdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKKyAgICAgICAgICAgIHBvcyA9IGxvZ2ljU3Rh
cnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKICAg
ICAgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgogICAgICAgICBjYXNlIExpbmVHcmFudWxh
cml0eToKICAgICAgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKICAgICAgICAgY2FzZSBT
ZW50ZW5jZUJvdW5kYXJ5OgotICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKICAgICAgICAgY2Fz
ZSBQYXJhZ3JhcGhCb3VuZGFyeToKICAgICAgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgogICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlLgpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNDIyNTUpCisrKyBXZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNCArMTAyMSwyODYg
QEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mRWRpdGFibGVDb250ZW50KGNvbgogICAgIHJldHVybiBs
YXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCisKK3N0YXRp
YyB2b2lkIHJldmVyc2VCb3hlcyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBJbmxpbmVC
b3gqJiBmaXJzdEJveCwgSW5saW5lQm94KiYgbGFzdEJveCkKK3sKKyAgICBpZiAoc3RhcnQgPj0g
ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBz
dGFydCBvZiB0aGUgcnVucyB0byByZXZlcnNlIGFuZCBwdXQgaXQgaW4KKyAgICAvLyB8YmVmb3Jl
U3RhcnR8LiAgfGN1cnJ8IHNob3VsZCBwb2ludCB0byB0aGUgZmlyc3QgcnVuIHRvIHJldmVyc2Uu
CisgICAgSW5saW5lQm94KiBjdXJyID0gZmlyc3RCb3g7CisgICAgSW5saW5lQm94KiBiZWZvcmVT
dGFydCA9IDA7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBzdGFydCkgewor
ICAgICAgICBpKys7CisgICAgICAgIGJlZm9yZVN0YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9
IGN1cnItPmxvZ2ljTmV4dE9uTGluZSgpOworICAgIH0KKworICAgIElubGluZUJveCogc3RhcnRC
b3ggPSBjdXJyOworICAgIHdoaWxlIChpIDwgZW5kKSB7CisgICAgICAgIGkrKzsKKyAgICAgICAg
Y3VyciA9IGN1cnItPmxvZ2ljTmV4dE9uTGluZSgpOworICAgIH0KKyAgICBJbmxpbmVCb3gqIGVu
ZEJveCA9IGN1cnI7CisgICAgSW5saW5lQm94KiBhZnRlckVuZCA9IGN1cnItPmxvZ2ljTmV4dE9u
TGluZSgpOworCisgICAgaSA9IHN0YXJ0OworICAgIGN1cnIgPSBzdGFydEJveDsKKyAgICBJbmxp
bmVCb3gqIG5ld05leHQgPSBhZnRlckVuZDsKKyAgICB3aGlsZSAoaSA8PSBlbmQpIHsKKyAgICAg
ICAgLy8gRG8gdGhlIHJldmVyc2FsLgorICAgICAgICBJbmxpbmVCb3gqIG5leHQgPSBjdXJyLT5s
b2dpY05leHRPbkxpbmUoKTsKKyAgICAgICAgY3Vyci0+c2V0TG9naWNOZXh0T25MaW5lKG5ld05l
eHQpOworICAgICAgICBpZiAobmV3TmV4dCkKKyAgICAgICAgICAgIG5ld05leHQtPnNldExvZ2lj
UHJldk9uTGluZShjdXJyKTsKKyAgICAgICAgbmV3TmV4dCA9IGN1cnI7CisgICAgICAgIGN1cnIg
PSBuZXh0OworICAgICAgICBpKys7CisgICAgfQorCisgICAgLy8gTm93IGhvb2sgdXAgYmVmb3Jl
U3RhcnQgYW5kIGFmdGVyRW5kIHRvIHRoZSBzdGFydEJveCBhbmQgZW5kQm94LgorICAgIGlmIChi
ZWZvcmVTdGFydCkKKyAgICAgICAgYmVmb3JlU3RhcnQtPnNldExvZ2ljTmV4dE9uTGluZShlbmRC
b3gpOworICAgIGVsc2UKKyAgICAgICAgZmlyc3RCb3ggPSBlbmRCb3g7CisgICAgZW5kQm94LT5z
ZXRMb2dpY1ByZXZPbkxpbmUoYmVmb3JlU3RhcnQpOworCisgICAgc3RhcnRCb3gtPnNldExvZ2lj
TmV4dE9uTGluZShhZnRlckVuZCk7ICAvLyBGSVhNRSh4amkpOiBJcyB0aGlzIG5lZWRlZD8KKyAg
ICBpZiAoIWFmdGVyRW5kKQorICAgICAgICBsYXN0Qm94ID0gc3RhcnRCb3g7Cit9CisKK3N0YXRp
YyB2b2lkIHJlY29uc3RydWN0TG9naWNPcmRlcihSb290SW5saW5lQm94KiByb290Qm94LCBJbmxp
bmVCb3gqJiBmaXJzdEJveCwgSW5saW5lQm94KiYgbGFzdEJveCkKK3sKKyAgICBmaXJzdEJveCA9
IHJvb3RCb3gtPmZpcnN0TGVhZkNoaWxkKCk7CisgICAgbGFzdEJveCA9IHJvb3RCb3gtPmxhc3RM
ZWFmQ2hpbGQoKTsKKyAgICAvLyBGSVhNRSh4amkpOiBzaG91bGQgcHV0IHRoaXMgaW4gcmVuZGVy
aW5nIHNvIHRoYXQgaXQgaXMgb25seSBkb25lIG9uY2U/CisgICAgLy8gZmlyc3QgZmluZCBoaWdo
ZXN0IGFuZCBsb3dlc3QgbGV2ZWxzCisgICAgdW5zaWduZWQgY2hhciBsZXZlbExvdyA9IDEyODsK
KyAgICB1bnNpZ25lZCBjaGFyIGxldmVsSGlnaCA9IDA7CisgICAgSW5saW5lQm94KiByID0gZmly
c3RCb3g7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIElubGluZUJveCogcHJldiA9IE5V
TEw7CisgICAgLy8gSW5pdGlhbGl6ZSBsb2dpYyBvcmRlciB0aGUgc2FtZSBhcyB2aXN1YWwgb3Jk
ZXIuCisgICAgd2hpbGUgKHIpIHsKKyAgICAgICAgaWYgKHItPmJpZGlMZXZlbCgpID4gbGV2ZWxI
aWdoKQorICAgICAgICAgICAgbGV2ZWxIaWdoID0gci0+YmlkaUxldmVsKCk7CisgICAgICAgIGlm
IChyLT5iaWRpTGV2ZWwoKSA8IGxldmVsTG93KQorICAgICAgICAgICAgbGV2ZWxMb3cgPSByLT5i
aWRpTGV2ZWwoKTsKKyAgICAgICAgci0+c2V0TG9naWNQcmV2T25MaW5lKHByZXYpOworICAgICAg
ICBpZiAocHJldikKKyAgICAgICAgICAgIHByZXYtPnNldExvZ2ljTmV4dE9uTGluZShyKTsKKyAg
ICAgICAgcHJldiA9IHI7CisgICAgICAgIHIgPSByLT5uZXh0TGVhZkNoaWxkKCk7CisgICAgICAg
ICsrY291bnQ7CisgICAgfQorICAgIGlmIChwcmV2KQorICAgICAgICBwcmV2LT5zZXRMb2dpY05l
eHRPbkxpbmUoTlVMTCk7CisKKyAgICBpZiAoIXJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnZpc3VhbGx5T3JkZXJlZCgpKSB7CisgICAgICAgIC8vIFJldmVyc2Ugb2YgcmVvcmRlcmluZyBv
ZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CisgICAgICAgIC8vIEwyLiBG
cm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2Rk
IGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAgICAgLy8gcmV2ZXJzZSBhbnkgY29udGlndW91cyBz
ZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwgb3IgaGlnaGVyLgor
CisgICAgICAgIC8vIHJldmVyc2luZyBvZiBMMiBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2Vz
dCBvZGQgbGV2ZWwKKyAgICAgICAgaWYgKCEobGV2ZWxMb3cgJSAyKSkKKyAgICAgICAgICAgIGxl
dmVsTG93Kys7CisKKyAgICAgICAgd2hpbGUgKGxldmVsTG93IDw9IGxldmVsSGlnaCkgeworICAg
ICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgICAgICBJbmxpbmVCb3gqIGN1cnJCb3gg
PSBmaXJzdEJveDsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgY291bnQpIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaSA8IGNvdW50ICYmIGN1cnJCb3ggJiYgY3VyckJveC0+YmlkaUxldmVsKCkg
PCBsZXZlbExvdykgeworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJCb3ggPSBjdXJyQm94LT5sb2dpY05leHRPbkxpbmUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOworICAgICAgICAgICAgICAg
IHdoaWxlIChpIDw9IGNvdW50ICYmIGN1cnJCb3ggJiYgY3VyckJveC0+YmlkaUxldmVsKCkgPj0g
bGV2ZWxMb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAg
ICBjdXJyQm94ID0gY3VyckJveC0+bG9naWNOZXh0T25MaW5lKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGkgLSAxOworICAgICAgICAgICAgICAg
IHJldmVyc2VCb3hlcyhzdGFydCwgZW5kLCBmaXJzdEJveCwgbGFzdEJveCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICArK2xldmVsTG93OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBnZXRMb2dpY1N0YXJ0Qm94QW5kTm9kZShSb290SW5saW5lQm94KiByb290Qm94LCBJ
bmxpbmVCb3gqJiBzdGFydEJveCwgTm9kZSomIHN0YXJ0Tm9kZSkKK3sKKyAgICAvLyBSZWNvbnN0
cmN1dCBsb2dpYyBvcmRlci4KKyAgICBJbmxpbmVCb3gqIGZpcnN0Qm94ID0gTlVMTDsKKyAgICBJ
bmxpbmVCb3gqIGxhc3RCb3ggPSBOVUxMOworICAgIHJlY29uc3RydWN0TG9naWNPcmRlcihyb290
Qm94LCBmaXJzdEJveCwgbGFzdEJveCk7CisKKyAgICBzdGFydEJveCA9IGZpcnN0Qm94OworICAg
IHdoaWxlICgxKSB7CisgICAgICAgIGlmICghc3RhcnRCb3gpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgUmVuZGVyT2JqZWN0ICpzdGFydFJlbmRlcmVyID0gc3RhcnRCb3gtPnJlbmRl
cmVyKCk7CisgICAgICAgIGlmICghc3RhcnRSZW5kZXJlcikgeworICAgICAgICAgICAgc3RhcnRO
b2RlID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0UmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0Qm94ID0gc3RhcnRC
b3gtPmxvZ2ljTmV4dE9uTGluZSgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2V0TG9naWNF
bmRCb3hBbmROb2RlKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIElubGluZUJveComIGVuZEJveCwg
Tm9kZSomIGVuZE5vZGUpCit7CisgICAgLy8gUmVjb25zdHJjdXQgbG9naWMgb3JkZXIuCisgICAg
SW5saW5lQm94KiBmaXJzdEJveCA9IE5VTEw7CisgICAgSW5saW5lQm94KiBsYXN0Qm94ID0gTlVM
TDsKKyAgICByZWNvbnN0cnVjdExvZ2ljT3JkZXIocm9vdEJveCwgZmlyc3RCb3gsIGxhc3RCb3gp
OworICAgIGVuZEJveCA9IGxhc3RCb3g7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCFl
bmRCb3gpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVuZGVyT2JqZWN0ICplbmRS
ZW5kZXJlciA9IGVuZEJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFlbmRSZW5kZXJlcikg
eworICAgICAgICAgICAgZW5kTm9kZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gOworICAg
ICAgICB9CisKKyAgICAgICAgZW5kTm9kZSA9IGVuZFJlbmRlcmVyLT5ub2RlKCk7CisgICAgICAg
IGlmIChlbmROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZW5k
Qm94ID0gZW5kQm94LT5sb2dpY1ByZXZPbkxpbmUoKTsKKyAgICB9ICAgCiB9CisKK3N0YXRpYyBW
aXNpYmxlUG9zaXRpb24gbG9naWNTdGFydFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGMpCit7CisgICAgaWYgKGMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKKworICAgIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3ggPSByb290Qm94Rm9yTGlu
ZShjKTsKKyAgICBpZiAoIXJvb3RCb3gpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQ
b3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tzIHdpdGhvdXQKKyAgICAgICAgLy8gUm9vdElu
bGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tz
LgorICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBpZiAo
cC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxv
Y2soKSAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Bdm9p
ZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKGMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOworICAgIH0KKyAgICAKKyAgICAvLyBHZW5lcmF0ZWQgY29udGVudCAo
ZS5nLiBsaXN0IG1hcmtlcnMgYW5kIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXIKKyAgICAvLyBwc2V1
ZG9lbGVtZW50cykgaGF2ZSBubyBjb3JyZXNwb25kaW5nIERPTSBlbGVtZW50LCBhbmQgc28gY2Fu
bm90IGJlCisgICAgLy8gcmVwcmVzZW50ZWQgYnkgYSBWaXNpYmxlUG9zaXRpb24uICBVc2Ugd2hh
dGV2ZXIgZm9sbG93cyBpbnN0ZWFkLgorICAgIElubGluZUJveCAqbG9naWNTdGFydEJveCA9IE5V
TEw7CisgICAgTm9kZSAqbG9naWNTdGFydE5vZGUgPSBOVUxMOworICAgIGdldExvZ2ljU3RhcnRC
b3hBbmROb2RlKHJvb3RCb3gsIGxvZ2ljU3RhcnRCb3gsIGxvZ2ljU3RhcnROb2RlKTsKKworICAg
IGlmIChsb2dpY1N0YXJ0Qm94ID09IE5VTEwgfHwgbG9naWNTdGFydE5vZGUgPT0gTlVMTCkgewor
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgfQorCisgICAgaW50IHN0YXJ0
T2Zmc2V0ID0gMDsKKyAgICBpZiAobG9naWNTdGFydEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsK
KyAgICAgICAgSW5saW5lVGV4dEJveCAqc3RhcnRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5l
VGV4dEJveCAqPihsb2dpY1N0YXJ0Qm94KTsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRl
eHRCb3gtPnN0YXJ0KCk7CisgICAgfQorICAKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0g
VmlzaWJsZVBvc2l0aW9uKGxvZ2ljU3RhcnROb2RlLCBzdGFydE9mZnNldCwgRE9XTlNUUkVBTSk7
CisgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3Mp
OworfQorCitWaXNpYmxlUG9zaXRpb24gbG9naWNTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGMpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxvZ2ljU3RhcnRQb3Np
dGlvbkZvckxpbmUoYyk7CisgICAgCisgICAgaWYgKHZpc1Bvcy5pc05vdE51bGwoKSkgeworICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IG9mIGxpbmUgaXMgbm90IGdyZWF0ZXIgdGhhbiB0
aGUgZ2l2ZW4gaW5wdXQgcG9zaXRpb24uICBFbHNlIHVzZSB0aGUgcHJldmlvdXMgcG9zaXRpb24g
dG8gCisgICAgICAgIC8vIG9idGFpbiBzdGFydCBvZiBsaW5lLiAgVGhpcyBjb25kaXRpb24gaGFw
cGVucyB3aGVuIHRoZSBpbnB1dCBwb3NpdGlvbiBpcyBiZWZvcmUgdGhlIHNwYWNlIGNoYXJhY3Rl
ciBhdCB0aGUgZW5kIAorICAgICAgICAvLyBvZiBhIHNvZnQtd3JhcHBlZCBub24tZWRpdGFibGUg
bGluZS4gSW4gdGhpcyBzY2VuYXJpbywgbG9naWNTdGFydFBvc2l0aW9uRm9yTGluZSB3b3VsZCBp
bmNvcnJlY3RseSBoYW5kIGJhY2sgYSBwb3NpdGlvbgorICAgICAgICAvLyBncmVhdGVyIHRoYW4g
dGhlIGlucHV0IHBvc2l0aW9uLiAgVGhpcyBmaXggaXMgdG8gYWNjb3VudCBmb3IgdGhlIGRpc2Ny
ZXBhbmN5IGJldHdlZW4gbGluZXMgd2l0aCB3ZWJraXQtbGluZS1icmVhazphZnRlci13aGl0ZS1z
cGFjZSAKKyAgICAgICAgLy8gc3R5bGUgdmVyc3VzIGxpbmVzIHdpdGhvdXQgdGhhdCBzdHlsZSwg
d2hpY2ggd291bGQgYnJlYWsgYmVmb3JlIGEgc3BhY2UgYnkgZGVmYXVsdC4gCisgICAgICAgIFBv
c2l0aW9uIHAgPSB2aXNQb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKHAubV9vZmZz
ZXQgPiBjLmRlZXBFcXVpdmFsZW50KCkubV9vZmZzZXQgJiYgcC5ub2RlKCktPmlzU2FtZU5vZGUo
Yy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHZpc1BvcyA9IGMucHJl
dmlvdXMoKTsKKyAgICAgICAgICAgIGlmICh2aXNQb3MuaXNOdWxsKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgICAgICAgICAgdmlzUG9zID0gbG9naWNT
dGFydFBvc2l0aW9uRm9yTGluZSh2aXNQb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGMuaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHZpc1Bvcyk7Cit9CisKK3N0YXRp
YyBWaXNpYmxlUG9zaXRpb24gbG9naWNFbmRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBjKQoreworICAgIGlmIChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CisKKyAgICBSb290SW5saW5lQm94ICpyb290Qm94ID0gcm9vdEJveEZvckxp
bmUoYyk7CisgICAgaWYgKCFyb290Qm94KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBWaXNpYmxl
UG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CisgICAgICAgIC8vIFJvb3RJ
bmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVkIGJsb2Nr
cy4KKyAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYg
KHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJs
b2NrKCkgJiYgcC5tX29mZnNldCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgLy8gR2VuZXJhdGVk
IGNvbnRlbnQgKGUuZy4gbGlzdCBtYXJrZXJzIGFuZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyCisg
ICAgLy8gcHNldWRvZWxlbWVudHMpIGhhdmUgbm8gY29ycmVzcG9uZGluZyBET00gZWxlbWVudCwg
YW5kIHNvIGNhbm5vdCBiZQorICAgIC8vIHJlcHJlc2VudGVkIGJ5IGEgVmlzaWJsZVBvc2l0aW9u
LiAgVXNlIHdoYXRldmVyIHByZWNlZGVzIGluc3RlYWQuCisgICAgSW5saW5lQm94ICpsb2dpY0Vu
ZEJveCA9IE5VTEw7CisgICAgTm9kZSAqbG9naWNFbmROb2RlID0gTlVMTDsKKworICAgIGdldExv
Z2ljRW5kQm94QW5kTm9kZShyb290Qm94LCBsb2dpY0VuZEJveCwgbG9naWNFbmROb2RlKTsKKyAg
ICBpZiAobG9naWNFbmRCb3ggPT0gTlVMTCB8fCBsb2dpY0VuZE5vZGUgPT0gTlVMTCkgeworICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgfQorICAgIAorICAgIGludCBlbmRP
ZmZzZXQgPSAxOworICAgIGlmIChsb2dpY0VuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKSB7Cisg
ICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmIChsb2dpY0VuZEJveC0+aXNJbmxp
bmVUZXh0Qm94KCkpIHsKKyAgICAgICAgSW5saW5lVGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRp
Y19jYXN0PElubGluZVRleHRCb3ggKj4obG9naWNFbmRCb3gpOworICAgICAgICBlbmRPZmZzZXQg
PSBlbmRUZXh0Qm94LT5zdGFydCgpOworICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJy
ZWFrKCkpCisgICAgICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNFbmROb2RlLCBlbmRPZmZz
ZXQsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKK30KKworYm9vbCBpblNhbWVMb2dpY0xpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIpCit7Cisg
ICAgcmV0dXJuIGEuaXNOb3ROdWxsKCkgJiYgbG9naWNTdGFydE9mTGluZShhKSA9PSBsb2dpY1N0
YXJ0T2ZMaW5lKGIpOworfQorCitWaXNpYmxlUG9zaXRpb24gbG9naWNFbmRPZkxpbmUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBjKQoreworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBsb2dp
Y0VuZFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGVuZCBv
ZiBsaW5lIGlzIGF0IHRoZSBzYW1lIGxpbmUgYXMgdGhlIGdpdmVuIGlucHV0IHBvc2l0aW9uLiAg
RWxzZSB1c2UgdGhlIHByZXZpb3VzIHBvc2l0aW9uIHRvIAorICAgIC8vIG9idGFpbiBlbmQgb2Yg
bGluZS4gIFRoaXMgY29uZGl0aW9uIGhhcHBlbnMgd2hlbiB0aGUgaW5wdXQgcG9zaXRpb24gaXMg
YmVmb3JlIHRoZSBzcGFjZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCAKKyAgICAvLyBvZiBhIHNvZnQt
d3JhcHBlZCBub24tZWRpdGFibGUgbGluZS4gSW4gdGhpcyBzY2VuYXJpbywgbG9naWNFbmRQb3Np
dGlvbkZvckxpbmUgd291bGQgaW5jb3JyZWN0bHkgaGFuZCBiYWNrIGEgcG9zaXRpb24KKyAgICAv
LyBpbiB0aGUgbmV4dCBsaW5lIGluc3RlYWQuIFRoaXMgZml4IGlzIHRvIGFjY291bnQgZm9yIHRo
ZSBkaXNjcmVwYW5jeSBiZXR3ZWVuIGxpbmVzIHdpdGggd2Via2l0LWxpbmUtYnJlYWs6YWZ0ZXIt
d2hpdGUtc3BhY2Ugc3R5bGUKKyAgICAvLyB2ZXJzdXMgbGluZXMgd2l0aG91dCB0aGF0IHN0eWxl
LCB3aGljaCB3b3VsZCBicmVhayBiZWZvcmUgYSBzcGFjZSBieSBkZWZhdWx0LiAKKyAgICBpZiAo
IWluU2FtZUxvZ2ljTGluZShjLCB2aXNQb3MpKSB7CisgICAgICAgIHZpc1BvcyA9IGMucHJldmlv
dXMoKTsKKyAgICAgICAgaWYgKHZpc1Bvcy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgdmlzUG9zID0gbG9naWNFbmRQb3NpdGlvbkZvckxp
bmUodmlzUG9zKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGMuaG9ub3JFZGl0YWJsZUJvdW5k
YXJ5QXRPckJlZm9yZSh2aXNQb3MpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuaAkocmV2aXNpb24gNDIyNTUpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dFNl
bnRlbmNlUG9zaXRpb24oY29uCiAvLyBsaW5lcwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljU3RhcnRPZkxpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljRW5kT2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBvc2l0aW9u
IG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIGJvb2wg
aW5TYW1lTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpOworYm9vbCBpblNhbWVMb2dpY0xpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmKTsKIGJvb2wgaXNTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24gJik7CiBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDQyMjU1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGlj
OgogICAgICAgICAsIG1fd2lkdGgoMCkKICAgICAgICAgLCBtX25leHQoMCkKICAgICAgICAgLCBt
X3ByZXYoMCkKKyAgICAgICAgLCBtX2xvZ2ljTmV4dCgwKQorICAgICAgICAsIG1fbG9naWNQcmV2
KDApCiAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX2ZpcnN0TGluZShmYWxzZSkK
ICAgICAgICAgLCBtX2NvbnN0cnVjdGVkKGZhbHNlKQpAQCAtNzIsNiArNzQsOCBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAgICAgLCBtX25leHQobmV4dCkKICAgICAg
ICAgLCBtX3ByZXYocHJldikKKyAgICAgICAgLCBtX2xvZ2ljTmV4dCgwKQorICAgICAgICAsIG1f
bG9naWNQcmV2KDApCiAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICAsIG1fZmly
c3RMaW5lKGZpcnN0TGluZSkKICAgICAgICAgLCBtX2NvbnN0cnVjdGVkKGNvbnN0cnVjdGVkKQpA
QCAtMTQ5LDYgKzE1Myw4IEBAIHB1YmxpYzoKIAogICAgIElubGluZUJveCogbmV4dE9uTGluZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogICAgIElubGluZUJveCogcHJldk9uTGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJldjsgfQorICAgIElubGluZUJveCogbG9naWNOZXh0T25MaW5lKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY05leHQ7IH0KKyAgICBJbmxpbmVCb3gqIGxvZ2ljUHJldk9u
TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNQcmV2OyB9CiAgICAgdm9pZCBzZXROZXh0T25M
aW5lKElubGluZUJveCogbmV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BhcmVudCB8fCAh
bmV4dCk7CkBAIC0xNTksNiArMTY1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fcGFy
ZW50IHx8ICFwcmV2KTsKICAgICAgICAgbV9wcmV2ID0gcHJldjsKICAgICB9CisgICAgdm9pZCBz
ZXRMb2dpY05leHRPbkxpbmUoSW5saW5lQm94KiBuZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcGFyZW50IHx8ICFuZXh0KTsKKyAgICAgICAgbV9sb2dpY05leHQgPSBuZXh0OworICAgIH0K
KyAgICB2b2lkIHNldExvZ2ljUHJldk9uTGluZShJbmxpbmVCb3gqIHByZXYpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9wYXJlbnQgfHwgIXByZXYpOworICAgICAgICBtX2xvZ2ljUHJldiA9IHBy
ZXY7CisgICAgfQogICAgIGJvb2wgbmV4dE9uTGluZUV4aXN0cygpIGNvbnN0OwogICAgIGJvb2wg
cHJldk9uTGluZUV4aXN0cygpIGNvbnN0OwogCkBAIC0yNDEsNiArMjU3LDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBJbmxpbmVCb3gqIG1fbmV4dDsgLy8gVGhlIG5leHQgZWxlbWVudCBvbiB0
aGUgc2FtZSBsaW5lIGFzIHVzLgogICAgIElubGluZUJveCogbV9wcmV2OyAvLyBUaGUgcHJldmlv
dXMgZWxlbWVudCBvbiB0aGUgc2FtZSBsaW5lIGFzIHVzLgorICAgIElubGluZUJveCogbV9sb2dp
Y05leHQ7IC8vIFRoZSBsb2dpY2FsbHkgbmV4dCBsZWFmIGVsZW1lbnQgb24gdGhlIHNhbWUgbGlu
ZSBhcyB1cy4KKyAgICBJbmxpbmVCb3gqIG1fbG9naWNQcmV2OyAvLyBUaGUgbG9naWNhbGx5IHBy
ZXZpb3VzIGxlYWYgZWxlbWVudCBvbiB0aGUgc2FtZSBsaW5lIGFzIHVzLgogCiAgICAgSW5saW5l
Rmxvd0JveCogbV9wYXJlbnQ7IC8vIFRoZSBib3ggdGhhdCBjb250YWlucyB1cy4KICAgICAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQyNDA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDQtMDYgIFhpYW9tZWkgSmkgIDx4amlAY2hy
b21pbXUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAg
ICAgICAgUlRMOiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhl
ZCBiaWRpIHRleHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlv
bi9ob21lLWVuZC5odG1sOiBBZGRlZC4KKwogMjAwOS0wNC0xMCAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIC0gc2tpcCBmYWlsdXJlcyBmb2xsb3dpbmcgcjQyMzc5
IHVudGlsIHRoZXkgYXJlIGFkZHJlc3NlZCBieSBjb2RlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MSBAQAorVGVzdCAxLCBMVFI6CisgIE1vdmluZyBm
b3J3YXJkOiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDIwXQorICBNb3ZpbmcgYmFja3dh
cmQ6ICAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzIwLCAxXQorICBNb3ZpbmcgUmlnaHQ6ICAi
XG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDIwXQorICBNb3ZpbmcgTGVmdDogICJcbmFiYyBB
QkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDEsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJk
OiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWzEsIDFdCisgIE1vdmluZyBmb3J3YXJkOiAgIlxu
YWJjIEFCQyB4eXogREVGIGRlZlxuIlsxLCAxXQorICBNb3ZpbmcgUmlnaHQ6ICAiXG5hYmMgQUJD
IHh5eiBERUYgZGVmXG4iWzEsIDIwXQorICBNb3ZpbmcgTGVmdDogICJcbmFiYyBBQkMgeHl6IERF
RiBkZWZcbiJbMjAsIDFdCitUZXN0IDIsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4
eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXog
REVGIGRlZiBHSElcbiJbMjAsIDFdCisgIE1vdmluZyBSaWdodDogICJcbkFCQyB4eXogREVGIGRl
ZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBMZWZ0OiAgIlxuQUJDIHh5eiBERUYgZGVmIEdISVxu
IlsyMCwgMV0KK1Rlc3QgMiwgUlRMOgorICBNb3ZpbmcgYmFja3dhcmQ6ICJcbkFCQyB4eXogREVG
IGRlZiBHSElcbiJbMSwgMV0KKyAgTW92aW5nIGZvcndhcmQ6ICAiXG5BQkMgeHl6IERFRiBkZWYg
R0hJXG4iWzEsIDFdCisgIE1vdmluZyBSaWdodDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJb
MSwgMjBdCisgIE1vdmluZyBMZWZ0OiAgIlxuQUJDIHh5eiBERUYgZGVmIEdISVxuIlsyMCwgMV0K
K1Rlc3QgMywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbMSwgMTJd
CisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorICBNb3Zpbmcg
UmlnaHQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsxLCAxMl0KKyAgTW92aW5nIExlZnQ6ICAiXG5BQkMg
REVGIEFCQ1xuIlsxMiwgMV0KK1Rlc3QgMywgUlRMOgorICBNb3ZpbmcgYmFja3dhcmQ6ICJcbkFC
QyBERUYgQUJDXG4iWzEsIDFdCisgIE1vdmluZyBmb3J3YXJkOiAgIlxuQUJDIERFRiBBQkNcbiJb
MSwgMTJdCisgIE1vdmluZyBSaWdodDogICJcbkFCQyBERUYgQUJDXG4iWzEsIDEyXQorICBNb3Zp
bmcgTGVmdDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorVGVzdCA0LCBMVFI6CisgIE1vdmlu
ZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6
ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorICBNb3ZpbmcgUmlnaHQ6ICAiXG5hYmMgZWZk
IGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgTGVmdDogICJcbmFiYyBlZmQgZGFiZWJcbiJbMTQs
IDFdCitUZXN0IDQsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4i
WzEsIDFdCisgIE1vdmluZyBmb3J3YXJkOiAgIlxuYWJjIGVmZCBkYWJlYlxuIlsxLCAxNF0KKyAg
TW92aW5nIFJpZ2h0OiAgIlxuYWJjIGVmZCBkYWJlYlxuIlsxLCAxNF0KKyAgTW92aW5nIExlZnQ6
ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA1LCBMVFI6CisgIE1vdmluZyBmb3J3
YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQi
WzVdLCAiTG9yZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgIiBhbWV0Ils1
XQorICBNb3ZpbmcgTGVmdDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCitUZXN0IDUsIFJUTDoK
KyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBNb3ZpbmcgZm9yd2FyZDogICJM
b3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFt
ZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgNiwg
TFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisg
IE1vdmluZyBiYWNrd2FyZDogICJpcHN1bSBkb2xvciJbMTFdLCAiTG9yZW0gIlswXQorICBNb3Zp
bmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgImlwc3VtIGRvbG9yIlsxMV0KKyAgTW92aW5nIExlZnQ6
ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgNiwgUlRMOgorICBNb3Zpbmcg
YmFja3dhcmQ6ICJMb3JlbSAiWzAsIDBdCisgIE1vdmluZyBmb3J3YXJkOiAgIkxvcmVtICJbMF0s
ICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiaXBzdW0g
ZG9sb3IiWzExXQorICBNb3ZpbmcgTGVmdDogICJpcHN1bSBkb2xvciJbMTFdLCAiTG9yZW0gIlsw
XQorVGVzdCA3LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorICBNb3Zpbmcg
UmlnaHQ6ICAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgTGVmdDogICIgYW1ldCJb
NV0sICJMb3JlbSAiWzBdCitUZXN0IDcsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0g
IlswXSwgIiBhbWV0IlsxXQorICBNb3ZpbmcgZm9yd2FyZDogICIgYW1ldCJbMV0sICJMb3JlbSAi
WzVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBM
ZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOCwgTFRSOgorICBNb3ZpbmcgZm9y
d2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0K
KyAgTW92aW5nIFJpZ2h0OiAgIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIExlZnQ6ICAiTG9yZW0g
Ils1LCAwXQorVGVzdCA4LCBSVEw6CisgIE1vdmluZyBiYWNrd2FyZDogIkxvcmVtICJbMCwgMF0K
KyAgTW92aW5nIGZvcndhcmQ6ICAiTG9yZW0gIlswLCA1XQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9y
ZW0gIlswLCA1XQorICBNb3ZpbmcgTGVmdDogICJMb3JlbSAiWzUsIDBdCitUZXN0IDksIExUUjoK
KyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNr
d2FyZDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAi
WzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0K
K1Rlc3QgOSwgUlRMOgorICBNb3ZpbmcgYmFja3dhcmQ6ICJMb3JlbSAiWzAsIDBdCisgIE1vdmlu
ZyBmb3J3YXJkOiAgIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIFJpZ2h0OiAgIkxv
cmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIExlZnQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0g
IlswXQorVGVzdCAxMCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICJpcHN1
bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJpcHN1bSBkb2xvciJbMTFdLCAiTG9y
ZW0gIlswXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9yZW0gIlswXSwgImlwc3VtIGRvbG9yIlsxMV0K
KyAgTW92aW5nIExlZnQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTAs
IFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBNb3ZpbmcgZm9yd2Fy
ZDogICJMb3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgUmlnaHQ6ICAiTG9y
ZW0gIlswXSwgImlwc3VtIGRvbG9yIlsxMV0KKyAgTW92aW5nIExlZnQ6ICAiaXBzdW0gZG9sb3Ii
WzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3Jl
bSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJbNV0sICJMb3Jl
bSAiWzBdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmlu
ZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIFJUTDoKKyAgTW92aW5n
IGJhY2t3YXJkOiAiTG9yZW0gIlswLCAwXQorICBNb3ZpbmcgZm9yd2FyZDogICJMb3JlbSAiWzBd
LCAiIGFtZXQiWzVdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisg
IE1vdmluZyBMZWZ0OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgMTIsIExUUjoKKyAg
TW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBiYWNrd2FyZDogICJMb3Jl
bSAiWzUsIDBdCisgIE1vdmluZyBSaWdodDogICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBMZWZ0
OiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgMTIsIFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiTG9y
ZW0gIlswLCAwXQorICBNb3ZpbmcgZm9yd2FyZDogICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBS
aWdodDogICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBMZWZ0OiAgIkxvcmVtICJbNSwgMF0KK1Rl
c3QgMTMsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbglKdXN0XG4JIlsyXSwgInRlc3Rpbmcg
WVgiWzEwXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAidGVzdGluZyBZWCJbMTBdLCAiXG4JSnVzdFxu
CSJbMl0KKyAgTW92aW5nIFJpZ2h0OiAgIlxuCUp1c3RcbgkiWzJdLCAiXG4JQkZEWFxuIls2XQor
ICBNb3ZpbmcgTGVmdDogICJcbglCRkRYXG4iWzZdLCAiXG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTMs
IFJUTDoKKyAgTW92aW5nIGJhY2t3YXJkOiAiXG4JSnVzdFxuCSJbMl0sICJcbglCRkRYXG4iWzFd
CisgIE1vdmluZyBmb3J3YXJkOiAgIlxuCUJGRFhcbiJbMV0sICJ0ZXN0aW5nIFlYIls3XQorICBN
b3ZpbmcgUmlnaHQ6ICAiXG4JSnVzdFxuCSJbMl0sICJcbglCRkRYXG4iWzZdCisgIE1vdmluZyBM
ZWZ0OiAgIlxuCUJGRFhcbiJbNl0sICJcbglKdXN0XG4JIlsyXQorVGVzdCAxNCwgTFRSOgorICBN
b3ZpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWzJdLCAiXG4JZXZlclxuIls2XQorICBNb3Zpbmcg
YmFja3dhcmQ6ICAiXG4JZXZlclxuIls2XSwgIlxuCUp1c3RcbgkiWzJdCisgIE1vdmluZyBSaWdo
dDogICJcbglKdXN0XG4JIlsyXSwgIlxuCWV2ZXJcbiJbNl0KKyAgTW92aW5nIExlZnQ6ICAiXG4J
ZXZlclxuIls2XSwgIlxuCUp1c3RcbgkiWzJdCitUZXN0IDE0LCBSVEw6CisgIE1vdmluZyBiYWNr
d2FyZDogIlxuCUp1c3RcbgkiWzIsIDJdCisgIE1vdmluZyBmb3J3YXJkOiAgIlxuCUp1c3Rcbgki
WzJdLCAiXG4JZXZlclxuIls2XQorICBNb3ZpbmcgUmlnaHQ6ICAiXG4JSnVzdFxuCSJbMl0sICJc
bglldmVyXG4iWzZdCisgIE1vdmluZyBMZWZ0OiAgIlxuCWV2ZXJcbiJbNl0sICJcbglKdXN0XG4J
IlsyXQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVu
ZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAorPGhlYWQ+CisgICAgPG1ldGEg
aHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRm
LTgiPgorICAgIDxzdHlsZT4KKyAgICAgICAgZGl2LnRlc3QgeworICAgICAgICAgICAgLXdlYmtp
dC11c2VyLW1vZGlmeTogcmVhZC13cml0ZTsKKyAgICAgICAgICAgIHBhZGRpbmc6IDRweDsKKyAg
ICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgICAgICAgICBtYXJn
aW46IDRweCA0cHggNHB4IDI0cHg7CisgICAgICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAg
ICAgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGU7CisgICAgICAgICAgICBjb3VudGVyLWlu
Y3JlbWVudDogdGVzdC1udW1iZXI7CisgICAgICAgIH0KKyAgICAgICAgZGl2LnRlc3Q6YmVmb3Jl
IHsgY29udGVudDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVm
dDogOHB4OyBmb250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBw
eDsgfQorICAgICAgICBkaXYudGVzdCBzcGFuIHsgYmFja2dyb3VuZC1jb2xvcjogI2RlZjsgfQor
ICAgICAgICBkaXYudGVzdCBpbWcgeyB3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTsgYmFja2dyb3Vu
ZC1jb2xvcjogbGlnaHRncmVlbjsgfQorICAgICAgICBkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNr
Z3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7IH0KKyAgICAgICAgZGl2LnRlc3QgZGl2IHsgYm9yZGVy
OiAxcHggZGFzaGVkIHBpbms7IHBhZGRpbmc6IDNweDsgaGVpZ2h0OiAyZW07IH0KKyAgICA8L3N0
eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgICAg
ICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgZGlyZWN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gW107CisvLyAgICAgICAg
ICAgIHBvc2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmFu
Y2hvck9mZnNldH0pOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5j
aG9yTm9kZSwgb2Zmc2V0OiBzZWwuZm9jdXNPZmZzZXR9KTsKKyAgICAgICAgICAgIHNlbC5tb2Rp
ZnkoIm1vdmUiLCBkaXJlY3Rpb24sICJsaW5lQm91bmRhcnkiKTsKKyAvLyAgICAgICAgICAgcG9z
aXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zm
c2V0fSk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2Rl
LCBvZmZzZXQ6IHNlbC5mb2N1c09mZnNldH0pOworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
czsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZvbGQoc3RyaW5nKQorICAgICAgICB7
CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBjaGFyID0g
c3RyaW5nLmNoYXJDb2RlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXIgPj0gMHgwNWQw
KQorICAgICAgICAgICAgICAgICAgICBjaGFyIC09IDB4MDU4ZjsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChjaGFyID09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXFxu
IjsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5ub2Rl
ICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygi
XSIpOworICAgICAgICAgICAgICAgICAgICBsb2coIiwgIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghaSB8fCBwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNb
aSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAgIGxvZygocG9zaXRpb25zW2ldLm5vZGUg
aW5zdGFuY2VvZiBUZXh0ID8gJyInICsgZm9sZChwb3NpdGlvbnNbaV0ubm9kZS5kYXRhKSArICci
JyA6ICI8IiArIHBvc2l0aW9uc1tpXS5ub2RlLnRhZ05hbWUgKyAiPiIpICsgIlsiKTsKKyAgICAg
ICAgICAgICAgICBsb2cocG9zaXRpb25zW2ldLm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsb2coIl0iKTsKKyAgICAgICAgfQorCisgICAgICAgIG9ubG9hZCA9IGZ1bmN0aW9u
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInRlc3QiKTsKKyAgICAgICAgICAgIHZhciBzZWwgPSBn
ZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zTW92aW5nUmlnaHQ7Cisg
ICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ0xlZnQ7CisgICAgCisgICAgICAgICAg
ICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgTFRSOlxuICBNb3ZpbmcgZm9yd2FyZDog
Iik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdSaWdodCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0
aW9uKHNlbCwgImZvcndhcmQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRp
b25zTW92aW5nUmlnaHQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAg
ICAgICAgIGxvZygiICBNb3ZpbmcgYmFja3dhcmQ6ICAiKTsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiYmFja3dh
cmQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25zTW92aW5nTGVmdCk7
CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAgICAgbG9nKCIgIE1v
dmluZyBSaWdodDogICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tp
XSwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNN
b3ZpbmdJbkRpcmVjdGlvbihzZWwsICJyaWdodCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0
aW9ucyhwb3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOwor
CisgICAgICAgICAgICAgICAgbG9nKCIgIE1vdmluZyBMZWZ0OiAgIik7CisgICAgICAgICAgICAg
ICAgcG9zaXRpb25zTW92aW5nTGVmdCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwg
ImxlZnQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25zTW92aW5nTGVm
dCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisKKyAgICAgICAgICAgICAgICB0ZXN0
c1tpXS5zdHlsZS5kaXJlY3Rpb24gPSAicnRsIjsKKworICAgICAgICAgICAgICAgIGxvZygiVGVz
dCAiICsgKGkgKyAxKSArICIsIFJUTDpcbiAgTW92aW5nIGJhY2t3YXJkOiAiKTsKKyAgICAgICAg
ICAgICAgICBzZWwuc2V0UG9zaXRpb24odGVzdHNbaV0sIDApOworICAgICAgICAgICAgICAgIHBv
c2l0aW9uc01vdmluZ0xlZnQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJiYWNr
d2FyZCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0
KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAg
TW92aW5nIGZvcndhcmQ6ICAiKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdSaWdo
dCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImZvcndhcmQiKTsKKyAgICAgICAg
ICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25zTW92aW5nUmlnaHQpOworICAgICAgICAgICAg
ICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAgIGxvZygiICBNb3ZpbmcgUmlnaHQ6ICAi
KTsKKyAgICAgICAgICAgICAgICBzZWwuc2V0UG9zaXRpb24odGVzdHNbaV0sIDApOworICAgICAg
ICAgICAgICAgIHBvc2l0aW9uc01vdmluZ1JpZ2h0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rp
b24oc2VsLCAicmlnaHQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25z
TW92aW5nUmlnaHQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAg
ICAgIGxvZygiICBNb3ZpbmcgTGVmdDogICIpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uc01v
dmluZ0xlZnQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJsZWZ0Iik7CisgICAg
ICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xlZnQpOworICAgICAgICAg
ICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpc3Bs
YXkgPSAibm9uZSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIDwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+CisKKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KK2Fi
YyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsgeHl6ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyBkZWYKKzwv
ZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorJiMxNDg4OyYjMTQ4OTsm
IzE0OTA7IHh5eiAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgZGVmICYjMTQ5NDsmIzE0OTU7JiMxNDk2
OworPC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+CismIzE0ODg7JiMx
NDg5OyYjMTQ5MDsgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOwor
PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+CithYmMgZWZkIGRhYmVi
Cis8L2Rpdj4KKworPGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3Bh
biAgc3R5bGU9ImRpcmVjdGlvbjogcnRsIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rp
dj4KKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxl
PSJkaXJlY3Rpb246IHJ0bCI+aXBzdW0gZG9sb3I8ZGl2ID4ganVzdCBhIHRlc3Q8L2Rpdj4gc2l0
PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9y
ZW0gPHNwYW4gIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxk
aXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8ZGl2ICBkaXI9InJ0bCI+aXBz
dW0gZG9sb3Igc2l0PC9kaXY+IGFtZXQ8L2Rpdj4KKworPGRpdiBjb250ZW50ZWRpdGFibGUgIGNs
YXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogbHRyIj5pcHN1bSBkb2xv
ciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVz
dCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+aXBzdW0gZG9sb3I8ZGl2ID4g
anVzdCBhIHRlc3Q8L2Rpdj4gc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIGRpcj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8
L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3Jl
bSA8ZGl2ICBkaXI9Imx0ciI+aXBzdW0gZG9sb3Igc2l0PC9kaXY+IGFtZXQ8L2Rpdj4KKworPGRp
diBjbGFzcz0idGVzdCIgc3R5bGU9ImRpcmVjdGlvbjogbHRyOyIgY29udGVudGVkaXRhYmxlPgor
CUp1c3QKKwk8c3Bhbj50ZXN0aW5nINeo16c8L3NwYW4+CisJ15HXldeT16cKKzwvZGl2PgorCis8
ZGl2IGNsYXNzPSJ0ZXN0IiBzdHlsZT0iZGlyZWN0aW9uOiBsdHI7IiBjb250ZW50ZWRpdGFibGU+
CisJSnVzdAorCTxzcGFuPnRlc3Rpbmcgd2hhdDwvc3Bhbj4KKwlldmVyCis8L2Rpdj4KKzxwcmUg
aWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="14623"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29748</attachid>
            <date>2009-04-24 10:43:06 -0700</date>
            <delta_ts>2009-04-29 13:03:55 -0700</delta_ts>
            <desc>patch w/ Layout test (version 5)</desc>
            <filename>home_end.0424</filename>
            <type>text/plain</type>
            <size>25710</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjgyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDQtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRM
OiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRl
eHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQpOiBBZGRlZCBhIEZJWE1FIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKTogQ2hhbmdlIGNhbGxpbmcgZW5kT2ZM
aW5lKCkKKyAgICAgICAgdG8gbG9naWNhbEVuZE9mTGluZSgpIHdoZW4gZ3JhbnVsYXJpdHkgaXMg
TGluZUJvdW5kYXJ5CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2Rp
ZnlFeHRlbmRpbmdCYWNrd2FyZCk6IEFkZGVkIGEgRklYTUUgY29tbWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0JhY2t3YXJkKTogQ2hhbmdl
IGNhbGxpbmcgc3RhcnRPZkxpbmUoKSAKKyAgICAgICAgdG8gbG9naWNhbFN0YXJ0T2ZMaW5lKCkg
d2hlbiBncmFudWxhcml0eSBpcyBMaW5lQm91bmRhcnkuCisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldExlYWZCb3hlc0luTG9naWNhbE9y
ZGVyKTogQWRkZWQuIFJlY29uc3RydWN0IGxlYWYgYm94ZXMgaW4gbG9naWNhbCBvcmRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OmdldExvZ2ljYWxTdGFydEJveEFuZE5vZGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmdldExvZ2ljYWxFbmRCb3hBbmROb2RlKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpsb2dpY2FsU3RhcnRQb3NpdGlvbkZvckxpbmUpOiBBZGRlZC4gU2ltaWxhciB0byBz
dGFydFBvc2l0aW9uRm9yTGluZS4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFydE9mTGlu
ZSk6IEFkZGVkLiBTaW1pbGFyIHRvIHN0YXJ0T2ZMaW5lLgorICAgICAgICAoV2ViQ29yZTo6bG9n
aWNhbEVuZFBvc2l0aW9uRm9yTGluZSk6IEFkZGVkLiBTaW1pbGFyIHRvIGVuZFBvc2l0aW9uRm9y
TGluZS4KKyAgICAgICAgKFdlYkNvcmU6OmluU2FtZUxvZ2ljYWxMaW5lKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kT2ZMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gZW5kT2ZM
aW5lLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5oOgorCiAyMDA5LTA0LTI0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IFJvYmVuLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2
aXNpb24gNDI4MDcpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKFZpc2li
bGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBjaGFuZ2UgdG8gbG9naWNhbEVuZE9mTGluZSBmb3IgZXh0ZW5kaW5nIHNlbGVjdGlv
bi4KICAgICAgICAgICAgIHBvcyA9IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5k
KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFBhcmFncmFwaEJvdW5kYXJ5OgpAQCAtMzk1LDcgKzM5Niw3IEBAIFZpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgICAgIHBvcyA9IGVuZE9mU2VudGVuY2Uo
VmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgICAgICBwb3Mg
PSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgp
KSk7CisgICAgICAgICAgICBwb3MgPSBsb2dpY2FsRW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbiht
X3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgICAgICBwb3MgPSBlbmRPZlBhcmFn
cmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsKQEAg
LTQ3NCw2ICs0NzUsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9k
CiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
LnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIExpbmVCb3VuZGFyeToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgY2hhbmdl
IHRvIGxvZ2ljYWxTdGFydE9mTGluZSBmb3IgZXh0ZW5kaW5nIHNlbGVjdGlvbi4KICAgICAgICAg
ICAgIHBvcyA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3Nl
bC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQYXJhZ3Jh
cGhCb3VuZGFyeToKQEAgLTU0MSw3ICs1NDMsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKLSAgICAgICAgICAgIHBvcyA9IHN0
YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgp
KSk7CisgICAgICAgICAgICBwb3MgPSBsb2dpY2FsU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9u
KG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgogICAgICAgICAgICAgcG9zID0gc3RhcnRP
ZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHko
KSkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNDI4MDcpCisr
KyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NTUsNCArMTA1NSwxOTUgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mRWRpdGFibGVDb250ZW50KGNv
bgogICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3Qp
OwogfQogCitzdGF0aWMgdm9pZCBnZXRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihSb290SW5saW5l
Qm94KiByb290Qm94LCBWZWN0b3I8SW5saW5lQm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVy
KSB7CisgICAgdW5zaWduZWQgY2hhciBtaW5MZXZlbCA9IDEyODsKKyAgICB1bnNpZ25lZCBjaGFy
IG1heExldmVsID0gMDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgSW5saW5lQm94KiBy
ID0gcm9vdEJveC0+Zmlyc3RMZWFmQ2hpbGQoKTsKKyAgICAvLyBGaXJzdCBmaW5kIGhpZ2hlc3Qg
YW5kIGxvd2VzdCBsZXZlbHMsCisgICAgLy8gYW5kIGluaXRpYWxpemUgbGVhZkJveGVzSW5Mb2dp
Y2FsT3JkZXIgd2l0aCB0aGUgbGVhZiBib3hlcyBpbiB2aXN1YWwgb3JkZXIuCisgICAgd2hpbGUg
KHIpIHsKKyAgICAgICAgaWYgKHItPmJpZGlMZXZlbCgpID4gbWF4TGV2ZWwpCisgICAgICAgICAg
ICBtYXhMZXZlbCA9IHItPmJpZGlMZXZlbCgpOworICAgICAgICBpZiAoci0+YmlkaUxldmVsKCkg
PCBtaW5MZXZlbCkKKyAgICAgICAgICAgIG1pbkxldmVsID0gci0+YmlkaUxldmVsKCk7CisgICAg
ICAgIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLmFwcGVuZChyKTsKKyAgICAgICAgciA9IHItPm5l
eHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICBpZiAoIXJvb3RC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc3VhbGx5T3JkZXJlZCgpKSB7CisgICAgICAgIC8v
IFJldmVyc2Ugb2YgcmVvcmRlcmluZyBvZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkg
c3BlYyk6CisgICAgICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRo
ZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAgICAgLy8g
cmV2ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0
IHRoYXQgbGV2ZWwgb3IgaGlnaGVyLgorCisgICAgICAgIC8vIHJldmVyc2luZyBvZiBMMiBpcyBv
bmx5IGRvbmUgdXAgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwKKyAgICAgICAgaWYgKCEobWluTGV2
ZWwgJSAyKSkKKyAgICAgICAgICAgIG1pbkxldmVsKys7CisKKyAgICAgICAgd2hpbGUgKG1pbkxl
dmVsIDw9IG1heExldmVsKSB7CisgICAgICAgICAgICBWZWN0b3I8SW5saW5lQm94Kj46Oml0ZXJh
dG9yIGl0ZXIgPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5iZWdpbigpOworICAgICAgICAgICAg
VmVjdG9yPElubGluZUJveCo+OjppdGVyYXRvciBlbmQgPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
ci5lbmQoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAgICAgICAg
ICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCppdGVy
KS0+YmlkaUxldmVsKCkgPj0gbWluTGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBWZWN0b3I8SW5saW5lQm94Kj46Oml0ZXJhdG9yIGZpcnN0ID0gaXRlcjsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCgqaXRlciktPmJpZGlMZXZlbCgpIDwgbWluTGV2ZWwpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8SW5saW5lQm94Kj46Oml0ZXJhdG9yIGxhc3QgPSBp
dGVyOworICAgICAgICAgICAgICAgIHN0ZDo6cmV2ZXJzZShmaXJzdCwgbGFzdCk7CisgICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgKyttaW5MZXZlbDsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2V0TG9naWNhbFN0YXJ0Qm94QW5kTm9kZShSb290
SW5saW5lQm94KiByb290Qm94LCBJbmxpbmVCb3gqJiBzdGFydEJveCwgTm9kZSomIHN0YXJ0Tm9k
ZSkKK3sKKyAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI7Cisg
ICAgZ2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIocm9vdEJveCwgbGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIpOworICAgIHN0YXJ0Qm94ID0gMDsKKyAgICBzdGFydE5vZGUgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgc3RhcnRCb3ggPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcltpXTsKKyAgICAgICAg
c3RhcnROb2RlID0gc3RhcnRCb3gtPnJlbmRlcmVyKCktPm5vZGUoKTsKKyAgICAgICAgaWYgKHN0
YXJ0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybjsgCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBn
ZXRMb2dpY2FsRW5kQm94QW5kTm9kZShSb290SW5saW5lQm94KiByb290Qm94LCBJbmxpbmVCb3gq
JiBlbmRCb3gsIE5vZGUqJiBlbmROb2RlKQoreworICAgIFZlY3RvcjxJbmxpbmVCb3gqPiBsZWFm
Qm94ZXNJbkxvZ2ljYWxPcmRlcjsKKyAgICBnZXRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihyb290
Qm94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7CisgICAgZW5kQm94ID0gMDsKKyAgICBlbmRO
b2RlID0gMDsKKyAgICBzaXplX3QgbGVuID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuc2l6ZSgp
OworICAgIGlmICghbGVuKQorICAgICAgICByZXR1cm47CisgICAgLy8gR2VuZXJhdGVkIGNvbnRl
bnQgKGUuZy4gbGlzdCBtYXJrZXJzIGFuZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyCisgICAgLy8g
cHNldWRvZWxlbWVudHMpIGhhdmUgbm8gY29ycmVzcG9uZGluZyBET00gZWxlbWVudCwgYW5kIHNv
IGNhbm5vdCBiZQorICAgIC8vIHJlcHJlc2VudGVkIGJ5IGEgVmlzaWJsZVBvc2l0aW9uLiAgVXNl
IHdoYXRldmVyIHByZWNlZGVzIGluc3RlYWQuCisgICAgc2l6ZV90IGluZGV4ID0gbGVuIC0gMTsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbmRCb3ggPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
cltpbmRleF07CisgICAgICAgIGVuZE5vZGUgPSBlbmRCb3gtPnJlbmRlcmVyKCktPm5vZGUoKTsK
KyAgICAgICAgaWYgKGVuZE5vZGUgfHwgIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAtLWluZGV4OworICAgIH0KK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2Fs
U3RhcnRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQoreworICAgIGlm
IChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBS
b290SW5saW5lQm94KiByb290Qm94ID0gcm9vdEJveEZvckxpbmUoYyk7CisgICAgaWYgKCFyb290
Qm94KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAw
IGluIGJsb2NrcyB3aXRob3V0CisgICAgICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0
eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVkIGJsb2Nrcy4KKyAgICAgICAgUG9zaXRpb24g
cCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigp
ICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgcC5tX29mZnNldCA9
PSAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5U
YWJsZShjKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAg
ICB9CisgICAgCisgICAgSW5saW5lQm94KiBsb2dpY2FsU3RhcnRCb3g7CisgICAgTm9kZSogbG9n
aWNhbFN0YXJ0Tm9kZTsKKyAgICBnZXRMb2dpY2FsU3RhcnRCb3hBbmROb2RlKHJvb3RCb3gsIGxv
Z2ljYWxTdGFydEJveCwgbG9naWNhbFN0YXJ0Tm9kZSk7CisKKyAgICBpZiAoIWxvZ2ljYWxTdGFy
dE5vZGUpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKworICAgIGludCBzdGFy
dE9mZnNldCA9IGxvZ2ljYWxTdGFydEJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAgCisgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc1BvcyA9IFZpc2libGVQb3NpdGlvbihsb2dpY2FsU3RhcnROb2RlLCBz
dGFydE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJz
dFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOworfQorCitWaXNpYmxlUG9zaXRpb24gbG9naWNhbFN0
YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBWaXNpYmxlUG9zaXRp
b24gdmlzUG9zID0gbG9naWNhbFN0YXJ0UG9zaXRpb25Gb3JMaW5lKGMpOworICAgIAorICAgIGlm
ICh2aXNQb3MuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBjLmhvbm9yRWRpdGFibGVCb3VuZGFy
eUF0T3JBZnRlcih2aXNQb3MpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBvZiBsaW5l
IGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIGlucHV0IHBvc2l0aW9uLiAgRWxzZSB1c2Ug
dGhlIHByZXZpb3VzIHBvc2l0aW9uIHRvIAorICAgIC8vIG9idGFpbiBzdGFydCBvZiBsaW5lLiAg
VGhpcyBjb25kaXRpb24gaGFwcGVucyB3aGVuIHRoZSBpbnB1dCBwb3NpdGlvbiBpcyBiZWZvcmUg
dGhlIHNwYWNlIGNoYXJhY3RlciBhdCB0aGUgZW5kIAorICAgIC8vIG9mIGEgc29mdC13cmFwcGVk
IG5vbi1lZGl0YWJsZSBsaW5lLiBJbiB0aGlzIHNjZW5hcmlvLCBsb2dpY2FsU3RhcnRQb3NpdGlv
bkZvckxpbmUgd291bGQgaW5jb3JyZWN0bHkgaGFuZCBiYWNrIGEgcG9zaXRpb24KKyAgICAvLyBn
cmVhdGVyIHRoYW4gdGhlIGlucHV0IHBvc2l0aW9uLiAgVGhpcyBmaXggaXMgdG8gYWNjb3VudCBm
b3IgdGhlIGRpc2NyZXBhbmN5IGJldHdlZW4gbGluZXMgd2l0aCB3ZWJraXQtbGluZS1icmVhazph
ZnRlci13aGl0ZS1zcGFjZSAKKyAgICAvLyBzdHlsZSB2ZXJzdXMgbGluZXMgd2l0aG91dCB0aGF0
IHN0eWxlLCB3aGljaCB3b3VsZCBicmVhayBiZWZvcmUgYSBzcGFjZSBieSBkZWZhdWx0LiAKKyAg
ICBQb3NpdGlvbiBwID0gdmlzUG9zLmRlZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKHAubV9vZmZz
ZXQgPiBjLmRlZXBFcXVpdmFsZW50KCkubV9vZmZzZXQgJiYgcC5ub2RlKCktPmlzU2FtZU5vZGUo
Yy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpIHsKKyAgICAgICAgdmlzUG9zID0gYy5wcmV2aW91
cygpOworICAgICAgICBpZiAodmlzUG9zLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOworICAgICAgICB2aXNQb3MgPSBsb2dpY2FsU3RhcnRQb3NpdGlvbkZv
ckxpbmUodmlzUG9zKTsKKyAgICB9CisKKyAgICByZXR1cm4gYy5ob25vckVkaXRhYmxlQm91bmRh
cnlBdE9yQWZ0ZXIodmlzUG9zKTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2Fs
RW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBpZiAo
Yy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAgUm9v
dElubGluZUJveCogcm9vdEJveCA9IHJvb3RCb3hGb3JMaW5lKGMpOworICAgIGlmICghcm9vdEJv
eCkgeworICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQgMCBp
biBibG9ja3Mgd2l0aG91dAorICAgICAgICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1wdHkg
ZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCisgICAgICAgIFBvc2l0aW9uIHAg
PSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAm
JiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAubV9vZmZzZXQgPT0g
MCkKKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CisgICAgfQorICAgIAorICAgIElubGluZUJveCogbG9naWNhbEVuZEJveDsKKyAgICBOb2Rl
KiBsb2dpY2FsRW5kTm9kZTsKKyAgICBnZXRMb2dpY2FsRW5kQm94QW5kTm9kZShyb290Qm94LCBs
b2dpY2FsRW5kQm94LCBsb2dpY2FsRW5kTm9kZSk7CisgICAgaWYgKCFsb2dpY2FsRW5kTm9kZSkK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIAorICAgIGludCBlbmRPZmZz
ZXQgPSAxOworICAgIGlmIChsb2dpY2FsRW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpIHsKKyAg
ICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYgKGxvZ2ljYWxFbmRCb3gtPmlzSW5s
aW5lVGV4dEJveCgpKSB7CisgICAgICAgIElubGluZVRleHRCb3gqIGVuZFRleHRCb3ggPSBzdGF0
aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGxvZ2ljYWxFbmRCb3gpOworICAgICAgICBlbmRPZmZz
ZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOworICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGlu
ZUJyZWFrKCkpCisgICAgICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVu
ZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworfQorCitib29sIGluU2FtZUxvZ2lj
YWxMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZi
KQoreworICAgIHJldHVybiBhLmlzTm90TnVsbCgpICYmIGxvZ2ljYWxTdGFydE9mTGluZShhKSA9
PSBsb2dpY2FsU3RhcnRPZkxpbmUoYik7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBsb2dpY2FsRW5k
T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24g
dmlzUG9zID0gbG9naWNhbEVuZFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAKKyAgICAvLyBNYWtl
IHN1cmUgdGhlIGVuZCBvZiBsaW5lIGlzIGF0IHRoZSBzYW1lIGxpbmUgYXMgdGhlIGdpdmVuIGlu
cHV0IHBvc2l0aW9uLiBGb3IgYSB3cmFwcGluZyBsaW5lLCB0aGUgbG9naWNhbCBlbmQKKyAgICAv
LyBwb3NpdGlvbiBmb3IgdGhlIG5vdC1sYXN0LTItbGluZXMgbWlnaHQgaW5jb3JyZWN0bHkgaGFu
ZCBiYWNrIHRoZSBsb2dpY2FsIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLiAKKyAgICAvLyBG
b3IgZXhhbXBsZSwgPGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHN0eWxlPSJsaW5lLWJy
ZWFrOmJlZm9yZS13aGl0ZS1zcGFjZSI+YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcKKyAgICAvLyBh
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+CisgICAgLy8gSW4gdGhpcyBjYXNlLCB1c2Ug
dGhlIHByZXZpb3VzIHBvc2l0aW9uIG9mIHRoZSBjb21wdXRlZCBsb2dpY2FsIGVuZCBwb3NpdGlv
bi4KKyAgICBpZiAoIWluU2FtZUxvZ2ljYWxMaW5lKGMsIHZpc1BvcykpCisgICAgICAgIHZpc1Bv
cyA9IHZpc1Bvcy5wcmV2aW91cygpOworICAgIAorICAgIHJldHVybiBjLmhvbm9yRWRpdGFibGVC
b3VuZGFyeUF0T3JCZWZvcmUodmlzUG9zKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5oCShyZXZpc2lvbiA0MjgwNykKKysrIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDExIEBAIFZpc2libGVQb3NpdGlvbiBlbmRP
ZkxpbmUoY29uc3QgVmlzaWJsZVAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBvc2l0aW9uIG5leHRM
aW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIGJvb2wgaW5TYW1l
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwor
Ym9vbCBpblNhbWVMb2dpY2FsTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uICYpOwogYm9vbCBpc1N0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmKTsKIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJs
ZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitW
aXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7
CiAKIC8vIHBhcmFncmFwaHMgKHBlcmhhcHMgYSBtaXNub21lciwgY2FuIGJlIGRpdmlkZWQgYnkg
bGluZSBicmVhayBlbGVtZW50cykKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDI4MjUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0w
NC0yNCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDE2OAorICAgICAgICBSVEw6IEhvbWUvRW5kIGtleSBkb2VzIG5v
dCBiZWhhdmUgY29ycmVjdGx5IGluIG1peGVkIGJpZGkgdGV4dCBpbiBSVEwgZG9jdW1lbnQKKwor
ICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbDogQWRkZWQuCisKIDIw
MDktMDQtMjQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2Vs
ZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACitUZXN0IDEsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6
ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJc
bmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDEsIFJUTDoKKyAgTW92aW5nIGZv
cndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNrd2Fy
ZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDIsIExUUjoKKyAgTW92
aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBi
YWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMjAsIDFdCitUZXN0IDIsIFJUTDoK
KyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisgIE1v
dmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMjAsIDFdCitUZXN0IDMs
IExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyBERUYgQUJDXG4iWzEsIDEyXQorICBNb3Zp
bmcgYmFja3dhcmQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsxMiwgMV0KK1Rlc3QgMywgUlRMOgorICBN
b3ZpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbMSwgMTJdCisgIE1vdmluZyBiYWNrd2Fy
ZDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorVGVzdCA0LCBMVFI6CisgIE1vdmluZyBmb3J3
YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5h
YmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA0LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAi
XG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZk
IGRhYmViXG4iWzE0LCAxXQorVGVzdCA1LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0g
IlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0g
IlswXQorVGVzdCA1LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0
Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCA2
LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgImlwc3VtIGRvbG9yIlsxMV0K
KyAgTW92aW5nIGJhY2t3YXJkOiAgImlwc3VtIGRvbG9yIlsxMV0sICJMb3JlbSAiWzBdCitUZXN0
IDYsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzEx
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rl
c3QgNywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAg
TW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgNywgUlRMOgor
ICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3
YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOCwgTFRSOgorICBNb3ZpbmcgZm9y
d2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0K
K1Rlc3QgOCwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5n
IGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgOSwgTFRSOgorICBNb3ZpbmcgZm9yd2Fy
ZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1
XSwgIkxvcmVtICJbMF0KK1Rlc3QgOSwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJb
MF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJb
MF0KK1Rlc3QgMTAsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiaXBzdW0g
ZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVt
ICJbMF0KK1Rlc3QgMTAsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiaXBz
dW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxv
cmVtICJbMF0KK1Rlc3QgMTEsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAi
IGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCitU
ZXN0IDExLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQor
ICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCAxMiwgTFRS
OgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAg
IkxvcmVtICJbNSwgMF0KK1Rlc3QgMTIsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAi
WzAsIDVdCisgIE1vdmluZyBiYWNrd2FyZDogICJMb3JlbSAiWzUsIDBdCitUZXN0IDEzLCBMVFI6
CisgIE1vdmluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJbMl0sICJcbglCRkRYXG4iWzZdCisgIE1v
dmluZyBiYWNrd2FyZDogICJcbglCRkRYXG4iWzZdLCAiXG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTMs
IFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbglKdXN0XG4JIlsyXSwgIlxuCUJGRFhcbiJbNl0K
KyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuCUJGRFhcbiJbNl0sICJcbglKdXN0XG4JIlsyXQorVGVz
dCAxNCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWzJdLCAiXG4JZXZlclxu
Ils2XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG4JZXZlclxuIls2XSwgIlxuCUp1c3RcbgkiWzJd
CitUZXN0IDE0LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJbMl0sICJcbgll
dmVyXG4iWzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbglldmVyXG4iWzZdLCAiXG4JSnVzdFxu
CSJbMl0KK1Rlc3QgMTUsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJjYXIgbWVhbnMgQUJDLiJb
MCwgMTRdCisgIE1vdmluZyBiYWNrd2FyZDogICJjYXIgbWVhbnMgQUJDLiJbMTQsIDBdCitUZXN0
IDE1LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiY2FyIG1lYW5zIEFCQy4iWzAsIDE0XQorICBN
b3ZpbmcgYmFja3dhcmQ6ICAiY2FyIG1lYW5zIEFCQy4iWzE0LCAwXQorVGVzdCAxNiwgTFRSOgor
ICBNb3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJDLuGqnSJbMSwgMTNdCisgIE1vdmluZyBi
YWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEzLCAxXQorVGVzdCAxNiwgUlRMOgorICBN
b3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJDLuGqnSJbMSwgMTNdCisgIE1vdmluZyBiYWNr
d2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEzLCAxXQorVGVzdCAxNywgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIiWzAsIDI0XQorICBNb3Zp
bmcgYmFja3dhcmQ6ICAiaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0uIiJbMjQsIDBdCitUZXN0
IDE3LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0u
IiJbMCwgMjRdCisgIE1vdmluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+Gq
nS4iIlsyNCwgMF0KK1Rlc3QgMTgsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJHSEkgSktMIE1O
TyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzAsIDQwXQorICBNb3Zpbmcg
YmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdIuGq
nSc/Ils0MCwgMF0KK1Rlc3QgMTgsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJHSEkgSktMIE1O
TyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzAsIDQwXQorICBNb3Zpbmcg
YmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdIuGq
nSc/Ils0MCwgMF0KK1Rlc3QgMTksIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJBQkMgYWJjIERF
RiJbMCwgMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJBQkMgYWJjIERFRiJbMTEsIDBdCitUZXN0
IDE5LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiQUJDIGFiYyBERUYiWzAsIDExXQorICBNb3Zp
bmcgYmFja3dhcmQ6ICAiQUJDIGFiYyBERUYiWzExLCAwXQorVGVzdCAyMCwgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAwXQorVGVzdCAyMCwgUlRMOgorICBNb3Zp
bmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAwXQorVGVzdCAyMSwgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAwXQorVGVzdCAyMSwgUlRMOgorICBNb3Zp
bmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAwXQorCkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1NiBAQAorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICAgIDxzdHlsZT4KKyAgICAgICAg
ZGl2LnRlc3QgeworICAgICAgICAgICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZTsK
KyAgICAgICAgICAgIHBhZGRpbmc6IDRweDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hl
ZCBsaWdodGJsdWU7CisgICAgICAgICAgICBtYXJnaW46IDRweCA0cHggNHB4IDI0cHg7CisgICAg
ICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgICAgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBH
cmFuZGU7CisgICAgICAgICAgICBjb3VudGVyLWluY3JlbWVudDogdGVzdC1udW1iZXI7CisgICAg
ICAgIH0KKyAgICAgICAgZGl2LnRlc3Q6YmVmb3JlIHsgY29udGVudDogY291bnRlcih0ZXN0LW51
bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogOHB4OyBmb250LXNpemU6IHgtc21hbGw7
IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBweDsgfQorICAgICAgICBkaXYudGVzdCBzcGFu
IHsgYmFja2dyb3VuZC1jb2xvcjogI2RlZjsgfQorICAgICAgICBkaXYudGVzdCBpbWcgeyB3aWR0
aDogMWVtOyBoZWlnaHQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsgfQorICAg
ICAgICBkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7IH0K
KyAgICAgICAgZGl2LnRlc3QgZGl2IHsgYm9yZGVyOiAxcHggZGFzaGVkIHBpbms7IHBhZGRpbmc6
IDNweDsgaGVpZ2h0OiAyZW07IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAg
IGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uc01v
dmluZ0luRGlyZWN0aW9uKHNlbCwgZGlyZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgcG9zaXRpb25zID0gW107CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNl
bC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5mb2N1c09mZnNldH0pOworICAgICAgICAgICAgc2Vs
Lm1vZGlmeSgibW92ZSIsIGRpcmVjdGlvbiwgImxpbmVCb3VuZGFyeSIpOworICAgICAgICAgICAg
cG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuZm9jdXNP
ZmZzZXR9KTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbnM7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBmb2xkKHN0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9ICIiOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkp
OworICAgICAgICAgICAgICAgIGlmIChjaGFyID49IDB4MDVkMCkKKyAgICAgICAgICAgICAgICAg
ICAgY2hhciAtPSAweDA1OGY7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PSAxMCkg
eworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlxcbiI7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2dQb3NpdGlv
bnMocG9zaXRpb25zKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFd
Lm5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIl0iKTsKKyAgICAgICAgICAgICAg
ICAgICAgbG9nKCIsICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5ub2RlKQorICAgICAg
ICAgICAgICAgICAgICBsb2coKHBvc2l0aW9uc1tpXS5ub2RlIGluc3RhbmNlb2YgVGV4dCA/ICci
JyArIGZvbGQocG9zaXRpb25zW2ldLm5vZGUuZGF0YSkgKyAnIicgOiAiPCIgKyBwb3NpdGlvbnNb
aV0ubm9kZS50YWdOYW1lICsgIj4iKSArICJbIik7CisgICAgICAgICAgICAgICAgbG9nKHBvc2l0
aW9uc1tpXS5vZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nKCJdIik7Cisg
ICAgICAgIH0KKworICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCisgICAgICAgICAgICB2YXIgdGVzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCJ0ZXN0Iik7CisgICAgICAgICAgICB2YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ1JpZ2h0OworICAgICAgICAgICAgICAgIHZhciBw
b3NpdGlvbnNNb3ZpbmdMZWZ0OworICAgIAorICAgICAgICAgICAgICAgIGxvZygiVGVzdCAiICsg
KGkgKyAxKSArICIsIExUUjpcbiAgTW92aW5nIGZvcndhcmQ6ICIpOworICAgICAgICAgICAgICAg
IHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25z
TW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJmb3J3YXJkIik7
CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAg
ICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5n
IGJhY2t3YXJkOiAgIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nTGVmdCA9IHBv
c2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImJhY2t3YXJkIik7CisgICAgICAgICAgICAg
ICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xlZnQpOworICAgICAgICAgICAgICAgIGxv
ZygiXG4iKTsKKworICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpcmVjdGlvbiA9ICJy
dGwiOworCisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgUlRMOlxu
ICBNb3ZpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRl
c3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRp
b25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiZm9yd2FyZCIpOworICAgICAgICAgICAgICAgIGxv
Z1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxu
Iik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5nIGJhY2t3YXJkOiAgIik7CisgICAg
ICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVj
dGlvbihzZWwsICJiYWNrd2FyZCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3Np
dGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAg
ICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBjb250
ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJjICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyB4eXog
JiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgorPC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBj
bGFzcz0idGVzdCI+CismIzE0ODg7JiMxNDg5OyYjMTQ5MDsgeHl6ICYjMTQ5MTsmIzE0OTI7JiMx
NDkzOyBkZWYgJiMxNDk0OyYjMTQ5NTsmIzE0OTY7Cis8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRh
YmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4ODsmIzE0ODk7JiMxNDkwOyAmIzE0OTE7JiMxNDkyOyYj
MTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7Cis8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxl
IGNsYXNzPSJ0ZXN0Ij4KK2FiYyBlZmQgZGFiZWIKKzwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9uOiBydGwiPmlw
c3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgIGNs
YXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogcnRsIj5pcHN1bSBkb2xv
cjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29u
dGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJydGwiPmlwc3VtIGRv
bG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRl
c3QiPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2
PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHls
ZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRp
diBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVj
dGlvbjogbHRyIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3NwYW4+
IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3Bh
biAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250
ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0ibHRyIj5pcHN1bSBkb2xv
ciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8ZGl2IGNsYXNzPSJ0ZXN0IiBzdHlsZT0iZGlyZWN0
aW9uOiBsdHI7IiBjb250ZW50ZWRpdGFibGU+CisJSnVzdAorCTxzcGFuPnRlc3Rpbmcg16jXpzwv
c3Bhbj4KKwnXkdeV15PXpworPC9kaXY+CisKKzxkaXYgY2xhc3M9InRlc3QiIHN0eWxlPSJkaXJl
Y3Rpb246IGx0cjsiIGNvbnRlbnRlZGl0YWJsZT4KKwlKdXN0CisJPHNwYW4+dGVzdGluZyB3aGF0
PC9zcGFuPgorCWV2ZXIKKzwvZGl2PgorCisKKzxkaXYgY2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0
YWJsZT5jYXIgbWVhbnMgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7LjwvZGl2PgorPGRpdiBjbGFzcz0i
dGVzdCIgY29udGVudGVkaXRhYmxlPiYjeDIwMkI7Y2FyICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAm
IzE0ODg7JiMxNDg5OyYjMTQ5MDsuJiN4MjAyYzs8L2Rpdj4KKzxkaXYgY2xhc3M9InRlc3QiIGNv
bnRlbnRlZGl0YWJsZT5oZSBzYWlkICImI3gyMDJCO2NhciAmIzE0OTE7JiMxNDkyOyYjMTQ5Mzsg
JiMxNDg4OyYjMTQ4OTsmIzE0OTA7JiN4MjAyYzsuIjwvZGl2PgorPGRpdiBjbGFzcz0idGVzdCIg
Y29udGVudGVkaXRhYmxlPiYjMTQ5NDsmIzE0OTU7JiMxNDk2OyAmIzE0OTc7JiMxNDk4OyYjMTQ5
OTsgJiMxNTAwOyYjMTUwMTsmIzE1MDI7ICcmI3gyMDJhO2hlIHNhaWQgIiYjeDIwMkI7Y2FyICYj
MTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsmI3gyMDJjOyImI3gyMDJj
Oyc/PC9kaXY+CisKKworPGRpdiBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPiYjMTQ4ODsm
IzE0ODk7JiMxNDkwOyBhYmMgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7PGJyIC8+ZWRmICYjMTQ5NDsm
IzE0OTU7JiMxNDk2OyBhYnJlYmc8L2Rpdj4KKzxkaXYgY2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0
YWJsZSBzdHlsZT0ibGluZS1icmVhazpiZWZvcmUtd2hpdGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5h
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8
ZGl2IGNsYXNzPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGUgc3R5bGU9ImxpbmUtYnJlYWs6YWZ0ZXIt
d2hpdGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9k
eT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29756</attachid>
            <date>2009-04-24 12:48:24 -0700</date>
            <delta_ts>2009-04-29 16:35:07 -0700</delta_ts>
            <desc>patch w/ Layout test (version 6)</desc>
            <filename>home.end.v6</filename>
            <type>text/plain</type>
            <size>39570</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjgzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDQtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRM
OiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRl
eHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQpOiBDaGFuZ2UgY2FsbGluZyBlbmRPZkxpbmUoKQorICAgICAgICB0byBsb2dpY2FsRW5k
T2ZMaW5lKCkgd2hlbiBncmFudWxhcml0eSBpcyBMaW5lQm91bmRhcnkuCisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKTogQ2hhbmdlIGNh
bGxpbmcgZW5kT2ZMaW5lKCkKKyAgICAgICAgdG8gbG9naWNhbEVuZE9mTGluZSgpIHdoZW4gZ3Jh
bnVsYXJpdHkgaXMgTGluZUJvdW5kYXJ5CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6IENoYW5nZSBjYWxsaW5nIAorICAgICAg
ICBzdGFydE9mTGluZSgpIHRvIGxvZ2ljYWxTdGFydE9mTGluZSgpIHdoZW4gZ3JhbnVsYXJpdHkg
aXMgTGluZUJvdW5kYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5TW92aW5nQmFja3dhcmQpOiBDaGFuZ2UgY2FsbGluZyBzdGFydE9mTGluZSgpIAorICAg
ICAgICB0byBsb2dpY2FsU3RhcnRPZkxpbmUoKSB3aGVuIGdyYW51bGFyaXR5IGlzIExpbmVCb3Vu
ZGFyeS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOiBBZGRlZC4gUmVjb25zdHJ1Y3QgbGVh
ZiBib3hlcyBpbiBsb2dpY2FsIG9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbFN0
YXJ0Qm94QW5kTm9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbEVuZEJv
eEFuZE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9u
Rm9yTGluZSk6IEFkZGVkLiBTaW1pbGFyIHRvIHN0YXJ0UG9zaXRpb25Gb3JMaW5lLgorICAgICAg
ICAoV2ViQ29yZTo6bG9naWNhbFN0YXJ0T2ZMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gc3RhcnRP
ZkxpbmUuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKTogQWRk
ZWQuIFNpbWlsYXIgdG8gZW5kUG9zaXRpb25Gb3JMaW5lLgorICAgICAgICAoV2ViQ29yZTo6aW5T
YW1lTG9naWNhbExpbmUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxFbmRPZkxp
bmUpOiBBZGRlZC4gU2ltaWxhciB0byBlbmRPZkxpbmUuCisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmg6CisKIDIwMDktMDQtMjQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDI4MDcpCisrKyBXZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
MSw3ICszMjEsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAg
ICAgICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQo
KSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TGluZUJvdW5kYXJ5OgotICAgICAgICAgICAgcG9zID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlv
bihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOworICAgICAgICAgICAgcG9zID0gbG9n
aWNhbEVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5
OgogICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
LmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CkBAIC0zOTUsNyArMzk1LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICAgICAgcG9zID0gZW5kT2ZT
ZW50ZW5jZShWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmVCb3VuZGFyeToKLSAgICAgICAg
ICAgIHBvcyA9IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFm
ZmluaXR5KCkpKTsKKyAgICAgICAgICAgIHBvcyA9IGxvZ2ljYWxFbmRPZkxpbmUoVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKICAgICAgICAgICAgIHBvcyA9IGVu
ZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHko
KSkpOwpAQCAtNDc0LDcgKzQ3NCw3IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2QKICAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZTZW50ZW5jZShWaXNpYmxlUG9zaXRp
b24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICAgICAgcG9zID0gc3RhcnRPZkxp
bmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKKyAg
ICAgICAgICAgIHBvcyA9IGxvZ2ljYWxTdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwu
c3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mUGFyYWdy
YXBoKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CkBA
IC01NDEsNyArNTQxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZAogICAgICAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3Nl
bC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNp
YmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOworICAgICAgICAg
ICAgcG9zID0gbG9naWNhbFN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgp
LCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQ
YXJhZ3JhcGhCb3VuZGFyeToKICAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlz
aWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDQyODA3KQorKysgV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDQgKzEwNTUsMTk1
IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkVkaXRhYmxlQ29udGVudChjb24KICAgICByZXR1cm4g
bGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKIH0KIAorc3RhdGlj
IHZvaWQgZ2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIoUm9vdElubGluZUJveCogcm9vdEJveCwg
VmVjdG9yPElubGluZUJveCo+JiBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcikgeworICAgIHVuc2ln
bmVkIGNoYXIgbWluTGV2ZWwgPSAxMjg7CisgICAgdW5zaWduZWQgY2hhciBtYXhMZXZlbCA9IDA7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIElubGluZUJveCogciA9IHJvb3RCb3gtPmZp
cnN0TGVhZkNoaWxkKCk7CisgICAgLy8gRmlyc3QgZmluZCBoaWdoZXN0IGFuZCBsb3dlc3QgbGV2
ZWxzLAorICAgIC8vIGFuZCBpbml0aWFsaXplIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyIHdpdGgg
dGhlIGxlYWYgYm94ZXMgaW4gdmlzdWFsIG9yZGVyLgorICAgIHdoaWxlIChyKSB7CisgICAgICAg
IGlmIChyLT5iaWRpTGV2ZWwoKSA+IG1heExldmVsKQorICAgICAgICAgICAgbWF4TGV2ZWwgPSBy
LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgaWYgKHItPmJpZGlMZXZlbCgpIDwgbWluTGV2ZWwpCisg
ICAgICAgICAgICBtaW5MZXZlbCA9IHItPmJpZGlMZXZlbCgpOworICAgICAgICBsZWFmQm94ZXNJ
bkxvZ2ljYWxPcmRlci5hcHBlbmQocik7CisgICAgICAgIHIgPSByLT5uZXh0TGVhZkNoaWxkKCk7
CisgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgaWYgKCFyb290Qm94LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSkgeworICAgICAgICAvLyBSZXZlcnNlIG9mIHJl
b3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgorICAgICAg
ICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0aGUgdGV4dCB0byB0aGUg
bG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCisgICAgICAgIC8vIHJldmVyc2UgYW55IGNv
bnRpZ3VvdXMgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9y
IGhpZ2hlci4KKworICAgICAgICAvLyByZXZlcnNpbmcgb2YgTDIgaXMgb25seSBkb25lIHVwIHRv
IHRoZSBsb3dlc3Qgb2RkIGxldmVsCisgICAgICAgIGlmICghKG1pbkxldmVsICUgMikpCisgICAg
ICAgICAgICBtaW5MZXZlbCsrOworCisgICAgICAgIHdoaWxlIChtaW5MZXZlbCA8PSBtYXhMZXZl
bCkgeworICAgICAgICAgICAgVmVjdG9yPElubGluZUJveCo+OjppdGVyYXRvciBpdGVyID0gbGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXIuYmVnaW4oKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbmxpbmVC
b3gqPjo6aXRlcmF0b3IgZW5kID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuZW5kKCk7CisgICAg
ICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXRl
ciAhPSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqaXRlciktPmJpZGlMZXZlbCgp
ID49IG1pbkxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVmVj
dG9yPElubGluZUJveCo+OjppdGVyYXRvciBmaXJzdCA9IGl0ZXI7CisgICAgICAgICAgICAgICAg
d2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKml0ZXIpLT5i
aWRpTGV2ZWwoKSA8IG1pbkxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgVmVjdG9yPElubGluZUJveCo+OjppdGVyYXRvciBsYXN0ID0gaXRlcjsKKyAgICAgICAg
ICAgICAgICBzdGQ6OnJldmVyc2UoZmlyc3QsIGxhc3QpOworICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICsrbWluTGV2ZWw7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGdldExvZ2ljYWxTdGFydEJveEFuZE5vZGUoUm9vdElubGluZUJveCogcm9v
dEJveCwgSW5saW5lQm94KiYgc3RhcnRCb3gsIE5vZGUqJiBzdGFydE5vZGUpCit7CisgICAgVmVj
dG9yPElubGluZUJveCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOworICAgIGdldExlYWZCb3hl
c0luTG9naWNhbE9yZGVyKHJvb3RCb3gsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICBz
dGFydEJveCA9IDA7CisgICAgc3RhcnROb2RlID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0YXJ0
Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV07CisgICAgICAgIHN0YXJ0Tm9kZSA9IHN0
YXJ0Qm94LT5yZW5kZXJlcigpLT5ub2RlKCk7CisgICAgICAgIGlmIChzdGFydE5vZGUpCisgICAg
ICAgICAgICByZXR1cm47IAorICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2V0TG9naWNhbEVuZEJv
eEFuZE5vZGUoUm9vdElubGluZUJveCogcm9vdEJveCwgSW5saW5lQm94KiYgZW5kQm94LCBOb2Rl
KiYgZW5kTm9kZSkKK3sKKyAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXI7CisgICAgZ2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIocm9vdEJveCwgbGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXIpOworICAgIGVuZEJveCA9IDA7CisgICAgZW5kTm9kZSA9IDA7CisgICAg
c2l6ZV90IGxlbiA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsKKyAgICBpZiAoIWxl
bikKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEdlbmVyYXRlZCBjb250ZW50IChlLmcuIGxpc3Qg
bWFya2VycyBhbmQgQ1NTIDpiZWZvcmUgYW5kIDphZnRlcgorICAgIC8vIHBzZXVkb2VsZW1lbnRz
KSBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgRE9NIGVsZW1lbnQsIGFuZCBzbyBjYW5ub3QgYmUKKyAg
ICAvLyByZXByZXNlbnRlZCBieSBhIFZpc2libGVQb3NpdGlvbi4gIFVzZSB3aGF0ZXZlciBwcmVj
ZWRlcyBpbnN0ZWFkLgorICAgIHNpemVfdCBpbmRleCA9IGxlbiAtIDE7CisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgZW5kQm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaW5kZXhdOworICAg
ICAgICBlbmROb2RlID0gZW5kQm94LT5yZW5kZXJlcigpLT5ub2RlKCk7CisgICAgICAgIGlmIChl
bmROb2RlIHx8ICFpbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLS1pbmRleDsK
KyAgICB9Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbFN0YXJ0UG9zaXRpb25G
b3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBpZiAoYy5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IHJvb3RCb3hGb3JMaW5lKGMpOworICAgIGlmICghcm9vdEJveCkgeworICAgICAg
ICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0
aG91dAorICAgICAgICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxv
Y2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCisgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+
cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAubV9vZmZzZXQgPT0gMCkKKyAgICAgICAg
ICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUoYyk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgfQorICAgIAorICAg
IElubGluZUJveCogbG9naWNhbFN0YXJ0Qm94OworICAgIE5vZGUqIGxvZ2ljYWxTdGFydE5vZGU7
CisgICAgZ2V0TG9naWNhbFN0YXJ0Qm94QW5kTm9kZShyb290Qm94LCBsb2dpY2FsU3RhcnRCb3gs
IGxvZ2ljYWxTdGFydE5vZGUpOworCisgICAgaWYgKCFsb2dpY2FsU3RhcnROb2RlKQorICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSBsb2dp
Y2FsU3RhcnRCb3gtPmNhcmV0TWluT2Zmc2V0KCk7CisgIAorICAgIFZpc2libGVQb3NpdGlvbiB2
aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24obG9naWNhbFN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIERP
V05TVFJFQU0pOworICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFi
bGUodmlzUG9zKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIGMpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxv
Z2ljYWxTdGFydFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAKKyAgICBpZiAodmlzUG9zLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gYy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQWZ0ZXIodmlz
UG9zKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhcnQgb2YgbGluZSBpcyBub3QgZ3JlYXRl
ciB0aGFuIHRoZSBnaXZlbiBpbnB1dCBwb3NpdGlvbi4gIEVsc2UgdXNlIHRoZSBwcmV2aW91cyBw
b3NpdGlvbiB0byAKKyAgICAvLyBvYnRhaW4gc3RhcnQgb2YgbGluZS4gIFRoaXMgY29uZGl0aW9u
IGhhcHBlbnMgd2hlbiB0aGUgaW5wdXQgcG9zaXRpb24gaXMgYmVmb3JlIHRoZSBzcGFjZSBjaGFy
YWN0ZXIgYXQgdGhlIGVuZCAKKyAgICAvLyBvZiBhIHNvZnQtd3JhcHBlZCBub24tZWRpdGFibGUg
bGluZS4gSW4gdGhpcyBzY2VuYXJpbywgbG9naWNhbFN0YXJ0UG9zaXRpb25Gb3JMaW5lIHdvdWxk
IGluY29ycmVjdGx5IGhhbmQgYmFjayBhIHBvc2l0aW9uCisgICAgLy8gZ3JlYXRlciB0aGFuIHRo
ZSBpbnB1dCBwb3NpdGlvbi4gIFRoaXMgZml4IGlzIHRvIGFjY291bnQgZm9yIHRoZSBkaXNjcmVw
YW5jeSBiZXR3ZWVuIGxpbmVzIHdpdGggd2Via2l0LWxpbmUtYnJlYWs6YWZ0ZXItd2hpdGUtc3Bh
Y2UgCisgICAgLy8gc3R5bGUgdmVyc3VzIGxpbmVzIHdpdGhvdXQgdGhhdCBzdHlsZSwgd2hpY2gg
d291bGQgYnJlYWsgYmVmb3JlIGEgc3BhY2UgYnkgZGVmYXVsdC4gCisgICAgUG9zaXRpb24gcCA9
IHZpc1Bvcy5kZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwLm1fb2Zmc2V0ID4gYy5kZWVwRXF1
aXZhbGVudCgpLm1fb2Zmc2V0ICYmIHAubm9kZSgpLT5pc1NhbWVOb2RlKGMuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCkpKSB7CisgICAgICAgIHZpc1BvcyA9IGMucHJldmlvdXMoKTsKKyAgICAgICAg
aWYgKHZpc1Bvcy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKKyAgICAgICAgdmlzUG9zID0gbG9naWNhbFN0YXJ0UG9zaXRpb25Gb3JMaW5lKHZpc1Bvcyk7
CisgICAgfQorCisgICAgcmV0dXJuIGMuaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHZp
c1Bvcyk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW9uRm9y
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCit7CisgICAgaWYgKGMuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKworICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3RCb3ggPSByb290Qm94Rm9yTGluZShjKTsKKyAgICBpZiAoIXJvb3RCb3gpIHsKKyAgICAgICAg
Ly8gVGhlcmUgYXJlIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tzIHdpdGhv
dXQKKyAgICAgICAgLy8gUm9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxlIGJsb2Nr
cyBhbmQgYm9yZGVyZWQgYmxvY2tzLgorICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZh
bGVudCgpOworICAgICAgICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJl
bmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAgICAgICAg
ICByZXR1cm4gYzsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIH0KKyAg
ICAKKyAgICBJbmxpbmVCb3gqIGxvZ2ljYWxFbmRCb3g7CisgICAgTm9kZSogbG9naWNhbEVuZE5v
ZGU7CisgICAgZ2V0TG9naWNhbEVuZEJveEFuZE5vZGUocm9vdEJveCwgbG9naWNhbEVuZEJveCwg
bG9naWNhbEVuZE5vZGUpOworICAgIGlmICghbG9naWNhbEVuZE5vZGUpCisgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAKKyAgICBpbnQgZW5kT2Zmc2V0ID0gMTsKKyAgICBp
ZiAobG9naWNhbEVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKSB7CisgICAgICAgIGVuZE9mZnNl
dCA9IDA7CisgICAgfSBlbHNlIGlmIChsb2dpY2FsRW5kQm94LT5pc0lubGluZVRleHRCb3goKSkg
eworICAgICAgICBJbmxpbmVUZXh0Qm94KiBlbmRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5l
VGV4dEJveCo+KGxvZ2ljYWxFbmRCb3gpOworICAgICAgICBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94
LT5zdGFydCgpOworICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFrKCkpCisgICAg
ICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVuZE9mZnNldCwgVlBfVVBT
VFJFQU1fSUZfUE9TU0lCTEUpOworfQorCitib29sIGluU2FtZUxvZ2ljYWxMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKQoreworICAgIHJldHVy
biBhLmlzTm90TnVsbCgpICYmIGxvZ2ljYWxTdGFydE9mTGluZShhKSA9PSBsb2dpY2FsU3RhcnRP
ZkxpbmUoYik7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBsb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gbG9naWNh
bEVuZFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGVuZCBv
ZiBsaW5lIGlzIGF0IHRoZSBzYW1lIGxpbmUgYXMgdGhlIGdpdmVuIGlucHV0IHBvc2l0aW9uLiBG
b3IgYSB3cmFwcGluZyBsaW5lLCB0aGUgbG9naWNhbCBlbmQKKyAgICAvLyBwb3NpdGlvbiBmb3Ig
dGhlIG5vdC1sYXN0LTItbGluZXMgbWlnaHQgaW5jb3JyZWN0bHkgaGFuZCBiYWNrIHRoZSBsb2dp
Y2FsIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLiAKKyAgICAvLyBGb3IgZXhhbXBsZSwgPGRp
diBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHN0eWxlPSJsaW5lLWJyZWFrOmJlZm9yZS13aGl0
ZS1zcGFjZSI+YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcKKyAgICAvLyBhIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgPC9kaXY+CisgICAgLy8gSW4gdGhpcyBjYXNlLCB1c2UgdGhlIHByZXZpb3VzIHBv
c2l0aW9uIG9mIHRoZSBjb21wdXRlZCBsb2dpY2FsIGVuZCBwb3NpdGlvbi4KKyAgICBpZiAoIWlu
U2FtZUxvZ2ljYWxMaW5lKGMsIHZpc1BvcykpCisgICAgICAgIHZpc1BvcyA9IHZpc1Bvcy5wcmV2
aW91cygpOworICAgIAorICAgIHJldHVybiBjLmhvbm9yRWRpdGFibGVCb3VuZGFyeUF0T3JCZWZv
cmUodmlzUG9zKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5oCShyZXZpc2lv
biA0MjgwNykKKysrIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDggKzUzLDExIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlz
aWJsZVAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIGJvb2wgaW5TYW1lTGluZShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworYm9vbCBpblNhbWVMb2dp
Y2FsTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
OwogYm9vbCBpc1N0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIGJvb2wgaXNF
bmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2lj
YWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitWaXNpYmxlUG9zaXRpb24g
bG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiAKIC8vIHBhcmFncmFw
aHMgKHBlcmhhcHMgYSBtaXNub21lciwgY2FuIGJlIGRpdmlkZWQgYnkgbGluZSBicmVhayBlbGVt
ZW50cykKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDI4MzQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wNC0yNCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDE2OAorICAgICAgICBSVEw6IEhvbWUvRW5kIGtleSBkb2VzIG5vdCBiZWhhdmUgY29ycmVj
dGx5IGluIG1peGVkIGJpZGkgdGV4dCBpbiBSVEwgZG9jdW1lbnQKKworICAgICAgICAqIGVkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZCByZXN1bHQg
Zm9yIGV4dGVuZCBpbgorICAgICAgICBsaW5lQm91bmRhcnkuCisgICAgICAgICogZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi5odG1sOiBBZGRlZCB0ZXN0IGNhc2VzIGFuZCBzY3Jp
cHQgZm9yIGV4dGVuZAorICAgICAgICBpbiBsaW5lQm91bmRhcnkuCisgICAgICAgICogZWRpdGlu
Zy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0
aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sOiBBZGRlZC4KKwogMjAwOS0wNC0yNCAgS2V2aW4g
TWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIEkgbW92
ZWQgdGhlIGZpbGVzIEkgZm9yZ290IHRvIHVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGltYWdl
IQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
ZXh0ZW5kLXNlbGVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQyODA3KQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTksNiArOSwyNCBAQCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldAog
TG9yZW0KIGlwc3VtIGRvbG9yIHNpdAogYW1ldHQKK0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
CitMb3JlbSBpcHN1bSBkb2xvcgoranVzdCBhIHRlc3QKK3NpdCBhbWV0CitMb3JlbSBpcHN1bSBk
b2xvciBzaXQgYW1ldAorTG9yZW0KK2lwc3VtIGRvbG9yIHNpdAorYW1ldAorSnVzdCB0ZXN0aW5n
INeo16cg15HXldeT16cKK0p1c3QgdGVzdGluZyB3aGF0IGV2ZXIKK2NhciBtZWFucyDXkNeR15Iu
CitjYXIg15PXlNeVINeQ15HXki4KK2hlIHNhaWQgIiBjYXIg15PXlNeVINeQ15HXkiAuIgor15bX
l9eYINeZ15rXmyDXnNed154gJyBoZSBzYWlkICIgY2FyINeT15TXlSDXkNeR15IgIiAnPwor15DX
kdeSIGFiYyDXk9eU15UKK2VkZiDXlteX15ggYWJyZWJnCithYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcKK2FiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZwogCiAKIApAQCAtMzcyLDMgKzM5MCwxMzkgQEAgVGVzdCAxLCBM
VFI6CiAgIEV4dGVuZGluZyByaWdodDogIkxvcmVtICJbKDAsMCksICgwLDUpXSwgImlwc3VtIGRv
bG9yIHNpdCJbKDAsNSksICgwLDExKSwgKDAsMTUpXSwgIiBhbWV0dCJbKDAsNiksICgwLDEpXQog
ICBFeHRlbmRpbmcgbGVmdDogICIgYW1ldHQiWygwLDYpLCAoMCwxKV0sICJpcHN1bSBkb2xvciBz
aXQiWygwLDEyKSwgKDAsNiksICgwLDApXSwgIkxvcmVtICJbKDAsMCksICgwLDUpXQogCisKKwor
RXh0ZW5kaW5nIGJ5IGxpbmVCb3VuZGFyeQorVGVzdCAxLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3
YXJkOiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWygxLDEpLCAoMSwyMCldCisgIEV4dGVuZGlu
ZyBiYWNrd2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbKDEsMjApLCAoMSwxKV0KK1Rl
c3QgMSwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuYWJjIEFCQyB4eXogREVGIGRlZlxu
IlsoMSwxKSwgKDEsMjApXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiXG5hYmMgQUJDIHh5eiBE
RUYgZGVmXG4iWygxLDIwKSwgKDEsMSldCitUZXN0IDIsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndh
cmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbKDEsMSksICgxLDIwKV0KKyAgRXh0ZW5kaW5n
IGJhY2t3YXJkOiAgIlxuQUJDIHh5eiBERUYgZGVmIEdISVxuIlsoMSwyMCksICgxLDEpXQorVGVz
dCAyLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG5BQkMgeHl6IERFRiBkZWYgR0hJXG4i
WygxLDEpLCAoMSwyMCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRl
ZiBHSElcbiJbKDEsMjApLCAoMSwxKV0KK1Rlc3QgMywgTFRSOgorICBFeHRlbmRpbmcgZm9yd2Fy
ZDogIlxuQUJDIERFRiBBQkNcbiJbKDEsMSksICgxLDEyKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJk
OiAgIlxuQUJDIERFRiBBQkNcbiJbKDEsMTIpLCAoMSwxKV0KK1Rlc3QgMywgUlRMOgorICBFeHRl
bmRpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbKDEsMSksICgxLDEyKV0KKyAgRXh0ZW5k
aW5nIGJhY2t3YXJkOiAgIlxuQUJDIERFRiBBQkNcbiJbKDEsMTIpLCAoMSwxKV0KK1Rlc3QgNCwg
TFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuYWJjIGVmZCBkYWJlYlxuIlsoMSwxKSwgKDEs
MTQpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWygxLDE0KSwg
KDEsMSldCitUZXN0IDQsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJcbmFiYyBlZmQgZGFi
ZWJcbiJbKDEsMSksICgxLDE0KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuYWJjIGVmZCBk
YWJlYlxuIlsoMSwxNCksICgxLDEpXQorVGVzdCA1LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJk
OiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDog
ICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgNSwgUlRMOgorICBFeHRlbmRp
bmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcg
YmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDYsIExUUjoK
KyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAg
RXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVz
dCA2LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJb
KDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlso
MCwwKV0KK1Rlc3QgNywgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCld
LCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwg
IkxvcmVtICJbKDAsMCldCitUZXN0IDcsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3Jl
bSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0
IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCA4LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3
YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2Fy
ZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgOCwgUlRMOgorICBFeHRl
bmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRp
bmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDksIExU
UjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApLCAoMCw1KV0KKyAgRXh0ZW5k
aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbKDAsNSksICgwLDApXQorVGVzdCA5LCBSVEw6CisgIEV4
dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKSwgKDAsNSldCisgIEV4dGVuZGluZyBiYWNr
d2FyZDogICJMb3JlbSAiWygwLDUpLCAoMCwwKV0KK1Rlc3QgMTAsIExUUjoKKyAgRXh0ZW5kaW5n
IGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJh
Y2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCAxMCwgUlRMOgor
ICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBF
eHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0
IDExLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICJpcHN1bSBk
b2xvciJbKDAsMTEpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWygwLDEx
KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCAxMSwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDog
IkxvcmVtICJbKDAsMCldLCAiaXBzdW0gZG9sb3IiWygwLDExKV0KKyAgRXh0ZW5kaW5nIGJhY2t3
YXJkOiAgImlwc3VtIGRvbG9yIlsoMCwxMSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgMTIsIExU
UjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0K
KyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQor
VGVzdCAxMiwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFt
ZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVt
ICJbKDAsMCldCitUZXN0IDEzLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlso
MCwwKSwgKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJMb3JlbSAiWygwLDUpLCAoMCww
KV0KK1Rlc3QgMTMsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApLCAo
MCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbKDAsNSksICgwLDApXQorVGVz
dCAxNCwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWygyLDIpXSwgIlxu
CUJGRFhcbiJbKDIsNildCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbglCRkRYXG4iWygyLDYp
XSwgIlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAxNCwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2Fy
ZDogIlxuCUp1c3RcbgkiWygyLDIpXSwgIlxuCUJGRFhcbiJbKDIsNildCisgIEV4dGVuZGluZyBi
YWNrd2FyZDogICJcbglCRkRYXG4iWygyLDYpXSwgIlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAx
NSwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWygyLDIpXSwgIlxuCWV2
ZXJcbiJbKDIsNildCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbglldmVyXG4iWygyLDYpXSwg
IlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAxNSwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDog
IlxuCUp1c3RcbgkiWygyLDIpXSwgIlxuCWV2ZXJcbiJbKDIsNildCisgIEV4dGVuZGluZyBiYWNr
d2FyZDogICJcbglldmVyXG4iWygyLDYpXSwgIlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAxNiwg
TFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImNhciBtZWFucyBBQkMuIlsoMCwwKSwgKDAsMTQp
XQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiY2FyIG1lYW5zIEFCQy4iWygwLDE0KSwgKDAsMCld
CitUZXN0IDE2LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiY2FyIG1lYW5zIEFCQy4iWygw
LDApLCAoMCwxNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJjYXIgbWVhbnMgQUJDLiJbKDAs
MTQpLCAoMCwwKV0KK1Rlc3QgMTcsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICLhqpxjYXIg
REVGIEFCQy7hqp0iWygxLDEpLCAoMSwxMyldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICLhqpxj
YXIgREVGIEFCQy7hqp0iWygxLDEzKSwgKDEsMSldCitUZXN0IDE3LCBSVEw6CisgIEV4dGVuZGlu
ZyBmb3J3YXJkOiAi4aqcY2FyIERFRiBBQkMu4aqdIlsoMSwxKSwgKDEsMTMpXQorICBFeHRlbmRp
bmcgYmFja3dhcmQ6ICAi4aqcY2FyIERFRiBBQkMu4aqdIlsoMSwxMyksICgxLDEpXQorVGVzdCAx
OCwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqd
LiIiWygwLDApLCAoMCwyNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxj
YXIgREVGIEFCQ+GqnS4iIlsoMCwyNCksICgwLDApXQorVGVzdCAxOCwgUlRMOgorICBFeHRlbmRp
bmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIiWygwLDApLCAoMCwyNCld
CisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnS4iIlso
MCwyNCksICgwLDApXQorVGVzdCAxOSwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkdISSBK
S0wgTU5PICfhqptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLhqp0nPyJbKDAsMCksICgwLDQw
KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLhqpxj
YXIgREVGIEFCQ+GqnSLhqp0nPyJbKDAsNDApLCAoMCwwKV0KK1Rlc3QgMTksIFJUTDoKKyAgRXh0
ZW5kaW5nIGZvcndhcmQ6ICJHSEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPh
qp0i4aqdJz8iWygwLDApLCAoMCw0MCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJHSEkgSktM
IE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWygwLDQwKSwgKDAsMCld
CitUZXN0IDIwLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiQUJDIGFiYyBERUYiWygwLDAp
LCAoMCwxMSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJBQkMgYWJjIERFRiJbKDAsMTEpLCAo
MCwwKV0KK1Rlc3QgMjAsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJBQkMgYWJjIERFRiJb
KDAsMCksICgwLDExKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkFCQyBhYmMgREVGIlsoMCwx
MSksICgwLDApXQorVGVzdCAyMSwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDApLCAoMCw4KSwg
KDAsMTYpLCAoMCwyNiksICgwLDM0KSwgKDAsNDIpLCAoMCw1MCksICgwLDU4KSwgKDAsNjYpLCAo
MCw3NCksICgwLDgyKSwgKDAsOTApLCAoMCw5OCksICgwLDEwNSldCisgIEV4dGVuZGluZyBiYWNr
d2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
IlsoMCwxMDUpLCAoMCwwKV0KK1Rlc3QgMjEsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIlsoMCwwKSwg
KDAsNyldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIlsoMCw3KSwgKDAsMCldCitUZXN0IDIyLCBMVFI6Cisg
IEV4dGVuZGluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnICJbKDAsMCksICgwLDgpLCAoMCwxNiksICgwLDI2KSwgKDAsMzQpLCAoMCw0
MiksICgwLDUwKSwgKDAsNTgpLCAoMCw2NiksICgwLDc0KSwgKDAsODIpLCAoMCw5MCksICgwLDk4
KSwgKDAsMTA1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgImFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDEwNSksICgwLDApXQorVGVzdCAyMiwg
UlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDApLCAoMCw3KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJk
OiAgImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygw
LDcpLCAoMCwwKV0KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5k
LXNlbGVjdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2V4dGVuZC1zZWxlY3Rpb24uaHRtbAkocmV2aXNpb24gNDI4MDcpCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTI0Nyw2ICsyNDcsMjcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAg
IGZ1bmN0aW9uIHRlc3RFeHRlbmRpbmdMaW5lQm91bmRhcnkodGVzdHMsIHNlbCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpcmVjdGlvbiA9ICJsdHIiOworICAgICAg
ICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpcbiAgRXh0ZW5kaW5nIGZv
cndhcmQ6ICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwgMCk7
CisgICAgICAgICAgICAgICAgdmFyIGx0clJpZ2h0UG9zID0gZXh0ZW5kaW5nU2VsZWN0aW9uKHNl
bCwgImZvcndhcmQiLCAibGluZUJvdW5kYXJ5IiwgMCk7CisgICAgCisgICAgICAgICAgICAgICAg
bG9nKCIgIEV4dGVuZGluZyBiYWNrd2FyZDogICIpOworICAgICAgICAgICAgICAgIHZhciBsdHJM
ZWZ0UG9zID0gZXh0ZW5kaW5nU2VsZWN0aW9uKHNlbCwgImJhY2t3YXJkIiwgImxpbmVCb3VuZGFy
eSIsIDApOworCisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlyZWN0aW9uID0gInJ0
bCI7CisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgUlRMOlxuICBF
eHRlbmRpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRl
c3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgbHRyUmlnaHRQb3MgPSBleHRlbmRpbmdT
ZWxlY3Rpb24oc2VsLCAiZm9yd2FyZCIsICJsaW5lQm91bmRhcnkiLCAwKTsKKyAgICAKKyAgICAg
ICAgICAgICAgICBsb2coIiAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAgICAg
ICAgdmFyIGx0ckxlZnRQb3MgPSBleHRlbmRpbmdTZWxlY3Rpb24oc2VsLCAiYmFja3dhcmQiLCAi
bGluZUJvdW5kYXJ5IiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBv
bmxvYWQgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghd2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQpAQCAtMjY5LDMxICsyOTAsNjQgQEAKICAgICAgICAgICAgIHRl
c3RFeHRlbmRpbmdTZWxlY3Rpb25Gb3JFbmNsb3NpbmdCbG9jayh0ZXN0cywgIHNlbCwgImNoYXJh
Y3RlciIsIDEpOwogICAgICAgICAgICAgbG9nKCJcblxuXG5cblxuRXh0ZW5kaW5nIGJ5IHdvcmRc
biIpOwogICAgICAgICAgICAgdGVzdEV4dGVuZGluZ1NlbGVjdGlvbkZvckVuY2xvc2luZ0Jsb2Nr
KHRlc3RzLCAgc2VsLCAid29yZCIsIDEpOworCisgICAgICAgICAgICB0ZXN0cyA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImhvbWUtZW5kLXRlc3QiKTsKKyAgICAgICAgICAgIHZh
ciBzZWwgPSBnZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGxvZygiXG5cblxuRXh0ZW5kaW5n
IGJ5IGxpbmVCb3VuZGFyeVxuIik7CisgICAgICAgICAgICB0ZXN0RXh0ZW5kaW5nTGluZUJvdW5k
YXJ5KHRlc3RzLCAgc2VsKTsKICAgICAgICAgfQogCiAgICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8
Ym9keT4KLTxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKzxkaXYgY29udGVudGVk
aXRhYmxlIGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPgogYWJjICYjMTQ4ODsmIzE0ODk7JiMx
NDkwOyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgogPC9kaXY+Ci08ZGl2IGNvbnRlbnRl
ZGl0YWJsZSBjbGFzcz0idGVzdCI+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCBo
b21lLWVuZC10ZXN0Ij4KICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyB4eXogJiMxNDkxOyYjMTQ5Mjsm
IzE0OTM7IGRlZiAmIzE0OTQ7JiMxNDk1OyYjMTQ5NjsKIDwvZGl2PgotPGRpdiBjb250ZW50ZWRp
dGFibGUgY2xhc3M9InRlc3QiPgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QgaG9t
ZS1lbmQtdGVzdCI+CiAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7
ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOwogPC9kaXY+Ci08ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFz
cz0idGVzdCI+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCBob21lLWVuZC10ZXN0
Ij4KIGFiYyBlZmQgZGFiZWIKIDwvZGl2PgogCiAKLTxkaXYgY29udGVudGVkaXRhYmxlICBjbGFz
cz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IHJ0bCI+aXBzdW0gZG9sb3Ig
c2l0PC9zcGFuPiBhbWV0PC9kaXY+Ci08ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+
TG9yZW0gPHNwYW4gIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4K
LTxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJk
aXJlY3Rpb246IGx0ciI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Ci08ZGl2IGNv
bnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIGRpcj0ibHRyIj5pcHN1bSBk
b2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0i
dGVzdCBob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogcnRsIj5p
cHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNs
YXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxzcGFuICBkaXI9InJ0bCI+aXBzdW0gZG9s
b3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRl
c3QgaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+aXBz
dW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFz
cz0idGVzdCBob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9y
IHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVz
dEVuY2xvc2luZ0Jsb2NrIGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1
bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldHQ8L2Rpdj4KKworPGRpdiBjb250ZW50ZWRpdGFibGUgIGNs
YXNzPSJob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogbHRyIj5p
cHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlICBj
bGFzcz0iaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+
aXBzdW0gZG9sb3I8ZGl2ID4ganVzdCBhIHRlc3Q8L2Rpdj4gc2l0PC9zcGFuPiBhbWV0PC9kaXY+
Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0iaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4g
IGRpcj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVu
dGVkaXRhYmxlIGNsYXNzPSJob21lLWVuZC10ZXN0Ij5Mb3JlbSA8ZGl2ICBkaXI9Imx0ciI+aXBz
dW0gZG9sb3Igc2l0PC9kaXY+IGFtZXQ8L2Rpdj4KKworPGRpdiBjbGFzcz0iaG9tZS1lbmQtdGVz
dCIgY29udGVudGVkaXRhYmxlPgorCUp1c3QKKwk8c3Bhbj50ZXN0aW5nINeo16c8L3NwYW4+CisJ
15HXldeT16cKKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRp
dGFibGU+CisJSnVzdAorCTxzcGFuPnRlc3Rpbmcgd2hhdDwvc3Bhbj4KKwlldmVyCis8L2Rpdj4K
KworCis8ZGl2IGNsYXNzPSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRpdGFibGU+Y2FyIG1lYW5z
ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOy48L2Rpdj4KKzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRlc3Qi
IGNvbnRlbnRlZGl0YWJsZT4mI3gyMDJCO2NhciAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4
OyYjMTQ4OTsmIzE0OTA7LiYjeDIwMmM7PC9kaXY+Cis8ZGl2IGNsYXNzPSJob21lLWVuZC10ZXN0
IiBjb250ZW50ZWRpdGFibGU+aGUgc2FpZCAiJiN4MjAyQjtjYXIgJiMxNDkxOyYjMTQ5MjsmIzE0
OTM7ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyYjeDIwMmM7LiI8L2Rpdj4KKzxkaXYgY2xhc3M9Imhv
bWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0YWJsZT4mIzE0OTQ7JiMxNDk1OyYjMTQ5NjsgJiMxNDk3
OyYjMTQ5ODsmIzE0OTk7ICYjMTUwMDsmIzE1MDE7JiMxNTAyOyAnJiN4MjAyYTtoZSBzYWlkICIm
I3gyMDJCO2NhciAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7JiN4
MjAyYzsiJiN4MjAyYzsnPzwvZGl2PgorCiAKLTxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0
ZXN0RW5jbG9zaW5nQmxvY2siPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8
L2Rpdj4gYW1ldHQ8L2Rpdj4KKzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0
YWJsZT4mIzE0ODg7JiMxNDg5OyYjMTQ5MDsgYWJjICYjMTQ5MTsmIzE0OTI7JiMxNDkzOzxiciAv
PmVkZiAmIzE0OTQ7JiMxNDk1OyYjMTQ5NjsgYWJyZWJnPC9kaXY+Cis8ZGl2IGNsYXNzPSJob21l
LWVuZC10ZXN0IiBjb250ZW50ZWRpdGFibGUgc3R5bGU9ImxpbmUtYnJlYWs6YmVmb3JlLXdoaXRl
LXNwYWNlOyB3aWR0aDoxMDBweCI+YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIDwvZGl2PgorPGRpdiBjbGFzcz0iaG9tZS1lbmQtdGVzdCIgY29udGVudGVk
aXRhYmxlIHN0eWxlPSJsaW5lLWJyZWFrOmFmdGVyLXdoaXRlLXNwYWNlOyB3aWR0aDoxMDBweCI+
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIDwvZGl2Pgog
CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACitUZXN0IDEsIExUUjoKKyAgTW92aW5n
IGZvcndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNr
d2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDEsIFJUTDoKKyAg
TW92aW5nIGZvcndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMSwgMjBdCisgIE1vdmlu
ZyBiYWNrd2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitUZXN0IDIsIExU
UjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwgMjBdCisg
IE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMjAsIDFdCitUZXN0
IDIsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMSwg
MjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbMjAsIDFd
CitUZXN0IDMsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyBERUYgQUJDXG4iWzEsIDEy
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsxMiwgMV0KK1Rlc3QgMywg
UlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbMSwgMTJdCisgIE1vdmlu
ZyBiYWNrd2FyZDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorVGVzdCA0LCBMVFI6CisgIE1v
dmluZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgYmFja3dh
cmQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA0LCBSVEw6CisgIE1vdmluZyBm
b3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAi
XG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA1LCBMVFI6CisgIE1vdmluZyBmb3J3YXJk
OiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVd
LCAiTG9yZW0gIlswXQorVGVzdCA1LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlsw
XSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlsw
XQorVGVzdCA2LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgImlwc3VtIGRv
bG9yIlsxMV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgImlwc3VtIGRvbG9yIlsxMV0sICJMb3JlbSAi
WzBdCitUZXN0IDYsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiaXBzdW0g
ZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVt
ICJbMF0KK1Rlc3QgNywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1l
dCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3Qg
NywgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92
aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOCwgTFRSOgorICBN
b3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVt
ICJbNSwgMF0KK1Rlc3QgOCwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0K
KyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgOSwgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAg
IiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOSwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDog
IkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwg
IkxvcmVtICJbMF0KK1Rlc3QgMTAsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBd
LCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWzEx
XSwgIkxvcmVtICJbMF0KK1Rlc3QgMTAsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAi
WzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3Ii
WzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3Jl
bSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJbNV0sICJMb3Jl
bSAiWzBdCitUZXN0IDExLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBh
bWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVz
dCAxMiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJh
Y2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgMTIsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6
ICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBiYWNrd2FyZDogICJMb3JlbSAiWzUsIDBdCitUZXN0
IDEzLCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJbMl0sICJcbglCRkRYXG4i
WzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbglCRkRYXG4iWzZdLCAiXG4JSnVzdFxuCSJbMl0K
K1Rlc3QgMTMsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbglKdXN0XG4JIlsyXSwgIlxuCUJG
RFhcbiJbNl0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuCUJGRFhcbiJbNl0sICJcbglKdXN0XG4J
IlsyXQorVGVzdCAxNCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWzJdLCAi
XG4JZXZlclxuIls2XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG4JZXZlclxuIls2XSwgIlxuCUp1
c3RcbgkiWzJdCitUZXN0IDE0LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJb
Ml0sICJcbglldmVyXG4iWzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbglldmVyXG4iWzZdLCAi
XG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTUsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJjYXIgbWVh
bnMgQUJDLiJbMCwgMTRdCisgIE1vdmluZyBiYWNrd2FyZDogICJjYXIgbWVhbnMgQUJDLiJbMTQs
IDBdCitUZXN0IDE1LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiY2FyIG1lYW5zIEFCQy4iWzAs
IDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiY2FyIG1lYW5zIEFCQy4iWzE0LCAwXQorVGVzdCAx
NiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJDLuGqnSJbMSwgMTNdCisg
IE1vdmluZyBiYWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEzLCAxXQorVGVzdCAxNiwg
UlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJDLuGqnSJbMSwgMTNdCisgIE1v
dmluZyBiYWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEzLCAxXQorVGVzdCAxNywgTFRS
OgorICBNb3ZpbmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIiWzAsIDI0
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0uIiJbMjQs
IDBdCitUZXN0IDE3LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiaGUgc2FpZCAi4aqcY2FyIERF
RiBBQkPhqp0uIiJbMCwgMjRdCisgIE1vdmluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxjYXIg
REVGIEFCQ+GqnS4iIlsyNCwgMF0KK1Rlc3QgMTgsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJH
SEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzAsIDQwXQor
ICBNb3ZpbmcgYmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNhaWQgIuGqnGNhciBERUYg
QUJD4aqdIuGqnSc/Ils0MCwgMF0KK1Rlc3QgMTgsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJH
SEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzAsIDQwXQor
ICBNb3ZpbmcgYmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNhaWQgIuGqnGNhciBERUYg
QUJD4aqdIuGqnSc/Ils0MCwgMF0KK1Rlc3QgMTksIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJB
QkMgYWJjIERFRiJbMCwgMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJBQkMgYWJjIERFRiJbMTEs
IDBdCitUZXN0IDE5LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiQUJDIGFiYyBERUYiWzAsIDEx
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiQUJDIGFiYyBERUYiWzExLCAwXQorVGVzdCAyMCwgTFRS
OgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAwXQorVGVzdCAyMCwgUlRM
OgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAwXQorVGVzdCAyMSwgTFRS
OgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAwXQorVGVzdCAyMSwgUlRM
OgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAwXQorCkluZGV4OiBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1NiBAQAorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVu
dC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICAgIDxzdHlsZT4K
KyAgICAgICAgZGl2LnRlc3QgeworICAgICAgICAgICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVh
ZC13cml0ZTsKKyAgICAgICAgICAgIHBhZGRpbmc6IDRweDsKKyAgICAgICAgICAgIGJvcmRlcjog
MXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgICAgICAgICBtYXJnaW46IDRweCA0cHggNHB4IDI0
cHg7CisgICAgICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgICAgICAgZm9udC1mYW1pbHk6
IEx1Y2lkYSBHcmFuZGU7CisgICAgICAgICAgICBjb3VudGVyLWluY3JlbWVudDogdGVzdC1udW1i
ZXI7CisgICAgICAgIH0KKyAgICAgICAgZGl2LnRlc3Q6YmVmb3JlIHsgY29udGVudDogY291bnRl
cih0ZXN0LW51bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogOHB4OyBmb250LXNpemU6
IHgtc21hbGw7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBweDsgfQorICAgICAgICBkaXYu
dGVzdCBzcGFuIHsgYmFja2dyb3VuZC1jb2xvcjogI2RlZjsgfQorICAgICAgICBkaXYudGVzdCBp
bWcgeyB3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVl
bjsgfQorICAgICAgICBkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdo
dGJsdWU7IH0KKyAgICAgICAgZGl2LnRlc3QgZGl2IHsgYm9yZGVyOiAxcHggZGFzaGVkIHBpbms7
IHBhZGRpbmc6IDNweDsgaGVpZ2h0OiAyZW07IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+
CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBv
c2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgZGlyZWN0aW9uKQorICAgICAgICB7CisgICAg
ICAgICAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7
IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5mb2N1c09mZnNldH0pOworICAgICAg
ICAgICAgc2VsLm1vZGlmeSgibW92ZSIsIGRpcmVjdGlvbiwgImxpbmVCb3VuZGFyeSIpOworICAg
ICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBz
ZWwuZm9jdXNPZmZzZXR9KTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbnM7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBmb2xkKHN0cmluZykKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJp
bmcubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hhciA9IHN0cmluZy5jaGFy
Q29kZUF0KGkpOworICAgICAgICAgICAgICAgIGlmIChjaGFyID49IDB4MDVkMCkKKyAgICAgICAg
ICAgICAgICAgICAgY2hhciAtPSAweDA1OGY7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hh
ciA9PSAxMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlxcbiI7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBs
b2dQb3NpdGlvbnMocG9zaXRpb25zKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlv
bnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIl0iKTsKKyAgICAg
ICAgICAgICAgICAgICAgbG9nKCIsICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5ub2Rl
KQorICAgICAgICAgICAgICAgICAgICBsb2coKHBvc2l0aW9uc1tpXS5ub2RlIGluc3RhbmNlb2Yg
VGV4dCA/ICciJyArIGZvbGQocG9zaXRpb25zW2ldLm5vZGUuZGF0YSkgKyAnIicgOiAiPCIgKyBw
b3NpdGlvbnNbaV0ubm9kZS50YWdOYW1lICsgIj4iKSArICJbIik7CisgICAgICAgICAgICAgICAg
bG9nKHBvc2l0aW9uc1tpXS5vZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9n
KCJdIik7CisgICAgICAgIH0KKworICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgdGVzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCJ0ZXN0Iik7CisgICAgICAgICAgICB2YXIgc2VsID0gZ2V0U2VsZWN0aW9u
KCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ1JpZ2h0OworICAgICAgICAgICAg
ICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworICAgIAorICAgICAgICAgICAgICAgIGxvZygi
VGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpcbiAgTW92aW5nIGZvcndhcmQ6ICIpOworICAgICAg
ICAgICAgICAgIHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwgMCk7CisgICAgICAgICAgICAgICAg
cG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJm
b3J3YXJkIik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ1Jp
Z2h0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2co
IiAgTW92aW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5n
TGVmdCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImJhY2t3YXJkIik7CisgICAg
ICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xlZnQpOworICAgICAgICAg
ICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpcmVj
dGlvbiA9ICJydGwiOworCisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsg
IiwgUlRMOlxuICBNb3ZpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBv
c2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdMZWZ0
ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiZm9yd2FyZCIpOworICAgICAgICAg
ICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsKKyAgICAgICAgICAgICAg
ICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92aW5nIGJhY2t3YXJkOiAg
Iik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3Zp
bmdJbkRpcmVjdGlvbihzZWwsICJiYWNrd2FyZCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0
aW9ucyhwb3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOwor
CisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKwor
PGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJjICYjMTQ4ODsmIzE0ODk7JiMx
NDkwOyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgorPC9kaXY+Cis8ZGl2IGNvbnRlbnRl
ZGl0YWJsZSBjbGFzcz0idGVzdCI+CismIzE0ODg7JiMxNDg5OyYjMTQ5MDsgeHl6ICYjMTQ5MTsm
IzE0OTI7JiMxNDkzOyBkZWYgJiMxNDk0OyYjMTQ5NTsmIzE0OTY7Cis8L2Rpdj4KKzxkaXYgY29u
dGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4ODsmIzE0ODk7JiMxNDkwOyAmIzE0OTE7
JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7Cis8L2Rpdj4KKzxkaXYgY29udGVu
dGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KK2FiYyBlZmQgZGFiZWIKKzwvZGl2PgorCis8ZGl2IGNv
bnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9u
OiBydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRp
dGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogcnRsIj5p
cHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4K
KzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJydGwi
Pmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUg
Y2xhc3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4g
YW1ldDwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxz
cGFuICBzdHlsZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwv
ZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5
bGU9ImRpcmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBz
aXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5M
b3JlbSA8c3BhbiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2Pgor
PGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0ibHRyIj5p
cHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8ZGl2IGNsYXNzPSJ0ZXN0IiBzdHls
ZT0iZGlyZWN0aW9uOiBsdHI7IiBjb250ZW50ZWRpdGFibGU+CisJSnVzdAorCTxzcGFuPnRlc3Rp
bmcg16jXpzwvc3Bhbj4KKwnXkdeV15PXpworPC9kaXY+CisKKzxkaXYgY2xhc3M9InRlc3QiIHN0
eWxlPSJkaXJlY3Rpb246IGx0cjsiIGNvbnRlbnRlZGl0YWJsZT4KKwlKdXN0CisJPHNwYW4+dGVz
dGluZyB3aGF0PC9zcGFuPgorCWV2ZXIKKzwvZGl2PgorCisKKzxkaXYgY2xhc3M9InRlc3QiIGNv
bnRlbnRlZGl0YWJsZT5jYXIgbWVhbnMgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7LjwvZGl2PgorPGRp
diBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPiYjeDIwMkI7Y2FyICYjMTQ5MTsmIzE0OTI7
JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsuJiN4MjAyYzs8L2Rpdj4KKzxkaXYgY2xhc3M9
InRlc3QiIGNvbnRlbnRlZGl0YWJsZT5oZSBzYWlkICImI3gyMDJCO2NhciAmIzE0OTE7JiMxNDky
OyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7JiN4MjAyYzsuIjwvZGl2PgorPGRpdiBjbGFz
cz0idGVzdCIgY29udGVudGVkaXRhYmxlPiYjMTQ5NDsmIzE0OTU7JiMxNDk2OyAmIzE0OTc7JiMx
NDk4OyYjMTQ5OTsgJiMxNTAwOyYjMTUwMTsmIzE1MDI7ICcmI3gyMDJhO2hlIHNhaWQgIiYjeDIw
MkI7Y2FyICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsmI3gyMDJj
OyImI3gyMDJjOyc/PC9kaXY+CisKKworPGRpdiBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxl
PiYjMTQ4ODsmIzE0ODk7JiMxNDkwOyBhYmMgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7PGJyIC8+ZWRm
ICYjMTQ5NDsmIzE0OTU7JiMxNDk2OyBhYnJlYmc8L2Rpdj4KKzxkaXYgY2xhc3M9InRlc3QiIGNv
bnRlbnRlZGl0YWJsZSBzdHlsZT0ibGluZS1icmVhazpiZWZvcmUtd2hpdGUtc3BhY2U7IHdpZHRo
OjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGUgc3R5bGU9ImxpbmUtYnJl
YWs6YWZ0ZXItd2hpdGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3By
ZT4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29889</attachid>
            <date>2009-04-29 12:37:55 -0700</date>
            <delta_ts>2009-04-29 16:35:16 -0700</delta_ts>
            <desc>patch w/ Layout test (version 7)</desc>
            <filename>home.end.v7</filename>
            <type>text/plain</type>
            <size>38445</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mjk5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDQtMjkgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRM
OiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRl
eHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQpOiBDaGFuZ2UgY2FsbGluZyBlbmRPZkxpbmUoKQorICAgICAgICB0byBsb2dpY2FsRW5k
T2ZMaW5lKCkgd2hlbiBncmFudWxhcml0eSBpcyBMaW5lQm91bmRhcnkuCisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKTogQ2hhbmdlIGNh
bGxpbmcgZW5kT2ZMaW5lKCkKKyAgICAgICAgdG8gbG9naWNhbEVuZE9mTGluZSgpIHdoZW4gZ3Jh
bnVsYXJpdHkgaXMgTGluZUJvdW5kYXJ5CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6IENoYW5nZSBjYWxsaW5nIAorICAgICAg
ICBzdGFydE9mTGluZSgpIHRvIGxvZ2ljYWxTdGFydE9mTGluZSgpIHdoZW4gZ3JhbnVsYXJpdHkg
aXMgTGluZUJvdW5kYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5TW92aW5nQmFja3dhcmQpOiBDaGFuZ2UgY2FsbGluZyBzdGFydE9mTGluZSgpIAorICAg
ICAgICB0byBsb2dpY2FsU3RhcnRPZkxpbmUoKSB3aGVuIGdyYW51bGFyaXR5IGlzIExpbmVCb3Vu
ZGFyeS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOiBBZGRlZC4gUmVjb25zdHJ1Y3QgbGVh
ZiBib3hlcyBpbiBsb2dpY2FsIG9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbFN0
YXJ0Qm94QW5kTm9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbEVuZEJv
eEFuZE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9u
Rm9yTGluZSk6IEFkZGVkLiBTaW1pbGFyIHRvIHN0YXJ0UG9zaXRpb25Gb3JMaW5lLgorICAgICAg
ICAoV2ViQ29yZTo6bG9naWNhbFN0YXJ0T2ZMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gc3RhcnRP
ZkxpbmUuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKTogQWRk
ZWQuIFNpbWlsYXIgdG8gZW5kUG9zaXRpb25Gb3JMaW5lLgorICAgICAgICAoV2ViQ29yZTo6aW5T
YW1lTG9naWNhbExpbmUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxFbmRPZkxp
bmUpOiBBZGRlZC4gU2ltaWxhciB0byBlbmRPZkxpbmUuCisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmg6CisKIDIwMDktMDQtMjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2ZWFsIGN1cnJlbnQgZXhlY3V0aW9uIGxpbmUgb25jZSBT
b3VyY2VGcmFtZSBjb250ZW50IGlzIGxvYWRlZC4gCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MjgwNykKKysrIFdlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBA
IFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgICAgIHBv
cyA9IGVuZE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZp
bml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6
Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgp
LCBtX3NlbC5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBwb3MgPSBsb2dpY2FsRW5kT2ZMaW5l
KFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgICAg
ICBwb3MgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2Vs
LmFmZmluaXR5KCkpKTsKQEAgLTM5NSw3ICszOTUsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKFZpc2li
bGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICAgICAgcG9zID0gZW5k
T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwor
ICAgICAgICAgICAgcG9zID0gbG9naWNhbEVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwu
ZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFBhcmFncmFwaEJvdW5kYXJ5OgogICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CkBAIC00NzQs
NyArNDc0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAg
ICAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFy
dCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNpYmxlUG9z
aXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOworICAgICAgICAgICAgcG9z
ID0gbG9naWNhbFN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3Nl
bC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQYXJhZ3Jh
cGhCb3VuZGFyeToKICAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKQEAgLTU0MSw3ICs1NDEs
NyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAg
ICBwb3MgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1f
c2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmVC
b3VuZGFyeToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbiht
X3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBwb3MgPSBsb2dp
Y2FsU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmlu
aXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBhcmFncmFwaEJvdW5k
YXJ5OgogICAgICAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24o
bV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAkocmV2aXNpb24gNDI4MDcpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNCArMTA1NSwxNzcgQEAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mRWRpdGFibGVDb250ZW50KGNvbgogICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCitzdGF0aWMgdm9pZCBnZXRMZWFm
Qm94ZXNJbkxvZ2ljYWxPcmRlcihSb290SW5saW5lQm94KiByb290Qm94LCBWZWN0b3I8SW5saW5l
Qm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKSB7CisgICAgdW5zaWduZWQgY2hhciBtaW5M
ZXZlbCA9IDEyODsKKyAgICB1bnNpZ25lZCBjaGFyIG1heExldmVsID0gMDsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgSW5saW5lQm94KiByID0gcm9vdEJveC0+Zmlyc3RMZWFmQ2hpbGQo
KTsKKyAgICAvLyBGaXJzdCBmaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBsZXZlbHMsCisgICAgLy8g
YW5kIGluaXRpYWxpemUgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIgd2l0aCB0aGUgbGVhZiBib3hl
cyBpbiB2aXN1YWwgb3JkZXIuCisgICAgd2hpbGUgKHIpIHsKKyAgICAgICAgaWYgKHItPmJpZGlM
ZXZlbCgpID4gbWF4TGV2ZWwpCisgICAgICAgICAgICBtYXhMZXZlbCA9IHItPmJpZGlMZXZlbCgp
OworICAgICAgICBpZiAoci0+YmlkaUxldmVsKCkgPCBtaW5MZXZlbCkKKyAgICAgICAgICAgIG1p
bkxldmVsID0gci0+YmlkaUxldmVsKCk7CisgICAgICAgIGxlYWZCb3hlc0luTG9naWNhbE9yZGVy
LmFwcGVuZChyKTsKKyAgICAgICAgciA9IHItPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgKytj
b3VudDsKKyAgICB9CisKKyAgICBpZiAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
dWFsbHlPcmRlcmVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBSZXZlcnNlIG9mIHJlb3Jk
ZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIEwy
LiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qg
b2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNl
cXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCisK
KyAgICAvLyBSZXZlcnNpbmcgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgaXMgb25seSBkb25l
IHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsLgorICAgIGlmICghKG1pbkxldmVsICUgMikpCisg
ICAgICAgIG1pbkxldmVsKys7CisgICAgCisgICAgSW5saW5lQm94KiogZW5kID0gbGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXIuZW5kKCk7CisgICAgd2hpbGUgKG1pbkxldmVsIDw9IG1heExldmVsKSB7
CisgICAgICAgIElubGluZUJveCoqIGl0ZXIgPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5iZWdp
bigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChp
dGVyICE9IGVuZCkgeworICAgICAgICAgICAgICAgIGlmICgoKml0ZXIpLT5iaWRpTGV2ZWwoKSA+
PSBtaW5MZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
KytpdGVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSW5saW5lQm94KiogZmlyc3QgPSBp
dGVyOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAg
aWYgKCgqaXRlciktPmJpZGlMZXZlbCgpIDwgbWluTGV2ZWwpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIElubGluZUJveCoqIGxhc3QgPSBpdGVyOworICAgICAgICAgICAgc3RkOjpyZXZlcnNlKGZp
cnN0LCBsYXN0KTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgKyttaW5MZXZl
bDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdldExvZ2ljYWxTdGFydEJveEFuZE5vZGUoUm9v
dElubGluZUJveCogcm9vdEJveCwgSW5saW5lQm94KiYgc3RhcnRCb3gsIE5vZGUqJiBzdGFydE5v
ZGUpCit7CisgICAgVmVjdG9yPElubGluZUJveCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOwor
ICAgIGdldExlYWZCb3hlc0luTG9naWNhbE9yZGVyKHJvb3RCb3gsIGxlYWZCb3hlc0luTG9naWNh
bE9yZGVyKTsKKyAgICBzdGFydEJveCA9IDA7CisgICAgc3RhcnROb2RlID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHN0YXJ0Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV07CisgICAgICAg
IHN0YXJ0Tm9kZSA9IHN0YXJ0Qm94LT5yZW5kZXJlcigpLT5ub2RlKCk7CisgICAgICAgIGlmIChz
dGFydE5vZGUpCisgICAgICAgICAgICByZXR1cm47IAorICAgIH0KK30KKworc3RhdGljIHZvaWQg
Z2V0TG9naWNhbEVuZEJveEFuZE5vZGUoUm9vdElubGluZUJveCogcm9vdEJveCwgSW5saW5lQm94
KiYgZW5kQm94LCBOb2RlKiYgZW5kTm9kZSkKK3sKKyAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXI7CisgICAgZ2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIocm9v
dEJveCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGVuZEJveCA9IDA7CisgICAgZW5k
Tm9kZSA9IDA7CisgICAgLy8gR2VuZXJhdGVkIGNvbnRlbnQgKGUuZy4gbGlzdCBtYXJrZXJzIGFu
ZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyCisgICAgLy8gcHNldWRvZWxlbWVudHMpIGhhdmUgbm8g
Y29ycmVzcG9uZGluZyBET00gZWxlbWVudCwgYW5kIHNvIGNhbm5vdCBiZQorICAgIC8vIHJlcHJl
c2VudGVkIGJ5IGEgVmlzaWJsZVBvc2l0aW9uLiAgVXNlIHdoYXRldmVyIHByZWNlZGVzIGluc3Rl
YWQuCisgICAgZm9yIChzaXplX3QgaSA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsg
aSA+IDA7IC0taSkgeyAKKyAgICAgICAgZW5kQm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJb
aSAtIDFdOworICAgICAgICBlbmROb2RlID0gZW5kQm94LT5yZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgICAgIGlmIChlbmROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjKQoreworICAgIGlmIChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gcm9vdEJv
eEZvckxpbmUoYyk7CisgICAgaWYgKCFyb290Qm94KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBW
aXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CisgICAgICAgIC8v
IFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVk
IGJsb2Nrcy4KKyAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAg
ICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1Jl
bmRlckJsb2NrKCkgJiYgIXAubV9vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25B
dm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKGMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOworICAgIH0KKyAgICAKKyAgICBJbmxpbmVCb3gqIGxvZ2ljYWxT
dGFydEJveDsKKyAgICBOb2RlKiBsb2dpY2FsU3RhcnROb2RlOworICAgIGdldExvZ2ljYWxTdGFy
dEJveEFuZE5vZGUocm9vdEJveCwgbG9naWNhbFN0YXJ0Qm94LCBsb2dpY2FsU3RhcnROb2RlKTsK
KworICAgIGlmICghbG9naWNhbFN0YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOworCisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbG9naWNhbFN0YXJ0Qm94LT5jYXJldE1p
bk9mZnNldCgpOworICAKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0
aW9uKGxvZ2ljYWxTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICByZXR1
cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKHZpc1Bvcyk7Cit9CisKK1Zp
c2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBj
KQoreworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBsb2dpY2FsU3RhcnRQb3NpdGlvbkZv
ckxpbmUoYyk7CisgICAgCisgICAgaWYgKHZpc1Bvcy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGMuaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHZpc1Bvcyk7CisKKyAgICByZXR1cm4g
Yy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQWZ0ZXIodmlzUG9zKTsKK30KKworc3RhdGljIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYykKK3sKKyAgICBpZiAoYy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOworCisgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IHJvb3RCb3hGb3JMaW5l
KGMpOworICAgIGlmICghcm9vdEJveCkgeworICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBv
c2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAorICAgICAgICAvLyBSb290SW5s
aW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3Mu
CisgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIGlmIChw
Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9j
aygpICYmICFwLm1fb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgSW5saW5lQm94KiBsb2dpY2Fs
RW5kQm94OworICAgIE5vZGUqIGxvZ2ljYWxFbmROb2RlOworICAgIGdldExvZ2ljYWxFbmRCb3hB
bmROb2RlKHJvb3RCb3gsIGxvZ2ljYWxFbmRCb3gsIGxvZ2ljYWxFbmROb2RlKTsKKyAgICBpZiAo
IWxvZ2ljYWxFbmROb2RlKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAg
CisgICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgaWYgKGxvZ2ljYWxFbmROb2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSkKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICBlbHNlIGlmIChsb2dpY2Fs
RW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgeworICAgICAgICBJbmxpbmVUZXh0Qm94KiBlbmRU
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihsb2dpY2FsRW5kQm94KTsKKyAg
ICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKKyAgICAgICAgaWYgKCFlbmRU
ZXh0Qm94LT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgZW5kT2Zmc2V0ICs9IGVuZFRleHRC
b3gtPmxlbigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxvZ2lj
YWxFbmROb2RlLCBlbmRPZmZzZXQsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKK30KKworYm9v
bCBpblNhbWVMb2dpY2FsTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5pc05vdE51bGwoKSAmJiBsb2dpY2FsU3Rh
cnRPZkxpbmUoYSkgPT0gbG9naWNhbFN0YXJ0T2ZMaW5lKGIpOworfQorCitWaXNpYmxlUG9zaXRp
b24gbG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCit7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxvZ2ljYWxFbmRQb3NpdGlvbkZvckxpbmUoYyk7CisgICAg
CisgICAgLy8gTWFrZSBzdXJlIHRoZSBlbmQgb2YgbGluZSBpcyBhdCB0aGUgc2FtZSBsaW5lIGFz
IHRoZSBnaXZlbiBpbnB1dCBwb3NpdGlvbi4gRm9yIGEgd3JhcHBpbmcgbGluZSwgdGhlIGxvZ2lj
YWwgZW5kCisgICAgLy8gcG9zaXRpb24gZm9yIHRoZSBub3QtbGFzdC0yLWxpbmVzIG1pZ2h0IGlu
Y29ycmVjdGx5IGhhbmQgYmFjayB0aGUgbG9naWNhbCBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGlu
ZS4gCisgICAgLy8gRm9yIGV4YW1wbGUsIDxkaXYgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIiBz
dHlsZT0ibGluZS1icmVhazpiZWZvcmUtd2hpdGUtc3BhY2UiPmFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnCisgICAgLy8gYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIDwvZGl2PgorICAgIC8vIEluIHRo
aXMgY2FzZSwgdXNlIHRoZSBwcmV2aW91cyBwb3NpdGlvbiBvZiB0aGUgY29tcHV0ZWQgbG9naWNh
bCBlbmQgcG9zaXRpb24uCisgICAgaWYgKCFpblNhbWVMb2dpY2FsTGluZShjLCB2aXNQb3MpKQor
ICAgICAgICB2aXNQb3MgPSB2aXNQb3MucHJldmlvdXMoKTsKKyAgICAKKyAgICByZXR1cm4gYy5o
b25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKHZpc1Bvcyk7Cit9CisKIH0KSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuaAkocmV2aXNpb24gNDI4MDcpCisrKyBXZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1MywxMSBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKIFZpc2libGVQ
b3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBpbnQgeCk7
CiBib29sIGluU2FtZUxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmKTsKK2Jvb2wgaW5TYW1lTG9naWNhbExpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIGJvb2wgaXNTdGFydE9mTGluZShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJik7CiBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmKTsKK1Zpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxFbmRPZkxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYpOwogCiAvLyBwYXJhZ3JhcGhzIChwZXJoYXBzIGEgbWlzbm9tZXIsIGNhbiBi
ZSBkaXZpZGVkIGJ5IGxpbmUgYnJlYWsgZWxlbWVudHMpCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQy
OTk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMDktMDQtMjkgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRMOiBIb21lL0Vu
ZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRleHQgaW4gUlRM
IGRvY3VtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9u
LWV4cGVjdGVkLnR4dDogQWRkZWQgcmVzdWx0IGZvciBleHRlbmQgaW4KKyAgICAgICAgbGluZUJv
dW5kYXJ5LgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1zZWxlY3Rpb24uaHRt
bDogQWRkZWQgdGVzdCBjYXNlcyBhbmQgc2NyaXB0IGZvciBleHRlbmQKKyAgICAgICAgaW4gbGlu
ZUJvdW5kYXJ5LgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbDog
QWRkZWQuCisKIDIwMDktMDQtMjkgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRGlzYWJsZSBtZWRpYS92aWRlby16b29tLWNvbnRyb2xzLmh0bWwgb24g
V2luZG93cyBmb3Igbm93LgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0
ZW5kLXNlbGVjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQy
ODA3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSwyNCBAQCBMb3JlbSBpcHN1bSBk
b2xvciBzaXQgYW1ldAogTG9yZW0KIGlwc3VtIGRvbG9yIHNpdAogYW1ldHQKK0xvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0CitMb3JlbSBpcHN1bSBkb2xvcgoranVzdCBhIHRlc3QKK3NpdCBhbWV0
CitMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldAorTG9yZW0KK2lwc3VtIGRvbG9yIHNpdAorYW1l
dAorSnVzdCB0ZXN0aW5nINeo16cg15HXldeT16cKK0p1c3QgdGVzdGluZyB3aGF0IGV2ZXIKK2Nh
ciBtZWFucyDXkNeR15IuCitjYXIg15PXlNeVINeQ15HXki4KK2hlIHNhaWQgIiBjYXIg15PXlNeV
INeQ15HXkiAuIgor15bXl9eYINeZ15rXmyDXnNed154gJyBoZSBzYWlkICIgY2FyINeT15TXlSDX
kNeR15IgIiAnPwor15DXkdeSIGFiYyDXk9eU15UKK2VkZiDXlteX15ggYWJyZWJnCithYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcKK2FiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZwogCiAKIApAQCAtMzcyLDMgKzM5MCwx
MzkgQEAgVGVzdCAxLCBMVFI6CiAgIEV4dGVuZGluZyByaWdodDogIkxvcmVtICJbKDAsMCksICgw
LDUpXSwgImlwc3VtIGRvbG9yIHNpdCJbKDAsNSksICgwLDExKSwgKDAsMTUpXSwgIiBhbWV0dCJb
KDAsNiksICgwLDEpXQogICBFeHRlbmRpbmcgbGVmdDogICIgYW1ldHQiWygwLDYpLCAoMCwxKV0s
ICJpcHN1bSBkb2xvciBzaXQiWygwLDEyKSwgKDAsNiksICgwLDApXSwgIkxvcmVtICJbKDAsMCks
ICgwLDUpXQogCisKKworRXh0ZW5kaW5nIGJ5IGxpbmVCb3VuZGFyeQorVGVzdCAxLCBMVFI6Cisg
IEV4dGVuZGluZyBmb3J3YXJkOiAiXG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWygxLDEpLCAoMSwy
MCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbKDEs
MjApLCAoMSwxKV0KK1Rlc3QgMSwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuYWJjIEFC
QyB4eXogREVGIGRlZlxuIlsoMSwxKSwgKDEsMjApXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAi
XG5hYmMgQUJDIHh5eiBERUYgZGVmXG4iWygxLDIwKSwgKDEsMSldCitUZXN0IDIsIExUUjoKKyAg
RXh0ZW5kaW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBHSElcbiJbKDEsMSksICgxLDIw
KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuQUJDIHh5eiBERUYgZGVmIEdISVxuIlsoMSwy
MCksICgxLDEpXQorVGVzdCAyLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG5BQkMgeHl6
IERFRiBkZWYgR0hJXG4iWygxLDEpLCAoMSwyMCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJc
bkFCQyB4eXogREVGIGRlZiBHSElcbiJbKDEsMjApLCAoMSwxKV0KK1Rlc3QgMywgTFRSOgorICBF
eHRlbmRpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbKDEsMSksICgxLDEyKV0KKyAgRXh0
ZW5kaW5nIGJhY2t3YXJkOiAgIlxuQUJDIERFRiBBQkNcbiJbKDEsMTIpLCAoMSwxKV0KK1Rlc3Qg
MywgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJbKDEsMSksICgx
LDEyKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuQUJDIERFRiBBQkNcbiJbKDEsMTIpLCAo
MSwxKV0KK1Rlc3QgNCwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuYWJjIGVmZCBkYWJl
YlxuIlsoMSwxKSwgKDEsMTQpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZkIGRh
YmViXG4iWygxLDE0KSwgKDEsMSldCitUZXN0IDQsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6
ICJcbmFiYyBlZmQgZGFiZWJcbiJbKDEsMSksICgxLDE0KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJk
OiAgIlxuYWJjIGVmZCBkYWJlYlxuIlsoMSwxNCksICgxLDEpXQorVGVzdCA1LCBMVFI6CisgIEV4
dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVu
ZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgNSwg
UlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUp
XQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCld
CitUZXN0IDYsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBh
bWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3Jl
bSAiWygwLDApXQorVGVzdCA2LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlso
MCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAs
NSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgNywgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDog
IkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAi
IGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDcsIFJUTDoKKyAgRXh0ZW5kaW5n
IGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJh
Y2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCA4LCBMVFI6Cisg
IEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4
dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3Qg
OCwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygw
LDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAs
MCldCitUZXN0IDksIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApLCAo
MCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbKDAsNSksICgwLDApXQorVGVz
dCA5LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKSwgKDAsNSldCisg
IEV4dGVuZGluZyBiYWNrd2FyZDogICJMb3JlbSAiWygwLDUpLCAoMCwwKV0KK1Rlc3QgMTAsIExU
UjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0K
KyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQor
VGVzdCAxMCwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFt
ZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVt
ICJbKDAsMCldCitUZXN0IDExLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlso
MCwwKV0sICJpcHN1bSBkb2xvciJbKDAsMTEpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiaXBz
dW0gZG9sb3IiWygwLDExKV0sICJMb3JlbSAiWygwLDApXQorVGVzdCAxMSwgUlRMOgorICBFeHRl
bmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiaXBzdW0gZG9sb3IiWygwLDExKV0KKyAg
RXh0ZW5kaW5nIGJhY2t3YXJkOiAgImlwc3VtIGRvbG9yIlsoMCwxMSldLCAiTG9yZW0gIlsoMCww
KV0KK1Rlc3QgMTIsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwg
IiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJM
b3JlbSAiWygwLDApXQorVGVzdCAxMiwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVt
ICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQi
WygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDEzLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3
YXJkOiAiTG9yZW0gIlsoMCwwKSwgKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJMb3Jl
bSAiWygwLDUpLCAoMCwwKV0KK1Rlc3QgMTMsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJM
b3JlbSAiWygwLDApLCAoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbKDAs
NSksICgwLDApXQorVGVzdCAxNCwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuCUp1c3Rc
bgkiWygyLDIpXSwgIlxuCUJGRFhcbiJbKDIsNildCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJc
bglCRkRYXG4iWygyLDYpXSwgIlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAxNCwgUlRMOgorICBF
eHRlbmRpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWygyLDIpXSwgIlxuCUJGRFhcbiJbKDIsNild
CisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbglCRkRYXG4iWygyLDYpXSwgIlxuCUp1c3Rcbgki
WygyLDIpXQorVGVzdCAxNSwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIlxuCUp1c3Rcbgki
WygyLDIpXSwgIlxuCWV2ZXJcbiJbKDIsNildCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbgll
dmVyXG4iWygyLDYpXSwgIlxuCUp1c3RcbgkiWygyLDIpXQorVGVzdCAxNSwgUlRMOgorICBFeHRl
bmRpbmcgZm9yd2FyZDogIlxuCUp1c3RcbgkiWygyLDIpXSwgIlxuCWV2ZXJcbiJbKDIsNildCisg
IEV4dGVuZGluZyBiYWNrd2FyZDogICJcbglldmVyXG4iWygyLDYpXSwgIlxuCUp1c3RcbgkiWygy
LDIpXQorVGVzdCAxNiwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImNhciBtZWFucyBBQkMu
IlsoMCwwKSwgKDAsMTQpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiY2FyIG1lYW5zIEFCQy4i
WygwLDE0KSwgKDAsMCldCitUZXN0IDE2LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiY2Fy
IG1lYW5zIEFCQy4iWygwLDApLCAoMCwxNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJjYXIg
bWVhbnMgQUJDLiJbKDAsMTQpLCAoMCwwKV0KK1Rlc3QgMTcsIExUUjoKKyAgRXh0ZW5kaW5nIGZv
cndhcmQ6ICLhqpxjYXIgREVGIEFCQy7hqp0iWygxLDEpLCAoMSwxMyldCisgIEV4dGVuZGluZyBi
YWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWygxLDEzKSwgKDEsMSldCitUZXN0IDE3LCBS
VEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAi4aqcY2FyIERFRiBBQkMu4aqdIlsoMSwxKSwgKDEs
MTMpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAi4aqcY2FyIERFRiBBQkMu4aqdIlsoMSwxMyks
ICgxLDEpXQorVGVzdCAxOCwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImhlIHNhaWQgIuGq
nGNhciBERUYgQUJD4aqdLiIiWygwLDApLCAoMCwyNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDog
ICJoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnS4iIlsoMCwyNCksICgwLDApXQorVGVzdCAxOCwg
UlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIi
WygwLDApLCAoMCwyNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxjYXIg
REVGIEFCQ+GqnS4iIlsoMCwyNCksICgwLDApXQorVGVzdCAxOSwgTFRSOgorICBFeHRlbmRpbmcg
Zm9yd2FyZDogIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLhqp0n
PyJbKDAsMCksICgwLDQwKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkdISSBKS0wgTU5PICfh
qptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLhqp0nPyJbKDAsNDApLCAoMCwwKV0KK1Rlc3Qg
MTksIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJHSEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi
4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWygwLDApLCAoMCw0MCldCisgIEV4dGVuZGluZyBiYWNr
d2FyZDogICJHSEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8i
WygwLDQwKSwgKDAsMCldCitUZXN0IDIwLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiQUJD
IGFiYyBERUYiWygwLDApLCAoMCwxMSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJBQkMgYWJj
IERFRiJbKDAsMTEpLCAoMCwwKV0KK1Rlc3QgMjAsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6
ICJBQkMgYWJjIERFRiJbKDAsMCksICgwLDExKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkFC
QyBhYmMgREVGIlsoMCwxMSksICgwLDApXQorVGVzdCAyMSwgTFRSOgorICBFeHRlbmRpbmcgZm9y
d2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAi
WygwLDApLCAoMCw4KSwgKDAsMTYpLCAoMCwyNiksICgwLDM0KSwgKDAsNDIpLCAoMCw1MCksICgw
LDU4KSwgKDAsNjYpLCAoMCw3NCksICgwLDgyKSwgKDAsOTApLCAoMCw5OCksICgwLDEwNSldCisg
IEV4dGVuZGluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgIlsoMCwxMDUpLCAoMCwwKV0KK1Rlc3QgMjEsIFJUTDoKKyAgRXh0ZW5k
aW5nIGZvcndhcmQ6ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgIlsoMCwwKSwgKDAsNyldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIlsoMCw3KSwgKDAsMCldCitU
ZXN0IDIyLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbKDAsMCksICgwLDgpLCAoMCwxNiksICgwLDI2
KSwgKDAsMzQpLCAoMCw0MiksICgwLDUwKSwgKDAsNTgpLCAoMCw2NiksICgwLDc0KSwgKDAsODIp
LCAoMCw5MCksICgwLDk4KSwgKDAsMTA1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgImFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDEwNSksICgw
LDApXQorVGVzdCAyMiwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDApLCAoMCw3KV0KKyAgRXh0
ZW5kaW5nIGJhY2t3YXJkOiAgImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyAiWygwLDcpLCAoMCwwKV0KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1zZWxlY3Rpb24uaHRtbAkocmV2aXNpb24gNDI4MDcp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsMjcgQEAKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCisgICAgICAgIGZ1bmN0aW9uIHRlc3RFeHRlbmRpbmdMaW5lQm91bmRhcnkodGVzdHMs
IHNlbCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHRlc3RzW2ldLnN0eWxlLmRpcmVjdGlvbiA9
ICJsdHIiOworICAgICAgICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpc
biAgRXh0ZW5kaW5nIGZvcndhcmQ6ICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlv
bih0ZXN0c1tpXSwgMCk7CisgICAgICAgICAgICAgICAgdmFyIGx0clJpZ2h0UG9zID0gZXh0ZW5k
aW5nU2VsZWN0aW9uKHNlbCwgImZvcndhcmQiLCAibGluZUJvdW5kYXJ5IiwgMCk7CisgICAgCisg
ICAgICAgICAgICAgICAgbG9nKCIgIEV4dGVuZGluZyBiYWNrd2FyZDogICIpOworICAgICAgICAg
ICAgICAgIHZhciBsdHJMZWZ0UG9zID0gZXh0ZW5kaW5nU2VsZWN0aW9uKHNlbCwgImJhY2t3YXJk
IiwgImxpbmVCb3VuZGFyeSIsIDApOworCisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUu
ZGlyZWN0aW9uID0gInJ0bCI7CisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEp
ICsgIiwgUlRMOlxuICBFeHRlbmRpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAgICAgICAgc2Vs
LnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgbHRyUmlnaHRQ
b3MgPSBleHRlbmRpbmdTZWxlY3Rpb24oc2VsLCAiZm9yd2FyZCIsICJsaW5lQm91bmRhcnkiLCAw
KTsKKyAgICAKKyAgICAgICAgICAgICAgICBsb2coIiAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIik7
CisgICAgICAgICAgICAgICAgdmFyIGx0ckxlZnRQb3MgPSBleHRlbmRpbmdTZWxlY3Rpb24oc2Vs
LCAiYmFja3dhcmQiLCAibGluZUJvdW5kYXJ5IiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKwogICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQpAQCAtMjY5LDMxICsyOTAsNjQgQEAK
ICAgICAgICAgICAgIHRlc3RFeHRlbmRpbmdTZWxlY3Rpb25Gb3JFbmNsb3NpbmdCbG9jayh0ZXN0
cywgIHNlbCwgImNoYXJhY3RlciIsIDEpOwogICAgICAgICAgICAgbG9nKCJcblxuXG5cblxuRXh0
ZW5kaW5nIGJ5IHdvcmRcbiIpOwogICAgICAgICAgICAgdGVzdEV4dGVuZGluZ1NlbGVjdGlvbkZv
ckVuY2xvc2luZ0Jsb2NrKHRlc3RzLCAgc2VsLCAid29yZCIsIDEpOworCisgICAgICAgICAgICB0
ZXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImhvbWUtZW5kLXRlc3QiKTsK
KyAgICAgICAgICAgIHZhciBzZWwgPSBnZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGxvZygi
XG5cblxuRXh0ZW5kaW5nIGJ5IGxpbmVCb3VuZGFyeVxuIik7CisgICAgICAgICAgICB0ZXN0RXh0
ZW5kaW5nTGluZUJvdW5kYXJ5KHRlc3RzLCAgc2VsKTsKICAgICAgICAgfQogCiAgICAgPC9zY3Jp
cHQ+CiA8L2hlYWQ+CiA8Ym9keT4KLTxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4K
KzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPgogYWJjICYj
MTQ4ODsmIzE0ODk7JiMxNDkwOyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgogPC9kaXY+
Ci08ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+Cis8ZGl2IGNvbnRlbnRlZGl0YWJs
ZSBjbGFzcz0idGVzdCBob21lLWVuZC10ZXN0Ij4KICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyB4eXog
JiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZiAmIzE0OTQ7JiMxNDk1OyYjMTQ5NjsKIDwvZGl2Pgot
PGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorPGRpdiBjb250ZW50ZWRpdGFibGUg
Y2xhc3M9InRlc3QgaG9tZS1lbmQtdGVzdCI+CiAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsgJiMxNDkx
OyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOwogPC9kaXY+Ci08ZGl2IGNvbnRl
bnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVz
dCBob21lLWVuZC10ZXN0Ij4KIGFiYyBlZmQgZGFiZWIKIDwvZGl2PgogCiAKLTxkaXYgY29udGVu
dGVkaXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IHJ0
bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Ci08ZGl2IGNvbnRlbnRlZGl0YWJs
ZSBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L3Nw
YW4+IGFtZXQ8L2Rpdj4KLTxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0g
PHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0
PC9kaXY+Ci08ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIGRp
cj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVk
aXRhYmxlICBjbGFzcz0idGVzdCBob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRp
cmVjdGlvbjogcnRsIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29u
dGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxzcGFuICBkaXI9
InJ0bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSAgY2xhc3M9InRlc3QgaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJl
Y3Rpb246IGx0ciI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRl
bnRlZGl0YWJsZSBjbGFzcz0idGVzdCBob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJs
dHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0
YWJsZSBjbGFzcz0idGVzdEVuY2xvc2luZ0Jsb2NrIGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxkaXYg
IGRpcj0icnRsIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldHQ8L2Rpdj4KKworPGRpdiBjb250
ZW50ZWRpdGFibGUgIGNsYXNzPSJob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRp
cmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29u
dGVudGVkaXRhYmxlICBjbGFzcz0iaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJk
aXJlY3Rpb246IGx0ciI+aXBzdW0gZG9sb3I8ZGl2ID4ganVzdCBhIHRlc3Q8L2Rpdj4gc2l0PC9z
cGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0iaG9tZS1lbmQtdGVz
dCI+TG9yZW0gPHNwYW4gIGRpcj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rp
dj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJob21lLWVuZC10ZXN0Ij5Mb3JlbSA8ZGl2
ICBkaXI9Imx0ciI+aXBzdW0gZG9sb3Igc2l0PC9kaXY+IGFtZXQ8L2Rpdj4KKworPGRpdiBjbGFz
cz0iaG9tZS1lbmQtdGVzdCIgY29udGVudGVkaXRhYmxlPgorCUp1c3QKKwk8c3Bhbj50ZXN0aW5n
INeo16c8L3NwYW4+CisJ15HXldeT16cKKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJob21lLWVuZC10
ZXN0IiBjb250ZW50ZWRpdGFibGU+CisJSnVzdAorCTxzcGFuPnRlc3Rpbmcgd2hhdDwvc3Bhbj4K
KwlldmVyCis8L2Rpdj4KKworCis8ZGl2IGNsYXNzPSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRp
dGFibGU+Y2FyIG1lYW5zICYjMTQ4ODsmIzE0ODk7JiMxNDkwOy48L2Rpdj4KKzxkaXYgY2xhc3M9
ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0YWJsZT4mI3gyMDJCO2NhciAmIzE0OTE7JiMxNDky
OyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7LiYjeDIwMmM7PC9kaXY+Cis8ZGl2IGNsYXNz
PSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRpdGFibGU+aGUgc2FpZCAiJiN4MjAyQjtjYXIgJiMx
NDkxOyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyYjeDIwMmM7LiI8L2Rpdj4K
KzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0YWJsZT4mIzE0OTQ7JiMxNDk1
OyYjMTQ5NjsgJiMxNDk3OyYjMTQ5ODsmIzE0OTk7ICYjMTUwMDsmIzE1MDE7JiMxNTAyOyAnJiN4
MjAyYTtoZSBzYWlkICImI3gyMDJCO2NhciAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYj
MTQ4OTsmIzE0OTA7JiN4MjAyYzsiJiN4MjAyYzsnPzwvZGl2PgorCiAKLTxkaXYgY29udGVudGVk
aXRhYmxlIGNsYXNzPSJ0ZXN0RW5jbG9zaW5nQmxvY2siPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5p
cHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldHQ8L2Rpdj4KKzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRl
c3QiIGNvbnRlbnRlZGl0YWJsZT4mIzE0ODg7JiMxNDg5OyYjMTQ5MDsgYWJjICYjMTQ5MTsmIzE0
OTI7JiMxNDkzOzxiciAvPmVkZiAmIzE0OTQ7JiMxNDk1OyYjMTQ5NjsgYWJyZWJnPC9kaXY+Cis8
ZGl2IGNsYXNzPSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRpdGFibGUgc3R5bGU9ImxpbmUtYnJl
YWs6YmVmb3JlLXdoaXRlLXNwYWNlOyB3aWR0aDoxMDBweCI+YWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIDwvZGl2PgorPGRpdiBjbGFzcz0iaG9tZS1lbmQt
dGVzdCIgY29udGVudGVkaXRhYmxlIHN0eWxlPSJsaW5lLWJyZWFrOmFmdGVyLXdoaXRlLXNwYWNl
OyB3aWR0aDoxMDBweCI+YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIDwvZGl2PgogCiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21l
LWVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACitUZXN0IDEs
IExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMSwgMjBd
CisgIE1vdmluZyBiYWNrd2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAsIDFdCitU
ZXN0IDEsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJb
MSwgMjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbMjAs
IDFdCitUZXN0IDIsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVGIGRlZiBH
SElcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRlZiBHSElc
biJbMjAsIDFdCitUZXN0IDIsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyB4eXogREVG
IGRlZiBHSElcbiJbMSwgMjBdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyB4eXogREVGIGRl
ZiBHSElcbiJbMjAsIDFdCitUZXN0IDMsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbkFCQyBE
RUYgQUJDXG4iWzEsIDEyXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsx
MiwgMV0KK1Rlc3QgMywgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIERFRiBBQkNcbiJb
MSwgMTJdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyBERUYgQUJDXG4iWzEyLCAxXQorVGVz
dCA0LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQor
ICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA0LCBS
VEw6CisgIE1vdmluZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmViXG4iWzEsIDE0XQorICBNb3Zp
bmcgYmFja3dhcmQ6ICAiXG5hYmMgZWZkIGRhYmViXG4iWzE0LCAxXQorVGVzdCA1LCBMVFI6Cisg
IE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dh
cmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCA1LCBSVEw6CisgIE1vdmluZyBmb3J3
YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQi
WzVdLCAiTG9yZW0gIlswXQorVGVzdCA2LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0g
IlswXSwgImlwc3VtIGRvbG9yIlsxMV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgImlwc3VtIGRvbG9y
IlsxMV0sICJMb3JlbSAiWzBdCitUZXN0IDYsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3Jl
bSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9s
b3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgNywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxv
cmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxv
cmVtICJbMF0KK1Rlc3QgNywgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIg
YW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rl
c3QgOCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJh
Y2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgOCwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDog
IkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3Qg
OSwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92
aW5nIGJhY2t3YXJkOiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgOSwgUlRMOgorICBN
b3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJk
OiAgIiBhbWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgMTAsIExUUjoKKyAgTW92aW5nIGZvcndh
cmQ6ICJMb3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAi
aXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTAsIFJUTDoKKyAgTW92aW5nIGZv
cndhcmQ6ICJMb3JlbSAiWzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6
ICAiaXBzdW0gZG9sb3IiWzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIExUUjoKKyAgTW92aW5n
IGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIg
YW1ldCJbNV0sICJMb3JlbSAiWzBdCitUZXN0IDExLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAi
TG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAi
TG9yZW0gIlswXQorVGVzdCAxMiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwg
NV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbNSwgMF0KK1Rlc3QgMTIsIFJUTDoKKyAg
TW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzAsIDVdCisgIE1vdmluZyBiYWNrd2FyZDogICJMb3Jl
bSAiWzUsIDBdCitUZXN0IDEzLCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJb
Ml0sICJcbglCRkRYXG4iWzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbglCRkRYXG4iWzZdLCAi
XG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTMsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbglKdXN0
XG4JIlsyXSwgIlxuCUJGRFhcbiJbNl0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuCUJGRFhcbiJb
Nl0sICJcbglKdXN0XG4JIlsyXQorVGVzdCAxNCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxu
CUp1c3RcbgkiWzJdLCAiXG4JZXZlclxuIls2XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG4JZXZl
clxuIls2XSwgIlxuCUp1c3RcbgkiWzJdCitUZXN0IDE0LCBSVEw6CisgIE1vdmluZyBmb3J3YXJk
OiAiXG4JSnVzdFxuCSJbMl0sICJcbglldmVyXG4iWzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJc
bglldmVyXG4iWzZdLCAiXG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTUsIExUUjoKKyAgTW92aW5nIGZv
cndhcmQ6ICJjYXIgbWVhbnMgQUJDLiJbMCwgMTRdCisgIE1vdmluZyBiYWNrd2FyZDogICJjYXIg
bWVhbnMgQUJDLiJbMTQsIDBdCitUZXN0IDE1LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiY2Fy
IG1lYW5zIEFCQy4iWzAsIDE0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiY2FyIG1lYW5zIEFCQy4i
WzE0LCAwXQorVGVzdCAxNiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJD
LuGqnSJbMSwgMTNdCisgIE1vdmluZyBiYWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEz
LCAxXQorVGVzdCAxNiwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIuGqnGNhciBERUYgQUJDLuGq
nSJbMSwgMTNdCisgIE1vdmluZyBiYWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWzEzLCAx
XQorVGVzdCAxNywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogImhlIHNhaWQgIuGqnGNhciBERUYg
QUJD4aqdLiIiWzAsIDI0XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaGUgc2FpZCAi4aqcY2FyIERF
RiBBQkPhqp0uIiJbMjQsIDBdCitUZXN0IDE3LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiaGUg
c2FpZCAi4aqcY2FyIERFRiBBQkPhqp0uIiJbMCwgMjRdCisgIE1vdmluZyBiYWNrd2FyZDogICJo
ZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnS4iIlsyNCwgMF0KK1Rlc3QgMTgsIExUUjoKKyAgTW92
aW5nIGZvcndhcmQ6ICJHSEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i
4aqdJz8iWzAsIDQwXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNh
aWQgIuGqnGNhciBERUYgQUJD4aqdIuGqnSc/Ils0MCwgMF0KK1Rlc3QgMTgsIFJUTDoKKyAgTW92
aW5nIGZvcndhcmQ6ICJHSEkgSktMIE1OTyAn4aqbaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0i
4aqdJz8iWzAsIDQwXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNh
aWQgIuGqnGNhciBERUYgQUJD4aqdIuGqnSc/Ils0MCwgMF0KK1Rlc3QgMTksIExUUjoKKyAgTW92
aW5nIGZvcndhcmQ6ICJBQkMgYWJjIERFRiJbMCwgMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJB
QkMgYWJjIERFRiJbMTEsIDBdCitUZXN0IDE5LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiQUJD
IGFiYyBERUYiWzAsIDExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiQUJDIGFiYyBERUYiWzExLCAw
XQorVGVzdCAyMCwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDog
ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAw
XQorVGVzdCAyMCwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDog
ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAw
XQorVGVzdCAyMSwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzAsIDhdCisgIE1vdmluZyBiYWNrd2FyZDog
ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls4LCAw
XQorVGVzdCAyMSwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzAsIDddCisgIE1vdmluZyBiYWNrd2FyZDog
ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIls3LCAw
XQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NiBAQAorPGhlYWQ+CisgICAgPG1ldGEgaHR0
cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgi
PgorICAgIDxzdHlsZT4KKyAgICAgICAgZGl2LnRlc3QgeworICAgICAgICAgICAgLXdlYmtpdC11
c2VyLW1vZGlmeTogcmVhZC13cml0ZTsKKyAgICAgICAgICAgIHBhZGRpbmc6IDRweDsKKyAgICAg
ICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgICAgICAgICBtYXJnaW46
IDRweCA0cHggNHB4IDI0cHg7CisgICAgICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgICAg
ICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGU7CisgICAgICAgICAgICBjb3VudGVyLWluY3Jl
bWVudDogdGVzdC1udW1iZXI7CisgICAgICAgIH0KKyAgICAgICAgZGl2LnRlc3Q6YmVmb3JlIHsg
Y29udGVudDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDog
OHB4OyBmb250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBweDsg
fQorICAgICAgICBkaXYudGVzdCBzcGFuIHsgYmFja2dyb3VuZC1jb2xvcjogI2RlZjsgfQorICAg
ICAgICBkaXYudGVzdCBpbWcgeyB3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTsgYmFja2dyb3VuZC1j
b2xvcjogbGlnaHRncmVlbjsgfQorICAgICAgICBkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3Jv
dW5kLWNvbG9yOiBsaWdodGJsdWU7IH0KKyAgICAgICAgZGl2LnRlc3QgZGl2IHsgYm9yZGVyOiAx
cHggZGFzaGVkIHBpbms7IHBhZGRpbmc6IDNweDsgaGVpZ2h0OiAyZW07IH0KKyAgICA8L3N0eWxl
PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgICAgICB7
CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgZGlyZWN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgICAgICAgICBw
b3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5mb2N1c09m
ZnNldH0pOworICAgICAgICAgICAgc2VsLm1vZGlmeSgibW92ZSIsIGRpcmVjdGlvbiwgImxpbmVC
b3VuZGFyeSIpOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5jaG9y
Tm9kZSwgb2Zmc2V0OiBzZWwuZm9jdXNPZmZzZXR9KTsKKyAgICAgICAgICAgIHJldHVybiBwb3Np
dGlvbnM7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBmb2xkKHN0cmluZykKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hh
ciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgICAgIGlmIChjaGFyID49IDB4
MDVkMCkKKyAgICAgICAgICAgICAgICAgICAgY2hhciAtPSAweDA1OGY7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY2hhciA9PSAxMCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
IlxcbiI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBsb2dQb3NpdGlvbnMocG9zaXRpb25zKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0u
bm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBs
b2coIl0iKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCIsICIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRp
b25zW2kgLSAxXS5ub2RlKQorICAgICAgICAgICAgICAgICAgICBsb2coKHBvc2l0aW9uc1tpXS5u
b2RlIGluc3RhbmNlb2YgVGV4dCA/ICciJyArIGZvbGQocG9zaXRpb25zW2ldLm5vZGUuZGF0YSkg
KyAnIicgOiAiPCIgKyBwb3NpdGlvbnNbaV0ubm9kZS50YWdOYW1lICsgIj4iKSArICJbIik7Cisg
ICAgICAgICAgICAgICAgbG9nKHBvc2l0aW9uc1tpXS5vZmZzZXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbG9nKCJdIik7CisgICAgICAgIH0KKworICAgICAgICBvbmxvYWQgPSBmdW5j
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgdGVzdHMgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0Iik7CisgICAgICAgICAgICB2YXIgc2Vs
ID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3Rz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ1JpZ2h0
OworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworICAgIAorICAgICAg
ICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpcbiAgTW92aW5nIGZvcndh
cmQ6ICIpOworICAgICAgICAgICAgICAgIHNlbC5zZXRQb3NpdGlvbih0ZXN0c1tpXSwgMCk7Cisg
ICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRp
cmVjdGlvbihzZWwsICJmb3J3YXJkIik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBv
c2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAg
ICAgICAgICAgICBsb2coIiAgTW92aW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAgICAgICAg
cG9zaXRpb25zTW92aW5nTGVmdCA9IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImJh
Y2t3YXJkIik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xl
ZnQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAgIHRlc3Rz
W2ldLnN0eWxlLmRpcmVjdGlvbiA9ICJydGwiOworCisgICAgICAgICAgICAgICAgbG9nKCJUZXN0
ICIgKyAoaSArIDEpICsgIiwgUlRMOlxuICBNb3ZpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAg
ICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiZm9yd2Fy
ZCIpOworICAgICAgICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdMZWZ0KTsK
KyAgICAgICAgICAgICAgICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICBsb2coIiAgTW92
aW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zTW92aW5nUmlnaHQg
PSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJiYWNrd2FyZCIpOworICAgICAgICAg
ICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnNNb3ZpbmdSaWdodCk7CisgICAgICAgICAgICAg
ICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlzcGxheSA9
ICJub25lIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKworPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJjICYj
MTQ4ODsmIzE0ODk7JiMxNDkwOyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZgorPC9kaXY+
Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+CismIzE0ODg7JiMxNDg5OyYjMTQ5
MDsgeHl6ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyBkZWYgJiMxNDk0OyYjMTQ5NTsmIzE0OTY7Cis8
L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4ODsmIzE0ODk7
JiMxNDkwOyAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7Cis8L2Rp
dj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KK2FiYyBlZmQgZGFiZWIKKzwv
ZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBz
dHlsZT0iZGlyZWN0aW9uOiBydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2Pgor
PGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRp
cmVjdGlvbjogcnRsIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3Nw
YW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8
c3BhbiAgZGlyPSJydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBj
b250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxkaXYgIGRpcj0icnRsIj5pcHN1bSBk
b2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9
InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yIHNp
dDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5M
b3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0
IGEgdGVzdDwvZGl2PiBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxl
IGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bh
bj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxk
aXYgIGRpcj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8ZGl2IGNs
YXNzPSJ0ZXN0IiBzdHlsZT0iZGlyZWN0aW9uOiBsdHI7IiBjb250ZW50ZWRpdGFibGU+CisJSnVz
dAorCTxzcGFuPnRlc3Rpbmcg16jXpzwvc3Bhbj4KKwnXkdeV15PXpworPC9kaXY+CisKKzxkaXYg
Y2xhc3M9InRlc3QiIHN0eWxlPSJkaXJlY3Rpb246IGx0cjsiIGNvbnRlbnRlZGl0YWJsZT4KKwlK
dXN0CisJPHNwYW4+dGVzdGluZyB3aGF0PC9zcGFuPgorCWV2ZXIKKzwvZGl2PgorCisKKzxkaXYg
Y2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT5jYXIgbWVhbnMgJiMxNDg4OyYjMTQ4OTsmIzE0
OTA7LjwvZGl2PgorPGRpdiBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPiYjeDIwMkI7Y2Fy
ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsuJiN4MjAyYzs8L2Rp
dj4KKzxkaXYgY2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT5oZSBzYWlkICImI3gyMDJCO2Nh
ciAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7JiN4MjAyYzsuIjwv
ZGl2PgorPGRpdiBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPiYjMTQ5NDsmIzE0OTU7JiMx
NDk2OyAmIzE0OTc7JiMxNDk4OyYjMTQ5OTsgJiMxNTAwOyYjMTUwMTsmIzE1MDI7ICcmI3gyMDJh
O2hlIHNhaWQgIiYjeDIwMkI7Y2FyICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5
OyYjMTQ5MDsmI3gyMDJjOyImI3gyMDJjOyc/PC9kaXY+CisKKworPGRpdiBjbGFzcz0idGVzdCIg
Y29udGVudGVkaXRhYmxlPiYjMTQ4ODsmIzE0ODk7JiMxNDkwOyBhYmMgJiMxNDkxOyYjMTQ5Mjsm
IzE0OTM7PGJyIC8+ZWRmICYjMTQ5NDsmIzE0OTU7JiMxNDk2OyBhYnJlYmc8L2Rpdj4KKzxkaXYg
Y2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0YWJsZSBzdHlsZT0ibGluZS1icmVhazpiZWZvcmUtd2hp
dGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGUg
c3R5bGU9ImxpbmUtYnJlYWs6YWZ0ZXItd2hpdGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5hYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8cHJlIGlk
PSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29895</attachid>
            <date>2009-04-29 15:11:48 -0700</date>
            <delta_ts>2009-04-29 17:47:43 -0700</delta_ts>
            <desc>patch w/ Layout test (version 8)</desc>
            <filename>home.end.v8</filename>
            <type>text/plain</type>
            <size>38444</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mjk5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDQtMjkgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNjgKKyAgICAgICAgUlRM
OiBIb21lL0VuZCBrZXkgZG9lcyBub3QgYmVoYXZlIGNvcnJlY3RseSBpbiBtaXhlZCBiaWRpIHRl
eHQgaW4gUlRMIGRvY3VtZW50CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vaG9t
ZS1lbmQuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQpOiBDaGFuZ2UgY2FsbGluZyBlbmRPZkxpbmUoKQorICAgICAgICB0byBsb2dpY2FsRW5k
T2ZMaW5lKCkgd2hlbiBncmFudWxhcml0eSBpcyBMaW5lQm91bmRhcnkuCisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKTogQ2hhbmdlIGNh
bGxpbmcgZW5kT2ZMaW5lKCkKKyAgICAgICAgdG8gbG9naWNhbEVuZE9mTGluZSgpIHdoZW4gZ3Jh
bnVsYXJpdHkgaXMgTGluZUJvdW5kYXJ5CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6IENoYW5nZSBjYWxsaW5nIAorICAgICAg
ICBzdGFydE9mTGluZSgpIHRvIGxvZ2ljYWxTdGFydE9mTGluZSgpIHdoZW4gZ3JhbnVsYXJpdHkg
aXMgTGluZUJvdW5kYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5TW92aW5nQmFja3dhcmQpOiBDaGFuZ2UgY2FsbGluZyBzdGFydE9mTGluZSgpIAorICAg
ICAgICB0byBsb2dpY2FsU3RhcnRPZkxpbmUoKSB3aGVuIGdyYW51bGFyaXR5IGlzIExpbmVCb3Vu
ZGFyeS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOiBBZGRlZC4gUmVjb25zdHJ1Y3QgbGVh
ZiBib3hlcyBpbiBsb2dpY2FsIG9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbFN0
YXJ0Qm94QW5kTm9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TG9naWNhbEVuZEJv
eEFuZE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9u
Rm9yTGluZSk6IEFkZGVkLiBTaW1pbGFyIHRvIHN0YXJ0UG9zaXRpb25Gb3JMaW5lLgorICAgICAg
ICAoV2ViQ29yZTo6bG9naWNhbFN0YXJ0T2ZMaW5lKTogQWRkZWQuIFNpbWlsYXIgdG8gc3RhcnRP
ZkxpbmUuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKTogQWRk
ZWQuIFNpbWlsYXIgdG8gZW5kUG9zaXRpb25Gb3JMaW5lLgorICAgICAgICAoV2ViQ29yZTo6aW5T
YW1lTG9naWNhbExpbmUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxFbmRPZkxp
bmUpOiBBZGRlZC4gU2ltaWxhciB0byBlbmRPZkxpbmUuCisgICAgICAgICogZWRpdGluZy92aXNp
YmxlX3VuaXRzLmg6CisKIDIwMDktMDQtMjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2ZWFsIGN1cnJlbnQgZXhlY3V0aW9uIGxpbmUgb25jZSBT
b3VyY2VGcmFtZSBjb250ZW50IGlzIGxvYWRlZC4gCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MjgwNykKKysrIFdlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBA
IFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgICAgIHBv
cyA9IGVuZE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZp
bml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6
Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgp
LCBtX3NlbC5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBwb3MgPSBsb2dpY2FsRW5kT2ZMaW5l
KFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgICAgICAg
ICBwb3MgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2Vs
LmFmZmluaXR5KCkpKTsKQEAgLTM5NSw3ICszOTUsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKFZpc2li
bGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICAgICAgcG9zID0gZW5k
T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwor
ICAgICAgICAgICAgcG9zID0gbG9naWNhbEVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwu
ZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFBhcmFncmFwaEJvdW5kYXJ5OgogICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CkBAIC00NzQs
NyArNDc0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAg
ICAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFy
dCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNpYmxlUG9z
aXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOworICAgICAgICAgICAgcG9z
ID0gbG9naWNhbFN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3Nl
bC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQYXJhZ3Jh
cGhCb3VuZGFyeToKICAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKQEAgLTU0MSw3ICs1NDEs
NyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAg
ICBwb3MgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1f
c2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmVC
b3VuZGFyeToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbiht
X3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBwb3MgPSBsb2dp
Y2FsU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmlu
aXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBhcmFncmFwaEJvdW5k
YXJ5OgogICAgICAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24o
bV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAkocmV2aXNpb24gNDI4MDcpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNCArMTA1NSwxNzcgQEAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mRWRpdGFibGVDb250ZW50KGNvbgogICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCitzdGF0aWMgdm9pZCBnZXRMZWFm
Qm94ZXNJbkxvZ2ljYWxPcmRlcihSb290SW5saW5lQm94KiByb290Qm94LCBWZWN0b3I8SW5saW5l
Qm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKSB7CisgICAgdW5zaWduZWQgY2hhciBtaW5M
ZXZlbCA9IDEyODsKKyAgICB1bnNpZ25lZCBjaGFyIG1heExldmVsID0gMDsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgSW5saW5lQm94KiByID0gcm9vdEJveC0+Zmlyc3RMZWFmQ2hpbGQo
KTsKKyAgICAvLyBGaXJzdCBmaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBsZXZlbHMsCisgICAgLy8g
YW5kIGluaXRpYWxpemUgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIgd2l0aCB0aGUgbGVhZiBib3hl
cyBpbiB2aXN1YWwgb3JkZXIuCisgICAgd2hpbGUgKHIpIHsKKyAgICAgICAgaWYgKHItPmJpZGlM
ZXZlbCgpID4gbWF4TGV2ZWwpCisgICAgICAgICAgICBtYXhMZXZlbCA9IHItPmJpZGlMZXZlbCgp
OworICAgICAgICBpZiAoci0+YmlkaUxldmVsKCkgPCBtaW5MZXZlbCkKKyAgICAgICAgICAgIG1p
bkxldmVsID0gci0+YmlkaUxldmVsKCk7CisgICAgICAgIGxlYWZCb3hlc0luTG9naWNhbE9yZGVy
LmFwcGVuZChyKTsKKyAgICAgICAgciA9IHItPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgKytj
b3VudDsKKyAgICB9CisKKyAgICBpZiAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
dWFsbHlPcmRlcmVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBSZXZlcnNlIG9mIHJlb3Jk
ZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIEwy
LiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qg
b2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNl
cXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCisK
KyAgICAvLyBSZXZlcnNpbmcgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgaXMgb25seSBkb25l
IHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsLgorICAgIGlmICghKG1pbkxldmVsICUgMikpCisg
ICAgICAgIG1pbkxldmVsKys7CisgICAgCisgICAgSW5saW5lQm94KiogZW5kID0gbGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXIuZW5kKCk7CisgICAgd2hpbGUgKG1pbkxldmVsIDw9IG1heExldmVsKSB7
CisgICAgICAgIElubGluZUJveCoqIGl0ZXIgPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5iZWdp
bigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChp
dGVyICE9IGVuZCkgeworICAgICAgICAgICAgICAgIGlmICgoKml0ZXIpLT5iaWRpTGV2ZWwoKSA+
PSBtaW5MZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
KytpdGVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSW5saW5lQm94KiogZmlyc3QgPSBp
dGVyOworICAgICAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAg
aWYgKCgqaXRlciktPmJpZGlMZXZlbCgpIDwgbWluTGV2ZWwpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIElubGluZUJveCoqIGxhc3QgPSBpdGVyOworICAgICAgICAgICAgc3RkOjpyZXZlcnNlKGZp
cnN0LCBsYXN0KTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgKyttaW5MZXZl
bDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdldExvZ2ljYWxTdGFydEJveEFuZE5vZGUoUm9v
dElubGluZUJveCogcm9vdEJveCwgSW5saW5lQm94KiYgc3RhcnRCb3gsIE5vZGUqJiBzdGFydE5v
ZGUpCit7CisgICAgVmVjdG9yPElubGluZUJveCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOwor
ICAgIGdldExlYWZCb3hlc0luTG9naWNhbE9yZGVyKHJvb3RCb3gsIGxlYWZCb3hlc0luTG9naWNh
bE9yZGVyKTsKKyAgICBzdGFydEJveCA9IDA7CisgICAgc3RhcnROb2RlID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHN0YXJ0Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV07CisgICAgICAg
IHN0YXJ0Tm9kZSA9IHN0YXJ0Qm94LT5yZW5kZXJlcigpLT5ub2RlKCk7CisgICAgICAgIGlmIChz
dGFydE5vZGUpCisgICAgICAgICAgICByZXR1cm47IAorICAgIH0KK30KKworc3RhdGljIHZvaWQg
Z2V0TG9naWNhbEVuZEJveEFuZE5vZGUoUm9vdElubGluZUJveCogcm9vdEJveCwgSW5saW5lQm94
KiYgZW5kQm94LCBOb2RlKiYgZW5kTm9kZSkKK3sKKyAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXI7CisgICAgZ2V0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIocm9v
dEJveCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGVuZEJveCA9IDA7CisgICAgZW5k
Tm9kZSA9IDA7CisgICAgLy8gR2VuZXJhdGVkIGNvbnRlbnQgKGUuZy4gbGlzdCBtYXJrZXJzIGFu
ZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyCisgICAgLy8gcHNldWRvZWxlbWVudHMpIGhhdmUgbm8g
Y29ycmVzcG9uZGluZyBET00gZWxlbWVudCwgYW5kIHNvIGNhbm5vdCBiZQorICAgIC8vIHJlcHJl
c2VudGVkIGJ5IGEgVmlzaWJsZVBvc2l0aW9uLiAgVXNlIHdoYXRldmVyIHByZWNlZGVzIGluc3Rl
YWQuCisgICAgZm9yIChzaXplX3QgaSA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsg
aSA+IDA7IC0taSkgeyAKKyAgICAgICAgZW5kQm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJb
aSAtIDFdOworICAgICAgICBlbmROb2RlID0gZW5kQm94LT5yZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgICAgIGlmIChlbmROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjKQoreworICAgIGlmIChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gcm9vdEJv
eEZvckxpbmUoYyk7CisgICAgaWYgKCFyb290Qm94KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBW
aXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CisgICAgICAgIC8v
IFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVk
IGJsb2Nrcy4KKyAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAg
ICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1Jl
bmRlckJsb2NrKCkgJiYgIXAubV9vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25B
dm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKGMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOworICAgIH0KKyAgICAKKyAgICBJbmxpbmVCb3gqIGxvZ2ljYWxT
dGFydEJveDsKKyAgICBOb2RlKiBsb2dpY2FsU3RhcnROb2RlOworICAgIGdldExvZ2ljYWxTdGFy
dEJveEFuZE5vZGUocm9vdEJveCwgbG9naWNhbFN0YXJ0Qm94LCBsb2dpY2FsU3RhcnROb2RlKTsK
KworICAgIGlmICghbG9naWNhbFN0YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOworCisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbG9naWNhbFN0YXJ0Qm94LT5jYXJldE1p
bk9mZnNldCgpOworICAKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0
aW9uKGxvZ2ljYWxTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICByZXR1
cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKHZpc1Bvcyk7Cit9CisKK1Zp
c2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBj
KQoreworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBsb2dpY2FsU3RhcnRQb3NpdGlvbkZv
ckxpbmUoYyk7CisgICAgCisgICAgaWYgKHZpc1Bvcy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGMuaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHZpc1Bvcyk7CisKKyAgICByZXR1cm4g
Yy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQWZ0ZXIodmlzUG9zKTsKK30KKworc3RhdGljIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYykKK3sKKyAgICBpZiAoYy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOworCisgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IHJvb3RCb3hGb3JMaW5l
KGMpOworICAgIGlmICghcm9vdEJveCkgeworICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBv
c2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAorICAgICAgICAvLyBSb290SW5s
aW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3Mu
CisgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIGlmIChw
Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9j
aygpICYmICFwLm1fb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICB9CisgICAgCisgICAgSW5saW5lQm94KiBsb2dpY2Fs
RW5kQm94OworICAgIE5vZGUqIGxvZ2ljYWxFbmROb2RlOworICAgIGdldExvZ2ljYWxFbmRCb3hB
bmROb2RlKHJvb3RCb3gsIGxvZ2ljYWxFbmRCb3gsIGxvZ2ljYWxFbmROb2RlKTsKKyAgICBpZiAo
IWxvZ2ljYWxFbmROb2RlKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAg
CisgICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgaWYgKGxvZ2ljYWxFbmROb2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSkKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICBlbHNlIGlmIChsb2dpY2Fs
RW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgeworICAgICAgICBJbmxpbmVUZXh0Qm94KiBlbmRU
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGxvZ2ljYWxFbmRCb3gpOworICAg
ICAgICBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOworICAgICAgICBpZiAoIWVuZFRl
eHRCb3gtPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJv
eC0+bGVuKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNh
bEVuZE5vZGUsIGVuZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworfQorCitib29s
IGluU2FtZUxvZ2ljYWxMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKQoreworICAgIHJldHVybiBhLmlzTm90TnVsbCgpICYmIGxvZ2ljYWxTdGFy
dE9mTGluZShhKSA9PSBsb2dpY2FsU3RhcnRPZkxpbmUoYik7Cit9CisKK1Zpc2libGVQb3NpdGlv
biBsb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKK3sKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzUG9zID0gbG9naWNhbEVuZFBvc2l0aW9uRm9yTGluZShjKTsKKyAgICAK
KyAgICAvLyBNYWtlIHN1cmUgdGhlIGVuZCBvZiBsaW5lIGlzIGF0IHRoZSBzYW1lIGxpbmUgYXMg
dGhlIGdpdmVuIGlucHV0IHBvc2l0aW9uLiBGb3IgYSB3cmFwcGluZyBsaW5lLCB0aGUgbG9naWNh
bCBlbmQKKyAgICAvLyBwb3NpdGlvbiBmb3IgdGhlIG5vdC1sYXN0LTItbGluZXMgbWlnaHQgaW5j
b3JyZWN0bHkgaGFuZCBiYWNrIHRoZSBsb2dpY2FsIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5l
LiAKKyAgICAvLyBGb3IgZXhhbXBsZSwgPGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHN0
eWxlPSJsaW5lLWJyZWFrOmJlZm9yZS13aGl0ZS1zcGFjZSI+YWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcKKyAgICAvLyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+CisgICAgLy8gSW4gdGhp
cyBjYXNlLCB1c2UgdGhlIHByZXZpb3VzIHBvc2l0aW9uIG9mIHRoZSBjb21wdXRlZCBsb2dpY2Fs
IGVuZCBwb3NpdGlvbi4KKyAgICBpZiAoIWluU2FtZUxvZ2ljYWxMaW5lKGMsIHZpc1BvcykpCisg
ICAgICAgIHZpc1BvcyA9IHZpc1Bvcy5wcmV2aW91cygpOworICAgIAorICAgIHJldHVybiBjLmhv
bm9yRWRpdGFibGVCb3VuZGFyeUF0T3JCZWZvcmUodmlzUG9zKTsKK30KKwogfQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5oCShyZXZpc2lvbiA0MjgwNykKKysrIFdlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDExIEBAIFZpc2libGVQ
b3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c0xpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwogVmlzaWJsZVBv
c2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsK
IGJvb2wgaW5TYW1lTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uICYpOworYm9vbCBpblNhbWVMb2dpY2FsTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24g
JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogYm9vbCBpc1N0YXJ0T2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmKTsKIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpOworVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24gJik7CitWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CiAKIC8vIHBhcmFncmFwaHMgKHBlcmhhcHMgYSBtaXNub21lciwgY2FuIGJl
IGRpdmlkZWQgYnkgbGluZSBicmVhayBlbGVtZW50cykKIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDI5
OTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAwOS0wNC0yOSAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDE2OAorICAgICAgICBSVEw6IEhvbWUvRW5k
IGtleSBkb2VzIG5vdCBiZWhhdmUgY29ycmVjdGx5IGluIG1peGVkIGJpZGkgdGV4dCBpbiBSVEwg
ZG9jdW1lbnQKKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1zZWxlY3Rpb24t
ZXhwZWN0ZWQudHh0OiBBZGRlZCByZXN1bHQgZm9yIGV4dGVuZCBpbgorICAgICAgICBsaW5lQm91
bmRhcnkuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi5odG1s
OiBBZGRlZCB0ZXN0IGNhc2VzIGFuZCBzY3JpcHQgZm9yIGV4dGVuZAorICAgICAgICBpbiBsaW5l
Qm91bmRhcnkuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9ob21lLWVuZC5odG1sOiBB
ZGRlZC4KKwogMjAwOS0wNC0yOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBEaXNhYmxlIG1lZGlhL3ZpZGVvLXpvb20tY29udHJvbHMuaHRtbCBvbiBX
aW5kb3dzIGZvciBub3cuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRl
bmQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDI4
MDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOSw2ICs5LDI0IEBAIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0CiBMb3JlbQogaXBzdW0gZG9sb3Igc2l0CiBhbWV0dAorTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQKK0xvcmVtIGlwc3VtIGRvbG9yCitqdXN0IGEgdGVzdAorc2l0IGFtZXQK
K0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0CitMb3JlbQoraXBzdW0gZG9sb3Igc2l0CithbWV0
CitKdXN0IHRlc3Rpbmcg16jXpyDXkdeV15PXpworSnVzdCB0ZXN0aW5nIHdoYXQgZXZlcgorY2Fy
IG1lYW5zINeQ15HXki4KK2NhciDXk9eU15Ug15DXkdeSLgoraGUgc2FpZCAiIGNhciDXk9eU15Ug
15DXkdeSIC4iCivXlteX15gg15nXmtebINec153XniAnIGhlIHNhaWQgIiBjYXIg15PXlNeVINeQ
15HXkiAiICc/CivXkNeR15IgYWJjINeT15TXlQorZWRmINeW15fXmCBhYnJlYmcKK2FiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZworYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnCiAKIAogCkBAIC0zNzIsMyArMzkwLDEz
OSBAQCBUZXN0IDEsIExUUjoKICAgRXh0ZW5kaW5nIHJpZ2h0OiAiTG9yZW0gIlsoMCwwKSwgKDAs
NSldLCAiaXBzdW0gZG9sb3Igc2l0IlsoMCw1KSwgKDAsMTEpLCAoMCwxNSldLCAiIGFtZXR0Ilso
MCw2KSwgKDAsMSldCiAgIEV4dGVuZGluZyBsZWZ0OiAgIiBhbWV0dCJbKDAsNiksICgwLDEpXSwg
Imlwc3VtIGRvbG9yIHNpdCJbKDAsMTIpLCAoMCw2KSwgKDAsMCldLCAiTG9yZW0gIlsoMCwwKSwg
KDAsNSldCiAKKworCitFeHRlbmRpbmcgYnkgbGluZUJvdW5kYXJ5CitUZXN0IDEsIExUUjoKKyAg
RXh0ZW5kaW5nIGZvcndhcmQ6ICJcbmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbKDEsMSksICgxLDIw
KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsoMSwy
MCksICgxLDEpXQorVGVzdCAxLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG5hYmMgQUJD
IHh5eiBERUYgZGVmXG4iWygxLDEpLCAoMSwyMCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJc
bmFiYyBBQkMgeHl6IERFRiBkZWZcbiJbKDEsMjApLCAoMSwxKV0KK1Rlc3QgMiwgTFRSOgorICBF
eHRlbmRpbmcgZm9yd2FyZDogIlxuQUJDIHh5eiBERUYgZGVmIEdISVxuIlsoMSwxKSwgKDEsMjAp
XQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiXG5BQkMgeHl6IERFRiBkZWYgR0hJXG4iWygxLDIw
KSwgKDEsMSldCitUZXN0IDIsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJcbkFCQyB4eXog
REVGIGRlZiBHSElcbiJbKDEsMSksICgxLDIwKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxu
QUJDIHh5eiBERUYgZGVmIEdISVxuIlsoMSwyMCksICgxLDEpXQorVGVzdCAzLCBMVFI6CisgIEV4
dGVuZGluZyBmb3J3YXJkOiAiXG5BQkMgREVGIEFCQ1xuIlsoMSwxKSwgKDEsMTIpXQorICBFeHRl
bmRpbmcgYmFja3dhcmQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsoMSwxMiksICgxLDEpXQorVGVzdCAz
LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG5BQkMgREVGIEFCQ1xuIlsoMSwxKSwgKDEs
MTIpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiXG5BQkMgREVGIEFCQ1xuIlsoMSwxMiksICgx
LDEpXQorVGVzdCA0LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG5hYmMgZWZkIGRhYmVi
XG4iWygxLDEpLCAoMSwxNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJcbmFiYyBlZmQgZGFi
ZWJcbiJbKDEsMTQpLCAoMSwxKV0KK1Rlc3QgNCwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDog
IlxuYWJjIGVmZCBkYWJlYlxuIlsoMSwxKSwgKDEsMTQpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6
ICAiXG5hYmMgZWZkIGRhYmViXG4iWygxLDE0KSwgKDEsMSldCitUZXN0IDUsIExUUjoKKyAgRXh0
ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5k
aW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCA1LCBS
VEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSld
CisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0K
K1Rlc3QgNiwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFt
ZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVt
ICJbKDAsMCldCitUZXN0IDYsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygw
LDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1
KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCA3LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAi
TG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIg
YW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgNywgUlRMOgorICBFeHRlbmRpbmcg
Zm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFj
a3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDgsIExUUjoKKyAg
RXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApXSwgIiBhbWV0IlsoMCw1KV0KKyAgRXh0
ZW5kaW5nIGJhY2t3YXJkOiAgIiBhbWV0IlsoMCw1KV0sICJMb3JlbSAiWygwLDApXQorVGVzdCA4
LCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1ldCJbKDAs
NSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0gIlsoMCww
KV0KK1Rlc3QgOSwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCksICgw
LDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiTG9yZW0gIlsoMCw1KSwgKDAsMCldCitUZXN0
IDksIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygwLDApLCAoMCw1KV0KKyAg
RXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkxvcmVtICJbKDAsNSksICgwLDApXQorVGVzdCAxMCwgTFRS
OgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAiIGFtZXQiWygwLDUpXQor
ICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxvcmVtICJbKDAsMCldCitU
ZXN0IDEwLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICIgYW1l
dCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJbKDAsNSldLCAiTG9yZW0g
IlsoMCwwKV0KK1Rlc3QgMTEsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJMb3JlbSAiWygw
LDApXSwgImlwc3VtIGRvbG9yIlsoMCwxMSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJpcHN1
bSBkb2xvciJbKDAsMTEpXSwgIkxvcmVtICJbKDAsMCldCitUZXN0IDExLCBSVEw6CisgIEV4dGVu
ZGluZyBmb3J3YXJkOiAiTG9yZW0gIlsoMCwwKV0sICJpcHN1bSBkb2xvciJbKDAsMTEpXQorICBF
eHRlbmRpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3IiWygwLDExKV0sICJMb3JlbSAiWygwLDAp
XQorVGVzdCAxMiwgTFRSOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxvcmVtICJbKDAsMCldLCAi
IGFtZXQiWygwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWygwLDUpXSwgIkxv
cmVtICJbKDAsMCldCitUZXN0IDEyLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiTG9yZW0g
IlsoMCwwKV0sICIgYW1ldCJbKDAsNSldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICIgYW1ldCJb
KDAsNSldLCAiTG9yZW0gIlsoMCwwKV0KK1Rlc3QgMTMsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndh
cmQ6ICJMb3JlbSAiWygwLDApLCAoMCw1KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkxvcmVt
ICJbKDAsNSksICgwLDApXQorVGVzdCAxMywgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkxv
cmVtICJbKDAsMCksICgwLDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiTG9yZW0gIlsoMCw1
KSwgKDAsMCldCitUZXN0IDE0LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG4JSnVzdFxu
CSJbKDIsMildLCAiXG4JQkZEWFxuIlsoMiw2KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxu
CUJGRFhcbiJbKDIsNildLCAiXG4JSnVzdFxuCSJbKDIsMildCitUZXN0IDE0LCBSVEw6CisgIEV4
dGVuZGluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJbKDIsMildLCAiXG4JQkZEWFxuIlsoMiw2KV0K
KyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuCUJGRFhcbiJbKDIsNildLCAiXG4JSnVzdFxuCSJb
KDIsMildCitUZXN0IDE1LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJb
KDIsMildLCAiXG4JZXZlclxuIlsoMiw2KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuCWV2
ZXJcbiJbKDIsNildLCAiXG4JSnVzdFxuCSJbKDIsMildCitUZXN0IDE1LCBSVEw6CisgIEV4dGVu
ZGluZyBmb3J3YXJkOiAiXG4JSnVzdFxuCSJbKDIsMildLCAiXG4JZXZlclxuIlsoMiw2KV0KKyAg
RXh0ZW5kaW5nIGJhY2t3YXJkOiAgIlxuCWV2ZXJcbiJbKDIsNildLCAiXG4JSnVzdFxuCSJbKDIs
MildCitUZXN0IDE2LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiY2FyIG1lYW5zIEFCQy4i
WygwLDApLCAoMCwxNCldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICJjYXIgbWVhbnMgQUJDLiJb
KDAsMTQpLCAoMCwwKV0KK1Rlc3QgMTYsIFJUTDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJjYXIg
bWVhbnMgQUJDLiJbKDAsMCksICgwLDE0KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgImNhciBt
ZWFucyBBQkMuIlsoMCwxNCksICgwLDApXQorVGVzdCAxNywgTFRSOgorICBFeHRlbmRpbmcgZm9y
d2FyZDogIuGqnGNhciBERUYgQUJDLuGqnSJbKDEsMSksICgxLDEzKV0KKyAgRXh0ZW5kaW5nIGJh
Y2t3YXJkOiAgIuGqnGNhciBERUYgQUJDLuGqnSJbKDEsMTMpLCAoMSwxKV0KK1Rlc3QgMTcsIFJU
TDoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICLhqpxjYXIgREVGIEFCQy7hqp0iWygxLDEpLCAoMSwx
MyldCisgIEV4dGVuZGluZyBiYWNrd2FyZDogICLhqpxjYXIgREVGIEFCQy7hqp0iWygxLDEzKSwg
KDEsMSldCitUZXN0IDE4LCBMVFI6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiaGUgc2FpZCAi4aqc
Y2FyIERFRiBBQkPhqp0uIiJbKDAsMCksICgwLDI0KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAg
ImhlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIiWygwLDI0KSwgKDAsMCldCitUZXN0IDE4LCBS
VEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiaGUgc2FpZCAi4aqcY2FyIERFRiBBQkPhqp0uIiJb
KDAsMCksICgwLDI0KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgImhlIHNhaWQgIuGqnGNhciBE
RUYgQUJD4aqdLiIiWygwLDI0KSwgKDAsMCldCitUZXN0IDE5LCBMVFI6CisgIEV4dGVuZGluZyBm
b3J3YXJkOiAiR0hJIEpLTCBNTk8gJ+Gqm2hlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdIuGqnSc/
IlsoMCwwKSwgKDAsNDApXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiR0hJIEpLTCBNTk8gJ+Gq
m2hlIHNhaWQgIuGqnGNhciBERUYgQUJD4aqdIuGqnSc/IlsoMCw0MCksICgwLDApXQorVGVzdCAx
OSwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDogIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLh
qpxjYXIgREVGIEFCQ+GqnSLhqp0nPyJbKDAsMCksICgwLDQwKV0KKyAgRXh0ZW5kaW5nIGJhY2t3
YXJkOiAgIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLhqp0nPyJb
KDAsNDApLCAoMCwwKV0KK1Rlc3QgMjAsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJBQkMg
YWJjIERFRiJbKDAsMCksICgwLDExKV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIkFCQyBhYmMg
REVGIlsoMCwxMSksICgwLDApXQorVGVzdCAyMCwgUlRMOgorICBFeHRlbmRpbmcgZm9yd2FyZDog
IkFCQyBhYmMgREVGIlsoMCwwKSwgKDAsMTEpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiQUJD
IGFiYyBERUYiWygwLDExKSwgKDAsMCldCitUZXN0IDIxLCBMVFI6CisgIEV4dGVuZGluZyBmb3J3
YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJb
KDAsMCksICgwLDgpLCAoMCwxNiksICgwLDI2KSwgKDAsMzQpLCAoMCw0MiksICgwLDUwKSwgKDAs
NTgpLCAoMCw2NiksICgwLDc0KSwgKDAsODIpLCAoMCw5MCksICgwLDk4KSwgKDAsMTA1KV0KKyAg
RXh0ZW5kaW5nIGJhY2t3YXJkOiAgImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyAiWygwLDEwNSksICgwLDApXQorVGVzdCAyMSwgUlRMOgorICBFeHRlbmRp
bmcgZm9yd2FyZDogImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJj
ZGVmZyAiWygwLDApLCAoMCw3KV0KKyAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgImFiY2RlZmcgYWJj
ZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWygwLDcpLCAoMCwwKV0KK1Rl
c3QgMjIsIExUUjoKKyAgRXh0ZW5kaW5nIGZvcndhcmQ6ICJhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgIlsoMCwwKSwgKDAsOCksICgwLDE2KSwgKDAsMjYp
LCAoMCwzNCksICgwLDQyKSwgKDAsNTApLCAoMCw1OCksICgwLDY2KSwgKDAsNzQpLCAoMCw4Miks
ICgwLDkwKSwgKDAsOTgpLCAoMCwxMDUpXQorICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbKDAsMTA1KSwgKDAs
MCldCitUZXN0IDIyLCBSVEw6CisgIEV4dGVuZGluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbKDAsMCksICgwLDcpXQorICBFeHRl
bmRpbmcgYmFja3dhcmQ6ICAiYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYSBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnICJbKDAsNyksICgwLDApXQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLXNlbGVjdGlvbi5odG1sCShyZXZpc2lvbiA0MjgwNykK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1zZWxlY3Rpb24uaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMjQ3LDYgKzI0NywyNyBAQAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKKyAgICAgICAgZnVuY3Rpb24gdGVzdEV4dGVuZGluZ0xpbmVCb3VuZGFyeSh0ZXN0cywg
c2VsKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlyZWN0aW9uID0g
Imx0ciI7CisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgTFRSOlxu
ICBFeHRlbmRpbmcgZm9yd2FyZDogIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9u
KHRlc3RzW2ldLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgbHRyUmlnaHRQb3MgPSBleHRlbmRp
bmdTZWxlY3Rpb24oc2VsLCAiZm9yd2FyZCIsICJsaW5lQm91bmRhcnkiLCAwKTsKKyAgICAKKyAg
ICAgICAgICAgICAgICBsb2coIiAgRXh0ZW5kaW5nIGJhY2t3YXJkOiAgIik7CisgICAgICAgICAg
ICAgICAgdmFyIGx0ckxlZnRQb3MgPSBleHRlbmRpbmdTZWxlY3Rpb24oc2VsLCAiYmFja3dhcmQi
LCAibGluZUJvdW5kYXJ5IiwgMCk7CisKKyAgICAgICAgICAgICAgICB0ZXN0c1tpXS5zdHlsZS5k
aXJlY3Rpb24gPSAicnRsIjsKKyAgICAgICAgICAgICAgICBsb2coIlRlc3QgIiArIChpICsgMSkg
KyAiLCBSVEw6XG4gIEV4dGVuZGluZyBmb3J3YXJkOiAiKTsKKyAgICAgICAgICAgICAgICBzZWwu
c2V0UG9zaXRpb24odGVzdHNbaV0sIDApOworICAgICAgICAgICAgICAgIHZhciBsdHJSaWdodFBv
cyA9IGV4dGVuZGluZ1NlbGVjdGlvbihzZWwsICJmb3J3YXJkIiwgImxpbmVCb3VuZGFyeSIsIDAp
OworICAgIAorICAgICAgICAgICAgICAgIGxvZygiICBFeHRlbmRpbmcgYmFja3dhcmQ6ICAiKTsK
KyAgICAgICAgICAgICAgICB2YXIgbHRyTGVmdFBvcyA9IGV4dGVuZGluZ1NlbGVjdGlvbihzZWws
ICJiYWNrd2FyZCIsICJsaW5lQm91bmRhcnkiLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIG9ubG9hZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCkBAIC0yNjksMzEgKzI5MCw2NCBAQAog
ICAgICAgICAgICAgdGVzdEV4dGVuZGluZ1NlbGVjdGlvbkZvckVuY2xvc2luZ0Jsb2NrKHRlc3Rz
LCAgc2VsLCAiY2hhcmFjdGVyIiwgMSk7CiAgICAgICAgICAgICBsb2coIlxuXG5cblxuXG5FeHRl
bmRpbmcgYnkgd29yZFxuIik7CiAgICAgICAgICAgICB0ZXN0RXh0ZW5kaW5nU2VsZWN0aW9uRm9y
RW5jbG9zaW5nQmxvY2sodGVzdHMsICBzZWwsICJ3b3JkIiwgMSk7CisKKyAgICAgICAgICAgIHRl
c3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaG9tZS1lbmQtdGVzdCIpOwor
ICAgICAgICAgICAgdmFyIHNlbCA9IGdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgbG9nKCJc
blxuXG5FeHRlbmRpbmcgYnkgbGluZUJvdW5kYXJ5XG4iKTsKKyAgICAgICAgICAgIHRlc3RFeHRl
bmRpbmdMaW5lQm91bmRhcnkodGVzdHMsICBzZWwpOwogICAgICAgICB9CiAKICAgICA8L3Njcmlw
dD4KIDwvaGVhZD4KIDxib2R5PgotPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgor
PGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QgaG9tZS1lbmQtdGVzdCI+CiBhYmMgJiMx
NDg4OyYjMTQ4OTsmIzE0OTA7IHh5eiAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgZGVmCiA8L2Rpdj4K
LTxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKzxkaXYgY29udGVudGVkaXRhYmxl
IGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPgogJiMxNDg4OyYjMTQ4OTsmIzE0OTA7IHh5eiAm
IzE0OTE7JiMxNDkyOyYjMTQ5MzsgZGVmICYjMTQ5NDsmIzE0OTU7JiMxNDk2OwogPC9kaXY+Ci08
ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBj
bGFzcz0idGVzdCBob21lLWVuZC10ZXN0Ij4KICYjMTQ4ODsmIzE0ODk7JiMxNDkwOyAmIzE0OTE7
JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7CiA8L2Rpdj4KLTxkaXYgY29udGVu
dGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0
IGhvbWUtZW5kLXRlc3QiPgogYWJjIGVmZCBkYWJlYgogPC9kaXY+CiAKIAotPGRpdiBjb250ZW50
ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogcnRs
Ij5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KLTxkaXYgY29udGVudGVkaXRhYmxl
IGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGlyPSJydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bh
bj4gYW1ldDwvZGl2PgotPGRpdiBjb250ZW50ZWRpdGFibGUgIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8
c3BhbiAgc3R5bGU9ImRpcmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8
L2Rpdj4KLTxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij5Mb3JlbSA8c3BhbiAgZGly
PSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRp
dGFibGUgIGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGly
ZWN0aW9uOiBydGwiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250
ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QgaG9tZS1lbmQtdGVzdCI+TG9yZW0gPHNwYW4gIGRpcj0i
cnRsIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRh
YmxlICBjbGFzcz0idGVzdCBob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRpcmVj
dGlvbjogbHRyIj5pcHN1bSBkb2xvciBzaXQ8L3NwYW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVu
dGVkaXRhYmxlIGNsYXNzPSJ0ZXN0IGhvbWUtZW5kLXRlc3QiPkxvcmVtIDxzcGFuICBkaXI9Imx0
ciI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+CisKKzxkaXYgY29udGVudGVkaXRh
YmxlIGNsYXNzPSJ0ZXN0RW5jbG9zaW5nQmxvY2sgaG9tZS1lbmQtdGVzdCI+TG9yZW0gPGRpdiAg
ZGlyPSJydGwiPmlwc3VtIGRvbG9yIHNpdDwvZGl2PiBhbWV0dDwvZGl2PgorCis8ZGl2IGNvbnRl
bnRlZGl0YWJsZSAgY2xhc3M9ImhvbWUtZW5kLXRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGly
ZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250
ZW50ZWRpdGFibGUgIGNsYXNzPSJob21lLWVuZC10ZXN0Ij5Mb3JlbSA8c3BhbiAgc3R5bGU9ImRp
cmVjdGlvbjogbHRyIj5pcHN1bSBkb2xvcjxkaXYgPiBqdXN0IGEgdGVzdDwvZGl2PiBzaXQ8L3Nw
YW4+IGFtZXQ8L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJob21lLWVuZC10ZXN0
Ij5Mb3JlbSA8c3BhbiAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvc3Bhbj4gYW1ldDwvZGl2
PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9ImhvbWUtZW5kLXRlc3QiPkxvcmVtIDxkaXYg
IGRpcj0ibHRyIj5pcHN1bSBkb2xvciBzaXQ8L2Rpdj4gYW1ldDwvZGl2PgorCis8ZGl2IGNsYXNz
PSJob21lLWVuZC10ZXN0IiBjb250ZW50ZWRpdGFibGU+CisJSnVzdAorCTxzcGFuPnRlc3Rpbmcg
16jXpzwvc3Bhbj4KKwnXkdeV15PXpworPC9kaXY+CisKKzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRl
c3QiIGNvbnRlbnRlZGl0YWJsZT4KKwlKdXN0CisJPHNwYW4+dGVzdGluZyB3aGF0PC9zcGFuPgor
CWV2ZXIKKzwvZGl2PgorCisKKzxkaXYgY2xhc3M9ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0
YWJsZT5jYXIgbWVhbnMgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7LjwvZGl2PgorPGRpdiBjbGFzcz0i
aG9tZS1lbmQtdGVzdCIgY29udGVudGVkaXRhYmxlPiYjeDIwMkI7Y2FyICYjMTQ5MTsmIzE0OTI7
JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsuJiN4MjAyYzs8L2Rpdj4KKzxkaXYgY2xhc3M9
ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0YWJsZT5oZSBzYWlkICImI3gyMDJCO2NhciAmIzE0
OTE7JiMxNDkyOyYjMTQ5MzsgJiMxNDg4OyYjMTQ4OTsmIzE0OTA7JiN4MjAyYzsuIjwvZGl2Pgor
PGRpdiBjbGFzcz0iaG9tZS1lbmQtdGVzdCIgY29udGVudGVkaXRhYmxlPiYjMTQ5NDsmIzE0OTU7
JiMxNDk2OyAmIzE0OTc7JiMxNDk4OyYjMTQ5OTsgJiMxNTAwOyYjMTUwMTsmIzE1MDI7ICcmI3gy
MDJhO2hlIHNhaWQgIiYjeDIwMkI7Y2FyICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMx
NDg5OyYjMTQ5MDsmI3gyMDJjOyImI3gyMDJjOyc/PC9kaXY+CisKIAotPGRpdiBjb250ZW50ZWRp
dGFibGUgY2xhc3M9InRlc3RFbmNsb3NpbmdCbG9jayI+TG9yZW0gPGRpdiAgZGlyPSJydGwiPmlw
c3VtIGRvbG9yIHNpdDwvZGl2PiBhbWV0dDwvZGl2PgorPGRpdiBjbGFzcz0iaG9tZS1lbmQtdGVz
dCIgY29udGVudGVkaXRhYmxlPiYjMTQ4ODsmIzE0ODk7JiMxNDkwOyBhYmMgJiMxNDkxOyYjMTQ5
MjsmIzE0OTM7PGJyIC8+ZWRmICYjMTQ5NDsmIzE0OTU7JiMxNDk2OyBhYnJlYmc8L2Rpdj4KKzxk
aXYgY2xhc3M9ImhvbWUtZW5kLXRlc3QiIGNvbnRlbnRlZGl0YWJsZSBzdHlsZT0ibGluZS1icmVh
azpiZWZvcmUtd2hpdGUtc3BhY2U7IHdpZHRoOjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgPC9kaXY+Cis8ZGl2IGNsYXNzPSJob21lLWVuZC10
ZXN0IiBjb250ZW50ZWRpdGFibGUgc3R5bGU9ImxpbmUtYnJlYWs6YWZ0ZXItd2hpdGUtc3BhY2U7
IHdpZHRoOjEwMHB4Ij5hYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhIGFiY2RlZmcgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgPC9kaXY+CiAKIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPC9ib2R5PgpJbmRleDog
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUt
ZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKK1Rlc3QgMSwg
TFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsxLCAyMF0K
KyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsyMCwgMV0KK1Rl
c3QgMSwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsx
LCAyMF0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuYWJjIEFCQyB4eXogREVGIGRlZlxuIlsyMCwg
MV0KK1Rlc3QgMiwgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIHh5eiBERUYgZGVmIEdI
SVxuIlsxLCAyMF0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuQUJDIHh5eiBERUYgZGVmIEdISVxu
IlsyMCwgMV0KK1Rlc3QgMiwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIHh5eiBERUYg
ZGVmIEdISVxuIlsxLCAyMF0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuQUJDIHh5eiBERUYgZGVm
IEdISVxuIlsyMCwgMV0KK1Rlc3QgMywgTFRSOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuQUJDIERF
RiBBQkNcbiJbMSwgMTJdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbkFCQyBERUYgQUJDXG4iWzEy
LCAxXQorVGVzdCAzLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiXG5BQkMgREVGIEFCQ1xuIlsx
LCAxMl0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuQUJDIERFRiBBQkNcbiJbMTIsIDFdCitUZXN0
IDQsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbmFiYyBlZmQgZGFiZWJcbiJbMSwgMTRdCisg
IE1vdmluZyBiYWNrd2FyZDogICJcbmFiYyBlZmQgZGFiZWJcbiJbMTQsIDFdCitUZXN0IDQsIFJU
TDoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbmFiYyBlZmQgZGFiZWJcbiJbMSwgMTRdCisgIE1vdmlu
ZyBiYWNrd2FyZDogICJcbmFiYyBlZmQgZGFiZWJcbiJbMTQsIDFdCitUZXN0IDUsIExUUjoKKyAg
TW92aW5nIGZvcndhcmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2Fy
ZDogICIgYW1ldCJbNV0sICJMb3JlbSAiWzBdCitUZXN0IDUsIFJUTDoKKyAgTW92aW5nIGZvcndh
cmQ6ICJMb3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJb
NV0sICJMb3JlbSAiWzBdCitUZXN0IDYsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJMb3JlbSAi
WzBdLCAiaXBzdW0gZG9sb3IiWzExXQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiaXBzdW0gZG9sb3Ii
WzExXSwgIkxvcmVtICJbMF0KK1Rlc3QgNiwgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIkxvcmVt
ICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJpcHN1bSBkb2xv
ciJbMTFdLCAiTG9yZW0gIlswXQorVGVzdCA3LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9y
ZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9y
ZW0gIlswXQorVGVzdCA3LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBh
bWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVz
dCA4LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswLCA1XQorICBNb3ZpbmcgYmFj
a3dhcmQ6ICAiTG9yZW0gIls1LCAwXQorVGVzdCA4LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAi
TG9yZW0gIlswLCA1XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiTG9yZW0gIls1LCAwXQorVGVzdCA5
LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3Zp
bmcgYmFja3dhcmQ6ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCA5LCBSVEw6CisgIE1v
dmluZyBmb3J3YXJkOiAiTG9yZW0gIlswXSwgIiBhbWV0Ils1XQorICBNb3ZpbmcgYmFja3dhcmQ6
ICAiIGFtZXQiWzVdLCAiTG9yZW0gIlswXQorVGVzdCAxMCwgTFRSOgorICBNb3ZpbmcgZm9yd2Fy
ZDogIkxvcmVtICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJp
cHN1bSBkb2xvciJbMTFdLCAiTG9yZW0gIlswXQorVGVzdCAxMCwgUlRMOgorICBNb3ZpbmcgZm9y
d2FyZDogIkxvcmVtICJbMF0sICJpcHN1bSBkb2xvciJbMTFdCisgIE1vdmluZyBiYWNrd2FyZDog
ICJpcHN1bSBkb2xvciJbMTFdLCAiTG9yZW0gIlswXQorVGVzdCAxMSwgTFRSOgorICBNb3Zpbmcg
Zm9yd2FyZDogIkxvcmVtICJbMF0sICIgYW1ldCJbNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIiBh
bWV0Ils1XSwgIkxvcmVtICJbMF0KK1Rlc3QgMTEsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJM
b3JlbSAiWzBdLCAiIGFtZXQiWzVdCisgIE1vdmluZyBiYWNrd2FyZDogICIgYW1ldCJbNV0sICJM
b3JlbSAiWzBdCitUZXN0IDEyLCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiTG9yZW0gIlswLCA1
XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiTG9yZW0gIls1LCAwXQorVGVzdCAxMiwgUlRMOgorICBN
b3ZpbmcgZm9yd2FyZDogIkxvcmVtICJbMCwgNV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkxvcmVt
ICJbNSwgMF0KK1Rlc3QgMTMsIExUUjoKKyAgTW92aW5nIGZvcndhcmQ6ICJcbglKdXN0XG4JIlsy
XSwgIlxuCUJGRFhcbiJbNl0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxuCUJGRFhcbiJbNl0sICJc
bglKdXN0XG4JIlsyXQorVGVzdCAxMywgUlRMOgorICBNb3ZpbmcgZm9yd2FyZDogIlxuCUp1c3Rc
bgkiWzJdLCAiXG4JQkZEWFxuIls2XQorICBNb3ZpbmcgYmFja3dhcmQ6ICAiXG4JQkZEWFxuIls2
XSwgIlxuCUp1c3RcbgkiWzJdCitUZXN0IDE0LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiXG4J
SnVzdFxuCSJbMl0sICJcbglldmVyXG4iWzZdCisgIE1vdmluZyBiYWNrd2FyZDogICJcbglldmVy
XG4iWzZdLCAiXG4JSnVzdFxuCSJbMl0KK1Rlc3QgMTQsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6
ICJcbglKdXN0XG4JIlsyXSwgIlxuCWV2ZXJcbiJbNl0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIlxu
CWV2ZXJcbiJbNl0sICJcbglKdXN0XG4JIlsyXQorVGVzdCAxNSwgTFRSOgorICBNb3ZpbmcgZm9y
d2FyZDogImNhciBtZWFucyBBQkMuIlswLCAxNF0KKyAgTW92aW5nIGJhY2t3YXJkOiAgImNhciBt
ZWFucyBBQkMuIlsxNCwgMF0KK1Rlc3QgMTUsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJjYXIg
bWVhbnMgQUJDLiJbMCwgMTRdCisgIE1vdmluZyBiYWNrd2FyZDogICJjYXIgbWVhbnMgQUJDLiJb
MTQsIDBdCitUZXN0IDE2LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAi4aqcY2FyIERFRiBBQkMu
4aqdIlsxLCAxM10KKyAgTW92aW5nIGJhY2t3YXJkOiAgIuGqnGNhciBERUYgQUJDLuGqnSJbMTMs
IDFdCitUZXN0IDE2LCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAi4aqcY2FyIERFRiBBQkMu4aqd
IlsxLCAxM10KKyAgTW92aW5nIGJhY2t3YXJkOiAgIuGqnGNhciBERUYgQUJDLuGqnSJbMTMsIDFd
CitUZXN0IDE3LCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiaGUgc2FpZCAi4aqcY2FyIERFRiBB
QkPhqp0uIiJbMCwgMjRdCisgIE1vdmluZyBiYWNrd2FyZDogICJoZSBzYWlkICLhqpxjYXIgREVG
IEFCQ+GqnS4iIlsyNCwgMF0KK1Rlc3QgMTcsIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJoZSBz
YWlkICLhqpxjYXIgREVGIEFCQ+GqnS4iIlswLCAyNF0KKyAgTW92aW5nIGJhY2t3YXJkOiAgImhl
IHNhaWQgIuGqnGNhciBERUYgQUJD4aqdLiIiWzI0LCAwXQorVGVzdCAxOCwgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLh
qp0nPyJbMCwgNDBdCisgIE1vdmluZyBiYWNrd2FyZDogICJHSEkgSktMIE1OTyAn4aqbaGUgc2Fp
ZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzQwLCAwXQorVGVzdCAxOCwgUlRMOgorICBNb3Zp
bmcgZm9yd2FyZDogIkdISSBKS0wgTU5PICfhqptoZSBzYWlkICLhqpxjYXIgREVGIEFCQ+GqnSLh
qp0nPyJbMCwgNDBdCisgIE1vdmluZyBiYWNrd2FyZDogICJHSEkgSktMIE1OTyAn4aqbaGUgc2Fp
ZCAi4aqcY2FyIERFRiBBQkPhqp0i4aqdJz8iWzQwLCAwXQorVGVzdCAxOSwgTFRSOgorICBNb3Zp
bmcgZm9yd2FyZDogIkFCQyBhYmMgREVGIlswLCAxMV0KKyAgTW92aW5nIGJhY2t3YXJkOiAgIkFC
QyBhYmMgREVGIlsxMSwgMF0KK1Rlc3QgMTksIFJUTDoKKyAgTW92aW5nIGZvcndhcmQ6ICJBQkMg
YWJjIERFRiJbMCwgMTFdCisgIE1vdmluZyBiYWNrd2FyZDogICJBQkMgYWJjIERFRiJbMTEsIDBd
CitUZXN0IDIwLCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbMCwgOF0KKyAgTW92aW5nIGJhY2t3YXJkOiAg
ImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzgsIDBd
CitUZXN0IDIwLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbMCwgN10KKyAgTW92aW5nIGJhY2t3YXJkOiAg
ImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzcsIDBd
CitUZXN0IDIxLCBMVFI6CisgIE1vdmluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbMCwgOF0KKyAgTW92aW5nIGJhY2t3YXJkOiAg
ImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzgsIDBd
CitUZXN0IDIxLCBSVEw6CisgIE1vdmluZyBmb3J3YXJkOiAiYWJjZGVmZyBhYmNkZWZnIGFiY2Rl
ZmcgYSBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNk
ZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnICJbMCwgN10KKyAgTW92aW5nIGJhY2t3YXJkOiAg
ImFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVm
ZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyAiWzcsIDBd
CisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vaG9tZS1lbmQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2hvbWUtZW5kLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2IEBACis8aGVhZD4KKyAgICA8bWV0YSBodHRw
LWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+
CisgICAgPHN0eWxlPgorICAgICAgICBkaXYudGVzdCB7CisgICAgICAgICAgICAtd2Via2l0LXVz
ZXItbW9kaWZ5OiByZWFkLXdyaXRlOworICAgICAgICAgICAgcGFkZGluZzogNHB4OworICAgICAg
ICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGxpZ2h0Ymx1ZTsKKyAgICAgICAgICAgIG1hcmdpbjog
NHB4IDRweCA0cHggMjRweDsKKyAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAg
ICBmb250LWZhbWlseTogTHVjaWRhIEdyYW5kZTsKKyAgICAgICAgICAgIGNvdW50ZXItaW5jcmVt
ZW50OiB0ZXN0LW51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBkaXYudGVzdDpiZWZvcmUgeyBj
b250ZW50OiBjb3VudGVyKHRlc3QtbnVtYmVyKTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA4
cHg7IGZvbnQtc2l6ZTogeC1zbWFsbDsgdGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAyMHB4OyB9
CisgICAgICAgIGRpdi50ZXN0IHNwYW4geyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVmOyB9CisgICAg
ICAgIGRpdi50ZXN0IGltZyB7IHdpZHRoOiAxZW07IGhlaWdodDogMWVtOyBiYWNrZ3JvdW5kLWNv
bG9yOiBsaWdodGdyZWVuOyB9CisgICAgICAgIGRpdi50ZXN0IGltZyArIGltZyB7IGJhY2tncm91
bmQtY29sb3I6IGxpZ2h0Ymx1ZTsgfQorICAgICAgICBkaXYudGVzdCBkaXYgeyBib3JkZXI6IDFw
eCBkYXNoZWQgcGluazsgcGFkZGluZzogM3B4OyBoZWlnaHQ6IDJlbTsgfQorICAgIDwvc3R5bGU+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCBkaXJlY3Rpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgICAgIHBv
c2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmZvY3VzT2Zm
c2V0fSk7CisgICAgICAgICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgZGlyZWN0aW9uLCAibGluZUJv
dW5kYXJ5Iik7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JO
b2RlLCBvZmZzZXQ6IHNlbC5mb2N1c09mZnNldH0pOworICAgICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uczsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZvbGQoc3RyaW5nKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBjaGFy
ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXIgPj0gMHgw
NWQwKQorICAgICAgICAgICAgICAgICAgICBjaGFyIC09IDB4MDU4ZjsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjaGFyID09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAi
XFxuIjsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5u
b2RlICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
ZygiXSIpOworICAgICAgICAgICAgICAgICAgICBsb2coIiwgIik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghaSB8fCBwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlv
bnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAgIGxvZygocG9zaXRpb25zW2ldLm5v
ZGUgaW5zdGFuY2VvZiBUZXh0ID8gJyInICsgZm9sZChwb3NpdGlvbnNbaV0ubm9kZS5kYXRhKSAr
ICciJyA6ICI8IiArIHBvc2l0aW9uc1tpXS5ub2RlLnRhZ05hbWUgKyAiPiIpICsgIlsiKTsKKyAg
ICAgICAgICAgICAgICBsb2cocG9zaXRpb25zW2ldLm9mZnNldCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsb2coIl0iKTsKKyAgICAgICAgfQorCisgICAgICAgIG9ubG9hZCA9IGZ1bmN0
aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB0ZXN0cyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInRlc3QiKTsKKyAgICAgICAgICAgIHZhciBzZWwg
PSBnZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zTW92aW5nUmlnaHQ7
CisgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ0xlZnQ7CisgICAgCisgICAgICAg
ICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgTFRSOlxuICBNb3ZpbmcgZm9yd2Fy
ZDogIik7CisgICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHRlc3RzW2ldLCAwKTsKKyAg
ICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdSaWdodCA9IHBvc2l0aW9uc01vdmluZ0luRGly
ZWN0aW9uKHNlbCwgImZvcndhcmQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9z
aXRpb25zTW92aW5nUmlnaHQpOworICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAg
ICAgICAgICAgIGxvZygiICBNb3ZpbmcgYmFja3dhcmQ6ICAiKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnNNb3ZpbmdMZWZ0ID0gcG9zaXRpb25zTW92aW5nSW5EaXJlY3Rpb24oc2VsLCAiYmFj
a3dhcmQiKTsKKyAgICAgICAgICAgICAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25zTW92aW5nTGVm
dCk7CisgICAgICAgICAgICAgICAgbG9nKCJcbiIpOworCisgICAgICAgICAgICAgICAgdGVzdHNb
aV0uc3R5bGUuZGlyZWN0aW9uID0gInJ0bCI7CisKKyAgICAgICAgICAgICAgICBsb2coIlRlc3Qg
IiArIChpICsgMSkgKyAiLCBSVEw6XG4gIE1vdmluZyBmb3J3YXJkOiAiKTsKKyAgICAgICAgICAg
ICAgICBzZWwuc2V0UG9zaXRpb24odGVzdHNbaV0sIDApOworICAgICAgICAgICAgICAgIHBvc2l0
aW9uc01vdmluZ0xlZnQgPSBwb3NpdGlvbnNNb3ZpbmdJbkRpcmVjdGlvbihzZWwsICJmb3J3YXJk
Iik7CisgICAgICAgICAgICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ0xlZnQpOwor
ICAgICAgICAgICAgICAgIGxvZygiXG4iKTsKKworICAgICAgICAgICAgICAgIGxvZygiICBNb3Zp
bmcgYmFja3dhcmQ6ICAiKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNNb3ZpbmdSaWdodCA9
IHBvc2l0aW9uc01vdmluZ0luRGlyZWN0aW9uKHNlbCwgImJhY2t3YXJkIik7CisgICAgICAgICAg
ICAgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9uc01vdmluZ1JpZ2h0KTsKKyAgICAgICAgICAgICAg
ICBsb2coIlxuIik7CisKKyAgICAgICAgICAgICAgICB0ZXN0c1tpXS5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorCis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+CithYmMgJiMx
NDg4OyYjMTQ4OTsmIzE0OTA7IHh5eiAmIzE0OTE7JiMxNDkyOyYjMTQ5MzsgZGVmCis8L2Rpdj4K
KzxkaXYgY29udGVudGVkaXRhYmxlIGNsYXNzPSJ0ZXN0Ij4KKyYjMTQ4ODsmIzE0ODk7JiMxNDkw
OyB4eXogJiMxNDkxOyYjMTQ5MjsmIzE0OTM7IGRlZiAmIzE0OTQ7JiMxNDk1OyYjMTQ5NjsKKzwv
ZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorJiMxNDg4OyYjMTQ4OTsm
IzE0OTA7ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsKKzwvZGl2
PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPgorYWJjIGVmZCBkYWJlYgorPC9k
aXY+CisKKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0idGVzdCI+TG9yZW0gPHNwYW4gIHN0
eWxlPSJkaXJlY3Rpb246IHJ0bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8
ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBzdHlsZT0iZGly
ZWN0aW9uOiBydGwiPmlwc3VtIGRvbG9yPGRpdiA+IGp1c3QgYSB0ZXN0PC9kaXY+IHNpdDwvc3Bh
bj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUgY2xhc3M9InRlc3QiPkxvcmVtIDxz
cGFuICBkaXI9InJ0bCI+aXBzdW0gZG9sb3Igc2l0PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNv
bnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPGRpdiAgZGlyPSJydGwiPmlwc3VtIGRv
bG9yIHNpdDwvZGl2PiBhbWV0PC9kaXY+CisKKzxkaXYgY29udGVudGVkaXRhYmxlICBjbGFzcz0i
dGVzdCI+TG9yZW0gPHNwYW4gIHN0eWxlPSJkaXJlY3Rpb246IGx0ciI+aXBzdW0gZG9sb3Igc2l0
PC9zcGFuPiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSAgY2xhc3M9InRlc3QiPkxv
cmVtIDxzcGFuICBzdHlsZT0iZGlyZWN0aW9uOiBsdHIiPmlwc3VtIGRvbG9yPGRpdiA+IGp1c3Qg
YSB0ZXN0PC9kaXY+IHNpdDwvc3Bhbj4gYW1ldDwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFibGUg
Y2xhc3M9InRlc3QiPkxvcmVtIDxzcGFuICBkaXI9Imx0ciI+aXBzdW0gZG9sb3Igc2l0PC9zcGFu
PiBhbWV0PC9kaXY+Cis8ZGl2IGNvbnRlbnRlZGl0YWJsZSBjbGFzcz0idGVzdCI+TG9yZW0gPGRp
diAgZGlyPSJsdHIiPmlwc3VtIGRvbG9yIHNpdDwvZGl2PiBhbWV0PC9kaXY+CisKKzxkaXYgY2xh
c3M9InRlc3QiIHN0eWxlPSJkaXJlY3Rpb246IGx0cjsiIGNvbnRlbnRlZGl0YWJsZT4KKwlKdXN0
CisJPHNwYW4+dGVzdGluZyDXqNenPC9zcGFuPgorCdeR15XXk9enCis8L2Rpdj4KKworPGRpdiBj
bGFzcz0idGVzdCIgc3R5bGU9ImRpcmVjdGlvbjogbHRyOyIgY29udGVudGVkaXRhYmxlPgorCUp1
c3QKKwk8c3Bhbj50ZXN0aW5nIHdoYXQ8L3NwYW4+CisJZXZlcgorPC9kaXY+CisKKworPGRpdiBj
bGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPmNhciBtZWFucyAmIzE0ODg7JiMxNDg5OyYjMTQ5
MDsuPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+JiN4MjAyQjtjYXIg
JiMxNDkxOyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0ODk7JiMxNDkwOy4mI3gyMDJjOzwvZGl2
PgorPGRpdiBjbGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlPmhlIHNhaWQgIiYjeDIwMkI7Y2Fy
ICYjMTQ5MTsmIzE0OTI7JiMxNDkzOyAmIzE0ODg7JiMxNDg5OyYjMTQ5MDsmI3gyMDJjOy4iPC9k
aXY+Cis8ZGl2IGNsYXNzPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+JiMxNDk0OyYjMTQ5NTsmIzE0
OTY7ICYjMTQ5NzsmIzE0OTg7JiMxNDk5OyAmIzE1MDA7JiMxNTAxOyYjMTUwMjsgJyYjeDIwMmE7
aGUgc2FpZCAiJiN4MjAyQjtjYXIgJiMxNDkxOyYjMTQ5MjsmIzE0OTM7ICYjMTQ4ODsmIzE0ODk7
JiMxNDkwOyYjeDIwMmM7IiYjeDIwMmM7Jz88L2Rpdj4KKworCis8ZGl2IGNsYXNzPSJ0ZXN0IiBj
b250ZW50ZWRpdGFibGU+JiMxNDg4OyYjMTQ4OTsmIzE0OTA7IGFiYyAmIzE0OTE7JiMxNDkyOyYj
MTQ5Mzs8YnIgLz5lZGYgJiMxNDk0OyYjMTQ5NTsmIzE0OTY7IGFicmViZzwvZGl2PgorPGRpdiBj
bGFzcz0idGVzdCIgY29udGVudGVkaXRhYmxlIHN0eWxlPSJsaW5lLWJyZWFrOmJlZm9yZS13aGl0
ZS1zcGFjZTsgd2lkdGg6MTAwcHgiPmFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBh
YmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFi
Y2RlZmcgYWJjZGVmZyA8L2Rpdj4KKzxkaXYgY2xhc3M9InRlc3QiIGNvbnRlbnRlZGl0YWJsZSBz
dHlsZT0ibGluZS1icmVhazphZnRlci13aGl0ZS1zcGFjZTsgd2lkdGg6MTAwcHgiPmFiY2RlZmcg
YWJjZGVmZyBhYmNkZWZnIGEgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZn
IGFiY2RlZmcgYWJjZGVmZyBhYmNkZWZnIGFiY2RlZmcgYWJjZGVmZyA8L2Rpdj4KKzxwcmUgaWQ9
ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="14974"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>