<?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>59255</bug_id>
          
          <creation_ts>2011-04-22 16:36:53 -0700</creation_ts>
          <short_desc>[chromium] Improve sorting of 3D layers</short_desc>
          <delta_ts>2011-05-04 17:42:40 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Vangelis Kokkevis">vangelis</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>391222</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-22 16:36:53 -0700</bug_when>
    <thetext>Currently layers in hierarchies that perserve-3d are sorted based on the Z coordinate of the layer&apos;s center which doesn&apos;t work well in a number of cases, including when layers are close to perpendicular.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391257</commentid>
    <comment_count>1</comment_count>
      <attachid>90810</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-22 17:12:46 -0700</bug_when>
    <thetext>Created attachment 90810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391262</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 17:21:10 -0700</bug_when>
    <thetext>Attachment 90810 did not build on chromium:
Build output: http://queues.webkit.org/results/8496558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391385</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 20:54:45 -0700</bug_when>
    <thetext>Attachment 90810 did not build on chromium:
Build output: http://queues.webkit.org/results/8493717</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391905</commentid>
    <comment_count>4</comment_count>
      <attachid>90949</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-25 14:55:12 -0700</bug_when>
    <thetext>Created attachment 90949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391907</commentid>
    <comment_count>5</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-25 14:56:17 -0700</bug_when>
    <thetext>New patch uploaded that fixes compile failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392802</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-26 15:21:32 -0700</bug_when>
    <thetext>@kbr: please review this as part of the reviewathon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393110</commentid>
    <comment_count>7</comment_count>
      <attachid>90949</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-26 17:00:29 -0700</bug_when>
    <thetext>Comment on attachment 90949
Patch

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

The overall idea of the patch looks good. There are a couple of logic flaws that definitely need to be fixed. I won&apos;t insist that code be shared between this class and LoopBlinnMathUtils, but it would be nice if at least some could be. More layout tests for edge cases would be good.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:61
&gt; +inline static bool pointInSegment(const FloatPoint&amp; p, const FloatPoint&amp; a, const FloatPoint&amp; b)

How about naming this &quot;pointInCollinearSegment&quot; then and deleting the comment?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:65
&gt; +        return ((p.x() &gt;= min(a.x(), b.x()) &amp;&amp; p.x() &lt;= max(a.x(), b.x())));

There&apos;s an unnecessary pair of parentheses around the expression.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:67
&gt; +    return ((p.y() &gt;= min(a.y(), b.y()) &amp;&amp; p.y() &lt;= max(a.y(), b.y())));

Another unnecessary pair of parentheses.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:70
&gt; +static bool segmentSegmentIntersect(const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c, const FloatPoint&amp; d, FloatPoint&amp; r)

There&apos;s another edge/edge test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it. It doesn&apos;t currently report the intersection point though. It also has different semantics than this (collinear lines do not report overlap) so perhaps that&apos;s a reason to have a different version. Still it would be nice to refactor this code, perhaps into a new math utility class.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:72
&gt; +    static float epsilon = 0.00001;

It&apos;s unfortunate that there are multiple, differing, local epsilon values throughout this file.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:82
&gt; +        return false;

This early return subsumes all of the code below it. There is something wrong with the logic here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:124
&gt; +static bool pointInTriangle(const FloatPoint&amp; p, const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c)

There&apos;s another pointInTriangle in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:159
&gt; +    (triangleTriangleIntersect(m_nodeA-&gt;m_c1, m_nodeA-&gt;m_c2, m_nodeA-&gt;m_c3, m_nodeB-&gt;m_c1, m_nodeB-&gt;m_c2, m_nodeB-&gt;m_c3)
&gt; +     || triangleTriangleIntersect(m_nodeA-&gt;m_c1, m_nodeA-&gt;m_c2, m_nodeA-&gt;m_c3, m_nodeB-&gt;m_c1, m_nodeB-&gt;m_c2, m_nodeB-&gt;m_c3)

These two lines are equivalent.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:167
&gt; +bool CCLayerSorter::LayerIntersector::segmentTriangleIntersect(const FloatPoint&amp; p, const FloatPoint&amp; q, const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c)

There&apos;s another edge/triangle test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:179
&gt; +bool CCLayerSorter::LayerIntersector::triangleTriangleIntersect(const FloatPoint&amp; a1, const FloatPoint&amp; b1, const FloatPoint&amp; c1, const FloatPoint&amp; a2, const FloatPoint&amp; b2, const FloatPoint&amp; c2)

There&apos;s another triangle/triangle overlap test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it. Note however that that version deliberately does not report &quot;true&quot; if the triangles only share a single coincident vertex or edge.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:288
&gt; +        GraphNode* node = &amp;m_nodes.at(m_nodes.size() - 1);

Why not write &quot;GraphNode&amp; node = m_nodes.at(m_nodes.size() - 1);&quot;, making the intent more clear?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:334
&gt; +    m_edges.clear();
&gt; +    m_activeEdges.clear();

It seems risky to separate out the clearing of the edges and active edges from the clearing of the node list because these retain pointers into the list.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:479
&gt; +    for (LayerList::iterator it = first; it &lt; last; it++)
&gt; +        *it = sortedList[count++]-&gt;m_layer;

This looks risky. GraphNode doesn&apos;t currently increment the reference count of its layer, so I could imagine the assignment here decrementing the current referent of &quot;*it&quot; to zero and causing it to be deleted.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:480
&gt; +

For cleanliness it looks to me like m_nodes and m_edges should be cleared on the way out of this method.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.h:51
&gt; +        CCLayerImpl* m_layer;

WebKit naming convention is to drop the m_ prefix in structs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395334</commentid>
    <comment_count>8</comment_count>
      <attachid>91696</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-29 10:31:18 -0700</bug_when>
    <thetext>Created attachment 91696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395354</commentid>
    <comment_count>9</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-29 10:48:11 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 90949 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90949&amp;action=review
&gt; 
&gt; The overall idea of the patch looks good. There are a couple of logic flaws that definitely need to be fixed. I won&apos;t insist that code be shared between this class and LoopBlinnMathUtils, but it would be nice if at least some could be. More layout tests for edge cases would be good.
&gt; 
Thanks for pointing those out.  I was able to re-use one of them but not all.  Please see below.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:61
&gt; &gt; +inline static bool pointInSegment(const FloatPoint&amp; p, const FloatPoint&amp; a, const FloatPoint&amp; b)
&gt; 
&gt; How about naming this &quot;pointInCollinearSegment&quot; then and deleting the comment?
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:65
&gt; &gt; +        return ((p.x() &gt;= min(a.x(), b.x()) &amp;&amp; p.x() &lt;= max(a.x(), b.x())));
&gt; 
&gt; There&apos;s an unnecessary pair of parentheses around the expression.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:67
&gt; &gt; +    return ((p.y() &gt;= min(a.y(), b.y()) &amp;&amp; p.y() &lt;= max(a.y(), b.y())));
&gt; 
&gt; Another unnecessary pair of parentheses.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:70
&gt; &gt; +static bool segmentSegmentIntersect(const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c, const FloatPoint&amp; d, FloatPoint&amp; r)
&gt; 
&gt; There&apos;s another edge/edge test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it. It doesn&apos;t currently report the intersection point though. It also has different semantics than this (collinear lines do not report overlap) so perhaps that&apos;s a reason to have a different version. Still it would be nice to refactor this code, perhaps into a new math utility class.
&gt; 

Unfortunately I could not re-use the LoopBlinnMathUtils implementation as sorting does indeed care about co-linear edges.


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:72
&gt; &gt; +    static float epsilon = 0.00001;
&gt; 
&gt; It&apos;s unfortunate that there are multiple, differing, local epsilon values throughout this file.
&gt; 

Epsilons have mostly been removed from the file as they weren&apos;t truly necessary.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:82
&gt; &gt; +        return false;
&gt; 
&gt; This early return subsumes all of the code below it. There is something wrong with the logic here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:124
&gt; &gt; +static bool pointInTriangle(const FloatPoint&amp; p, const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c)
&gt; 
&gt; There&apos;s another pointInTriangle in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it.
&gt; 

Switched over to that implementation.  

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:159
&gt; &gt; +    (triangleTriangleIntersect(m_nodeA-&gt;m_c1, m_nodeA-&gt;m_c2, m_nodeA-&gt;m_c3, m_nodeB-&gt;m_c1, m_nodeB-&gt;m_c2, m_nodeB-&gt;m_c3)
&gt; &gt; +     || triangleTriangleIntersect(m_nodeA-&gt;m_c1, m_nodeA-&gt;m_c2, m_nodeA-&gt;m_c3, m_nodeB-&gt;m_c1, m_nodeB-&gt;m_c2, m_nodeB-&gt;m_c3)
&gt; 
&gt; These two lines are equivalent.

Ooops... done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:167
&gt; &gt; +bool CCLayerSorter::LayerIntersector::segmentTriangleIntersect(const FloatPoint&amp; p, const FloatPoint&amp; q, const FloatPoint&amp; a, const FloatPoint&amp; b, const FloatPoint&amp; c)
&gt; 
&gt; There&apos;s another edge/triangle test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:179
&gt; &gt; +bool CCLayerSorter::LayerIntersector::triangleTriangleIntersect(const FloatPoint&amp; a1, const FloatPoint&amp; b1, const FloatPoint&amp; c1, const FloatPoint&amp; a2, const FloatPoint&amp; b2, const FloatPoint&amp; c2)
&gt; 
&gt; There&apos;s another triangle/triangle overlap test in Source/WebCore/platform/graphics/gpu/LoopBlinnMathUtils.cpp. It would be better to reuse it. Note however that that version deliberately does not report &quot;true&quot; if the triangles only share a single coincident vertex or edge.
&gt; 

I could not use that test as it depends on the edge-edge test that needs to be special in this case.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:288
&gt; &gt; +        GraphNode* node = &amp;m_nodes.at(m_nodes.size() - 1);
&gt; 
&gt; Why not write &quot;GraphNode&amp; node = m_nodes.at(m_nodes.size() - 1);&quot;, making the intent more clear?
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:334
&gt; &gt; +    m_edges.clear();
&gt; &gt; +    m_activeEdges.clear();
&gt; 
&gt; It seems risky to separate out the clearing of the edges and active edges from the clearing of the node list because these retain pointers into the list.
&gt; 

Good point.  Moved clears over to the end of the sort method.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:479
&gt; &gt; +    for (LayerList::iterator it = first; it &lt; last; it++)
&gt; &gt; +        *it = sortedList[count++]-&gt;m_layer;
&gt; 
&gt; This looks risky. GraphNode doesn&apos;t currently increment the reference count of its layer, so I could imagine the assignment here decrementing the current referent of &quot;*it&quot; to zero and causing it to be deleted.
&gt; 

It does look risky but it&apos;s not a real risk in this case as the layers in that list are always kept alive by their RefCounted parent node.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.cpp:480
&gt; &gt; +
&gt; 
&gt; For cleanliness it looks to me like m_nodes and m_edges should be cleared on the way out of this method.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerSorter.h:51
&gt; &gt; +        CCLayerImpl* m_layer;
&gt; 
&gt; WebKit naming convention is to drop the m_ prefix in structs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395586</commentid>
    <comment_count>10</comment_count>
      <attachid>91757</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-29 15:49:59 -0700</bug_when>
    <thetext>Created attachment 91757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395587</commentid>
    <comment_count>11</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-04-29 15:50:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=91757) [details]
&gt; Patch

This last patch addresses the last review comment about removing the m_ prefix from all struct members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396899</commentid>
    <comment_count>12</comment_count>
      <attachid>91757</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-05-02 19:04:43 -0700</bug_when>
    <thetext>Comment on attachment 91757
Patch

Thanks, looks better. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398443</commentid>
    <comment_count>13</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-04 17:42:40 -0700</bug_when>
    <thetext>Committed r85814: &lt;http://trac.webkit.org/changeset/85814&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90810</attachid>
            <date>2011-04-22 17:12:46 -0700</date>
            <delta_ts>2011-04-25 14:55:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59255-20110422171245.patch</filename>
            <type>text/plain</type>
            <size>41057</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NzA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDQtMjIgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wcm92ZSBzb3J0aW5nIG9m
IGxheWVycyBpbiBoaWVyYXJjaGllcyB0aGF0IHByZXNlcnZlLTNkCisgICAgICAgIGJ5IHRlc3Rp
bmcgZm9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgYmV0d2VlbiBsYXllciBwYWlycyBhbmQgZG9pbmcg
YQorICAgICAgICB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgb3JkZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI1NQor
CisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGVycFBy
b2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6aW5uZXJQcm9kdWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50SW5TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlZ21lbnRTZWdtZW50SW50
ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SW5UcmlhbmdsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpMYXllckludGVyc2VjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6Omdv
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OnNl
Z21lbnRUcmlhbmdsZUludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVy
OjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlSW50ZXJzZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmNoZWNrWkRpZmYpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6bGF5ZXJa
RnJvbVByb2plY3RlZFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkND
TGF5ZXJTb3J0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6Y2hlY2tPdmVy
bGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6Y3JlYXRlR3JhcGhFZGdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpmaW5kRWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyU29ydGVyOjpyZW1vdmVFZGdlRnJvbUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclNvcnRlcjo6c29ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclNvcnRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJTb3J0ZXI6OkdyYXBoTm9kZTo6R3JhcGhOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJTb3J0ZXI6OkdyYXBoRWRnZTo6R3JhcGhFZGdlKToKKwogMjAxMS0wNC0yMiAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWog
U3RhY2hvd2lhay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg0NTgxKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MDgwLDYgKzQwODAs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODQ1ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsNiBAQCBzdGF0aWMgYm9v
bCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUCiAKIH0KIAotYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwgY29u
c3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYikKLXsKLSAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkg
PCBiLT5kcmF3RGVwdGgoKTsKLX0KLQogUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQp
CiB7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNTk5LDYgKzU5NCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXIKICAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFzIG9w
YWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5
bGUuCiAgICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCiAgICAgLy8gNC4gVGhlIGxheWVy
IGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rpb25zKQorICAgIC8vIDUuIFRoZSBsYXll
ciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGljaCBk
b2VzLgogICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRl
IGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwogICAgIC8vIG91dCBp
dHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMg
bXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQogICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KQEAgLTYw
Niw3ICs2MDIsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAg
ICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGRyYXdMYXllci0+b3BhY2l0eSgpICE9IDEg
JiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKTsKICAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNr
aW5nID0gZHJhd0xheWVyLT5tYXNrTGF5ZXIoKTsKICAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZs
ZWN0aW9uID0gZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKLSAgICBpZiAodXNlU3VyZmFjZUZv
ck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgKCh1c2VTdXJmYWNlRm9yQ2xp
cHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNE
cmF3c0NvbnRlbnQoKSkpIHsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMg
PSAoZHJhd0xheWVyLT5zdXBlcmxheWVyKCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnBy
ZXNlcnZlczNEKCkgJiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAmJiBkcmF3TGF5ZXItPmRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCkpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8
fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRz
IHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBk
cmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CiAgICAgICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
OwogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNl
ID0gZHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBAIC03MTMsMTcgKzcxMCw2IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXIKICAgICAvLyBNW3NdID0g
TSAqIFRyWy1jZW50ZXJdCiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53
aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAotICAgIC8vIENvbXB1
dGUgdGhlIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwg
YmUgdXNlZCB3aGVuCi0gICAgLy8gc29ydGluZyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJlc2VydmVz
LTNkIHByb3BlcnR5LgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdN
YXRyaXggPSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5tX2RyYXdUcmFuc2Zvcm0gOiBkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAg
ICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVyKCkpIHsKLSAgICAgICAgaWYgKCFkcmF3TGF5ZXIt
PnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd0RlcHRoKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3RGVwdGgoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGxheWVyRHJhd01hdHJp
eC5tNDMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKDAp
OwotCiAgICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChkcmF3TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlz
dCk7CiAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGRyYXdMYXllcik7CiAgICAgdW5zaWduZWQgdGhp
c0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwpAQCAtNzk1LDExICs3ODEsMTEg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwgdGhlIGRlc2NlbmRh
bnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKLSAgICAvLyBjZW50ZXIuIElmIHRoZSBw
cmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHN1cGVybGF5ZXIgdGhlbgor
ICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAz
RCBzbyB0aGF0IHRoZXkgY2FuIGJlIAorICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4g
SWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXll
ciB0aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNv
cnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCiAgICAgaWYgKGRyYXdMYXllci0+cHJlc2Vy
dmVzM0QoKSAmJiAoIWRyYXdMYXllci0+c3VwZXJsYXllcigpIHx8ICFkcmF3TGF5ZXItPnN1cGVy
bGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkpCi0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2Nl
bmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXll
clopOworICAgICAgICBtX2xheWVyU29ydGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXll
ckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4
NDU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0y
MzEsNiArMjMyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTGF0Y2g7
CiAKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CisK
KyAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVH
X0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkg
R0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkocmV2aXNpb24gODQ1ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNl
LmdldCgpOyB9CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFj
ZS5jbGVhcigpOyB9Ci0gICAgZmxvYXQgZHJhd0RlcHRoKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
RGVwdGg7IH0KLSAgICB2b2lkIHNldERyYXdEZXB0aChmbG9hdCBkZXB0aCkgeyBtX2RyYXdEZXB0
aCA9IGRlcHRoOyB9CiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1f
ZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
U29ydGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKwor
I2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKKyNkZWZpbmUgTE9HX0NIQU5ORUxfUFJFRklYIExvZworI2RlZmluZSBTSE9XX0RFQlVHX0xP
RyAwCisjaWYgU0hPV19ERUJVR19MT0cgJiYgIWRlZmluZWQoIE5ERUJVRyApCitzdGF0aWMgV1RG
TG9nQ2hhbm5lbCBMb2dDQ0xheWVyU29ydGVyID0geyAweDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hh
bm5lbE9uIH07CisjZWxzZQorc3RhdGljIFdURkxvZ0NoYW5uZWwgTG9nQ0NMYXllclNvcnRlciA9
IHsgMHgwMDAwMDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2lubGluZSBzdGF0aWMgZmxvYXQgcGVycFByb2R1Y3QoY29uc3QgRmxv
YXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCit7CisgICAgcmV0dXJuIHUud2lkdGgoKSAq
IHYuaGVpZ2h0KCkgLSB1LmhlaWdodCgpICogdi53aWR0aCgpOworfQorCitpbmxpbmUgc3RhdGlj
IGZsb2F0IGlubmVyUHJvZHVjdChjb25zdCBGbG9hdFNpemUmIHUsIGNvbnN0IEZsb2F0U2l6ZSYg
dikKK3sKKyAgICByZXR1cm4gdS53aWR0aCgpICogdi53aWR0aCgpICsgdS5oZWlnaHQoKSAqIHYu
aGVpZ2h0KCk7Cit9CisKKworLy8gUmV0dXJucyB0cnVlIGlmIHBvaW50IHAgbGllcyBpbiB0aGUg
Y29saW5lYXIgc2VnbWVudCBhYi4KK2lubGluZSBzdGF0aWMgYm9vbCBwb2ludEluU2VnbWVudChj
b25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50
JiBiKQoreworICAgIC8vIGlmIGFiIGlzIG5vdCB2ZXJ0aWNhbC4KKyAgICBpZiAoYS54KCkgIT0g
Yi54KCkpCisgICAgICAgIHJldHVybiAoKHAueCgpID49IG1pbihhLngoKSwgYi54KCkpICYmIHAu
eCgpIDw9IG1heChhLngoKSwgYi54KCkpKSk7CisKKyAgICByZXR1cm4gKChwLnkoKSA+PSBtaW4o
YS55KCksIGIueSgpKSAmJiBwLnkoKSA8PSBtYXgoYS55KCksIGIueSgpKSkpOworfQorCitzdGF0
aWMgYm9vbCBzZWdtZW50U2VnbWVudEludGVyc2VjdChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25z
dCBGbG9hdFBvaW50JiBiLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50JiBk
LCBGbG9hdFBvaW50JiByKQoreworICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uID0gMC4wMDAwMTsK
KworICAgIEZsb2F0U2l6ZSB1ID0gYiAtIGE7CisgICAgRmxvYXRTaXplIHYgPSBkIC0gYzsKKyAg
ICBGbG9hdFNpemUgdyA9IGEgLSBjOworCisgICAgZmxvYXQgZGVub20gPSBwZXJwUHJvZHVjdCh1
LCB2KTsKKworICAgIC8vIElmIGRlbm9tID09IDAgdGhlbiB0aGUgc2VnbWVudHMgYXJlIHBhcmFs
bGVsLgorICAgIGlmIChmYWJzZihkZW5vbSkgPCBlcHNpbG9uKSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAvLyBDaGVjayBpZiBzZWdtZW50cyBhcmUgY28tbGluZWFyLgorICAg
ICAgICBpZiAocGVycFByb2R1Y3QodSwgdykgfHwgcGVycFByb2R1Y3QodiwgdykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHBvaW50SW5TZWdtZW50KGEsIGMsIGQp
KSB7CisgICAgICAgICAgICByID0gYTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChwb2ludEluU2VnbWVudChiLCBjLCBkKSkgeworICAgICAgICAgICAg
ciA9IGI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cG9pbnRJblNlZ21lbnQoYywgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBjOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvaW50SW5TZWdtZW50KGQs
IGEsIGIpKSB7CisgICAgICAgICAgICByID0gZDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmbG9hdCBzID0g
cGVycFByb2R1Y3QodiwgdykgLyBkZW5vbTsKKyAgICBpZiAocyA8IDAgfHwgcyA+IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHQgPSBwZXJwUHJvZHVjdCh1LCB3KSAvIGRl
bm9tOworICAgIGlmICh0IDwgMCB8fCB0ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdS5zY2FsZShzKTsKKyAgICByID0gYSArIHU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKwor
Ly8gQ2hlY2tzIGlmIHBvaW50IHAgaXMgaW5zaWRlIHRyaWFuZ2xlIGFiYy4KKy8vIEltcGxlbWVu
dGF0aW9uIGJhc2VkIG9uIGNvZGUgZnJvbSAiUmVhbC1UaW1lIENvbGxpc2lvbiBEZXRlY2F0aW9u
IiBieSBDaHJpc3RlciBFcmljc29uLAorLy8gcHVibGlzaGVkIGJ5IE1vcmdhbiBLYXVmbWFubiBQ
dWJsaXNoZXJzLCAoYykgMjAwNSBFbHNldmllciBJbmMuCitzdGF0aWMgYm9vbCBwb2ludEluVHJp
YW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxv
YXRQb2ludCYgYiwgY29uc3QgRmxvYXRQb2ludCYgYykKK3sKKyAgICBGbG9hdFNpemUgdjAgPSBi
IC0gYTsKKyAgICBGbG9hdFNpemUgdjEgPSBjIC0gYTsKKyAgICBGbG9hdFNpemUgdjIgPSBwIC0g
YTsKKworICAgIGZsb2F0IGQwMCA9IGlubmVyUHJvZHVjdCh2MCwgdjApOworICAgIGZsb2F0IGQw
MSA9IGlubmVyUHJvZHVjdCh2MCwgdjEpOworICAgIGZsb2F0IGQxMSA9IGlubmVyUHJvZHVjdCh2
MSwgdjEpOworICAgIGZsb2F0IGQyMCA9IGlubmVyUHJvZHVjdCh2MiwgdjApOworICAgIGZsb2F0
IGQyMSA9IGlubmVyUHJvZHVjdCh2MiwgdjEpOworCisgICAgZmxvYXQgZGVub20gPSBkMDAgKiBk
MTEgLSBkMDEgKiBkMDE7CisgICAgaWYgKCFkZW5vbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZsb2F0IHUgPSAoZDExICogZDIwIC0gZDAxICogZDIxKSAvIGRlbm9tOworICAgIGZsb2F0
IHYgPSAoZDAwICogZDIxIC0gZDAxICogZDIwKSAvIGRlbm9tOworCisgICAgaWYgKHUgPj0gMCAm
JiB2ID49IDAgJiYgKHUgKyB2KSA8PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6TGF5ZXJJ
bnRlcnNlY3RvcihHcmFwaE5vZGUqIG5vZGVBLCBHcmFwaE5vZGUqIG5vZGVCLCBmbG9hdCBlYXJs
eUV4aXRUaHJlc2hvbGQpCisgICAgOiBtX25vZGVBKG5vZGVBKQorICAgICwgbV9ub2RlQihub2Rl
QikKKyAgICAsIG1fekRpZmYoMCkKKyAgICAsIG1fZWFybHlFeGl0VGhyZXNob2xkKGVhcmx5RXhp
dFRocmVzaG9sZCkKK3sKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9y
OjpnbygpCit7CisgICAgKHRyaWFuZ2xlVHJpYW5nbGVJbnRlcnNlY3QobV9ub2RlQS0+bV9jMSwg
bV9ub2RlQS0+bV9jMiwgbV9ub2RlQS0+bV9jMywgbV9ub2RlQi0+bV9jMSwgbV9ub2RlQi0+bV9j
MiwgbV9ub2RlQi0+bV9jMykKKyAgICAgfHwgdHJpYW5nbGVUcmlhbmdsZUludGVyc2VjdChtX25v
ZGVBLT5tX2MxLCBtX25vZGVBLT5tX2MyLCBtX25vZGVBLT5tX2MzLCBtX25vZGVCLT5tX2MxLCBt
X25vZGVCLT5tX2MyLCBtX25vZGVCLT5tX2MzKQorICAgICB8fCB0cmlhbmdsZVRyaWFuZ2xlSW50
ZXJzZWN0KG1fbm9kZUEtPm1fYzMsIG1fbm9kZUEtPm1fYzQsIG1fbm9kZUEtPm1fYzEsIG1fbm9k
ZUItPm1fYzEsIG1fbm9kZUItPm1fYzIsIG1fbm9kZUItPm1fYzMpCisgICAgIHx8IHRyaWFuZ2xl
VHJpYW5nbGVJbnRlcnNlY3QobV9ub2RlQS0+bV9jMSwgbV9ub2RlQS0+bV9jMiwgbV9ub2RlQS0+
bV9jMywgbV9ub2RlQi0+bV9jMywgbV9ub2RlQi0+bV9jNCwgbV9ub2RlQi0+bV9jMSkKKyAgICAg
fHwgdHJpYW5nbGVUcmlhbmdsZUludGVyc2VjdChtX25vZGVBLT5tX2MzLCBtX25vZGVBLT5tX2M0
LCBtX25vZGVBLT5tX2MxLCBtX25vZGVCLT5tX2MzLCBtX25vZGVCLT5tX2M0LCBtX25vZGVCLT5t
X2MxKSk7Cit9CisKKworLy8gQ2hlY2tzIGlmIHNlZ21lbnQgcHEgaW50ZXJzZWN0cyBhbnkgb2Yg
dGhlIHNpZGVzIG9mIHRyaWFuZ2xlIGFiYy4KK2Jvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRl
cnNlY3Rvcjo6c2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNv
bnN0IEZsb2F0UG9pbnQmIHEsIGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIsIGNvbnN0IEZsb2F0UG9pbnQmIGMpCit7CisgICAgRmxvYXRQb2ludCByOworICAgIGlmICgo
c2VnbWVudFNlZ21lbnRJbnRlcnNlY3QocCwgcSwgYSwgYiwgcikgJiYgY2hlY2taRGlmZihyKSkK
KyAgICAgICAgfHwgKHNlZ21lbnRTZWdtZW50SW50ZXJzZWN0KHAsIHEsIGEsIGMsIHIpICYmIGNo
ZWNrWkRpZmYocikpCisgICAgICAgIHx8IChzZWdtZW50U2VnbWVudEludGVyc2VjdChwLCBxLCBi
LCBjLCByKSAmJiBjaGVja1pEaWZmKHIpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIENoZWNrcyBpZiB0d28gY28tcGxhbmFyIHRyaWFuZ2xlcyBp
bnRlcnNlY3QuCitib29sIENDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OnRyaWFuZ2xl
VHJpYW5nbGVJbnRlcnNlY3QoY29uc3QgRmxvYXRQb2ludCYgYTEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIxLCBjb25zdCBGbG9hdFBvaW50JiBjMSwgY29uc3QgRmxvYXRQb2ludCYgYTIsIGNvbnN0IEZs
b2F0UG9pbnQmIGIyLCBjb25zdCBGbG9hdFBvaW50JiBjMikKK3sKKyAgICAvLyBDaGVjayBhbGwg
c2lkZXMgb2YgZmlyc3QgdHJpYW5nbGUgd2l0aCBzaWRlcyBvZiB0aGUgc2Vjb25kIG9uZS4KKyAg
ICBpZiAoc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGExLCBiMSwgYTIsIGIyLCBjMikKKyAgICAg
ICAgfHwgc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGExLCBjMSwgYTIsIGIyLCBjMikKKyAgICAg
ICAgfHwgc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGIxLCBjMSwgYTIsIGIyLCBjMikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ2hlY2sgYWxsIHBvaW50cyBvZiB0aGUgZmlyc3Qg
dHJpYW5nbGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgc2Vjb25kIHRyaWFuZ2xlLgorICAgIGlmICgo
cG9pbnRJblRyaWFuZ2xlKGExLCBhMiwgYjIsIGMyKSAmJiBjaGVja1pEaWZmKGExKSkKKyAgICAg
ICAgfHwgKHBvaW50SW5UcmlhbmdsZShiMSwgYTIsIGIyLCBjMikgJiYgY2hlY2taRGlmZihiMSkp
CisgICAgICAgIHx8IChwb2ludEluVHJpYW5nbGUoYzEsIGEyLCBiMiwgYzIpICYmIGNoZWNrWkRp
ZmYoYzEpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBDaGVjayBhbGwgcG9pbnRz
IG9mIHRoZSBzZWNvbmQgdHJpYW5nbGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgZmlyc3QgdHJpYW5n
bGUuCisgICAgaWYgKChwb2ludEluVHJpYW5nbGUoYTIsIGExLCBiMSwgYzEpICYmIGNoZWNrWkRp
ZmYoYTIpKQorICAgICAgICB8fCAocG9pbnRJblRyaWFuZ2xlKGIyLCBhMSwgYjEsIGMxKSAmJiBj
aGVja1pEaWZmKGIyKSkKKyAgICAgICAgfHwgKHBvaW50SW5UcmlhbmdsZShjMiwgYTEsIGIxLCBj
MSkgJiYgY2hlY2taRGlmZihjMikpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIHogZGlmZmVyZW5jZSBiZXR3ZWVuIHBvaW50
IHAgcHJvamVjdGVkIG9udG8gdGhlIHR3byBsYXllcnMgdG8gZGV0ZXJtaW5lCisvLyB3aGljaCBs
YXllciBpcyBpbiBmcm9udC4gSWYgdGhlIG5ldyB6IGRpZmZlcmVuY2UgaXMgaGlnaGVyIHRoYW4g
dGhlIGN1cnJlbnRseQorLy8gcmVjb3JkZWQgb25lIHRoZSB0aGlzIGJlY29tZXMgdGhlIHBvaW50
IG9mIGNob2ljZSBmb3IgZG9pbmcgdGhlIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgCisvLyBsYXll
cnMuIElmIHRoZSB2YWx1ZSBvZiBkaWZmZXJlbmNlIGlzIGhpZ2hlciB0aGFuIG91ciBlYXJseSBl
eGl0IHRocmVzaG9sZCB0aGVuCisvLyBpdCBtZWFucyB0aGF0IHRoZSB6IGRpZmZlcmVuY2UgaXMg
Y29uY2x1c2l2ZSBlbm91Z2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrCisvLyBvdGhlciBp
bnRlcnNlY3Rpb24gcG9pbnRzLgorYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9y
OjpjaGVja1pEaWZmKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgZmxvYXQgemEgPSBsYXll
clpGcm9tUHJvamVjdGVkUG9pbnQobV9ub2RlQSwgcCk7CisgICAgZmxvYXQgemIgPSBsYXllclpG
cm9tUHJvamVjdGVkUG9pbnQobV9ub2RlQiwgcCk7CisKKyAgICBmbG9hdCBkaWZmID0gemEgLSB6
YjsKKyAgICBmbG9hdCBhYnNEaWZmID0gZmFic2YoZGlmZik7CisgICAgaWYgKChhYnNEaWZmKSA+
IGZhYnNmKG1fekRpZmYpKSB7CisgICAgICAgIG1faW50ZXJzZWN0aW9uUG9pbnQgPSBwOworICAg
ICAgICBtX3pEaWZmID0gZGlmZjsKKyAgICB9CisKKyAgICBpZiAoYWJzRGlmZiA+IG1fZWFybHlF
eGl0VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworCisvLyBSZXR1cm5zIHRoZSBaIGNvb3JkaW5hdGUgb2YgYSBwb2ludCBvbiB0aGUgZ2l2
ZW4gbGF5ZXIgdGhhdCBwcm9qZWN0cworLy8gdG8gcG9pbnQgcCB3aGljaCBsaWVzIG9uIHRoZSB6
ID0gMCBwbGFuZS4gSXQgZG9lcyBpdCBieSBjb21wdXRpbmcgdGhlCisvLyBpbnRlcnNlY3Rpb24g
b2YgYSBsaW5lIHN0YXJ0aW5nIGZyb20gcCBhbG9uZyB0aGUgWiBheGlzIGFuZCB0aGUgcGxhbmUK
Ky8vIG9mIHRoZSBsYXllci4KK2Zsb2F0IENDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6
OmxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqIGxheWVyLCBjb25zdCBGbG9hdFBv
aW50JiBwKQoreworICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uID0gMC4wMDAwMTsKKworICAgIEZs
b2F0UG9pbnQzRCB1KDAsIDAsIDEpOworICAgIEZsb2F0UG9pbnQzRCB3ID0gRmxvYXRQb2ludDNE
KHAueCgpLCBwLnkoKSwgMCkgLSBsYXllci0+bV9vcmlnaW47CisKKyAgICBmbG9hdCBkID0gbGF5
ZXItPm1fbm9ybWFsLmRvdCh1KTsKKyAgICBmbG9hdCBuID0gLWxheWVyLT5tX25vcm1hbC5kb3Qo
dyk7CisKKyAgICAvLyBDaGVjayBpZiBsYXllciBpcyBwYXJhbGxlbCB0byB0aGUgeiA9IDAgYXhp
cworICAgIGlmIChmYWJzZihkKSA8IGVwc2lsb24pCisgICAgICAgIHJldHVybiBsYXllci0+bV9v
cmlnaW4ueigpOworCisgICAgLy8gVGhlIGludGVyc2VjdGlvbiBwb2ludCB3b3VsZCBiZSBnaXZl
biBieToKKyAgICAvLyBwICsgKG4gLyBkKSAqIHUgIGJ1dCBzaW5jZSB3ZSBhcmUgb25seSBpbnRl
cmVzdGVkIGluIHRoZSAKKyAgICAvLyB6IGNvb3JkaW5hdGUgYW5kIHAncyB6IGNvb3JkIGlzIHpl
cm8sIGFsbCB3ZSBuZWVkIGlzIHRoZSB2YWx1ZSBvZiBuL2QuCisgICAgcmV0dXJuIG4gLyBkOwor
fQorCisKK0NDTGF5ZXJTb3J0ZXI6OkNDTGF5ZXJTb3J0ZXIoKQorICAgIDogbV96UmFuZ2UoMCkK
K3sKK30KKworQ0NMYXllclNvcnRlcjo6QUJDb21wYXJlUmVzdWx0IENDTGF5ZXJTb3J0ZXI6OmNo
ZWNrT3ZlcmxhcChHcmFwaE5vZGUqIGEsIEdyYXBoTm9kZSogYikKK3sKKyAgICBzdGF0aWMgZmxv
YXQgZXBzaWxvbiA9IDAuMDAxOworCisgICAgaWYgKCFhLT5tX2JvdW5kaW5nQm94LmludGVyc2Vj
dHMoYi0+bV9ib3VuZGluZ0JveCkpCisgICAgICAgIHJldHVybiBOb25lOworCisgICAgLy8gTWFr
ZSB0aGUgZWFybHkgZXhpdCB0aHJlc2hvbGQgcHJvcG9ydGlvbmFsIHRvIHRoZSB0b3RhbCBaIHJh
bmdlLgorICAgIGZsb2F0IGV4aXRUaHJlc2hvbGQgPSBtX3pSYW5nZSAqIDAuMDE7CisKKyAgICBM
YXllckludGVyc2VjdG9yIGludGVyc2VjdG9yKGEsIGIsIGV4aXRUaHJlc2hvbGQpOworICAgIGlu
dGVyc2VjdG9yLmdvKCk7CisKKyAgICBpZiAoaW50ZXJzZWN0b3IubV96RGlmZiA+IGVwc2lsb24p
CisgICAgICAgIHJldHVybiBCQmVmb3JlQTsKKyAgICBpZiAoaW50ZXJzZWN0b3IubV96RGlmZiA8
IC1lcHNpbG9uKQorICAgICAgICByZXR1cm4gQUJlZm9yZUI7CisKKyAgICByZXR1cm4gTm9uZTsK
K30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlzdDo6aXRl
cmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCkKK3sKKyAgICBMT0coQ0NMYXll
clNvcnRlciwgIkNyZWF0aW5nIGdyYXBoIG5vZGVzOlxuIik7CisgICAgbV9ub2Rlcy5jbGVhcigp
OworICAgIGZsb2F0IG1pblogPSBGTFRfTUFYOworICAgIGZsb2F0IG1heFogPSAtRkxUX01BWDsK
KyAgICBmb3IgKExheWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaXJzdDsgaXQgPCBsYXN0
OyBpdCsrKSB7CisgICAgICAgIG1fbm9kZXMuYXBwZW5kKEdyYXBoTm9kZShpdC0+Z2V0KCkpKTsK
KyAgICAgICAgR3JhcGhOb2RlKiBub2RlID0gJm1fbm9kZXMuYXQobV9ub2Rlcy5zaXplKCkgLSAx
KTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbm9kZS0+
bV9sYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBpZiAoIW5vZGUtPm1fbGF5ZXItPmRy
YXdzQ29udGVudCgpICYmICFyZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgTE9HKENDTGF5ZXJTb3J0ZXIsICJMYXllciAlZCAoJWQgeCAlZClcbiIsIG5vZGUt
Pm1fbGF5ZXItPmRlYnVnSUQoKSwgbm9kZS0+bV9sYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbm9k
ZS0+bV9sYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGRyYXdUcmFuc2Zvcm07CisgICAgICAgIGZsb2F0IGxheWVyV2lkdGgsIGxheWVySGVp
Z2h0OworICAgICAgICBpZiAocmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAgZHJhd1RyYW5z
Zm9ybSA9IHJlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGxheWVy
V2lkdGggPSAwLjUgKiByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCk7CisgICAg
ICAgICAgICBsYXllckhlaWdodCA9IDAuNSAqIHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCku
aGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkcmF3VHJhbnNmb3JtID0g
bm9kZS0+bV9sYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAgICAgbGF5ZXJXaWR0aCA9
IDAuNSAqIG5vZGUtPm1fbGF5ZXItPmJvdW5kcygpLndpZHRoKCk7CisgICAgICAgICAgICBsYXll
ckhlaWdodCA9IDAuNSAqIG5vZGUtPm1fbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpOworICAgICAg
ICB9CisKKyAgICAgICAgRmxvYXRQb2ludDNEIGMxID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChG
bG9hdFBvaW50M0QoLWxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEZsb2F0
UG9pbnQzRCBjMiA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lk
dGgsIGxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEZsb2F0UG9pbnQzRCBjMyA9IGRyYXdUcmFu
c2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkp
OworICAgICAgICBGbG9hdFBvaW50M0QgYzQgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0
UG9pbnQzRCgtbGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIG5vZGUtPm1f
bm9ybWFsID0gKGMyIC0gYzEpLmNyb3NzKGMzIC0gYzEpOworICAgICAgICBub2RlLT5tX2MxID0g
RmxvYXRQb2ludChjMS54KCksIGMxLnkoKSk7CisgICAgICAgIG5vZGUtPm1fYzIgPSBGbG9hdFBv
aW50KGMyLngoKSwgYzIueSgpKTsKKyAgICAgICAgbm9kZS0+bV9jMyA9IEZsb2F0UG9pbnQoYzMu
eCgpLCBjMy55KCkpOworICAgICAgICBub2RlLT5tX2M0ID0gRmxvYXRQb2ludChjNC54KCksIGM0
LnkoKSk7CisgICAgICAgIG5vZGUtPm1fb3JpZ2luID0gYzE7CisgICAgICAgIG5vZGUtPm1fYm91
bmRpbmdCb3guZml0VG9Qb2ludHMobm9kZS0+bV9jMSwgbm9kZS0+bV9jMiwgbm9kZS0+bV9jMywg
bm9kZS0+bV9jNCk7CisgICAgCisgICAgICAgIG1heFogPSBtYXgoYzQueigpLCBtYXgoYzMueigp
LCBtYXgoYzIueigpLCBtYXgobWF4WiwgYzEueigpKSkpKTsKKyAgICAgICAgbWluWiA9IG1pbihj
NC56KCksIG1pbihjMy56KCksIG1pbihjMi56KCksIG1pbihtaW5aLCBjMS56KCkpKSkpOworICAg
IH0KKyAgICBpZiAobGFzdCAtIGZpcnN0KQorICAgICAgICBtX3pSYW5nZSA9IGZhYnNmKG1heFog
LSBtaW5aKTsKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaEVkZ2VzKCkKK3sK
KyAgICBMT0coQ0NMYXllclNvcnRlciwgIkVkZ2VzOlxuIik7CisgICAgbV9lZGdlcy5jbGVhcigp
OworICAgIG1fYWN0aXZlRWRnZXMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgbmEgPSAw
OyBuYSA8IG1fbm9kZXMuc2l6ZSgpOyBuYSsrKSB7CisgICAgICAgIEdyYXBoTm9kZSogbm9kZUEg
PSAmbV9ub2Rlc1tuYV07CisgICAgICAgIGlmICghbm9kZUEtPm1fbGF5ZXItPmRyYXdzQ29udGVu
dCgpICYmICFub2RlQS0+bV9sYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGZvciAodW5zaWduZWQgbmIgPSBuYSArIDE7IG5iIDwgbV9ub2Rlcy5z
aXplKCk7IG5iKyspIHsKKyAgICAgICAgICAgIEdyYXBoTm9kZSogbm9kZUIgPSAmbV9ub2Rlc1tu
Yl07CisgICAgICAgICAgICBpZiAoIW5vZGVCLT5tX2xheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiAh
bm9kZUItPm1fbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEFCQ29tcGFyZVJlc3VsdCBvdmVybGFwUmVzdWx0ID0gY2hlY2tPdmVy
bGFwKG5vZGVBLCBub2RlQik7CisgICAgICAgICAgICBHcmFwaE5vZGUqIHN0YXJ0Tm9kZSA9IDA7
CisgICAgICAgICAgICBHcmFwaE5vZGUqIGVuZE5vZGUgPSAwOworICAgICAgICAgICAgaWYgKG92
ZXJsYXBSZXN1bHQgPT0gQUJlZm9yZUIpIHsKKyAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBu
b2RlQTsKKyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZUI7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG92ZXJsYXBSZXN1bHQgPT0gQkJlZm9yZUEpIHsKKyAgICAgICAgICAgICAgICBzdGFy
dE5vZGUgPSBub2RlQjsKKyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZUE7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGFydE5vZGUpIHsKKyAgICAgICAgICAgICAgICBM
T0coQ0NMYXllclNvcnRlciwgIiVkIC0+ICVkXG4iLCBzdGFydE5vZGUtPm1fbGF5ZXItPmRlYnVn
SUQoKSwgZW5kTm9kZS0+bV9sYXllci0+ZGVidWdJRCgpKTsKKworICAgICAgICAgICAgICAgIG1f
ZWRnZXMuYXBwZW5kKEdyYXBoRWRnZShzdGFydE5vZGUsIGVuZE5vZGUpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Vk
Z2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdyYXBoRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ld
OworICAgICAgICBtX2FjdGl2ZUVkZ2VzLmFkZChlZGdlLCBlZGdlKTsKKyAgICAgICAgZWRnZS0+
bV9mcm9tLT5tX291dGdvaW5nLmFwcGVuZChlZGdlKTsKKyAgICAgICAgZWRnZS0+bV90by0+bV9p
bmNvbWluZy5hcHBlbmQoZWRnZSk7CisgICAgfQorfQorCisvLyBGaW5kcyBhbmQgcmVtb3ZlcyBh
biBlZGdlIGZyb20gdGhlIGxpc3QgYnkgZG9pbmcgYSBzd2FwIHdpdGggdGhlCisvLyBsYXN0IGVs
ZW1lbnQgb2YgdGhlIGxpc3QuCit2b2lkIENDTGF5ZXJTb3J0ZXI6OnJlbW92ZUVkZ2VGcm9tTGlz
dChHcmFwaEVkZ2UqIGVkZ2UsIFZlY3RvcjxHcmFwaEVkZ2UqPiYgbGlzdCkKK3sKKyAgICBzaXpl
X3QgZWRnZUluZGV4ID0gbGlzdC5maW5kKGVkZ2UpOworICAgIEFTU0VSVChlZGdlSW5kZXggIT0g
bm90Rm91bmQpOworICAgIGlmIChsaXN0LnNpemUoKSA9PSAxKSB7CisgICAgICAgIEFTU0VSVCgh
ZWRnZUluZGV4KTsKKyAgICAgICAgbGlzdC5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChlZGdlSW5kZXggIT0gbGlzdC5zaXplKCkgLSAxKQorICAgICAgICBsaXN0W2Vk
Z2VJbmRleF0gPSBsaXN0W2xpc3Quc2l6ZSgpIC0gMV07CisKKyAgICBsaXN0LnJlbW92ZUxhc3Qo
KTsKK30KKworLy8gU29ydHMgdGhlIGdpdmVuIGxpc3Qgb2YgbGF5ZXJzIHN1Y2ggdGhhdCB0aGV5
IGNhbiBiZSBwYWludGVkIGluIGEgYmFjay10by1mcm9udAorLy8gb3JkZXIuIFNvcnRpbmcgcHJv
ZHVjZXMgY29ycmVjdCByZXN1bHRzIGZvciBub24taW50ZXJzZWN0aW5nIGxheWVycyB0aGF0IGRv
bid0IGhhdmUKKy8vIGN5Y2xpY2FsIG9yZGVyIGRlcGVuZGVuY2llcy4gQ3ljbGVzIGFuZCBpbnRl
cnNlY3Rpb25zIGFyZSBicm9rZW4gYXJpYnRyYXJpbHkuCisvLyBTb3J0aW5nIG9mIGxheWVycyBp
cyBleHByZXNzZXMgYXMgYSB0b3BvbG9naWNhbCBzb3J0IG9mIGEgZGlyZWN0ZWQgZ3JhcGggd2hv
c2Ugbm9kZXMgYXJlCisvLyB0aGUgbGF5ZXJzIHRoZW1zZWx2ZXMuIEFuIGVkZ2UgZnJvbSBub2Rl
IEEgdG8gbm9kZSBCIHNpZ25pZmllcyB0aGF0IGxheWVyIEEgbmVlZHMgdG8KKy8vIGJlIGRyYXdu
IGJlZm9yZSBsYXllciBCLgorLy8gVGhlIGRyYXcgb3JkZXIgYmV0d2VlbiB0d28gbGF5ZXJzIGlz
IGRldGVybWluZWQgYnkgcHJvamVjdGluZyB0aGUgdHdvIHRyaWFuZ2xlcyBtYWtpbmcKKy8vIHVw
IGVhY2ggbGF5ZXIgcXVhZCB0byB0aGUgWiA9IDAgcGxhbmUsIGZpbmRpbmcgcG9pbnRzIG9mIGlu
dGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSB0cmlhbmdsZXMKKy8vIGFuZCBiYWNrcHJvamVjdGluZyB0
aG9zZSBwb2ludHMgdG8gdGhlIHBsYW5lIG9mIHRoZSBsYXllciB0byBkZXRlcm1pbmUgdGhlIGNv
cnJlc3BvbmRpbmcgWgorLy8gY29vcmRpbmF0ZS4gVGhlIGxheWVyIHdpdGggdGhlIGxvd2VyIFog
Y29vcmRpbmF0ZSAoZmFydGhlciBmcm9tIHRoZSBleWUpIG5lZWRzIHRvIGJlIHJlbmRlcmVkCisv
LyBmaXJzdC4gSWYgdGhlIGxheWVyIHByb2plY3Rpb25zIGRvbid0IGludGVyc2VjdCB0aGVuIHRo
ZSBsYXllcnMgY2FuIGRyYXduIGluIGFueSBvcmRlciBhbmQgbm8KKy8vIGVkZ2VzIGFyZSBjcmVh
dGVkIGJldHdlZW4gdGhlbSBpbiB0aGUgZ3JhcGguCit2b2lkIENDTGF5ZXJTb3J0ZXI6OnNvcnQo
TGF5ZXJMaXN0OjppdGVyYXRvciBmaXJzdCwgTGF5ZXJMaXN0OjppdGVyYXRvciBsYXN0KQorewor
ICAgIExPRyhDQ0xheWVyU29ydGVyLCAiU29ydGluZyBzdGFydCAtLS0tXG4iKTsKKyAgICBjcmVh
dGVHcmFwaE5vZGVzKGZpcnN0LCBsYXN0KTsKKworICAgIGNyZWF0ZUdyYXBoRWRnZXMoKTsKKwor
ICAgIFZlY3RvcjxHcmFwaE5vZGUqPiBzb3J0ZWRMaXN0OworICAgIFZlY3RvcjxHcmFwaE5vZGUq
PiBub0luY29taW5nRWRnZU5vZGVMaXN0OworCisgICAgLy8gRmluZCBhbGwgdGhlIG5vZGVzIHRo
YXQgZG9uJ3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4KKyAgICBmb3IgKE5vZGVMaXN0OjppdGVyYXRv
ciBsYSA9IG1fbm9kZXMuYmVnaW4oKTsgbGEgPCBtX25vZGVzLmVuZCgpOyBsYSsrKSB7CisgICAg
ICAgIGlmICghbGEtPm1faW5jb21pbmcuc2l6ZSgpKQorICAgICAgICAgICAgbm9JbmNvbWluZ0Vk
Z2VOb2RlTGlzdC5hcHBlbmQobGEpOworICAgIH0KKworICAgIExPRyhDQ0xheWVyU29ydGVyLCAi
U29ydGVkIGxpc3Q6ICIpOworICAgIHdoaWxlIChtX2FjdGl2ZUVkZ2VzLnNpemUoKSB8fCBub0lu
Y29taW5nRWRnZU5vZGVMaXN0LnNpemUoKSkgeworICAgICAgICB3aGlsZSAobm9JbmNvbWluZ0Vk
Z2VOb2RlTGlzdC5zaXplKCkpIHsKKyAgICAgICAgICAgIC8vIFBvcCB0aGUgbGFzdCBlbnRyeSBm
cm9tIHRoZSBsaXN0LgorICAgICAgICAgICAgR3JhcGhOb2RlKiBmcm9tTm9kZSA9IG5vSW5jb21p
bmdFZGdlTm9kZUxpc3Rbbm9JbmNvbWluZ0VkZ2VOb2RlTGlzdC5zaXplKCkgLSAxXTsKKyAgICAg
ICAgICAgIG5vSW5jb21pbmdFZGdlTm9kZUxpc3QucmVtb3ZlTGFzdCgpOworCisgICAgICAgICAg
ICAvLyBBZGQgaXQgdG8gdGhlIGZpbmFsIGxpc3QuCisgICAgICAgICAgICBzb3J0ZWRMaXN0LmFw
cGVuZChmcm9tTm9kZSk7CisKKyAgICAgICAgICAgIExPRyhDQ0xheWVyU29ydGVyLCAiJWQsICIs
IGZyb21Ob2RlLT5tX2xheWVyLT5kZWJ1Z0lEKCkpOworCisgICAgICAgICAgICAvLyBSZW1vdmUg
YWxsIGl0cyBvdXRnb2luZyBlZGdlcyBmcm9tIHRoZSBncmFwaC4KKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcm9tTm9kZS0+bV9vdXRnb2luZy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgICAgIEdyYXBoRWRnZSogb3V0Z29pbmdFZGdlID0gZnJvbU5vZGUtPm1fb3V0
Z29pbmdbaV07CisKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUVkZ2VzLnJlbW92ZShvdXRnb2lu
Z0VkZ2UpOworICAgICAgICAgICAgICAgIHJlbW92ZUVkZ2VGcm9tTGlzdChvdXRnb2luZ0VkZ2Us
IG91dGdvaW5nRWRnZS0+bV90by0+bV9pbmNvbWluZyk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IW91dGdvaW5nRWRnZS0+bV90by0+bV9pbmNvbWluZy5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIG5vSW5jb21pbmdFZGdlTm9kZUxpc3QuYXBwZW5kKG91dGdvaW5nRWRnZS0+bV90byk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmcm9tTm9kZS0+bV9vdXRnb2luZy5jbGVhcigpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2FjdGl2ZUVkZ2VzLnNpemUoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgZWRnZXMg
YnV0IHRoZSBsaXN0IG9mIG5vZGVzIHdpdGhvdXQgaW5jb21pbmcgZWRnZXMKKyAgICAgICAgLy8g
aXMgZW1wdHkgdGhlbiB3ZSBoYXZlIHJ1biBpbnRvIGEgY3ljbGUuIEJyZWFrIHRoZSBjeWNsZSBi
eSBmaW5kaW5nIHRoZSBub2RlCisgICAgICAgIC8vIHdpdGggdGhlIGxlYXN0IG51bWJlciBpbmNv
bWluZyBlZGdlcyBhbmQgcmVtb3ZlIHRoZW0gYWxsLgorICAgICAgICB1bnNpZ25lZCBtaW5JbmNv
bWluZ0VkZ2VDb3VudCA9IFVJTlRfTUFYOworICAgICAgICBHcmFwaE5vZGUqIG5leHROb2RlID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChtX25vZGVzW2ldLm1faW5jb21pbmcuc2l6ZSgpICYmIChtX25v
ZGVzW2ldLm1faW5jb21pbmcuc2l6ZSgpIDwgbWluSW5jb21pbmdFZGdlQ291bnQpKSB7CisgICAg
ICAgICAgICAgICAgbWluSW5jb21pbmdFZGdlQ291bnQgPSBtX25vZGVzW2ldLm1faW5jb21pbmcu
c2l6ZSgpOworICAgICAgICAgICAgICAgIG5leHROb2RlID0gJm1fbm9kZXNbaV07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG5leHROb2RlKTsKKyAgICAgICAgLy8g
UmVtb3ZlIGFsbCBpdHMgaW5jb21pbmcgZWRnZXMuCisgICAgICAgIGZvciAodW5zaWduZWQgZSA9
IDA7IGUgPCBuZXh0Tm9kZS0+bV9pbmNvbWluZy5zaXplKCk7IGUrKykgeworICAgICAgICAgICAg
R3JhcGhFZGdlKiBpbmNvbWluZ0VkZ2UgPSBuZXh0Tm9kZS0+bV9pbmNvbWluZ1tlXTsKKworICAg
ICAgICAgICAgbV9hY3RpdmVFZGdlcy5yZW1vdmUoaW5jb21pbmdFZGdlKTsKKyAgICAgICAgICAg
IHJlbW92ZUVkZ2VGcm9tTGlzdChpbmNvbWluZ0VkZ2UsIGluY29taW5nRWRnZS0+bV9mcm9tLT5t
X291dGdvaW5nKTsKKyAgICAgICAgfQorICAgICAgICBuZXh0Tm9kZS0+bV9pbmNvbWluZy5jbGVh
cigpOworICAgICAgICBub0luY29taW5nRWRnZU5vZGVMaXN0LmFwcGVuZChuZXh0Tm9kZSk7Cisg
ICAgICAgIExPRyhDQ0xheWVyU29ydGVyLCAiQnJlYWtpbmcgY3ljbGUgYnkgY2xlYW5pbmcgdXAg
JWQgZWRnZXMgZnJvbSAlZFxuIiwgbWluSW5jb21pbmdFZGdlQ291bnQsIG5leHROb2RlLT5tX2xh
eWVyLT5kZWJ1Z0lEKCkpOworICAgIH0KKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChM
YXllckxpc3Q6Oml0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0IDwgbGFzdDsgaXQrKykKKyAgICAgICAg
Kml0ID0gc29ydGVkTGlzdFtjb3VudCsrXS0+bV9sYXllcjsKKworICAgIExPRyhDQ0xheWVyU29y
dGVyLCAiU29ydGluZyBlbmQgLS0tLVxuIik7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclNvcnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyU29ydGVyX2gKKyNk
ZWZpbmUgQ0NMYXllclNvcnRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyU29ydGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ0xheWVyU29ydGVyKTsKK3B1YmxpYzoKKyAgICBDQ0xheWVyU29ydGVyKCk7CisK
KyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OworCisg
ICAgdm9pZCBzb3J0KExheWVyTGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0
b3IgbGFzdCk7Citwcml2YXRlOgorICAgIHN0cnVjdCBHcmFwaEVkZ2U7CisKKyAgICBzdHJ1Y3Qg
R3JhcGhOb2RlIHsKKyAgICAgICAgR3JhcGhOb2RlKENDTGF5ZXJJbXBsKiBsYXllcikgOiBtX2xh
eWVyKGxheWVyKSB7IH07CisgICAgICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOworICAgICAgICBG
bG9hdFBvaW50IG1fYzEsIG1fYzIsIG1fYzMsIG1fYzQ7CisgICAgICAgIEZsb2F0UG9pbnQzRCBt
X25vcm1hbDsKKyAgICAgICAgRmxvYXRQb2ludDNEIG1fb3JpZ2luOworICAgICAgICBGbG9hdFJl
Y3QgbV9ib3VuZGluZ0JveDsKKyAgICAgICAgVmVjdG9yPEdyYXBoRWRnZSo+IG1faW5jb21pbmc7
CisgICAgICAgIFZlY3RvcjxHcmFwaEVkZ2UqPiBtX291dGdvaW5nOworICAgIH07CisKKyAgICBz
dHJ1Y3QgR3JhcGhFZGdlIHsKKyAgICAgICAgR3JhcGhFZGdlKEdyYXBoTm9kZSogZnJvbSwgR3Jh
cGhOb2RlKiB0bykgOiBtX2Zyb20oZnJvbSksIG1fdG8odG8pIHsgfTsKKworICAgICAgICBHcmFw
aE5vZGUqIG1fZnJvbTsKKyAgICAgICAgR3JhcGhOb2RlKiBtX3RvOworICAgIH07CisKKyAgICBz
dHJ1Y3QgTGF5ZXJJbnRlcnNlY3RvciB7CisgICAgICAgIExheWVySW50ZXJzZWN0b3IoR3JhcGhO
b2RlKiwgR3JhcGhOb2RlKiwgZmxvYXQpOworCisgICAgICAgIHZvaWQgZ28oKTsKKworICAgICAg
ICBmbG9hdCBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiwgY29uc3QgRmxvYXRQ
b2ludCYpOworICAgICAgICBib29sIHRyaWFuZ2xlVHJpYW5nbGVJbnRlcnNlY3QoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAg
IGJvb2wgc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50Jik7CisgICAgICAgIGJvb2wgY2hlY2taRGlmZihjb25zdCBGbG9hdFBvaW50Jik7
CisKKyAgICAgICAgRmxvYXRQb2ludCBtX2ludGVyc2VjdGlvblBvaW50OworICAgICAgICBHcmFw
aE5vZGUqIG1fbm9kZUE7CisgICAgICAgIEdyYXBoTm9kZSogbV9ub2RlQjsKKyAgICAgICAgZmxv
YXQgbV96RGlmZjsKKyAgICAgICAgZmxvYXQgbV9lYXJseUV4aXRUaHJlc2hvbGQ7CisgICAgfTsK
KworICAgIHR5cGVkZWYgVmVjdG9yPEdyYXBoTm9kZT4gTm9kZUxpc3Q7CisgICAgdHlwZWRlZiBW
ZWN0b3I8R3JhcGhFZGdlPiBFZGdlTGlzdDsKKyAgICBOb2RlTGlzdCBtX25vZGVzOworICAgIEVk
Z2VMaXN0IG1fZWRnZXM7CisgICAgZmxvYXQgbV96UmFuZ2U7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8R3JhcGhFZGdlKiwgR3JhcGhFZGdlKj4gRWRnZU1hcDsKKyAgICBFZGdlTWFwIG1fYWN0aXZl
RWRnZXM7CisKKyAgICBmbG9hdCBtX3pEaWZmRXBzaWxvbjsKKworICAgIHZvaWQgY3JlYXRlR3Jh
cGhOb2RlcyhMYXllckxpc3Q6Oml0ZXJhdG9yIGZpcnN0LCBMYXllckxpc3Q6Oml0ZXJhdG9yIGxh
c3QpOworICAgIHZvaWQgY3JlYXRlR3JhcGhFZGdlcygpOworICAgIHZvaWQgcmVtb3ZlRWRnZUZy
b21MaXN0KEdyYXBoRWRnZSosIFZlY3RvcjxHcmFwaEVkZ2UqPiYpOworCisgICAgZW51bSBBQkNv
bXBhcmVSZXN1bHQgeworICAgICAgICBBQmVmb3JlQiwKKyAgICAgICAgQkJlZm9yZUEsCisgICAg
ICAgIE5vbmUKKyAgICB9OworICAgIEFCQ29tcGFyZVJlc3VsdCBjaGVja092ZXJsYXAoR3JhcGhO
b2RlKiwgR3JhcGhOb2RlKik7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NzA1KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDQt
MjIgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkaW5n
IGEgbmV3IGxheW91dCB0ZXN0IGZvciBwZXJwZW5kaWN1bGFyIGxheWVycy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MjU1CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Bl
cnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcv
cGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0
aW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dDoKKworCiAyMDExLTA0LTIyICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZWJhc2VsaW5lIGFmdGVyIHI4NDY1OS4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcv
cGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3Jt
L2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24g
ODQ1ODEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI4MzYsNiArMjgzNiw3IEBAIEJVR0pBTUVTUiBHUFUg
TUFDIExFT1BBUkQgOiBjb21wb3NpdGluZy8KIC8vIFdpbGwgbmVlZCB3aW5kb3dzIGFuZCBsaW51
eCBiYXNlbGluZXMKIEJVR1dLNTgxODIgR1BVIDogY29tcG9zaXRpbmcvaW1hZ2VzL2NvbnRlbnQt
aW1hZ2UtY2hhbmdlLmh0bWwgPSBQQVNTIEZBSUwKIEJVR1dLNTgzOTggR1BVIDogcGxhdGZvcm0v
Y2hyb21pdW0vY29tcG9zaXRpbmcvY2hpbGQtbGF5ZXItM2Qtc29ydGluZy5odG1sID0gUEFTUyBG
QUlMIE1JU1NJTkcKK0JVR1ZBTkdFTElTIEdQVSBXSU4gTElOVVggOiBwbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmcuaHRtbCA9IFBBU1MgRkFJ
TCBNSVNTSU5HCiAKIC8vIFRoZSBwaWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSB2aWRlbyBpbiB0
aGUgdGVzdC4KIEJVR1dLNTU1MTkgR1BVIFdJTiBMSU5VWCA6IGNvbXBvc2l0aW5nL3ZpZGVvL3Zp
ZGVvLWJhY2tncm91bmQtY29sb3IuaHRtbCA9IElNQUdFK1RFWFQKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGlu
Zy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBv
c2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1s
YXllci1zb3J0aW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQ
RT4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+UGVycGVuZGljdWxhciBsYXllciBzb3J0aW5nPC90
aXRsZT4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAjY29u
dGFpbmVyIHsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICBoZWlnaHQ6IDMw
MHB4OworICAgICAgICB3aWR0aDogMzAwcHg7CisgICAgICAgIG1hcmdpbjogNTBweCAxMDBweDsK
KyAgICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNTAwOworICAgIH0KKyAKKyAgICAjcGFyZW50
IHsKKyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgICB3aWR0aDogMjgwcHg7CisgICAgICAg
IGhlaWdodDogMjgwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZTsKKyAgICAg
ICAgLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkOworICAgICAgICAtd2Via2l0
LXRyYW5zZm9ybTogcm90YXRlWSgyMGRlZyk7CisgICAgfQorCisgICAgI3BhcmVudCA+IGRpdiB7
CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgdG9wOiA0MHB4OworICAgICAg
ICBsZWZ0OiA0MHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogNDAw
cHg7CisgICAgICAgIHBhZGRpbmc6IDEwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdy
ZWVuOworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KSB0cmFuc2xh
dGVaKDEwcHgpIHJvdGF0ZVgoOTBkZWcpOworICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
dHJ1ZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPCEtLSBUaGUgZ3JlZW4gbGF5ZXIg
c2hvdWxkIG5vdCBvdmVybGFwIHRoZSBwdXJwbGUgbGF5ZXIgLS0+Cis8ZGl2IGlkPSJjb250YWlu
ZXIiPiAKKyAgICA8ZGl2IGlkPSJwYXJlbnQiPiAKKyAgICAgICAgPGRpdj48L2Rpdj4gCisgICAg
PC9kaXY+IAorPC9kaXY+IAorCis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFy
LWxheWVyLXNvcnRpbmcuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3Jt
L2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3Rl
ZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1LW1hYy9wbGF0Zm9y
bS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmctZXhwZWN0
ZWQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBeUFBQUFKWUNBWUFBQUNhZG9K
d0FBQUFLWFJGV0hSamFHVmphM04xYlFBMFlUQTNOekkyCk56QmhPV1l5WVRnek56QmxZV0psT0dN
Mk9HSmxObU5qTk9pNndXSUFBQkNOU1VSQlZIaWM3ZHpMY2xQSkFrVkJtK0MvM1h5NTd1QTIKQVc1
c3JOZFpweDZaTXlJWTFLeHFhVnQ2dlZ3dWx4Y0FBSURBdDdNUEFBQUE3RU9BQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQQpBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSCklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmsK
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFPYjcyUWZnTVQ5ZWY3ejc5
OXZsN2FTVEFBREExd1RJWXY0YgpKQjhSS1FBQW5FV0FiRWlrQUFCd0ZnSENoMFFLQUFCSEVDRGM3
WnBJZVhrUktnQUEvQ0pBT0p3MUJRQ0Fud1FJUXhBcEFBQjdFQ0JNClE2UUFBTXhQZ0xBVWtRSUFN
RFlCd25aRUNnREFlUVFJZkVDa0FBQWNRNERBbmZ3TU1RREE3UVFJSE15YUFnRHdpd0NCQVlnVUFH
QVgKQWdRbUlWSUFnQlVJRUZpSVNBRUFSaWRBWURNaUJRQTRrd0FCL3VBWHZnQ0Fvd2dRNEc3V0ZB
RGdWZ0lFT0pSSUFRQitKMENBMDRrVQpBTmlIQUFHbUlGSUFZQTBDQkZpR1NBR0E4UWtRWUN0KzRR
c0F6aVZBQUQ1Z1RRR0FZd2dRZ0R1SkZBQzRuUUFCT0pCSUFZRDNCQWpBCnlVUUtBRHNSSUFBVEVD
a0FyRUtBQUN6aXMwZ1JKZ0NNNU52WkJ3QUFBUFloUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUEKZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQQpBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFCkFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0EKQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBagpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJCkNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUEKTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQQpnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBCkFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUUKQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QQpBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqClFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBREkKQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQQpNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
CmdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUEKQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRQpBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFn
SXdBCkFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFn
SXdBQVFBQU1nSUVBQURJQ0JBQUFDQWoKUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFn
SXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESQpDQkFBQUNBalFBQUFn
SXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJ
d0FBUUFBCk1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJ
d0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUEKZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJ
d0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQQpBQ0FqUUFBQWdJ
d0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3
QUFRQUFNdC9QClBnQUE5M3U3dkoxOUJBQzRpUUFCR0pDd0FHQlZBZ1FnSWlvQVFJQUFQRXhZQU1E
MUJBakFCLzc1NTU5My83NjhYYzQ1Q0FBc1JvQUEKVy9sdldGenI5Y2ZyeTh1TEVBR0FSd2tRWUhy
M1JzVTloQWdBUEVhQUFFTXFvK0llUWdRQTdpTkFnTlRvWVhFcklRSUF0eEVnd01OVwppNHA3Q0JF
QXVJNEFBVDRsTEc0blJBRGc3d1FJYkVaVU5JUUlBSHhNZ01BaWhNV1loQWdBdkNkQVlHQ2lZaDFD
QkFEK1Q0QkFURlRzClRZZ0FzRHNCQWs4aUxMakZ6eEI1ZVJFakFPeEZnTUJmaUFvS1ZoRUFkaUpB
MkpLd1lFUkNCSUFkQ0JDV0lTcFloUkFCWUdVQ2hPRUoKQzNZbFJBQllrUURoRktJQ3JpZEVBRmlK
QU9HcGhBVWNSNGdBc0FJQndwZmVMbTlYL2IvZmYxWVVPSTRRQVdCbUFtUlQxMGJGTFM1dgpGeEVD
SVNFQ3dJd0V5R0tPQ0F0Z2JFSUVnSm04WGk0WE54WlBaUVdCY3drUkFFYjI3ZXdEQVBCY3J6OWVm
UkFBd0xBc0lCekM0d2ZHCllSRUJZQ1FXRUlERldVUUFHSWtGaE1ONDhNQ1lMQ0lBbk1tdllBRnM1
dmNQQjhRSUFEVUxDSWV5Z3NBY2hBZ0FGZDhCQWNEM1JBREkKV0VBNG5FY056TWNpQXNCUkxDQUEv
TUVpQXNCUkxDQWtQR1JnYmhZUkFKN0ZBZ0xBbHl3aUFEeUxCWVNNeHd1c3d5SUN3TDBzSUFEYwp6
Q0lDd0wwc0lLUThXR0JORmhFQXJtVUJBZUJoRmhFQXJtVUJJZWVSQXV1emlBRHdHUXNJQUU5bkVR
SGdNeFlRVHVGaEFudXhpQUR3Cmt3VUVnTU5aUkFENHlRTENhVHhHWUc5V0VZQTlXVUFBT0lWVkJH
QlBGaEJPNWZFQi9HUVJBZGlEQlFTQUlWaEVBUFpnQWVGMEhoekEKUnl3aUFHdXlnQUF3SklzSXdK
b3NJQXpCSXdQNGlrVUVZQTBXRUFDbVlCRUJXSU1GaEdGNFdBQzNzSWdBek1rQ0FzQ1VMQ0lBYzdL
QQpNQlNQQ2VCZUZoR0FPVmhBQUZpQ1JRUmdEaFlRaHVNQkFUeURSUVJnVEJZUUFKWmtFUUVZa3dX
RUlYazBBTTltRVFFWXcvZXpEd0FBCmhkOC8yQkFqQU9leGdEQXNLd2h3TkNFQzBQTWRFQUMyNVhz
aUFEMExDRVB6TUFCS0ZoR0E0MWxBQU9CZkZoR0E0MWxBR0o3SEFIQVcKaXdqQTgxbEFBT0FURmhH
QTU3T0FNQVVQQUdBRUZoR0F4MWxBQU9CS0ZoR0F4MWxBbUlaTEh4aU5SUVRnZGhZUUFMaVRSUVRn
ZGhZUQpwdUtpQjBabUVRSDRtZ1VFQUo3RUlnTHdOUXNJMDNHNUE3T3dpQUQ4eVFJQ0FBZXhpQUQ4
eVFMQ2xGem93SXdzSWdBdkw5L1BQZ0FBCjdPTDNEMC9FQ0xBckN3alRzb0lBS3hBaXdHNThCd1FB
VHVSN0lzQnVMQ0JNemFVTnJNWWlBcXpPQWdJQUE3R0lBS3V6Z0RBOUZ6V3cKTW9zSXNCb0xDQUFN
ekNJQ3JNWUN3aEpjenNBdUxDTEE3Q3dnQURBUml3Z3dPd3NJeTNBaEF6dXlpQUN6c1lBQXdNUXNJ
c0JzTENBcwp4U1VNN000aUFvek9BZ0lBQzdHSUFLT3pnTEFjRnkvQUx4WVJZRFFXRUFCWW1FVUVH
STBGaENXNWJBRStaeFVCem1RQkFZRE5XRVdBCk0xbEFXSmJMRmVBNkZoR2daQUVCZ00xWlJJQ1NC
WVNsdVZBQmJtY1JBWTVrQVFFQTNyR0lBRWV5Z0xBOGx5akFZeXdpd0ROWlFBQ0EKdjdLSUFNOWtB
V0VMTGs2QTU3R0lBSThRSUd4RGhBQThseEFCN3VGUHNBQ0F1L2pUTE9BZUZoQzI0cUlFT0k1RkJM
aUdCUVFBZUFxTApDSEFOQ3dqYmNUa0NOQ3dpd0Vjc0lBREFJU3dpd0Vjc0lHekpoUWh3REtzSDhK
WHZaeDhBQUppVDJBRHVZUUZoVzFZUWdPdUpEZUJaCkxDQUF3RHRpQXppU0JZU3RXVUdBM1lrTm9H
WUJBWUJOaUExZ0JCWVF0bWNGQVZZa05vQlJXVUFBWUFHQ0E1aUZCUVJlckNEQVhNUUcKTURNTENB
QU1UR3dBcTdHQXdMK3NJTURaeEFhd0F3c0lBSnhBYkFDN3NvREFiNndnd0JIRUJzQXZGaEFBZUNL
eEFmQjNGaEQ0RHlzSQpjQXZCQVhBYkN3Z0FYRWxzQUR6T0FnSWZzSUlBWWdQZ0dCWVFBTFluTmdB
NkZoRDRoQlVFMWlRMkFNNWxBUUZnV1dJRFlEd1dFUGdMCkt3ak1RMndBek1FQ0FzQjB4QWJBdkN3
ZzhBVXJDSnhQY0FDc3d3SUN3RkRFQnNEYUxDQndCU3NJSEVOc0FPekhBZ0pBUW13QThQSmkKQVlH
cldVSGdlbUlEZ005WVFBQjRpTmdBNEJZV0VMaUJGWVRkaVEwQUhtVUJBZUJUZ2dPQVo3T0F3STJz
SUt4S2JBQlFzSUFBYkVocwpBSEFXQ3dqY3dRckNUTVFHQUNPeGdBQXNSR3dBTURvTENOekpDc0xa
eEFZQU03S0FBRXhBYkFDd0Nnc0lQTUFLd2hIRUJnQXJzNEFBCm5FeHdBTEFUQ3dnOHlBckNMY1FH
QUx1emdBQWNSR3dBd0o4c0lQQUVWaERFQmdCY3h3SUNjQ094QVFEM3M0REFrMWhCMWlRMkFPQzUK
TENBQS94SWJBSEE4Q3dnOGtSVmtIbUlEQU01aEFRRzJJRGdBWUF3V0VIZ3lLOGo1eEFZQWpNc0NB
a3hOYkFEQVhDd2djQUFyeURIRQpCZ0RNendJQ0RFbHNBTUNhTENCd0VDdkk5Y1FHQU96REFnS2t4
QVlBN00wQ0FnZXlnZ2dPQU9BOUN3andOR0lEQVBpS0JRUU90dW9LCklqWUFnSHRZUUlBdmlRMEE0
RmtzSUJDWWFRVVJHd0RBa1N3Z3NER3hBUURVTENBUU9Yc0ZFUnNBd0Fnc0lMQWdzUUVBak1vQ0Fx
R2oKVmhEQkFRRE13Z0lDa3hFYkFNRE1MQ0FRdTJVRkVSc0F3R29zSURBSXNRRUE3TUFDQWdBQVpM
NmRmUUFBQUdBZkFnUUFBTWdJRUFBQQpJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFB
Q0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBCkFNZ0lFQUFBSUNOQUFB
Q0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUIKQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQQpBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJCkVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNB
akFBQkFBQXkKQWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNB
akFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQQpqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNB
akFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBCklDTkFBQUNB
akFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0Fq
QUFCQUFBeUFnUUEKQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0Fq
QUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQgpBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0Fq
QUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1qOEQ2MC9Ub1FrCmwrNytB
QUFBQUVsRlRrU3VRbUNDCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90949</attachid>
            <date>2011-04-25 14:55:12 -0700</date>
            <delta_ts>2011-04-29 10:31:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59255-20110425145511.patch</filename>
            <type>text/plain</type>
            <size>41355</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NzA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDQtMjIgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wcm92ZSBzb3J0aW5nIG9m
IGxheWVycyBpbiBoaWVyYXJjaGllcyB0aGF0IHByZXNlcnZlLTNkCisgICAgICAgIGJ5IHRlc3Rp
bmcgZm9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgYmV0d2VlbiBsYXllciBwYWlycyBhbmQgZG9pbmcg
YQorICAgICAgICB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgb3JkZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI1NQor
CisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGVycFBy
b2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6aW5uZXJQcm9kdWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50SW5TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlZ21lbnRTZWdtZW50SW50
ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SW5UcmlhbmdsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpMYXllckludGVyc2VjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6Omdv
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OnNl
Z21lbnRUcmlhbmdsZUludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVy
OjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlSW50ZXJzZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmNoZWNrWkRpZmYpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6bGF5ZXJa
RnJvbVByb2plY3RlZFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkND
TGF5ZXJTb3J0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6Y2hlY2tPdmVy
bGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6Y3JlYXRlR3JhcGhFZGdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpmaW5kRWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyU29ydGVyOjpyZW1vdmVFZGdlRnJvbUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclNvcnRlcjo6c29ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclNvcnRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJTb3J0ZXI6OkdyYXBoTm9kZTo6R3JhcGhOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJTb3J0ZXI6OkdyYXBoRWRnZTo6R3JhcGhFZGdlKToKKwogMjAxMS0wNC0yMiAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWog
U3RhY2hvd2lhay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg0NTgxKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MDgwLDYgKzQwODAs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODQ1ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsNiBAQCBzdGF0aWMgYm9v
bCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUCiAKIH0KIAotYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYSwgY29u
c3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYgYikKLXsKLSAgICByZXR1cm4gYS0+ZHJhd0RlcHRoKCkg
PCBiLT5kcmF3RGVwdGgoKTsKLX0KLQogUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQp
CiB7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtNTk5LDYgKzU5NCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXIKICAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFzIG9w
YWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5
bGUuCiAgICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCiAgICAgLy8gNC4gVGhlIGxheWVy
IGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rpb25zKQorICAgIC8vIDUuIFRoZSBsYXll
ciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGljaCBk
b2VzLgogICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRl
IGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwogICAgIC8vIG91dCBp
dHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMg
bXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQogICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KQEAgLTYw
Niw3ICs2MDIsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAg
ICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGRyYXdMYXllci0+b3BhY2l0eSgpICE9IDEg
JiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKTsKICAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNr
aW5nID0gZHJhd0xheWVyLT5tYXNrTGF5ZXIoKTsKICAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZs
ZWN0aW9uID0gZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKLSAgICBpZiAodXNlU3VyZmFjZUZv
ck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgKCh1c2VTdXJmYWNlRm9yQ2xp
cHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNE
cmF3c0NvbnRlbnQoKSkpIHsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMg
PSAoZHJhd0xheWVyLT5zdXBlcmxheWVyKCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnBy
ZXNlcnZlczNEKCkgJiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAmJiBkcmF3TGF5ZXItPmRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCkpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8
fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRz
IHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBk
cmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CiAgICAgICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
OwogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNl
ID0gZHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBAIC03MTMsMTcgKzcxMCw2IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXIKICAgICAvLyBNW3NdID0g
TSAqIFRyWy1jZW50ZXJdCiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53
aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAotICAgIC8vIENvbXB1
dGUgdGhlIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwg
YmUgdXNlZCB3aGVuCi0gICAgLy8gc29ydGluZyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJlc2VydmVz
LTNkIHByb3BlcnR5LgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdN
YXRyaXggPSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5tX2RyYXdUcmFuc2Zvcm0gOiBkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAg
ICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVyKCkpIHsKLSAgICAgICAgaWYgKCFkcmF3TGF5ZXIt
PnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd0RlcHRoKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3RGVwdGgoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGxheWVyRHJhd01hdHJp
eC5tNDMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKDAp
OwotCiAgICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChkcmF3TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlz
dCk7CiAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGRyYXdMYXllcik7CiAgICAgdW5zaWduZWQgdGhp
c0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwpAQCAtNzk1LDExICs3ODEsMTEg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwgdGhlIGRlc2NlbmRh
bnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKLSAgICAvLyBjZW50ZXIuIElmIHRoZSBw
cmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHN1cGVybGF5ZXIgdGhlbgor
ICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAz
RCBzbyB0aGF0IHRoZXkgY2FuIGJlIAorICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4g
SWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXll
ciB0aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNv
cnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCiAgICAgaWYgKGRyYXdMYXllci0+cHJlc2Vy
dmVzM0QoKSAmJiAoIWRyYXdMYXllci0+c3VwZXJsYXllcigpIHx8ICFkcmF3TGF5ZXItPnN1cGVy
bGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkpCi0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2Nl
bmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXll
clopOworICAgICAgICBtX2xheWVyU29ydGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXll
ckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4
NDU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0y
MzEsNiArMjMyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTGF0Y2g7
CiAKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CisK
KyAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVH
X0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkg
R0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkocmV2aXNpb24gODQ1ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNl
LmdldCgpOyB9CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFj
ZS5jbGVhcigpOyB9Ci0gICAgZmxvYXQgZHJhd0RlcHRoKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
RGVwdGg7IH0KLSAgICB2b2lkIHNldERyYXdEZXB0aChmbG9hdCBkZXB0aCkgeyBtX2RyYXdEZXB0
aCA9IGRlcHRoOyB9CiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1f
ZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
U29ydGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKwor
I2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKKyNkZWZpbmUgTE9HX0NIQU5ORUxfUFJFRklYIExvZworI2RlZmluZSBTSE9XX0RFQlVHX0xP
RyAwCisKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyNpZiBTSE9XX0RFQlVHX0xPRworc3RhdGlj
IFdURkxvZ0NoYW5uZWwgTG9nQ0NMYXllclNvcnRlciA9IHsgMHgwMDAwMDAwMCwgIiIsIFdURkxv
Z0NoYW5uZWxPbiB9OworI2Vsc2UKK3N0YXRpYyBXVEZMb2dDaGFubmVsIExvZ0NDTGF5ZXJTb3J0
ZXIgPSB7IDB4MDAwMDAwMDAsICIiLCBXVEZMb2dDaGFubmVsT2ZmIH07CisjZW5kaWYKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBzdGF0aWMgZmxvYXQgcGVycFByb2R1
Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCit7CisgICAgcmV0dXJu
IHUud2lkdGgoKSAqIHYuaGVpZ2h0KCkgLSB1LmhlaWdodCgpICogdi53aWR0aCgpOworfQorCitp
bmxpbmUgc3RhdGljIGZsb2F0IGlubmVyUHJvZHVjdChjb25zdCBGbG9hdFNpemUmIHUsIGNvbnN0
IEZsb2F0U2l6ZSYgdikKK3sKKyAgICByZXR1cm4gdS53aWR0aCgpICogdi53aWR0aCgpICsgdS5o
ZWlnaHQoKSAqIHYuaGVpZ2h0KCk7Cit9CisKKworLy8gUmV0dXJucyB0cnVlIGlmIHBvaW50IHAg
bGllcyBpbiB0aGUgY29saW5lYXIgc2VnbWVudCBhYi4KK2lubGluZSBzdGF0aWMgYm9vbCBwb2lu
dEluU2VnbWVudChjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBhLCBjb25z
dCBGbG9hdFBvaW50JiBiKQoreworICAgIC8vIGlmIGFiIGlzIG5vdCB2ZXJ0aWNhbC4KKyAgICBp
ZiAoYS54KCkgIT0gYi54KCkpCisgICAgICAgIHJldHVybiAoKHAueCgpID49IG1pbihhLngoKSwg
Yi54KCkpICYmIHAueCgpIDw9IG1heChhLngoKSwgYi54KCkpKSk7CisKKyAgICByZXR1cm4gKChw
LnkoKSA+PSBtaW4oYS55KCksIGIueSgpKSAmJiBwLnkoKSA8PSBtYXgoYS55KCksIGIueSgpKSkp
OworfQorCitzdGF0aWMgYm9vbCBzZWdtZW50U2VnbWVudEludGVyc2VjdChjb25zdCBGbG9hdFBv
aW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBG
bG9hdFBvaW50JiBkLCBGbG9hdFBvaW50JiByKQoreworICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9u
ID0gMC4wMDAwMTsKKworICAgIEZsb2F0U2l6ZSB1ID0gYiAtIGE7CisgICAgRmxvYXRTaXplIHYg
PSBkIC0gYzsKKyAgICBGbG9hdFNpemUgdyA9IGEgLSBjOworCisgICAgZmxvYXQgZGVub20gPSBw
ZXJwUHJvZHVjdCh1LCB2KTsKKworICAgIC8vIElmIGRlbm9tID09IDAgdGhlbiB0aGUgc2VnbWVu
dHMgYXJlIHBhcmFsbGVsLgorICAgIGlmIChmYWJzZihkZW5vbSkgPCBlcHNpbG9uKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBDaGVjayBpZiBzZWdtZW50cyBhcmUgY28t
bGluZWFyLgorICAgICAgICBpZiAocGVycFByb2R1Y3QodSwgdykgfHwgcGVycFByb2R1Y3Qodiwg
dykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHBvaW50SW5TZWdt
ZW50KGEsIGMsIGQpKSB7CisgICAgICAgICAgICByID0gYTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwb2ludEluU2VnbWVudChiLCBjLCBkKSkgewor
ICAgICAgICAgICAgciA9IGI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocG9pbnRJblNlZ21lbnQoYywgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBj
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvaW50
SW5TZWdtZW50KGQsIGEsIGIpKSB7CisgICAgICAgICAgICByID0gZDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBmbG9hdCBzID0gcGVycFByb2R1Y3QodiwgdykgLyBkZW5vbTsKKyAgICBpZiAocyA8IDAgfHwg
cyA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHQgPSBwZXJwUHJvZHVj
dCh1LCB3KSAvIGRlbm9tOworICAgIGlmICh0IDwgMCB8fCB0ID4gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdS5zY2FsZShzKTsKKyAgICByID0gYSArIHU7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKworLy8gQ2hlY2tzIGlmIHBvaW50IHAgaXMgaW5zaWRlIHRyaWFuZ2xlIGFiYy4K
Ky8vIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGNvZGUgZnJvbSAiUmVhbC1UaW1lIENvbGxpc2lv
biBEZXRlY2F0aW9uIiBieSBDaHJpc3RlciBFcmljc29uLAorLy8gcHVibGlzaGVkIGJ5IE1vcmdh
biBLYXVmbWFubiBQdWJsaXNoZXJzLCAoYykgMjAwNSBFbHNldmllciBJbmMuCitzdGF0aWMgYm9v
bCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYg
YSwgY29uc3QgRmxvYXRQb2ludCYgYiwgY29uc3QgRmxvYXRQb2ludCYgYykKK3sKKyAgICBGbG9h
dFNpemUgdjAgPSBiIC0gYTsKKyAgICBGbG9hdFNpemUgdjEgPSBjIC0gYTsKKyAgICBGbG9hdFNp
emUgdjIgPSBwIC0gYTsKKworICAgIGZsb2F0IGQwMCA9IGlubmVyUHJvZHVjdCh2MCwgdjApOwor
ICAgIGZsb2F0IGQwMSA9IGlubmVyUHJvZHVjdCh2MCwgdjEpOworICAgIGZsb2F0IGQxMSA9IGlu
bmVyUHJvZHVjdCh2MSwgdjEpOworICAgIGZsb2F0IGQyMCA9IGlubmVyUHJvZHVjdCh2MiwgdjAp
OworICAgIGZsb2F0IGQyMSA9IGlubmVyUHJvZHVjdCh2MiwgdjEpOworCisgICAgZmxvYXQgZGVu
b20gPSBkMDAgKiBkMTEgLSBkMDEgKiBkMDE7CisgICAgaWYgKCFkZW5vbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGZsb2F0IHUgPSAoZDExICogZDIwIC0gZDAxICogZDIxKSAvIGRlbm9t
OworICAgIGZsb2F0IHYgPSAoZDAwICogZDIxIC0gZDAxICogZDIwKSAvIGRlbm9tOworCisgICAg
aWYgKHUgPj0gMCAmJiB2ID49IDAgJiYgKHUgKyB2KSA8PSAxKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNl
Y3Rvcjo6TGF5ZXJJbnRlcnNlY3RvcihHcmFwaE5vZGUqIG5vZGVBLCBHcmFwaE5vZGUqIG5vZGVC
LCBmbG9hdCBlYXJseUV4aXRUaHJlc2hvbGQpCisgICAgOiBtX25vZGVBKG5vZGVBKQorICAgICwg
bV9ub2RlQihub2RlQikKKyAgICAsIG1fekRpZmYoMCkKKyAgICAsIG1fZWFybHlFeGl0VGhyZXNo
b2xkKGVhcmx5RXhpdFRocmVzaG9sZCkKK3sKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpMYXll
ckludGVyc2VjdG9yOjpnbygpCit7CisgICAgKHRyaWFuZ2xlVHJpYW5nbGVJbnRlcnNlY3QobV9u
b2RlQS0+bV9jMSwgbV9ub2RlQS0+bV9jMiwgbV9ub2RlQS0+bV9jMywgbV9ub2RlQi0+bV9jMSwg
bV9ub2RlQi0+bV9jMiwgbV9ub2RlQi0+bV9jMykKKyAgICAgfHwgdHJpYW5nbGVUcmlhbmdsZUlu
dGVyc2VjdChtX25vZGVBLT5tX2MxLCBtX25vZGVBLT5tX2MyLCBtX25vZGVBLT5tX2MzLCBtX25v
ZGVCLT5tX2MxLCBtX25vZGVCLT5tX2MyLCBtX25vZGVCLT5tX2MzKQorICAgICB8fCB0cmlhbmds
ZVRyaWFuZ2xlSW50ZXJzZWN0KG1fbm9kZUEtPm1fYzMsIG1fbm9kZUEtPm1fYzQsIG1fbm9kZUEt
Pm1fYzEsIG1fbm9kZUItPm1fYzEsIG1fbm9kZUItPm1fYzIsIG1fbm9kZUItPm1fYzMpCisgICAg
IHx8IHRyaWFuZ2xlVHJpYW5nbGVJbnRlcnNlY3QobV9ub2RlQS0+bV9jMSwgbV9ub2RlQS0+bV9j
MiwgbV9ub2RlQS0+bV9jMywgbV9ub2RlQi0+bV9jMywgbV9ub2RlQi0+bV9jNCwgbV9ub2RlQi0+
bV9jMSkKKyAgICAgfHwgdHJpYW5nbGVUcmlhbmdsZUludGVyc2VjdChtX25vZGVBLT5tX2MzLCBt
X25vZGVBLT5tX2M0LCBtX25vZGVBLT5tX2MxLCBtX25vZGVCLT5tX2MzLCBtX25vZGVCLT5tX2M0
LCBtX25vZGVCLT5tX2MxKSk7Cit9CisKKworLy8gQ2hlY2tzIGlmIHNlZ21lbnQgcHEgaW50ZXJz
ZWN0cyBhbnkgb2YgdGhlIHNpZGVzIG9mIHRyaWFuZ2xlIGFiYy4KK2Jvb2wgQ0NMYXllclNvcnRl
cjo6TGF5ZXJJbnRlcnNlY3Rvcjo6c2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGNvbnN0IEZsb2F0
UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0
IEZsb2F0UG9pbnQmIGIsIGNvbnN0IEZsb2F0UG9pbnQmIGMpCit7CisgICAgRmxvYXRQb2ludCBy
OworICAgIGlmICgoc2VnbWVudFNlZ21lbnRJbnRlcnNlY3QocCwgcSwgYSwgYiwgcikgJiYgY2hl
Y2taRGlmZihyKSkKKyAgICAgICAgfHwgKHNlZ21lbnRTZWdtZW50SW50ZXJzZWN0KHAsIHEsIGEs
IGMsIHIpICYmIGNoZWNrWkRpZmYocikpCisgICAgICAgIHx8IChzZWdtZW50U2VnbWVudEludGVy
c2VjdChwLCBxLCBiLCBjLCByKSAmJiBjaGVja1pEaWZmKHIpKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIENoZWNrcyBpZiB0d28gY28tcGxhbmFy
IHRyaWFuZ2xlcyBpbnRlcnNlY3QuCitib29sIENDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0
b3I6OnRyaWFuZ2xlVHJpYW5nbGVJbnRlcnNlY3QoY29uc3QgRmxvYXRQb2ludCYgYTEsIGNvbnN0
IEZsb2F0UG9pbnQmIGIxLCBjb25zdCBGbG9hdFBvaW50JiBjMSwgY29uc3QgRmxvYXRQb2ludCYg
YTIsIGNvbnN0IEZsb2F0UG9pbnQmIGIyLCBjb25zdCBGbG9hdFBvaW50JiBjMikKK3sKKyAgICAv
LyBDaGVjayBhbGwgc2lkZXMgb2YgZmlyc3QgdHJpYW5nbGUgd2l0aCBzaWRlcyBvZiB0aGUgc2Vj
b25kIG9uZS4KKyAgICBpZiAoc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGExLCBiMSwgYTIsIGIy
LCBjMikKKyAgICAgICAgfHwgc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGExLCBjMSwgYTIsIGIy
LCBjMikKKyAgICAgICAgfHwgc2VnbWVudFRyaWFuZ2xlSW50ZXJzZWN0KGIxLCBjMSwgYTIsIGIy
LCBjMikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ2hlY2sgYWxsIHBvaW50cyBv
ZiB0aGUgZmlyc3QgdHJpYW5nbGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgc2Vjb25kIHRyaWFuZ2xl
LgorICAgIGlmICgocG9pbnRJblRyaWFuZ2xlKGExLCBhMiwgYjIsIGMyKSAmJiBjaGVja1pEaWZm
KGExKSkKKyAgICAgICAgfHwgKHBvaW50SW5UcmlhbmdsZShiMSwgYTIsIGIyLCBjMikgJiYgY2hl
Y2taRGlmZihiMSkpCisgICAgICAgIHx8IChwb2ludEluVHJpYW5nbGUoYzEsIGEyLCBiMiwgYzIp
ICYmIGNoZWNrWkRpZmYoYzEpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBDaGVj
ayBhbGwgcG9pbnRzIG9mIHRoZSBzZWNvbmQgdHJpYW5nbGUgZm9yIGluY2x1c2lvbiBpbiB0aGUg
Zmlyc3QgdHJpYW5nbGUuCisgICAgaWYgKChwb2ludEluVHJpYW5nbGUoYTIsIGExLCBiMSwgYzEp
ICYmIGNoZWNrWkRpZmYoYTIpKQorICAgICAgICB8fCAocG9pbnRJblRyaWFuZ2xlKGIyLCBhMSwg
YjEsIGMxKSAmJiBjaGVja1pEaWZmKGIyKSkKKyAgICAgICAgfHwgKHBvaW50SW5UcmlhbmdsZShj
MiwgYTEsIGIxLCBjMSkgJiYgY2hlY2taRGlmZihjMikpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIHogZGlmZmVyZW5jZSBi
ZXR3ZWVuIHBvaW50IHAgcHJvamVjdGVkIG9udG8gdGhlIHR3byBsYXllcnMgdG8gZGV0ZXJtaW5l
CisvLyB3aGljaCBsYXllciBpcyBpbiBmcm9udC4gSWYgdGhlIG5ldyB6IGRpZmZlcmVuY2UgaXMg
aGlnaGVyIHRoYW4gdGhlIGN1cnJlbnRseQorLy8gcmVjb3JkZWQgb25lIHRoZSB0aGlzIGJlY29t
ZXMgdGhlIHBvaW50IG9mIGNob2ljZSBmb3IgZG9pbmcgdGhlIGNvbXBhcmlzb24gYmV0d2VlbiB0
aGUgCisvLyBsYXllcnMuIElmIHRoZSB2YWx1ZSBvZiBkaWZmZXJlbmNlIGlzIGhpZ2hlciB0aGFu
IG91ciBlYXJseSBleGl0IHRocmVzaG9sZCB0aGVuCisvLyBpdCBtZWFucyB0aGF0IHRoZSB6IGRp
ZmZlcmVuY2UgaXMgY29uY2x1c2l2ZSBlbm91Z2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNr
CisvLyBvdGhlciBpbnRlcnNlY3Rpb24gcG9pbnRzLgorYm9vbCBDQ0xheWVyU29ydGVyOjpMYXll
ckludGVyc2VjdG9yOjpjaGVja1pEaWZmKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgZmxv
YXQgemEgPSBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQobV9ub2RlQSwgcCk7CisgICAgZmxvYXQg
emIgPSBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQobV9ub2RlQiwgcCk7CisKKyAgICBmbG9hdCBk
aWZmID0gemEgLSB6YjsKKyAgICBmbG9hdCBhYnNEaWZmID0gZmFic2YoZGlmZik7CisgICAgaWYg
KChhYnNEaWZmKSA+IGZhYnNmKG1fekRpZmYpKSB7CisgICAgICAgIG1faW50ZXJzZWN0aW9uUG9p
bnQgPSBwOworICAgICAgICBtX3pEaWZmID0gZGlmZjsKKyAgICB9CisKKyAgICBpZiAoYWJzRGlm
ZiA+IG1fZWFybHlFeGl0VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworCisvLyBSZXR1cm5zIHRoZSBaIGNvb3JkaW5hdGUgb2YgYSBwb2lu
dCBvbiB0aGUgZ2l2ZW4gbGF5ZXIgdGhhdCBwcm9qZWN0cworLy8gdG8gcG9pbnQgcCB3aGljaCBs
aWVzIG9uIHRoZSB6ID0gMCBwbGFuZS4gSXQgZG9lcyBpdCBieSBjb21wdXRpbmcgdGhlCisvLyBp
bnRlcnNlY3Rpb24gb2YgYSBsaW5lIHN0YXJ0aW5nIGZyb20gcCBhbG9uZyB0aGUgWiBheGlzIGFu
ZCB0aGUgcGxhbmUKKy8vIG9mIHRoZSBsYXllci4KK2Zsb2F0IENDTGF5ZXJTb3J0ZXI6OkxheWVy
SW50ZXJzZWN0b3I6OmxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqIGxheWVyLCBj
b25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uID0gMC4wMDAw
MTsKKworICAgIEZsb2F0UG9pbnQzRCB1KDAsIDAsIDEpOworICAgIEZsb2F0UG9pbnQzRCB3ID0g
RmxvYXRQb2ludDNEKHAueCgpLCBwLnkoKSwgMCkgLSBsYXllci0+bV9vcmlnaW47CisKKyAgICBm
bG9hdCBkID0gbGF5ZXItPm1fbm9ybWFsLmRvdCh1KTsKKyAgICBmbG9hdCBuID0gLWxheWVyLT5t
X25vcm1hbC5kb3Qodyk7CisKKyAgICAvLyBDaGVjayBpZiBsYXllciBpcyBwYXJhbGxlbCB0byB0
aGUgeiA9IDAgYXhpcworICAgIGlmIChmYWJzZihkKSA8IGVwc2lsb24pCisgICAgICAgIHJldHVy
biBsYXllci0+bV9vcmlnaW4ueigpOworCisgICAgLy8gVGhlIGludGVyc2VjdGlvbiBwb2ludCB3
b3VsZCBiZSBnaXZlbiBieToKKyAgICAvLyBwICsgKG4gLyBkKSAqIHUgIGJ1dCBzaW5jZSB3ZSBh
cmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSAKKyAgICAvLyB6IGNvb3JkaW5hdGUgYW5kIHAncyB6
IGNvb3JkIGlzIHplcm8sIGFsbCB3ZSBuZWVkIGlzIHRoZSB2YWx1ZSBvZiBuL2QuCisgICAgcmV0
dXJuIG4gLyBkOworfQorCisKK0NDTGF5ZXJTb3J0ZXI6OkNDTGF5ZXJTb3J0ZXIoKQorICAgIDog
bV96UmFuZ2UoMCkKK3sKK30KKworQ0NMYXllclNvcnRlcjo6QUJDb21wYXJlUmVzdWx0IENDTGF5
ZXJTb3J0ZXI6OmNoZWNrT3ZlcmxhcChHcmFwaE5vZGUqIGEsIEdyYXBoTm9kZSogYikKK3sKKyAg
ICBzdGF0aWMgZmxvYXQgZXBzaWxvbiA9IDAuMDAxOworCisgICAgaWYgKCFhLT5tX2JvdW5kaW5n
Qm94LmludGVyc2VjdHMoYi0+bV9ib3VuZGluZ0JveCkpCisgICAgICAgIHJldHVybiBOb25lOwor
CisgICAgLy8gTWFrZSB0aGUgZWFybHkgZXhpdCB0aHJlc2hvbGQgcHJvcG9ydGlvbmFsIHRvIHRo
ZSB0b3RhbCBaIHJhbmdlLgorICAgIGZsb2F0IGV4aXRUaHJlc2hvbGQgPSBtX3pSYW5nZSAqIDAu
MDE7CisKKyAgICBMYXllckludGVyc2VjdG9yIGludGVyc2VjdG9yKGEsIGIsIGV4aXRUaHJlc2hv
bGQpOworICAgIGludGVyc2VjdG9yLmdvKCk7CisKKyAgICBpZiAoaW50ZXJzZWN0b3IubV96RGlm
ZiA+IGVwc2lsb24pCisgICAgICAgIHJldHVybiBCQmVmb3JlQTsKKyAgICBpZiAoaW50ZXJzZWN0
b3IubV96RGlmZiA8IC1lcHNpbG9uKQorICAgICAgICByZXR1cm4gQUJlZm9yZUI7CisKKyAgICBy
ZXR1cm4gTm9uZTsKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVzKExh
eWVyTGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCkKK3sKKyNp
ZiAhZGVmaW5lZCggTkRFQlVHICkKKyAgICBMT0coQ0NMYXllclNvcnRlciwgIkNyZWF0aW5nIGdy
YXBoIG5vZGVzOlxuIik7CisjZW5kaWYKKyAgICBtX25vZGVzLmNsZWFyKCk7CisgICAgZmxvYXQg
bWluWiA9IEZMVF9NQVg7CisgICAgZmxvYXQgbWF4WiA9IC1GTFRfTUFYOworICAgIGZvciAoTGF5
ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpcnN0OyBpdCA8IGxhc3Q7IGl0KyspIHsKKyAg
ICAgICAgbV9ub2Rlcy5hcHBlbmQoR3JhcGhOb2RlKGl0LT5nZXQoKSkpOworICAgICAgICBHcmFw
aE5vZGUqIG5vZGUgPSAmbV9ub2Rlcy5hdChtX25vZGVzLnNpemUoKSAtIDEpOworICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBub2RlLT5tX2xheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CisgICAgICAgIGlmICghbm9kZS0+bV9sYXllci0+ZHJhd3NDb250ZW50KCkg
JiYgIXJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICBjb250aW51ZTsKKworI2lmICFkZWZpbmVk
KCBOREVCVUcgKQorICAgICAgICBMT0coQ0NMYXllclNvcnRlciwgIkxheWVyICVkICglZCB4ICVk
KVxuIiwgbm9kZS0+bV9sYXllci0+ZGVidWdJRCgpLCBub2RlLT5tX2xheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCBub2RlLT5tX2xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisjZW5kaWYKKworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOworICAgICAgICBmbG9hdCBs
YXllcldpZHRoLCBsYXllckhlaWdodDsKKyAgICAgICAgaWYgKHJlbmRlclN1cmZhY2UpIHsKKyAg
ICAgICAgICAgIGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5kcmF3VHJhbnNmb3JtKCk7
CisgICAgICAgICAgICBsYXllcldpZHRoID0gMC41ICogcmVuZGVyU3VyZmFjZS0+Y29udGVudFJl
Y3QoKS53aWR0aCgpOworICAgICAgICAgICAgbGF5ZXJIZWlnaHQgPSAwLjUgKiByZW5kZXJTdXJm
YWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZHJhd1RyYW5zZm9ybSA9IG5vZGUtPm1fbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgICAgIGxheWVyV2lkdGggPSAwLjUgKiBub2RlLT5tX2xheWVyLT5ib3VuZHMoKS53aWR0aCgp
OworICAgICAgICAgICAgbGF5ZXJIZWlnaHQgPSAwLjUgKiBub2RlLT5tX2xheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0UG9pbnQzRCBjMSA9IGRyYXdU
cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKC1sYXllcldpZHRoLCBsYXllckhlaWdodCwg
MCkpOworICAgICAgICBGbG9hdFBvaW50M0QgYzIgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZs
b2F0UG9pbnQzRChsYXllcldpZHRoLCBsYXllckhlaWdodCwgMCkpOworICAgICAgICBGbG9hdFBv
aW50M0QgYzMgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQzRChsYXllcldpZHRo
LCAtbGF5ZXJIZWlnaHQsIDApKTsKKyAgICAgICAgRmxvYXRQb2ludDNEIGM0ID0gZHJhd1RyYW5z
Zm9ybS5tYXBQb2ludChGbG9hdFBvaW50M0QoLWxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkp
OworICAgICAgICBub2RlLT5tX25vcm1hbCA9IChjMiAtIGMxKS5jcm9zcyhjMyAtIGMxKTsKKyAg
ICAgICAgbm9kZS0+bV9jMSA9IEZsb2F0UG9pbnQoYzEueCgpLCBjMS55KCkpOworICAgICAgICBu
b2RlLT5tX2MyID0gRmxvYXRQb2ludChjMi54KCksIGMyLnkoKSk7CisgICAgICAgIG5vZGUtPm1f
YzMgPSBGbG9hdFBvaW50KGMzLngoKSwgYzMueSgpKTsKKyAgICAgICAgbm9kZS0+bV9jNCA9IEZs
b2F0UG9pbnQoYzQueCgpLCBjNC55KCkpOworICAgICAgICBub2RlLT5tX29yaWdpbiA9IGMxOwor
ICAgICAgICBub2RlLT5tX2JvdW5kaW5nQm94LmZpdFRvUG9pbnRzKG5vZGUtPm1fYzEsIG5vZGUt
Pm1fYzIsIG5vZGUtPm1fYzMsIG5vZGUtPm1fYzQpOworICAgIAorICAgICAgICBtYXhaID0gbWF4
KGM0LnooKSwgbWF4KGMzLnooKSwgbWF4KGMyLnooKSwgbWF4KG1heFosIGMxLnooKSkpKSk7Cisg
ICAgICAgIG1pblogPSBtaW4oYzQueigpLCBtaW4oYzMueigpLCBtaW4oYzIueigpLCBtaW4obWlu
WiwgYzEueigpKSkpKTsKKyAgICB9CisgICAgaWYgKGxhc3QgLSBmaXJzdCkKKyAgICAgICAgbV96
UmFuZ2UgPSBmYWJzZihtYXhaIC0gbWluWik7Cit9CisKK3ZvaWQgQ0NMYXllclNvcnRlcjo6Y3Jl
YXRlR3JhcGhFZGdlcygpCit7CisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisgICAgTE9HKENDTGF5
ZXJTb3J0ZXIsICJFZGdlczpcbiIpOworI2VuZGlmCisgICAgbV9lZGdlcy5jbGVhcigpOworICAg
IG1fYWN0aXZlRWRnZXMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgbmEgPSAwOyBuYSA8
IG1fbm9kZXMuc2l6ZSgpOyBuYSsrKSB7CisgICAgICAgIEdyYXBoTm9kZSogbm9kZUEgPSAmbV9u
b2Rlc1tuYV07CisgICAgICAgIGlmICghbm9kZUEtPm1fbGF5ZXItPmRyYXdzQ29udGVudCgpICYm
ICFub2RlQS0+bV9sYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGZvciAodW5zaWduZWQgbmIgPSBuYSArIDE7IG5iIDwgbV9ub2Rlcy5zaXplKCk7
IG5iKyspIHsKKyAgICAgICAgICAgIEdyYXBoTm9kZSogbm9kZUIgPSAmbV9ub2Rlc1tuYl07Cisg
ICAgICAgICAgICBpZiAoIW5vZGVCLT5tX2xheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiAhbm9kZUIt
Pm1fbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIEFCQ29tcGFyZVJlc3VsdCBvdmVybGFwUmVzdWx0ID0gY2hlY2tPdmVybGFwKG5v
ZGVBLCBub2RlQik7CisgICAgICAgICAgICBHcmFwaE5vZGUqIHN0YXJ0Tm9kZSA9IDA7CisgICAg
ICAgICAgICBHcmFwaE5vZGUqIGVuZE5vZGUgPSAwOworICAgICAgICAgICAgaWYgKG92ZXJsYXBS
ZXN1bHQgPT0gQUJlZm9yZUIpIHsKKyAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBub2RlQTsK
KyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZUI7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG92ZXJsYXBSZXN1bHQgPT0gQkJlZm9yZUEpIHsKKyAgICAgICAgICAgICAgICBzdGFydE5vZGUg
PSBub2RlQjsKKyAgICAgICAgICAgICAgICBlbmROb2RlID0gbm9kZUE7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzdGFydE5vZGUpIHsKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkK
KyAgICAgICAgICAgICAgICBMT0coQ0NMYXllclNvcnRlciwgIiVkIC0+ICVkXG4iLCBzdGFydE5v
ZGUtPm1fbGF5ZXItPmRlYnVnSUQoKSwgZW5kTm9kZS0+bV9sYXllci0+ZGVidWdJRCgpKTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIG1fZWRnZXMuYXBwZW5kKEdyYXBoRWRnZShzdGFydE5vZGUs
IGVuZE5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdyYXBo
RWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOworICAgICAgICBtX2FjdGl2ZUVkZ2VzLmFkZChlZGdl
LCBlZGdlKTsKKyAgICAgICAgZWRnZS0+bV9mcm9tLT5tX291dGdvaW5nLmFwcGVuZChlZGdlKTsK
KyAgICAgICAgZWRnZS0+bV90by0+bV9pbmNvbWluZy5hcHBlbmQoZWRnZSk7CisgICAgfQorfQor
CisvLyBGaW5kcyBhbmQgcmVtb3ZlcyBhbiBlZGdlIGZyb20gdGhlIGxpc3QgYnkgZG9pbmcgYSBz
d2FwIHdpdGggdGhlCisvLyBsYXN0IGVsZW1lbnQgb2YgdGhlIGxpc3QuCit2b2lkIENDTGF5ZXJT
b3J0ZXI6OnJlbW92ZUVkZ2VGcm9tTGlzdChHcmFwaEVkZ2UqIGVkZ2UsIFZlY3RvcjxHcmFwaEVk
Z2UqPiYgbGlzdCkKK3sKKyAgICBzaXplX3QgZWRnZUluZGV4ID0gbGlzdC5maW5kKGVkZ2UpOwor
ICAgIEFTU0VSVChlZGdlSW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChsaXN0LnNpemUoKSA9
PSAxKSB7CisgICAgICAgIEFTU0VSVCghZWRnZUluZGV4KTsKKyAgICAgICAgbGlzdC5jbGVhcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChlZGdlSW5kZXggIT0gbGlzdC5zaXpl
KCkgLSAxKQorICAgICAgICBsaXN0W2VkZ2VJbmRleF0gPSBsaXN0W2xpc3Quc2l6ZSgpIC0gMV07
CisKKyAgICBsaXN0LnJlbW92ZUxhc3QoKTsKK30KKworLy8gU29ydHMgdGhlIGdpdmVuIGxpc3Qg
b2YgbGF5ZXJzIHN1Y2ggdGhhdCB0aGV5IGNhbiBiZSBwYWludGVkIGluIGEgYmFjay10by1mcm9u
dAorLy8gb3JkZXIuIFNvcnRpbmcgcHJvZHVjZXMgY29ycmVjdCByZXN1bHRzIGZvciBub24taW50
ZXJzZWN0aW5nIGxheWVycyB0aGF0IGRvbid0IGhhdmUKKy8vIGN5Y2xpY2FsIG9yZGVyIGRlcGVu
ZGVuY2llcy4gQ3ljbGVzIGFuZCBpbnRlcnNlY3Rpb25zIGFyZSBicm9rZW4gYXJpYnRyYXJpbHku
CisvLyBTb3J0aW5nIG9mIGxheWVycyBpcyBleHByZXNzZXMgYXMgYSB0b3BvbG9naWNhbCBzb3J0
IG9mIGEgZGlyZWN0ZWQgZ3JhcGggd2hvc2Ugbm9kZXMgYXJlCisvLyB0aGUgbGF5ZXJzIHRoZW1z
ZWx2ZXMuIEFuIGVkZ2UgZnJvbSBub2RlIEEgdG8gbm9kZSBCIHNpZ25pZmllcyB0aGF0IGxheWVy
IEEgbmVlZHMgdG8KKy8vIGJlIGRyYXduIGJlZm9yZSBsYXllciBCLgorLy8gVGhlIGRyYXcgb3Jk
ZXIgYmV0d2VlbiB0d28gbGF5ZXJzIGlzIGRldGVybWluZWQgYnkgcHJvamVjdGluZyB0aGUgdHdv
IHRyaWFuZ2xlcyBtYWtpbmcKKy8vIHVwIGVhY2ggbGF5ZXIgcXVhZCB0byB0aGUgWiA9IDAgcGxh
bmUsIGZpbmRpbmcgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSB0cmlhbmdsZXMK
Ky8vIGFuZCBiYWNrcHJvamVjdGluZyB0aG9zZSBwb2ludHMgdG8gdGhlIHBsYW5lIG9mIHRoZSBs
YXllciB0byBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgWgorLy8gY29vcmRpbmF0ZS4gVGhl
IGxheWVyIHdpdGggdGhlIGxvd2VyIFogY29vcmRpbmF0ZSAoZmFydGhlciBmcm9tIHRoZSBleWUp
IG5lZWRzIHRvIGJlIHJlbmRlcmVkCisvLyBmaXJzdC4gSWYgdGhlIGxheWVyIHByb2plY3Rpb25z
IGRvbid0IGludGVyc2VjdCB0aGVuIHRoZSBsYXllcnMgY2FuIGRyYXduIGluIGFueSBvcmRlciBh
bmQgbm8KKy8vIGVkZ2VzIGFyZSBjcmVhdGVkIGJldHdlZW4gdGhlbSBpbiB0aGUgZ3JhcGguCit2
b2lkIENDTGF5ZXJTb3J0ZXI6OnNvcnQoTGF5ZXJMaXN0OjppdGVyYXRvciBmaXJzdCwgTGF5ZXJM
aXN0OjppdGVyYXRvciBsYXN0KQoreworI2lmICFkZWZpbmVkKCBOREVCVUcgKQorICAgIExPRyhD
Q0xheWVyU29ydGVyLCAiU29ydGluZyBzdGFydCAtLS0tXG4iKTsKKyNlbmRpZgorICAgIGNyZWF0
ZUdyYXBoTm9kZXMoZmlyc3QsIGxhc3QpOworCisgICAgY3JlYXRlR3JhcGhFZGdlcygpOworCisg
ICAgVmVjdG9yPEdyYXBoTm9kZSo+IHNvcnRlZExpc3Q7CisgICAgVmVjdG9yPEdyYXBoTm9kZSo+
IG5vSW5jb21pbmdFZGdlTm9kZUxpc3Q7CisKKyAgICAvLyBGaW5kIGFsbCB0aGUgbm9kZXMgdGhh
dCBkb24ndCBoYXZlIGluY29taW5nIGVkZ2VzLgorICAgIGZvciAoTm9kZUxpc3Q6Oml0ZXJhdG9y
IGxhID0gbV9ub2Rlcy5iZWdpbigpOyBsYSA8IG1fbm9kZXMuZW5kKCk7IGxhKyspIHsKKyAgICAg
ICAgaWYgKCFsYS0+bV9pbmNvbWluZy5zaXplKCkpCisgICAgICAgICAgICBub0luY29taW5nRWRn
ZU5vZGVMaXN0LmFwcGVuZChsYSk7CisgICAgfQorCisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisg
ICAgTE9HKENDTGF5ZXJTb3J0ZXIsICJTb3J0ZWQgbGlzdDogIik7CisjZW5kaWYKKyAgICB3aGls
ZSAobV9hY3RpdmVFZGdlcy5zaXplKCkgfHwgbm9JbmNvbWluZ0VkZ2VOb2RlTGlzdC5zaXplKCkp
IHsKKyAgICAgICAgd2hpbGUgKG5vSW5jb21pbmdFZGdlTm9kZUxpc3Quc2l6ZSgpKSB7CisgICAg
ICAgICAgICAvLyBQb3AgdGhlIGxhc3QgZW50cnkgZnJvbSB0aGUgbGlzdC4KKyAgICAgICAgICAg
IEdyYXBoTm9kZSogZnJvbU5vZGUgPSBub0luY29taW5nRWRnZU5vZGVMaXN0W25vSW5jb21pbmdF
ZGdlTm9kZUxpc3Quc2l6ZSgpIC0gMV07CisgICAgICAgICAgICBub0luY29taW5nRWRnZU5vZGVM
aXN0LnJlbW92ZUxhc3QoKTsKKworICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBmaW5hbCBs
aXN0LgorICAgICAgICAgICAgc29ydGVkTGlzdC5hcHBlbmQoZnJvbU5vZGUpOworCisjaWYgIWRl
ZmluZWQoIE5ERUJVRyApCisgICAgICAgICAgICBMT0coQ0NMYXllclNvcnRlciwgIiVkLCAiLCBm
cm9tTm9kZS0+bV9sYXllci0+ZGVidWdJRCgpKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvLyBS
ZW1vdmUgYWxsIGl0cyBvdXRnb2luZyBlZGdlcyBmcm9tIHRoZSBncmFwaC4KKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcm9tTm9kZS0+bV9vdXRnb2luZy5zaXplKCk7IGkr
KykgeworICAgICAgICAgICAgICAgIEdyYXBoRWRnZSogb3V0Z29pbmdFZGdlID0gZnJvbU5vZGUt
Pm1fb3V0Z29pbmdbaV07CisKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUVkZ2VzLnJlbW92ZShv
dXRnb2luZ0VkZ2UpOworICAgICAgICAgICAgICAgIHJlbW92ZUVkZ2VGcm9tTGlzdChvdXRnb2lu
Z0VkZ2UsIG91dGdvaW5nRWRnZS0+bV90by0+bV9pbmNvbWluZyk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIW91dGdvaW5nRWRnZS0+bV90by0+bV9pbmNvbWluZy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIG5vSW5jb21pbmdFZGdlTm9kZUxpc3QuYXBwZW5kKG91dGdvaW5nRWRnZS0+bV90
byk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcm9tTm9kZS0+bV9vdXRnb2luZy5jbGVh
cigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2FjdGl2ZUVkZ2VzLnNpemUoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUg
ZWRnZXMgYnV0IHRoZSBsaXN0IG9mIG5vZGVzIHdpdGhvdXQgaW5jb21pbmcgZWRnZXMKKyAgICAg
ICAgLy8gaXMgZW1wdHkgdGhlbiB3ZSBoYXZlIHJ1biBpbnRvIGEgY3ljbGUuIEJyZWFrIHRoZSBj
eWNsZSBieSBmaW5kaW5nIHRoZSBub2RlCisgICAgICAgIC8vIHdpdGggdGhlIGxlYXN0IG51bWJl
ciBpbmNvbWluZyBlZGdlcyBhbmQgcmVtb3ZlIHRoZW0gYWxsLgorICAgICAgICB1bnNpZ25lZCBt
aW5JbmNvbWluZ0VkZ2VDb3VudCA9IFVJTlRfTUFYOworICAgICAgICBHcmFwaE5vZGUqIG5leHRO
b2RlID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtX25vZGVzW2ldLm1faW5jb21pbmcuc2l6ZSgpICYm
IChtX25vZGVzW2ldLm1faW5jb21pbmcuc2l6ZSgpIDwgbWluSW5jb21pbmdFZGdlQ291bnQpKSB7
CisgICAgICAgICAgICAgICAgbWluSW5jb21pbmdFZGdlQ291bnQgPSBtX25vZGVzW2ldLm1faW5j
b21pbmcuc2l6ZSgpOworICAgICAgICAgICAgICAgIG5leHROb2RlID0gJm1fbm9kZXNbaV07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG5leHROb2RlKTsKKyAgICAg
ICAgLy8gUmVtb3ZlIGFsbCBpdHMgaW5jb21pbmcgZWRnZXMuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgZSA9IDA7IGUgPCBuZXh0Tm9kZS0+bV9pbmNvbWluZy5zaXplKCk7IGUrKykgeworICAgICAg
ICAgICAgR3JhcGhFZGdlKiBpbmNvbWluZ0VkZ2UgPSBuZXh0Tm9kZS0+bV9pbmNvbWluZ1tlXTsK
KworICAgICAgICAgICAgbV9hY3RpdmVFZGdlcy5yZW1vdmUoaW5jb21pbmdFZGdlKTsKKyAgICAg
ICAgICAgIHJlbW92ZUVkZ2VGcm9tTGlzdChpbmNvbWluZ0VkZ2UsIGluY29taW5nRWRnZS0+bV9m
cm9tLT5tX291dGdvaW5nKTsKKyAgICAgICAgfQorICAgICAgICBuZXh0Tm9kZS0+bV9pbmNvbWlu
Zy5jbGVhcigpOworICAgICAgICBub0luY29taW5nRWRnZU5vZGVMaXN0LmFwcGVuZChuZXh0Tm9k
ZSk7CisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisgICAgICAgIExPRyhDQ0xheWVyU29ydGVyLCAi
QnJlYWtpbmcgY3ljbGUgYnkgY2xlYW5pbmcgdXAgJWQgZWRnZXMgZnJvbSAlZFxuIiwgbWluSW5j
b21pbmdFZGdlQ291bnQsIG5leHROb2RlLT5tX2xheWVyLT5kZWJ1Z0lEKCkpOworI2VuZGlmCisg
ICAgfQorCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKExheWVyTGlzdDo6aXRlcmF0b3Ig
aXQgPSBmaXJzdDsgaXQgPCBsYXN0OyBpdCsrKQorICAgICAgICAqaXQgPSBzb3J0ZWRMaXN0W2Nv
dW50KytdLT5tX2xheWVyOworCisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisgICAgTE9HKENDTGF5
ZXJTb3J0ZXIsICJTb3J0aW5nIGVuZCAtLS0tXG4iKTsKKyNlbmRpZgorfQorCit9CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclNvcnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXll
clNvcnRlcl9oCisjZGVmaW5lIENDTGF5ZXJTb3J0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclNvcnRlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclNvcnRlcik7CitwdWJsaWM6CisgICAgQ0NMYXll
clNvcnRlcigpOworCisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExh
eWVyTGlzdDsKKworICAgIHZvaWQgc29ydChMYXllckxpc3Q6Oml0ZXJhdG9yIGZpcnN0LCBMYXll
ckxpc3Q6Oml0ZXJhdG9yIGxhc3QpOworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgR3JhcGhFZGdlOwor
CisgICAgc3RydWN0IEdyYXBoTm9kZSB7CisgICAgICAgIEdyYXBoTm9kZShDQ0xheWVySW1wbCog
bGF5ZXIpIDogbV9sYXllcihsYXllcikgeyB9OworICAgICAgICBDQ0xheWVySW1wbCogbV9sYXll
cjsKKyAgICAgICAgRmxvYXRQb2ludCBtX2MxLCBtX2MyLCBtX2MzLCBtX2M0OworICAgICAgICBG
bG9hdFBvaW50M0QgbV9ub3JtYWw7CisgICAgICAgIEZsb2F0UG9pbnQzRCBtX29yaWdpbjsKKyAg
ICAgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CisgICAgICAgIFZlY3RvcjxHcmFwaEVkZ2Uq
PiBtX2luY29taW5nOworICAgICAgICBWZWN0b3I8R3JhcGhFZGdlKj4gbV9vdXRnb2luZzsKKyAg
ICB9OworCisgICAgc3RydWN0IEdyYXBoRWRnZSB7CisgICAgICAgIEdyYXBoRWRnZShHcmFwaE5v
ZGUqIGZyb20sIEdyYXBoTm9kZSogdG8pIDogbV9mcm9tKGZyb20pLCBtX3RvKHRvKSB7IH07CisK
KyAgICAgICAgR3JhcGhOb2RlKiBtX2Zyb207CisgICAgICAgIEdyYXBoTm9kZSogbV90bzsKKyAg
ICB9OworCisgICAgc3RydWN0IExheWVySW50ZXJzZWN0b3IgeworICAgICAgICBMYXllckludGVy
c2VjdG9yKEdyYXBoTm9kZSosIEdyYXBoTm9kZSosIGZsb2F0KTsKKworICAgICAgICB2b2lkIGdv
KCk7CisKKyAgICAgICAgZmxvYXQgbGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KEdyYXBoTm9kZSos
IGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgYm9vbCB0cmlhbmdsZVRyaWFuZ2xlSW50ZXJz
ZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpOworICAgICAgICBib29sIHNlZ21lbnRUcmlhbmdsZUludGVyc2VjdChjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICBib29sIGNoZWNrWkRpZmYoY29uc3Qg
RmxvYXRQb2ludCYpOworCisgICAgICAgIEZsb2F0UG9pbnQgbV9pbnRlcnNlY3Rpb25Qb2ludDsK
KyAgICAgICAgR3JhcGhOb2RlKiBtX25vZGVBOworICAgICAgICBHcmFwaE5vZGUqIG1fbm9kZUI7
CisgICAgICAgIGZsb2F0IG1fekRpZmY7CisgICAgICAgIGZsb2F0IG1fZWFybHlFeGl0VGhyZXNo
b2xkOworICAgIH07CisKKyAgICB0eXBlZGVmIFZlY3RvcjxHcmFwaE5vZGU+IE5vZGVMaXN0Owor
ICAgIHR5cGVkZWYgVmVjdG9yPEdyYXBoRWRnZT4gRWRnZUxpc3Q7CisgICAgTm9kZUxpc3QgbV9u
b2RlczsKKyAgICBFZGdlTGlzdCBtX2VkZ2VzOworICAgIGZsb2F0IG1felJhbmdlOworCisgICAg
dHlwZWRlZiBIYXNoTWFwPEdyYXBoRWRnZSosIEdyYXBoRWRnZSo+IEVkZ2VNYXA7CisgICAgRWRn
ZU1hcCBtX2FjdGl2ZUVkZ2VzOworCisgICAgZmxvYXQgbV96RGlmZkVwc2lsb247CisKKyAgICB2
b2lkIGNyZWF0ZUdyYXBoTm9kZXMoTGF5ZXJMaXN0OjppdGVyYXRvciBmaXJzdCwgTGF5ZXJMaXN0
OjppdGVyYXRvciBsYXN0KTsKKyAgICB2b2lkIGNyZWF0ZUdyYXBoRWRnZXMoKTsKKyAgICB2b2lk
IHJlbW92ZUVkZ2VGcm9tTGlzdChHcmFwaEVkZ2UqLCBWZWN0b3I8R3JhcGhFZGdlKj4mKTsKKwor
ICAgIGVudW0gQUJDb21wYXJlUmVzdWx0IHsKKyAgICAgICAgQUJlZm9yZUIsCisgICAgICAgIEJC
ZWZvcmVBLAorICAgICAgICBOb25lCisgICAgfTsKKyAgICBBQkNvbXBhcmVSZXN1bHQgY2hlY2tP
dmVybGFwKEdyYXBoTm9kZSosIEdyYXBoTm9kZSopOworfTsKKworfQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDcw
NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDExLTA0LTIyICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIEFkZGluZyBhIG5ldyBsYXlvdXQgdGVzdCBmb3IgcGVycGVuZGljdWxhciBsYXllcnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI1NQor
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tZ3B1LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmctZXhwZWN0ZWQucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3JtL2Nocm9taXVt
L2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKKwogMjAxMS0wNC0yMiAgWGlhb21laSBKaSAgPHhq
aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmViYXNlbGluZSBhZnRlciByODQ2NTkuCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3JtL2Nocm9taXVt
L2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1LW1hYy9wbGF0Zm9y
bS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmctZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1
LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNv
cnRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQJKHJldmlzaW9uIDg0NTgxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yODM2LDYgKzI4MzYsNyBAQCBC
VUdKQU1FU1IgR1BVIE1BQyBMRU9QQVJEIDogY29tcG9zaXRpbmcvCiAvLyBXaWxsIG5lZWQgd2lu
ZG93cyBhbmQgbGludXggYmFzZWxpbmVzCiBCVUdXSzU4MTgyIEdQVSA6IGNvbXBvc2l0aW5nL2lt
YWdlcy9jb250ZW50LWltYWdlLWNoYW5nZS5odG1sID0gUEFTUyBGQUlMCiBCVUdXSzU4Mzk4IEdQ
VSA6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2NoaWxkLWxheWVyLTNkLXNvcnRpbmcu
aHRtbCA9IFBBU1MgRkFJTCBNSVNTSU5HCitCVUdWQU5HRUxJUyBHUFUgV0lOIExJTlVYIDogcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLmh0
bWwgPSBQQVNTIEZBSUwgTUlTU0lORwogCiAvLyBUaGUgcGljdHVyZSBkb2VzIG5vdCBtYXRjaCB0
aGUgdmlkZW8gaW4gdGhlIHRlc3QuCiBCVUdXSzU1NTE5IEdQVSBXSU4gTElOVVggOiBjb21wb3Np
dGluZy92aWRlby92aWRlby1iYWNrZ3JvdW5kLWNvbG9yLmh0bWwgPSBJTUFHRStURVhUCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFy
LWxheWVyLXNvcnRpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmcuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Bl
cnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5
IEBACis8IURPQ1RZUEU+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlBlcnBlbmRpY3VsYXIgbGF5
ZXIgc29ydGluZzwvdGl0bGU+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVl
biI+CisgICAgI2NvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAg
ICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgICBtYXJnaW46
IDUwcHggMTAwcHg7CisgICAgICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDUwMDsKKyAgICB9Cisg
CisgICAgI3BhcmVudCB7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgd2lkdGg6IDI4
MHB4OworICAgICAgICBoZWlnaHQ6IDI4MHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBw
dXJwbGU7CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDsKKyAg
ICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVkoMjBkZWcpOworICAgIH0KKworICAgICNw
YXJlbnQgPiBkaXYgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDog
NDBweDsKKyAgICAgICAgbGVmdDogNDBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAg
ICBoZWlnaHQ6IDQwMHB4OworICAgICAgICBwYWRkaW5nOiAxMHB4OworICAgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBncmVlbjsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVko
NTBweCkgdHJhbnNsYXRlWigxMHB4KSByb3RhdGVYKDkwZGVnKTsKKyAgICB9Cis8L3N0eWxlPgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KHRydWUpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwhLS0gVGhl
IGdyZWVuIGxheWVyIHNob3VsZCBub3Qgb3ZlcmxhcCB0aGUgcHVycGxlIGxheWVyIC0tPgorPGRp
diBpZD0iY29udGFpbmVyIj4gCisgICAgPGRpdiBpZD0icGFyZW50Ij4gCisgICAgICAgIDxkaXY+
PC9kaXY+IAorICAgIDwvZGl2PiAKKzwvZGl2PiAKKworPC9ib2R5PgorPC9odG1sPgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcv
cGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1
LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNv
cnRpbmctZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdw
dS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1z
b3J0aW5nLWV4cGVjdGVkLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsg
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQXlBQUFB
SllDQVlBQUFDYWRvSndBQUFBS1hSRldIUmphR1ZqYTNOMWJRQTBZVEEzTnpJMgpOekJoT1dZeVlU
Z3pOekJsWVdKbE9HTTJPR0psTm1Oak5PaTZ3V0lBQUJDTlNVUkJWSGljN2R6TGNsUEpBa1ZCbStD
LzNYeTU3dUEyCkFXNXNyTmRacHg2Wk15SVkxS3hxYVZ0NnZWd3VseGNBQUlEQXQ3TVBBQUFBN0VP
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUEKQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVh
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUgpJQUFBUUVh
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFB
QUFBQUdRRUNBQUJrCkJBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRT2I3
MlFmZ01UOWVmN3o3OTl2bDdhU1RBQURBMXdUSVl2NGIKSkI4UktRQUFuRVdBYkVpa0FBQndGZ0hD
aDBRS0FBQkhFQ0RjN1pwSWVYa1JLZ0FBL0NKQU9KdzFCUUNBbndRSVF4QXBBQUI3RUNCTQpRNlFB
QU14UGdMQVVrUUlBTURZQnduWkVDZ0RBZVFRSWZFQ2tBQUFjUTREQW5md01NUURBN1FRSUhNeWFB
Z0R3aXdDQkFZZ1VBR0FYCkFnUW1JVklBZ0JVSUVGaUlTQUVBUmlkQVlETWlCUUE0a3dBQi91QVh2
Z0NBb3dnUTRHN1dGQURnVmdJRU9KUklBUUIrSjBDQTA0a1UKQU5pSEFBR21JRklBWUEwQ0JGaUdT
QUdBOFFrUVlDdCs0UXNBemlWQUFENWdUUUdBWXdnUWdEdUpGQUM0blFBQk9KQklBWUQzQkFqQQp5
VVFLQURzUklBQVRFQ2tBckVLQUFDemlzMGdSSmdDTTVOdlpCd0FBQVBZaFFBQUFnSXdBQVFBQU1n
SUVBQURJQ0JBQUFDQWpRQUFBCmdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1n
SUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUEKQUNBalFBQUFnSXdBQVFBQU1n
SUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJ
RQpBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJ
RUFBRElDQkFBQUNBalFBQUFnSXdBCkFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJ
RUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWoKUUFBQWdJd0FBUUFBTWdJ
RUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lF
QUFESQpDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lF
QUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBCk1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lF
QUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUEKZ0l3QUFRQUFNZ0lF
QUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVB
QURJQ0JBQQpBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVB
QURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFCkFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVB
QURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0EKQVFBQU1nSUVB
QURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBQUNBagpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJCkNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUEKTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqUUFBQQpnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBCkFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUUKQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBZ0l3QQpBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqClFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBREkK
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBQVFBQQpNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBCmdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNC
QUEKQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNC
QUFBQ0FqUUFBQWdJd0FBUUFBTXQvUApQZ0FBOTN1N3ZKMTlCQUM0aVFBQkdKQ3dBR0JWQWdRZ0lp
b0FRSUFBUEV4WUFNRDFCQWpBQi83NTU1OTMvNzY4WGM0NUNBQXNSb0FBClcvbHZXRnpyOWNmcnk4
dUxFQUdBUndrUVlIcjNSc1U5aEFnQVBFYUFBRU1xbytJZVFnUUE3aU5BZ05Ub1lYRXJJUUlBdHhF
Z3dNTlcKaTRwN0NCRUF1STRBQVQ0bExHNG5SQURnN3dRSWJFWlVOSVFJQUh4TWdNQWloTVdZaEFn
QXZDZEFZR0NpWWgxQ0JBRCtUNEJBVEZUcwpUWWdBc0RzQkFrOGlMTGpGenhCNWVSRWpBT3hGZ01C
ZmlBb0tWaEVBZGlKQTJKS3dZRVJDQklBZENCQ1dJU3BZaFJBQllHVUNoT0VKCkMzWWxSQUJZa1FE
aEZLSUNyaWRFQUZpSkFPR3BoQVVjUjRnQXNBSUJ3cGZlTG05WC9iL2ZmMVlVT0k0UUFXQm1BbVJU
MTBiRkxTNXYKRnhFQ0lTRUN3SXdFeUdLT0NBdGdiRUlFZ0ptOFhpNFhOeFpQWlFXQmN3a1JBRWIy
N2V3REFQQmNyejllZlJBQXdMQXNJQnpDNHdmRwpZUkVCWUNRV0VJREZXVVFBR0lrRmhNTjQ4TUNZ
TENJQW5NbXZZQUZzNXZjUEI4UUlBRFVMQ0lleWdzQWNoQWdBRmQ4QkFjRDNSQURJCldFQTRuRWNO
ek1jaUFzQlJMQ0FBL01FaUFzQlJMQ0FrUEdSZ2JoWVJBSjdGQWdMQWx5d2lBRHlMQllTTXh3dXN3
eUlDd0wwc0lBRGMKekNJQ3dMMHNJS1E4V0dCTkZoRUFybVVCQWVCaEZoRUFybVVCSWVlUkF1dXpp
QUR3R1FzSUFFOW5FUUhnTXhZUVR1RmhBbnV4aUFEdwprd1VFZ01OWlJBRDR5UUxDYVR4R1lHOVdF
WUE5V1VBQU9JVlZCR0JQRmhCTzVmRUIvR1FSQWRpREJRU0FJVmhFQVBaZ0FlRjBIaHpBClJ5d2lB
R3V5Z0FBd0pJc0l3Sm9zSUF6Qkl3UDRpa1VFWUEwV0VBQ21ZQkVCV0lNRmhHRjRXQUMzc0lnQXpN
a0NBc0NVTENJQWM3S0EKTUJTUENlQmVGaEdBT1ZoQUFGaUNSUVJnRGhZUWh1TUJBVHlEUlFSZ1RC
WVFBSlprRVFFWWt3V0VJWGswQU05bUVRRVl3L2V6RHdBQQpoZDgvMkJBakFPZXhnREFzS3dod05D
RUMwUE1kRUFDMjVYc2lBRDBMQ0VQek1BQktGaEdBNDFsQUFPQmZGaEdBNDFsQUdKN0hBSEFXCml3
akE4MWxBQU9BVEZoR0E1N09BTUFVUEFHQUVGaEdBeDFsQUFPQktGaEdBeDFsQW1JWkxIeGlOUlFU
Z2RoWVFBTGlUUlFUZ2RoWVEKcHVLaUIwWm1FUUg0bWdVRUFKN0VJZ0x3TlFzSTAzRzVBN093aUFE
OHlRSUNBQWV4aUFEOHlRTENsRnpvd0l3c0lnQXZMOS9QUGdBQQo3T0wzRDAvRUNMQXJDd2pUc29J
QUt4QWl3RzU4QndRQVR1UjdJc0J1TENCTXphVU5yTVlpQXF6T0FnSUFBN0dJQUt1emdEQTlGeld3
Ck1vc0lzQm9MQ0FBTXpDSUNyTVlDd2hKY3pzQXVMQ0xBN0N3Z0FEQVJpd2d3T3dzSXkzQWhBenV5
aUFDenNZQUF3TVFzSXNCc0xDQXMKeFNVTTdNNGlBb3pPQWdJQUM3R0lBS096Z0xBY0Z5L0FMeFlS
WURRV0VBQlltRVVFR0kwRmhDVzViQUUrWnhVQnptUUJBWUROV0VXQQpNMWxBV0piTEZlQTZGaEdn
WkFFQmdNMVpSSUNTQllTbHVWQUJibWNSQVk1a0FRRUEzckdJQUVleWdMQThseWpBWXl3aXdETlpR
QUNBCnY3S0lBTTlrQVdFTExrNkE1N0dJQUk4UUlHeERoQUE4bHhBQjd1RlBzQUNBdS9qVExPQWVG
aEMyNHFJRU9JNUZCTGlHQlFRQWVBcUwKQ0hBTkN3amJjVGtDTkN3aXdFY3NJQURBSVN3aXdFY3NJ
R3pKaFFod0RLc0g4Slh2Wng4QUFKaVQyQUR1WVFGaFcxWVFnT3VKRGVCWgpMQ0FBd0R0aUF6aVNC
WVN0V1VHQTNZa05vR1lCQVlCTmlBMWdCQllRdG1jRkFWWWtOb0JSV1VBQVlBR0NBNWlGQlFSZXJD
REFYTVFHCk1ETUxDQUFNVEd3QXE3R0F3TCtzSU1EWnhBYXdBd3NJQUp4QWJBQzdzb0RBYjZ3Z3dC
SEVCc0F2RmhBQWVDS3hBZkIzRmhENER5c0kKY0F2QkFYQWJDd2dBWEVsc0FEek9BZ0lmc0lJQVln
UGdHQllRQUxZbk5nQTZGaEQ0aEJVRTFpUTJBTTVsQVFGZ1dXSURZRHdXRVBnTApLd2pNUTJ3QXpN
RUNBc0IweEFiQXZDd2c4QVVyQ0p4UGNBQ3N3d0lDd0ZERUJzRGFMQ0J3QlNzSUhFTnNBT3pIQWdK
QVFtd0E4UEppCkFZR3JXVUhnZW1JRGdNOVlRQUI0aU5nQTRCWVdFTGlCRllUZGlRMEFIbVVCQWVC
VGdnT0FaN09Bd0kyc0lLeEtiQUJRc0lBQWJFaHMKQUhBV0N3amN3UXJDVE1RR0FDT3hnQUFzUkd3
QU1Eb0xDTnpKQ3NMWnhBWUFNN0tBQUV4QWJBQ3dDZ3NJUE1BS3doSEVCZ0FyczRBQQpuRXh3QUxB
VEN3Zzh5QXJDTGNRR0FMdXpnQUFjUkd3QXdKOHNJUEFFVmhERUJnQmN4d0lDY0NPeEFRRDNzNERB
azFoQjFpUTJBT0M1CkxDQUEveEliQUhBOEN3ZzhrUlZrSG1JREFNNWhBUUcySURnQVlBd1dFSGd5
SzhqNXhBWUFqTXNDQWt4TmJBREFYQ3dnY0FBcnlESEUKQmdETXp3SUNERWxzQU1DYUxDQndFQ3ZJ
OWNRR0FPekRBZ0treEFZQTdNMENBZ2V5Z2dnT0FPQTlDd2p3TkdJREFQaUtCUVFPdHVvSwpJallB
Z0h0WVFJQXZpUTBBNEZrc0lCQ1lhUVVSR3dEQWtTd2dzREd4QVFEVUxDQVFPWHNGRVJzQXdBZ3NJ
TEFnc1FFQWpNb0NBcUdqClZoREJBUURNd2dJQ2t4RWJBTURNTENBUXUyVUZFUnNBd0dvc0lEQUlz
UUVBN01BQ0FnQUFaTDZkZlFBQUFHQWZBZ1FBQU1nSUVBQUEKSUNOQUFBQ0FqQUFCQUFBeUFnUUFB
TWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQQpB
TWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFN
Z0lFQUFBSUNOQUFBQ0FqQUFCCkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFN
Z0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkEKQUFDQWpBQUJBQUF5QWdRQUFN
Z0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1n
SQpFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1n
SUVBQUFJQ05BQUFDQWpBQUJBQUF5CkFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1n
SUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0EKakFBQkFBQXlBZ1FBQU1n
SUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJ
RUFBQQpJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJ
RUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBCkFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJ
RUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUIKQUFBeUFnUUFBTWdJ
RUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNajhE
NjAvVG9RawpsKzcrQUFBQUFFbEZUa1N1UW1DQwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91696</attachid>
            <date>2011-04-29 10:31:18 -0700</date>
            <delta_ts>2011-04-29 15:49:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59255-20110429103116.patch</filename>
            <type>text/plain</type>
            <size>40261</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMjkgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wcm92ZSBzb3J0aW5nIG9m
IGxheWVycyBpbiBoaWVyYXJjaGllcyB0aGF0IHByZXNlcnZlLTNkCisgICAgICAgIGJ5IHRlc3Rp
bmcgZm9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgYmV0d2VlbiBsYXllciBwYWlycyBhbmQgZG9pbmcg
YQorICAgICAgICB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgb3JkZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI1NQor
CisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGVycFBy
b2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6aW5uZXJQcm9kdWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50SW5Db2xpbmVhckVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUVkZ2VUZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6Okxh
eWVySW50ZXJzZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6Z28pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
U29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpjaGVja1pEaWZmKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmxheWVy
WkZyb21Qcm9qZWN0ZWRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpD
Q0xheWVyU29ydGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNoZWNrT3Zl
cmxhcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoRWRnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6cmVtb3ZlRWRnZUZyb21MaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OnNvcnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpHcmFwaE5vZGU6OkdyYXBoTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpHcmFwaEVkZ2U6OkdyYXBoRWRnZSk6CisKIDIwMTEtMDQt
MjkgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA4NDU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNDA4MCw2ICs0MDgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDg0NTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4
LDYgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVAogCiB9CiAKLWJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xh
eWVySW1wbD4mIGEsIGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmRyYXdEZXB0aCgpIDwgYi0+ZHJhd0RlcHRoKCk7Ci19Ci0KIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFj
ZT4gY29udGVudFBhaW50KQogewogICAgIGlmICghY29udGV4dCkKQEAgLTU5OSw2ICs1OTQsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgLy8gMi4gSWYg
dGhlIGxheWVyIGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90IGhhdmUgYSBwcmVzZXJ2ZXMt
M2QgdHJhbnNmb3JtIHN0eWxlLgogICAgIC8vIDMuIFRoZSBsYXllciB1c2VzIGEgbWFzawogICAg
IC8vIDQuIFRoZSBsYXllciBoYXMgYSByZXBsaWNhICh1c2VkIGZvciByZWZsZWN0aW9ucykKKyAg
ICAvLyA1LiBUaGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZS0zZCBidXQgaXMgdGhlIGNoaWxkIG9m
IGEgbGF5ZXIgd2hpY2ggZG9lcy4KICAgICAvLyBJZiBhIGxheWVyIHByZXNlcnZlcy0zZCB0aGVu
IHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRlclN1cmZhY2UgZm9yIGl0IHRvIGF2b2lkIGZsYXR0ZW5p
bmcKICAgICAvLyBvdXQgaXRzIGNoaWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hp
bGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxpZWQgYnkgdGhlIG9wYWNpdHkKICAgICAvLyBvZiB0aGVp
ciBwYXJlbnQuCkBAIC02MDYsNyArNjAyLDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZVByb3BlcgogICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXIt
Pm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAgYm9vbCB1
c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7CiAgICAgYm9vbCB1
c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAg
aWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgo
dXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5
ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9y
RmxhdERlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+c3VwZXJsYXllcigpICYmIGRyYXdMYXllci0+
c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCkg
JiYgZHJhd0xheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKTsKKyAgICBpZiAodXNlU3Vy
ZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFjZUZv
ckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNl
Rm9yT3BhY2l0eSkgJiYgZHJhd0xheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewog
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlKQogICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpAQCAt
NzEzLDE3ICs3MTAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVy
CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1YmxheWVyTWF0cml4LnRyYW5z
bGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7
CiAKLSAgICAvLyBDb21wdXRlIHRoZSBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBs
YXllciB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbgotICAgIC8vIHNvcnRpbmcgdGhlIGxheWVycyBm
b3IgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJEcmF3TWF0cml4ID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBkcmF3
TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9kcmF3VHJhbnNmb3JtIDogZHJhd0xheWVyLT5kcmF3
VHJhbnNmb3JtKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+c3VwZXJsYXllcigpKSB7Ci0gICAgICAg
IGlmICghZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAg
ICBkcmF3TGF5ZXItPnNldERyYXdEZXB0aChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+ZHJhd0Rl
cHRoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdEZXB0
aChsYXllckRyYXdNYXRyaXgubTQzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkcmF3TGF5ZXIt
PnNldERyYXdEZXB0aCgwKTsKLQogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAoZHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXll
ckxpc3QgOiBsYXllckxpc3QpOwogICAgIGRlc2NlbmRhbnRzLmFwcGVuZChkcmF3TGF5ZXIpOwog
ICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKQEAg
LTc5NSwxMSArNzgxLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9w
ZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQg
YWxsIHRoZSBkZXNjZW5kYW50cyBieSB0aGUgWiBjb29yZGluYXRlIG9mIHRoZWlyCi0gICAgLy8g
Y2VudGVyLiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBz
dXBlcmxheWVyIHRoZW4KKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUg
ZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZSAKKyAgICAvLyBkcmF3biBmcm9t
IGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQg
b24gdGhlIHN1cGVybGF5ZXIgdGhlbgogICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHN1
cGVybGF5ZXIgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgogICAgIGlmIChk
cmF3TGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSB8fCAh
ZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzdGQ6OnN0
YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVu
ZCgpLCBjb21wYXJlTGF5ZXJaKTsKKyAgICAgICAgbV9sYXllclNvcnRlci5zb3J0KCZkZXNjZW5k
YW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpKTsKIH0KIAogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkocmV2aXNpb24gODQ1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQAogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgpAQCAtMjMxLDYgKzIzMiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRl
eHRTdXBwb3J0c0xhdGNoOwogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlOworCisgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwogfTsKIAog
Ly8gU2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0
ZXIgYWxtb3N0IGV2ZXJ5IEdMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgJKHJldmlzaW9uIDg0
NTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw2IEBAIHB1YmxpYzoKIAog
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkg
eyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQotICAgIGZsb2F0IGRyYXdEZXB0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhd0RlcHRoOyB9Ci0gICAgdm9pZCBzZXREcmF3RGVwdGgoZmxvYXQgZGVw
dGgpIHsgbV9kcmF3RGVwdGggPSBkZXB0aDsgfQogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKworI2luY2x1ZGUgIkxvb3BCbGlu
bk1hdGhVdGlscy5oIgorI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKKyNkZWZpbmUgTE9HX0NIQU5ORUxfUFJFRklYIExvZworI2RlZmlu
ZSBTSE9XX0RFQlVHX0xPRyAwCisKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyNpZiBTSE9XX0RF
QlVHX0xPRworc3RhdGljIFdURkxvZ0NoYW5uZWwgTG9nQ0NMYXllclNvcnRlciA9IHsgMHgwMDAw
MDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPbiB9OworI2Vsc2UKK3N0YXRpYyBXVEZMb2dDaGFubmVs
IExvZ0NDTGF5ZXJTb3J0ZXIgPSB7IDB4MDAwMDAwMDAsICIiLCBXVEZMb2dDaGFubmVsT2ZmIH07
CisjZW5kaWYKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIExvb3BCbGlu
bk1hdGhVdGlsczo6cG9pbnRJblRyaWFuZ2xlOworCitpbmxpbmUgc3RhdGljIGZsb2F0IHBlcnBQ
cm9kdWN0KGNvbnN0IEZsb2F0U2l6ZSYgdSwgY29uc3QgRmxvYXRTaXplJiB2KQoreworICAgIHJl
dHVybiB1LndpZHRoKCkgKiB2LmhlaWdodCgpIC0gdS5oZWlnaHQoKSAqIHYud2lkdGgoKTsKK30K
KworaW5saW5lIHN0YXRpYyBmbG9hdCBpbm5lclByb2R1Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBj
b25zdCBGbG9hdFNpemUmIHYpCit7CisgICAgcmV0dXJuIHUud2lkdGgoKSAqIHYud2lkdGgoKSAr
IHUuaGVpZ2h0KCkgKiB2LmhlaWdodCgpOworfQorCisKK2lubGluZSBzdGF0aWMgYm9vbCBwb2lu
dEluQ29saW5lYXJFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIGEs
IGNvbnN0IEZsb2F0UG9pbnQmIGIpCit7CisgICAgLy8gaWYgYWIgaXMgbm90IHZlcnRpY2FsLgor
ICAgIGlmIChhLngoKSAhPSBiLngoKSkKKyAgICAgICAgcmV0dXJuIChwLngoKSA+PSBtaW4oYS54
KCksIGIueCgpKSAmJiBwLngoKSA8PSBtYXgoYS54KCksIGIueCgpKSk7CisKKyAgICByZXR1cm4g
KHAueSgpID49IG1pbihhLnkoKSwgYi55KCkpICYmIHAueSgpIDw9IG1heChhLnkoKSwgYi55KCkp
KTsKK30KKworLy8gVGVzdHMgaWYgdHdvIGVkZ2VzIGRlZmluZWQgYnkgdGhlaXIgZW5kcG9pbnRz
IChhLGIpIGFuZCAoYyxkKSBpbnRlcnNlY3QuIFJldHVybnMgdHJ1ZSBhbmQgdGhlCisvLyBwb2lu
dCBvZiBpbnRlcnNlY3Rpb24gaWYgdGhleSBkbyBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorc3RhdGlj
IGJvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIsIGNvbnN0IEZsb2F0UG9pbnQmIGMsIGNvbnN0IEZsb2F0UG9pbnQmIGQsIEZsb2F0UG9pbnQm
IHIpCit7CisgICAgRmxvYXRTaXplIHUgPSBiIC0gYTsKKyAgICBGbG9hdFNpemUgdiA9IGQgLSBj
OworICAgIEZsb2F0U2l6ZSB3ID0gYSAtIGM7CisKKyAgICBmbG9hdCBkZW5vbSA9IHBlcnBQcm9k
dWN0KHUsIHYpOworCisgICAgLy8gSWYgZGVub20gPT0gMCB0aGVuIHRoZSBlZGdlcyBhcmUgcGFy
YWxsZWwuCisgICAgaWYgKCFkZW5vbSkgeworICAgICAgICAvLyBJZiB0aGUgZWRnZXMgYXJlIG5v
dCBjb2xpbmVhciB0aGVuIHRoZXJlJ3Mgbm8gaW50ZXJzZWN0aW9uLgorICAgICAgICBpZiAocGVy
cFByb2R1Y3QodSwgdykgfHwgcGVycFByb2R1Y3QodiwgdykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKHBvaW50SW5Db2xpbmVhckVkZ2UoYSwgYywgZCkpIHsKKyAg
ICAgICAgICAgIHIgPSBhOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBvaW50SW5Db2xpbmVhckVkZ2UoYiwgYywgZCkpIHsKKyAgICAgICAgICAgIHIg
PSBiOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBv
aW50SW5Db2xpbmVhckVkZ2UoYywgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBjOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvaW50SW5Db2xpbmVh
ckVkZ2UoZCwgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBkOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZs
b2F0IHMgPSBwZXJwUHJvZHVjdCh2LCB3KSAvIGRlbm9tOworICAgIGlmIChzIDwgMCB8fCBzID4g
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgdCA9IHBlcnBQcm9kdWN0KHUs
IHcpIC8gZGVub207CisgICAgaWYgKHQgPCAwIHx8IHQgPiAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1LnNjYWxlKHMpOworICAgIHIgPSBhICsgdTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6TGF5ZXJJbnRlcnNlY3RvcihH
cmFwaE5vZGUqIG5vZGVBLCBHcmFwaE5vZGUqIG5vZGVCLCBmbG9hdCBlYXJseUV4aXRUaHJlc2hv
bGQpCisgICAgOiBtX25vZGVBKG5vZGVBKQorICAgICwgbV9ub2RlQihub2RlQikKKyAgICAsIG1f
ekRpZmYoMCkKKyAgICAsIG1fZWFybHlFeGl0VGhyZXNob2xkKGVhcmx5RXhpdFRocmVzaG9sZCkK
K3sKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpnbygpCit7Cisg
ICAgKHRyaWFuZ2xlVHJpYW5nbGVUZXN0KG1fbm9kZUEtPm1fYzEsIG1fbm9kZUEtPm1fYzIsIG1f
bm9kZUEtPm1fYzMsIG1fbm9kZUItPm1fYzEsIG1fbm9kZUItPm1fYzIsIG1fbm9kZUItPm1fYzMp
CisgICAgIHx8IHRyaWFuZ2xlVHJpYW5nbGVUZXN0KG1fbm9kZUEtPm1fYzMsIG1fbm9kZUEtPm1f
YzQsIG1fbm9kZUEtPm1fYzEsIG1fbm9kZUItPm1fYzEsIG1fbm9kZUItPm1fYzIsIG1fbm9kZUIt
Pm1fYzMpCisgICAgIHx8IHRyaWFuZ2xlVHJpYW5nbGVUZXN0KG1fbm9kZUEtPm1fYzEsIG1fbm9k
ZUEtPm1fYzIsIG1fbm9kZUEtPm1fYzMsIG1fbm9kZUItPm1fYzMsIG1fbm9kZUItPm1fYzQsIG1f
bm9kZUItPm1fYzEpCisgICAgIHx8IHRyaWFuZ2xlVHJpYW5nbGVUZXN0KG1fbm9kZUEtPm1fYzMs
IG1fbm9kZUEtPm1fYzQsIG1fbm9kZUEtPm1fYzEsIG1fbm9kZUItPm1fYzMsIG1fbm9kZUItPm1f
YzQsIG1fbm9kZUItPm1fYzEpKTsKK30KKworCisvLyBDaGVja3MgaWYgc2VnbWVudCBwcSBpbnRl
cnNlY3RzIGFueSBvZiB0aGUgc2lkZXMgb2YgdHJpYW5nbGUgYWJjLgorYm9vbCBDQ0xheWVyU29y
dGVyOjpMYXllckludGVyc2VjdG9yOjplZGdlVHJpYW5nbGVUZXN0KGNvbnN0IEZsb2F0UG9pbnQm
IHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0
UG9pbnQmIGIsIGNvbnN0IEZsb2F0UG9pbnQmIGMpCit7CisgICAgRmxvYXRQb2ludCByOworICAg
IGlmICgoZWRnZUVkZ2VUZXN0KHAsIHEsIGEsIGIsIHIpICYmIGNoZWNrWkRpZmYocikpCisgICAg
ICAgIHx8IChlZGdlRWRnZVRlc3QocCwgcSwgYSwgYywgcikgJiYgY2hlY2taRGlmZihyKSkKKyAg
ICAgICAgfHwgKGVkZ2VFZGdlVGVzdChwLCBxLCBiLCBjLCByKSAmJiBjaGVja1pEaWZmKHIpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIENoZWNr
cyBpZiB0d28gY28tcGxhbmFyIHRyaWFuZ2xlcyBpbnRlcnNlY3QuCitib29sIENDTGF5ZXJTb3J0
ZXI6OkxheWVySW50ZXJzZWN0b3I6OnRyaWFuZ2xlVHJpYW5nbGVUZXN0KGNvbnN0IEZsb2F0UG9p
bnQmIGExLCBjb25zdCBGbG9hdFBvaW50JiBiMSwgY29uc3QgRmxvYXRQb2ludCYgYzEsIGNvbnN0
IEZsb2F0UG9pbnQmIGEyLCBjb25zdCBGbG9hdFBvaW50JiBiMiwgY29uc3QgRmxvYXRQb2ludCYg
YzIpCit7CisgICAgLy8gQ2hlY2sgYWxsIGVkZ2VzIG9mIGZpcnN0IHRyaWFuZ2xlIHdpdGggZWRn
ZXMgb2YgdGhlIHNlY29uZCBvbmUuCisgICAgaWYgKGVkZ2VUcmlhbmdsZVRlc3QoYTEsIGIxLCBh
MiwgYjIsIGMyKQorICAgICAgICB8fCBlZGdlVHJpYW5nbGVUZXN0KGExLCBjMSwgYTIsIGIyLCBj
MikKKyAgICAgICAgfHwgZWRnZVRyaWFuZ2xlVGVzdChiMSwgYzEsIGEyLCBiMiwgYzIpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENoZWNrIGFsbCBwb2ludHMgb2YgdGhlIGZpcnN0
IHRyaWFuZ2xlIGZvciBpbmNsdXNpb24gaW4gdGhlIHNlY29uZCB0cmlhbmdsZS4KKyAgICBpZiAo
KHBvaW50SW5UcmlhbmdsZShhMSwgYTIsIGIyLCBjMikgJiYgY2hlY2taRGlmZihhMSkpCisgICAg
ICAgIHx8IChwb2ludEluVHJpYW5nbGUoYjEsIGEyLCBiMiwgYzIpICYmIGNoZWNrWkRpZmYoYjEp
KQorICAgICAgICB8fCAocG9pbnRJblRyaWFuZ2xlKGMxLCBhMiwgYjIsIGMyKSAmJiBjaGVja1pE
aWZmKGMxKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ2hlY2sgYWxsIHBvaW50
cyBvZiB0aGUgc2Vjb25kIHRyaWFuZ2xlIGZvciBpbmNsdXNpb24gaW4gdGhlIGZpcnN0IHRyaWFu
Z2xlLgorICAgIGlmICgocG9pbnRJblRyaWFuZ2xlKGEyLCBhMSwgYjEsIGMxKSAmJiBjaGVja1pE
aWZmKGEyKSkKKyAgICAgICAgfHwgKHBvaW50SW5UcmlhbmdsZShiMiwgYTEsIGIxLCBjMSkgJiYg
Y2hlY2taRGlmZihiMikpCisgICAgICAgIHx8IChwb2ludEluVHJpYW5nbGUoYzIsIGExLCBiMSwg
YzEpICYmIGNoZWNrWkRpZmYoYzIpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vIENvbXB1dGVzIHRoZSB6IGRpZmZlcmVuY2UgYmV0d2VlbiBwb2lu
dCBwIHByb2plY3RlZCBvbnRvIHRoZSB0d28gbGF5ZXJzIHRvIGRldGVybWluZQorLy8gd2hpY2gg
bGF5ZXIgaXMgaW4gZnJvbnQuIElmIHRoZSBuZXcgeiBkaWZmZXJlbmNlIGlzIGhpZ2hlciB0aGFu
IHRoZSBjdXJyZW50bHkKKy8vIHJlY29yZGVkIG9uZSB0aGUgdGhpcyBiZWNvbWVzIHRoZSBwb2lu
dCBvZiBjaG9pY2UgZm9yIGRvaW5nIHRoZSBjb21wYXJpc29uIGJldHdlZW4gdGhlIAorLy8gbGF5
ZXJzLiBJZiB0aGUgdmFsdWUgb2YgZGlmZmVyZW5jZSBpcyBoaWdoZXIgdGhhbiBvdXIgZWFybHkg
ZXhpdCB0aHJlc2hvbGQgdGhlbgorLy8gaXQgbWVhbnMgdGhhdCB0aGUgeiBkaWZmZXJlbmNlIGlz
IGNvbmNsdXNpdmUgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjaworLy8gb3RoZXIg
aW50ZXJzZWN0aW9uIHBvaW50cy4KK2Jvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rv
cjo6Y2hlY2taRGlmZihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGZsb2F0IHphID0gbGF5
ZXJaRnJvbVByb2plY3RlZFBvaW50KG1fbm9kZUEsIHApOworICAgIGZsb2F0IHpiID0gbGF5ZXJa
RnJvbVByb2plY3RlZFBvaW50KG1fbm9kZUIsIHApOworCisgICAgZmxvYXQgZGlmZiA9IHphIC0g
emI7CisgICAgZmxvYXQgYWJzRGlmZiA9IGZhYnNmKGRpZmYpOworICAgIGlmICgoYWJzRGlmZikg
PiBmYWJzZihtX3pEaWZmKSkgeworICAgICAgICBtX2ludGVyc2VjdGlvblBvaW50ID0gcDsKKyAg
ICAgICAgbV96RGlmZiA9IGRpZmY7CisgICAgfQorCisgICAgaWYgKGFic0RpZmYgPiBtX2Vhcmx5
RXhpdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKworLy8gUmV0dXJucyB0aGUgWiBjb29yZGluYXRlIG9mIGEgcG9pbnQgb24gdGhlIGdp
dmVuIGxheWVyIHRoYXQgcHJvamVjdHMKKy8vIHRvIHBvaW50IHAgd2hpY2ggbGllcyBvbiB0aGUg
eiA9IDAgcGxhbmUuIEl0IGRvZXMgaXQgYnkgY29tcHV0aW5nIHRoZQorLy8gaW50ZXJzZWN0aW9u
IG9mIGEgbGluZSBzdGFydGluZyBmcm9tIHAgYWxvbmcgdGhlIFogYXhpcyBhbmQgdGhlIHBsYW5l
CisvLyBvZiB0aGUgbGF5ZXIuCitmbG9hdCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9y
OjpsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiBsYXllciwgY29uc3QgRmxvYXRQ
b2ludCYgcCkKK3sKKyAgICBjb25zdCBGbG9hdFBvaW50M0QgekF4aXMoMCwgMCwgMSk7CisgICAg
RmxvYXRQb2ludDNEIHcgPSBGbG9hdFBvaW50M0QocC54KCksIHAueSgpLCAwKSAtIGxheWVyLT5t
X29yaWdpbjsKKworICAgIGZsb2F0IGQgPSBsYXllci0+bV9ub3JtYWwuZG90KHpBeGlzKTsKKyAg
ICBmbG9hdCBuID0gLWxheWVyLT5tX25vcm1hbC5kb3Qodyk7CisKKyAgICAvLyBDaGVjayBpZiBs
YXllciBpcyBwYXJhbGxlbCB0byB0aGUgeiA9IDAgYXhpcworICAgIGlmICghZCkKKyAgICAgICAg
cmV0dXJuIGxheWVyLT5tX29yaWdpbi56KCk7CisKKyAgICAvLyBUaGUgaW50ZXJzZWN0aW9uIHBv
aW50IHdvdWxkIGJlIGdpdmVuIGJ5OgorICAgIC8vIHAgKyAobiAvIGQpICogdSAgYnV0IHNpbmNl
IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIAorICAgIC8vIHogY29vcmRpbmF0ZSBhbmQg
cCdzIHogY29vcmQgaXMgemVybywgYWxsIHdlIG5lZWQgaXMgdGhlIHZhbHVlIG9mIG4vZC4KKyAg
ICByZXR1cm4gbiAvIGQ7Cit9CisKKworQ0NMYXllclNvcnRlcjo6Q0NMYXllclNvcnRlcigpCisg
ICAgOiBtX3pSYW5nZSgwKQoreworfQorCitDQ0xheWVyU29ydGVyOjpBQkNvbXBhcmVSZXN1bHQg
Q0NMYXllclNvcnRlcjo6Y2hlY2tPdmVybGFwKEdyYXBoTm9kZSogYSwgR3JhcGhOb2RlKiBiKQor
eworICAgIGlmICghYS0+bV9ib3VuZGluZ0JveC5pbnRlcnNlY3RzKGItPm1fYm91bmRpbmdCb3gp
KQorICAgICAgICByZXR1cm4gTm9uZTsKKworICAgIC8vIE1ha2UgdGhlIGVhcmx5IGV4aXQgdGhy
ZXNob2xkIHByb3BvcnRpb25hbCB0byB0aGUgdG90YWwgWiByYW5nZS4KKyAgICBmbG9hdCBleGl0
VGhyZXNob2xkID0gbV96UmFuZ2UgKiAwLjAxOworCisgICAgTGF5ZXJJbnRlcnNlY3RvciBpbnRl
cnNlY3RvcihhLCBiLCBleGl0VGhyZXNob2xkKTsKKyAgICBpbnRlcnNlY3Rvci5nbygpOworCisg
ICAgaWYgKGludGVyc2VjdG9yLm1fekRpZmYgPiAwKQorICAgICAgICByZXR1cm4gQkJlZm9yZUE7
CisgICAgaWYgKGludGVyc2VjdG9yLm1fekRpZmYgPCAwKQorICAgICAgICByZXR1cm4gQUJlZm9y
ZUI7CisKKyAgICByZXR1cm4gTm9uZTsKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVH
cmFwaE5vZGVzKExheWVyTGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3Ig
bGFzdCkKK3sKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyAgICBMT0coQ0NMYXllclNvcnRlciwg
IkNyZWF0aW5nIGdyYXBoIG5vZGVzOlxuIik7CisjZW5kaWYKKyAgICBmbG9hdCBtaW5aID0gRkxU
X01BWDsKKyAgICBmbG9hdCBtYXhaID0gLUZMVF9NQVg7CisgICAgZm9yIChMYXllckxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0IDwgbGFzdDsgaXQrKykgeworICAgICAgICBtX25v
ZGVzLmFwcGVuZChHcmFwaE5vZGUoaXQtPmdldCgpKSk7CisgICAgICAgIEdyYXBoTm9kZSYgbm9k
ZSA9IG1fbm9kZXMuYXQobV9ub2Rlcy5zaXplKCkgLSAxKTsKKyAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbm9kZS5tX2xheWVyLT5yZW5kZXJTdXJmYWNlKCk7
CisgICAgICAgIGlmICghbm9kZS5tX2xheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiAhcmVuZGVyU3Vy
ZmFjZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisg
ICAgICAgIExPRyhDQ0xheWVyU29ydGVyLCAiTGF5ZXIgJWQgKCVkIHggJWQpXG4iLCBub2RlLm1f
bGF5ZXItPmRlYnVnSUQoKSwgbm9kZS5tX2xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBub2RlLm1f
bGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKyNlbmRpZgorCisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CisgICAgICAgIGZsb2F0IGxheWVyV2lkdGgsIGxheWVy
SGVpZ2h0OworICAgICAgICBpZiAocmVuZGVyU3VyZmFjZSkgeworICAgICAgICAgICAgZHJhd1Ry
YW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGxh
eWVyV2lkdGggPSAwLjUgKiByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCk7Cisg
ICAgICAgICAgICBsYXllckhlaWdodCA9IDAuNSAqIHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0
KCkuaGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkcmF3VHJhbnNmb3Jt
ID0gbm9kZS5tX2xheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgICAgICAgICBsYXllcldpZHRo
ID0gMC41ICogbm9kZS5tX2xheWVyLT5ib3VuZHMoKS53aWR0aCgpOworICAgICAgICAgICAgbGF5
ZXJIZWlnaHQgPSAwLjUgKiBub2RlLm1fbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpOworICAgICAg
ICB9CisKKyAgICAgICAgRmxvYXRQb2ludDNEIGMxID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChG
bG9hdFBvaW50M0QoLWxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEZsb2F0
UG9pbnQzRCBjMiA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lk
dGgsIGxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEZsb2F0UG9pbnQzRCBjMyA9IGRyYXdUcmFu
c2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkp
OworICAgICAgICBGbG9hdFBvaW50M0QgYzQgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0
UG9pbnQzRCgtbGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIG5vZGUubV9u
b3JtYWwgPSAoYzIgLSBjMSkuY3Jvc3MoYzMgLSBjMSk7CisgICAgICAgIG5vZGUubV9jMSA9IEZs
b2F0UG9pbnQoYzEueCgpLCBjMS55KCkpOworICAgICAgICBub2RlLm1fYzIgPSBGbG9hdFBvaW50
KGMyLngoKSwgYzIueSgpKTsKKyAgICAgICAgbm9kZS5tX2MzID0gRmxvYXRQb2ludChjMy54KCks
IGMzLnkoKSk7CisgICAgICAgIG5vZGUubV9jNCA9IEZsb2F0UG9pbnQoYzQueCgpLCBjNC55KCkp
OworICAgICAgICBub2RlLm1fb3JpZ2luID0gYzE7CisgICAgICAgIG5vZGUubV9ib3VuZGluZ0Jv
eC5maXRUb1BvaW50cyhub2RlLm1fYzEsIG5vZGUubV9jMiwgbm9kZS5tX2MzLCBub2RlLm1fYzQp
OworICAgIAorICAgICAgICBtYXhaID0gbWF4KGM0LnooKSwgbWF4KGMzLnooKSwgbWF4KGMyLnoo
KSwgbWF4KG1heFosIGMxLnooKSkpKSk7CisgICAgICAgIG1pblogPSBtaW4oYzQueigpLCBtaW4o
YzMueigpLCBtaW4oYzIueigpLCBtaW4obWluWiwgYzEueigpKSkpKTsKKyAgICB9CisgICAgaWYg
KGxhc3QgLSBmaXJzdCkKKyAgICAgICAgbV96UmFuZ2UgPSBmYWJzZihtYXhaIC0gbWluWik7Cit9
CisKK3ZvaWQgQ0NMYXllclNvcnRlcjo6Y3JlYXRlR3JhcGhFZGdlcygpCit7CisjaWYgIWRlZmlu
ZWQoIE5ERUJVRyApCisgICAgTE9HKENDTGF5ZXJTb3J0ZXIsICJFZGdlczpcbiIpOworI2VuZGlm
CisgICAgZm9yICh1bnNpZ25lZCBuYSA9IDA7IG5hIDwgbV9ub2Rlcy5zaXplKCk7IG5hKyspIHsK
KyAgICAgICAgR3JhcGhOb2RlKiBub2RlQSA9ICZtX25vZGVzW25hXTsKKyAgICAgICAgaWYgKCFu
b2RlQS0+bV9sYXllci0+ZHJhd3NDb250ZW50KCkgJiYgIW5vZGVBLT5tX2xheWVyLT5yZW5kZXJT
dXJmYWNlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBu
YiA9IG5hICsgMTsgbmIgPCBtX25vZGVzLnNpemUoKTsgbmIrKykgeworICAgICAgICAgICAgR3Jh
cGhOb2RlKiBub2RlQiA9ICZtX25vZGVzW25iXTsKKyAgICAgICAgICAgIGlmICghbm9kZUItPm1f
bGF5ZXItPmRyYXdzQ29udGVudCgpICYmICFub2RlQi0+bV9sYXllci0+cmVuZGVyU3VyZmFjZSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQUJDb21wYXJlUmVzdWx0
IG92ZXJsYXBSZXN1bHQgPSBjaGVja092ZXJsYXAobm9kZUEsIG5vZGVCKTsKKyAgICAgICAgICAg
IEdyYXBoTm9kZSogc3RhcnROb2RlID0gMDsKKyAgICAgICAgICAgIEdyYXBoTm9kZSogZW5kTm9k
ZSA9IDA7CisgICAgICAgICAgICBpZiAob3ZlcmxhcFJlc3VsdCA9PSBBQmVmb3JlQikgeworICAg
ICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGVBOworICAgICAgICAgICAgICAgIGVuZE5vZGUg
PSBub2RlQjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcmxhcFJlc3VsdCA9PSBCQmVmb3Jl
QSkgeworICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IG5vZGVCOworICAgICAgICAgICAgICAg
IGVuZE5vZGUgPSBub2RlQTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXJ0
Tm9kZSkgeworI2lmICFkZWZpbmVkKCBOREVCVUcgKQorICAgICAgICAgICAgICAgIExPRyhDQ0xh
eWVyU29ydGVyLCAiJWQgLT4gJWRcbiIsIHN0YXJ0Tm9kZS0+bV9sYXllci0+ZGVidWdJRCgpLCBl
bmROb2RlLT5tX2xheWVyLT5kZWJ1Z0lEKCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgbV9l
ZGdlcy5hcHBlbmQoR3JhcGhFZGdlKHN0YXJ0Tm9kZSwgZW5kTm9kZSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZWRn
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgR3JhcGhFZGdlKiBlZGdlID0gJm1fZWRnZXNbaV07
CisgICAgICAgIG1fYWN0aXZlRWRnZXMuYWRkKGVkZ2UsIGVkZ2UpOworICAgICAgICBlZGdlLT5t
X2Zyb20tPm1fb3V0Z29pbmcuYXBwZW5kKGVkZ2UpOworICAgICAgICBlZGdlLT5tX3RvLT5tX2lu
Y29taW5nLmFwcGVuZChlZGdlKTsKKyAgICB9Cit9CisKKy8vIEZpbmRzIGFuZCByZW1vdmVzIGFu
IGVkZ2UgZnJvbSB0aGUgbGlzdCBieSBkb2luZyBhIHN3YXAgd2l0aCB0aGUKKy8vIGxhc3QgZWxl
bWVudCBvZiB0aGUgbGlzdC4KK3ZvaWQgQ0NMYXllclNvcnRlcjo6cmVtb3ZlRWRnZUZyb21MaXN0
KEdyYXBoRWRnZSogZWRnZSwgVmVjdG9yPEdyYXBoRWRnZSo+JiBsaXN0KQoreworICAgIHNpemVf
dCBlZGdlSW5kZXggPSBsaXN0LmZpbmQoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2VJbmRleCAhPSBu
b3RGb3VuZCk7CisgICAgaWYgKGxpc3Quc2l6ZSgpID09IDEpIHsKKyAgICAgICAgQVNTRVJUKCFl
ZGdlSW5kZXgpOworICAgICAgICBsaXN0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKGVkZ2VJbmRleCAhPSBsaXN0LnNpemUoKSAtIDEpCisgICAgICAgIGxpc3RbZWRn
ZUluZGV4XSA9IGxpc3RbbGlzdC5zaXplKCkgLSAxXTsKKworICAgIGxpc3QucmVtb3ZlTGFzdCgp
OworfQorCisvLyBTb3J0cyB0aGUgZ2l2ZW4gbGlzdCBvZiBsYXllcnMgc3VjaCB0aGF0IHRoZXkg
Y2FuIGJlIHBhaW50ZWQgaW4gYSBiYWNrLXRvLWZyb250CisvLyBvcmRlci4gU29ydGluZyBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdHMgZm9yIG5vbi1pbnRlcnNlY3RpbmcgbGF5ZXJzIHRoYXQgZG9u
J3QgaGF2ZQorLy8gY3ljbGljYWwgb3JkZXIgZGVwZW5kZW5jaWVzLiBDeWNsZXMgYW5kIGludGVy
c2VjdGlvbnMgYXJlIGJyb2tlbiBhcmlidHJhcmlseS4KKy8vIFNvcnRpbmcgb2YgbGF5ZXJzIGlz
IGRvbmUgdmlhIGEgdG9wb2xvZ2ljYWwgc29ydCBvZiBhIGRpcmVjdGVkIGdyYXBoIHdob3NlIG5v
ZGVzIGFyZQorLy8gdGhlIGxheWVycyB0aGVtc2VsdmVzLiBBbiBlZGdlIGZyb20gbm9kZSBBIHRv
IG5vZGUgQiBzaWduaWZpZXMgdGhhdCBsYXllciBBIG5lZWRzIHRvCisvLyBiZSBkcmF3biBiZWZv
cmUgbGF5ZXIgQi4KKy8vIFRoZSBkcmF3IG9yZGVyIGJldHdlZW4gdHdvIGxheWVycyBpcyBkZXRl
cm1pbmVkIGJ5IHByb2plY3RpbmcgdGhlIHR3byB0cmlhbmdsZXMgbWFraW5nCisvLyB1cCBlYWNo
IGxheWVyIHF1YWQgdG8gdGhlIFogPSAwIHBsYW5lLCBmaW5kaW5nIHBvaW50cyBvZiBpbnRlcnNl
Y3Rpb24gYmV0d2VlbiB0aGUgdHJpYW5nbGVzCisvLyBhbmQgYmFja3Byb2plY3RpbmcgdGhvc2Ug
cG9pbnRzIHRvIHRoZSBwbGFuZSBvZiB0aGUgbGF5ZXIgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZXNw
b25kaW5nIFoKKy8vIGNvb3JkaW5hdGUuIFRoZSBsYXllciB3aXRoIHRoZSBsb3dlciBaIGNvb3Jk
aW5hdGUgKGZhcnRoZXIgZnJvbSB0aGUgZXllKSBuZWVkcyB0byBiZSByZW5kZXJlZAorLy8gZmly
c3QuIElmIHRoZSBsYXllciBwcm9qZWN0aW9ucyBkb24ndCBpbnRlcnNlY3QgdGhlbiB0aGUgbGF5
ZXJzIGNhbiBkcmF3biBpbiBhbnkgb3JkZXIgYW5kIG5vCisvLyBlZGdlcyBhcmUgY3JlYXRlZCBi
ZXR3ZWVuIHRoZW0gaW4gdGhlIGdyYXBoLgordm9pZCBDQ0xheWVyU29ydGVyOjpzb3J0KExheWVy
TGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCkKK3sKKyNpZiAh
ZGVmaW5lZCggTkRFQlVHICkKKyAgICBMT0coQ0NMYXllclNvcnRlciwgIlNvcnRpbmcgc3RhcnQg
LS0tLVxuIik7CisjZW5kaWYKKyAgICBjcmVhdGVHcmFwaE5vZGVzKGZpcnN0LCBsYXN0KTsKKwor
ICAgIGNyZWF0ZUdyYXBoRWRnZXMoKTsKKworICAgIFZlY3RvcjxHcmFwaE5vZGUqPiBzb3J0ZWRM
aXN0OworICAgIFZlY3RvcjxHcmFwaE5vZGUqPiBub0luY29taW5nRWRnZU5vZGVMaXN0OworCisg
ICAgLy8gRmluZCBhbGwgdGhlIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4K
KyAgICBmb3IgKE5vZGVMaXN0OjppdGVyYXRvciBsYSA9IG1fbm9kZXMuYmVnaW4oKTsgbGEgPCBt
X25vZGVzLmVuZCgpOyBsYSsrKSB7CisgICAgICAgIGlmICghbGEtPm1faW5jb21pbmcuc2l6ZSgp
KQorICAgICAgICAgICAgbm9JbmNvbWluZ0VkZ2VOb2RlTGlzdC5hcHBlbmQobGEpOworICAgIH0K
KworI2lmICFkZWZpbmVkKCBOREVCVUcgKQorICAgIExPRyhDQ0xheWVyU29ydGVyLCAiU29ydGVk
IGxpc3Q6ICIpOworI2VuZGlmCisgICAgd2hpbGUgKG1fYWN0aXZlRWRnZXMuc2l6ZSgpIHx8IG5v
SW5jb21pbmdFZGdlTm9kZUxpc3Quc2l6ZSgpKSB7CisgICAgICAgIHdoaWxlIChub0luY29taW5n
RWRnZU5vZGVMaXN0LnNpemUoKSkgeworICAgICAgICAgICAgLy8gUG9wIHRoZSBsYXN0IGVudHJ5
IGZyb20gdGhlIGxpc3QuCisgICAgICAgICAgICBHcmFwaE5vZGUqIGZyb21Ob2RlID0gbm9JbmNv
bWluZ0VkZ2VOb2RlTGlzdFtub0luY29taW5nRWRnZU5vZGVMaXN0LnNpemUoKSAtIDFdOworICAg
ICAgICAgICAgbm9JbmNvbWluZ0VkZ2VOb2RlTGlzdC5yZW1vdmVMYXN0KCk7CisKKyAgICAgICAg
ICAgIC8vIEFkZCBpdCB0byB0aGUgZmluYWwgbGlzdC4KKyAgICAgICAgICAgIHNvcnRlZExpc3Qu
YXBwZW5kKGZyb21Ob2RlKTsKKworI2lmICFkZWZpbmVkKCBOREVCVUcgKQorICAgICAgICAgICAg
TE9HKENDTGF5ZXJTb3J0ZXIsICIlZCwgIiwgZnJvbU5vZGUtPm1fbGF5ZXItPmRlYnVnSUQoKSk7
CisjZW5kaWYKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBpdHMgb3V0Z29pbmcgZWRnZXMg
ZnJvbSB0aGUgZ3JhcGguCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJv
bU5vZGUtPm1fb3V0Z29pbmcuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBHcmFwaEVk
Z2UqIG91dGdvaW5nRWRnZSA9IGZyb21Ob2RlLT5tX291dGdvaW5nW2ldOworCisgICAgICAgICAg
ICAgICAgbV9hY3RpdmVFZGdlcy5yZW1vdmUob3V0Z29pbmdFZGdlKTsKKyAgICAgICAgICAgICAg
ICByZW1vdmVFZGdlRnJvbUxpc3Qob3V0Z29pbmdFZGdlLCBvdXRnb2luZ0VkZ2UtPm1fdG8tPm1f
aW5jb21pbmcpOworCisgICAgICAgICAgICAgICAgaWYgKCFvdXRnb2luZ0VkZ2UtPm1fdG8tPm1f
aW5jb21pbmcuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBub0luY29taW5nRWRnZU5vZGVM
aXN0LmFwcGVuZChvdXRnb2luZ0VkZ2UtPm1fdG8pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZnJvbU5vZGUtPm1fb3V0Z29pbmcuY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbV9hY3RpdmVFZGdlcy5zaXplKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAv
LyBJZiB0aGVyZSBhcmUgc3RpbGwgYWN0aXZlIGVkZ2VzIGJ1dCB0aGUgbGlzdCBvZiBub2RlcyB3
aXRob3V0IGluY29taW5nIGVkZ2VzCisgICAgICAgIC8vIGlzIGVtcHR5IHRoZW4gd2UgaGF2ZSBy
dW4gaW50byBhIGN5Y2xlLiBCcmVhayB0aGUgY3ljbGUgYnkgZmluZGluZyB0aGUgbm9kZQorICAg
ICAgICAvLyB3aXRoIHRoZSBsZWFzdCBudW1iZXIgaW5jb21pbmcgZWRnZXMgYW5kIHJlbW92ZSB0
aGVtIGFsbC4KKyAgICAgICAgdW5zaWduZWQgbWluSW5jb21pbmdFZGdlQ291bnQgPSBVSU5UX01B
WDsKKyAgICAgICAgR3JhcGhOb2RlKiBuZXh0Tm9kZSA9IDA7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobV9u
b2Rlc1tpXS5tX2luY29taW5nLnNpemUoKSAmJiAobV9ub2Rlc1tpXS5tX2luY29taW5nLnNpemUo
KSA8IG1pbkluY29taW5nRWRnZUNvdW50KSkgeworICAgICAgICAgICAgICAgIG1pbkluY29taW5n
RWRnZUNvdW50ID0gbV9ub2Rlc1tpXS5tX2luY29taW5nLnNpemUoKTsKKyAgICAgICAgICAgICAg
ICBuZXh0Tm9kZSA9ICZtX25vZGVzW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChuZXh0Tm9kZSk7CisgICAgICAgIC8vIFJlbW92ZSBhbGwgaXRzIGluY29taW5n
IGVkZ2VzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGUgPSAwOyBlIDwgbmV4dE5vZGUtPm1faW5j
b21pbmcuc2l6ZSgpOyBlKyspIHsKKyAgICAgICAgICAgIEdyYXBoRWRnZSogaW5jb21pbmdFZGdl
ID0gbmV4dE5vZGUtPm1faW5jb21pbmdbZV07CisKKyAgICAgICAgICAgIG1fYWN0aXZlRWRnZXMu
cmVtb3ZlKGluY29taW5nRWRnZSk7CisgICAgICAgICAgICByZW1vdmVFZGdlRnJvbUxpc3QoaW5j
b21pbmdFZGdlLCBpbmNvbWluZ0VkZ2UtPm1fZnJvbS0+bV9vdXRnb2luZyk7CisgICAgICAgIH0K
KyAgICAgICAgbmV4dE5vZGUtPm1faW5jb21pbmcuY2xlYXIoKTsKKyAgICAgICAgbm9JbmNvbWlu
Z0VkZ2VOb2RlTGlzdC5hcHBlbmQobmV4dE5vZGUpOworI2lmICFkZWZpbmVkKCBOREVCVUcgKQor
ICAgICAgICBMT0coQ0NMYXllclNvcnRlciwgIkJyZWFraW5nIGN5Y2xlIGJ5IGNsZWFuaW5nIHVw
ICVkIGVkZ2VzIGZyb20gJWRcbiIsIG1pbkluY29taW5nRWRnZUNvdW50LCBuZXh0Tm9kZS0+bV9s
YXllci0+ZGVidWdJRCgpKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIE5vdGU6IFRoZSBvcmln
aW5hbCBlbGVtZW50cyBvZiB0aGUgbGlzdCBhcmUgaW4gbm8gZGFuZ2VyIG9mIGhhdmluZyB0aGVp
ciByZWYgY291bnQgZ28gdG8gemVybworICAgIC8vIGhlcmUgYXMgdGhleSBhcmUgYWxsIG5vZGVz
IG9mIHRoZSBsYXllciBoaWVyYXJjaHkgYW5kIGFyZSBrZXB0IGFsaXZlIGJ5IHRoZWlyIHBhcmVu
dCBub2Rlcy4KKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoTGF5ZXJMaXN0OjppdGVyYXRv
ciBpdCA9IGZpcnN0OyBpdCA8IGxhc3Q7IGl0KyspCisgICAgICAgICppdCA9IHNvcnRlZExpc3Rb
Y291bnQrK10tPm1fbGF5ZXI7CisKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyAgICBMT0coQ0NM
YXllclNvcnRlciwgIlNvcnRpbmcgZW5kIC0tLS1cbiIpOworI2VuZGlmCisKKyAgICBtX25vZGVz
LmNsZWFyKCk7CisgICAgbV9lZGdlcy5jbGVhcigpOworICAgIG1fYWN0aXZlRWRnZXMuY2xlYXIo
KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NMYXllclNvcnRlcl9oCisjZGVmaW5lIENDTGF5ZXJTb3J0ZXJfaAorCisjaW5jbHVkZSAi
RmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllckltcGwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ0xheWVyU29ydGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xh
eWVyU29ydGVyKTsKK3B1YmxpYzoKKyAgICBDQ0xheWVyU29ydGVyKCk7CisKKyAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OworCisgICAgdm9pZCBzb3J0
KExheWVyTGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCk7Citw
cml2YXRlOgorICAgIHN0cnVjdCBHcmFwaEVkZ2U7CisKKyAgICBzdHJ1Y3QgR3JhcGhOb2RlIHsK
KyAgICAgICAgR3JhcGhOb2RlKENDTGF5ZXJJbXBsKiBsYXllcikgOiBtX2xheWVyKGxheWVyKSB7
IH07CisgICAgICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOworICAgICAgICBGbG9hdFBvaW50IG1f
YzEsIG1fYzIsIG1fYzMsIG1fYzQ7CisgICAgICAgIEZsb2F0UG9pbnQzRCBtX25vcm1hbDsKKyAg
ICAgICAgRmxvYXRQb2ludDNEIG1fb3JpZ2luOworICAgICAgICBGbG9hdFJlY3QgbV9ib3VuZGlu
Z0JveDsKKyAgICAgICAgVmVjdG9yPEdyYXBoRWRnZSo+IG1faW5jb21pbmc7CisgICAgICAgIFZl
Y3RvcjxHcmFwaEVkZ2UqPiBtX291dGdvaW5nOworICAgIH07CisKKyAgICBzdHJ1Y3QgR3JhcGhF
ZGdlIHsKKyAgICAgICAgR3JhcGhFZGdlKEdyYXBoTm9kZSogZnJvbSwgR3JhcGhOb2RlKiB0bykg
OiBtX2Zyb20oZnJvbSksIG1fdG8odG8pIHsgfTsKKworICAgICAgICBHcmFwaE5vZGUqIG1fZnJv
bTsKKyAgICAgICAgR3JhcGhOb2RlKiBtX3RvOworICAgIH07CisKKyAgICBzdHJ1Y3QgTGF5ZXJJ
bnRlcnNlY3RvciB7CisgICAgICAgIExheWVySW50ZXJzZWN0b3IoR3JhcGhOb2RlKiwgR3JhcGhO
b2RlKiwgZmxvYXQpOworCisgICAgICAgIHZvaWQgZ28oKTsKKworICAgICAgICBmbG9hdCBsYXll
clpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiwgY29uc3QgRmxvYXRQb2ludCYpOworICAg
ICAgICBib29sIHRyaWFuZ2xlVHJpYW5nbGVUZXN0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICBib29sIGVkZ2VUcmlhbmds
ZVRlc3QoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgYm9v
bCBjaGVja1pEaWZmKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgICAgICBGbG9hdFBvaW50IG1f
aW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgICAgIEdyYXBoTm9kZSogbV9ub2RlQTsKKyAgICAgICAg
R3JhcGhOb2RlKiBtX25vZGVCOworICAgICAgICBmbG9hdCBtX3pEaWZmOworICAgICAgICBmbG9h
dCBtX2Vhcmx5RXhpdFRocmVzaG9sZDsKKyAgICB9OworCisgICAgdHlwZWRlZiBWZWN0b3I8R3Jh
cGhOb2RlPiBOb2RlTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxHcmFwaEVkZ2U+IEVkZ2VMaXN0
OworICAgIE5vZGVMaXN0IG1fbm9kZXM7CisgICAgRWRnZUxpc3QgbV9lZGdlczsKKyAgICBmbG9h
dCBtX3pSYW5nZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaEVkZ2UqLCBHcmFwaEVkZ2Uq
PiBFZGdlTWFwOworICAgIEVkZ2VNYXAgbV9hY3RpdmVFZGdlczsKKworICAgIGZsb2F0IG1fekRp
ZmZFcHNpbG9uOworCisgICAgdm9pZCBjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlzdDo6aXRlcmF0
b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCk7CisgICAgdm9pZCBjcmVhdGVHcmFw
aEVkZ2VzKCk7CisgICAgdm9pZCByZW1vdmVFZGdlRnJvbUxpc3QoR3JhcGhFZGdlKiwgVmVjdG9y
PEdyYXBoRWRnZSo+Jik7CisKKyAgICBlbnVtIEFCQ29tcGFyZVJlc3VsdCB7CisgICAgICAgIEFC
ZWZvcmVCLAorICAgICAgICBCQmVmb3JlQSwKKyAgICAgICAgTm9uZQorICAgIH07CisgICAgQUJD
b21wYXJlUmVzdWx0IGNoZWNrT3ZlcmxhcChHcmFwaE5vZGUqLCBHcmFwaE5vZGUqKTsKK307CisK
K30KKyNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gODUzMzUpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNC0yOSAgVmFuZ2Vs
aXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGRpbmcgYSBuZXcgbGF5
b3V0IHRlc3QgZm9yIHBlcnBlbmRpY3VsYXIgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkyNTUKKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxh
ci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0tZ3B1LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1
bGFyLWxheWVyLXNvcnRpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmcuaHRtbDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
OgorCiAyMDExLTA0LTI4ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGlu
Zy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0v
Y29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZv
cm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lv
biA4NDU4MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjgzNiw2ICsyODM2LDcgQEAgQlVHSkFNRVNSIEdQ
VSBNQUMgTEVPUEFSRCA6IGNvbXBvc2l0aW5nLwogLy8gV2lsbCBuZWVkIHdpbmRvd3MgYW5kIGxp
bnV4IGJhc2VsaW5lcwogQlVHV0s1ODE4MiBHUFUgOiBjb21wb3NpdGluZy9pbWFnZXMvY29udGVu
dC1pbWFnZS1jaGFuZ2UuaHRtbCA9IFBBU1MgRkFJTAogQlVHV0s1ODM5OCBHUFUgOiBwbGF0Zm9y
bS9jaHJvbWl1bS9jb21wb3NpdGluZy9jaGlsZC1sYXllci0zZC1zb3J0aW5nLmh0bWwgPSBQQVNT
IEZBSUwgTUlTU0lORworQlVHVkFOR0VMSVMgR1BVIFdJTiBMSU5VWCA6IHBsYXRmb3JtL2Nocm9t
aXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy5odG1sID0gUEFTUyBG
QUlMIE1JU1NJTkcKIAogLy8gVGhlIHBpY3R1cmUgZG9lcyBub3QgbWF0Y2ggdGhlIHZpZGVvIGlu
IHRoZSB0ZXN0LgogQlVHV0s1NTUxOSBHUFUgV0lOIExJTlVYIDogY29tcG9zaXRpbmcvdmlkZW8v
dmlkZW8tYmFja2dyb3VuZC1jb2xvci5odG1sID0gSU1BR0UrVEVYVApJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0
aW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vY29t
cG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFy
LWxheWVyLXNvcnRpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPCFET0NU
WVBFPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5QZXJwZW5kaWN1bGFyIGxheWVyIHNvcnRpbmc8
L3RpdGxlPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICNj
b250YWluZXIgeworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgIGhlaWdodDog
MzAwcHg7CisgICAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgICAgbWFyZ2luOiA1MHB4IDEwMHB4
OworICAgICAgICAtd2Via2l0LXBlcnNwZWN0aXZlOiA1MDA7CisgICAgfQorIAorICAgICNwYXJl
bnQgeworICAgICAgICBtYXJnaW46IDEwcHg7CisgICAgICAgIHdpZHRoOiAyODBweDsKKyAgICAg
ICAgaGVpZ2h0OiAyODBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlOworICAg
ICAgICAtd2Via2l0LXRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7CisgICAgICAgIC13ZWJr
aXQtdHJhbnNmb3JtOiByb3RhdGVZKDIwZGVnKTsKKyAgICB9CisKKyAgICAjcGFyZW50ID4gZGl2
IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICB0b3A6IDQwcHg7CisgICAg
ICAgIGxlZnQ6IDQwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiA0
MDBweDsKKyAgICAgICAgcGFkZGluZzogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
Z3JlZW47CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwcHgpIHRyYW5z
bGF0ZVooMTBweCkgcm90YXRlWCg5MGRlZyk7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCh0cnVlKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8IS0tIFRoZSBncmVlbiBsYXll
ciBzaG91bGQgbm90IG92ZXJsYXAgdGhlIHB1cnBsZSBsYXllciAtLT4KKzxkaXYgaWQ9ImNvbnRh
aW5lciI+IAorICAgIDxkaXYgaWQ9InBhcmVudCI+IAorICAgICAgICA8ZGl2PjwvZGl2PiAKKyAg
ICA8L2Rpdj4gCis8L2Rpdj4gCisKKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZv
cm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVj
dGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBl
Y3RlZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fk
b0p3QUFBQUtYUkZXSFJqYUdWamEzTjFiUUEwWVRBM056STIKTnpCaE9XWXlZVGd6TnpCbFlXSmxP
R00yT0dKbE5tTmpOT2k2d1dJQUFCQ05TVVJCVkhpYzdkekxjbFBKQWtWQm0rQy8zWHk1N3VBMgpB
VzVzck5kWnB4NlpNeUlZMUt4cWFWdDZ2Vnd1bHhjQUFJREF0N01QQUFBQTdFT0FBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBCkFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
awpCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUU9iNzJRZmdNVDllZjd6
Nzk5dmw3YVNUQUFEQTF3VElZdjRiCkpCOFJLUUFBbkVXQWJFaWtBQUJ3RmdIQ2gwUUtBQUJIRUNE
YzdacEllWGtSS2dBQS9DSkFPSncxQlFDQW53UUlReEFwQUFCN0VDQk0KUTZRQUFNeFBnTEFVa1FJ
QU1EWUJ3blpFQ2dEQWVRUUlmRUNrQUFBY1E0REFuZndNTVFEQTdRUUlITXlhQWdEd2l3Q0JBWWdV
QUdBWApBZ1FtSVZJQWdCVUlFRmlJU0FFQVJpZEFZRE1pQlFBNGt3QUIvdUFYdmdDQW93Z1E0RzdX
RkFEZ1ZnSUVPSlJJQVFCK0owQ0EwNGtVCkFOaUhBQUdtSUZJQVlBMENCRmlHU0FHQThRa1FZQ3Qr
NFFzQXppVkFBRDVnVFFHQVl3Z1FnRHVKRkFDNG5RQUJPSkJJQVlEM0JBakEKeVVRS0FEc1JJQUFU
RUNrQXJFS0FBQ3ppczBnUkpnQ001TnZaQndBQUFQWWhRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQQpnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBCkFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUUKQUFESUNCQUFB
Q0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFD
QWpRQUFBZ0l3QQpBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFD
QWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqClFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFD
QWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBREkKQ0JBQUFD
QWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQQpNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBCmdJd0FBUUFBTWdJRUFBRElDQkFBQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUEKQUNB
alFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRQpBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBCkFRQUFNZ0lFQUFESUNCQUFBQ0Fq
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWoK
UUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESQpDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBCk1nSUVBQURJQ0JBQUFDQWpR
QUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUEKZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQQpBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFCkFBRElDQkFBQUNBalFB
QUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0EKQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBagpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJCkNCQUFBQ0FqUUFB
QWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUEKTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQQpnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBCkFDQWpRQUFB
Z0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFn
SXdBQVFBQU10L1AKUGdBQTkzdTd2SjE5QkFDNGlRQUJHSkN3QUdCVkFnUWdJaW9BUUlBQVBFeFlB
TUQxQkFqQUIvNzU1NTkzLzc2OFhjNDVDQUFzUm9BQQpXL2x2V0Z6cjljZnJ5OHVMRUFHQVJ3a1FZ
SHIzUnNVOWhBZ0FQRWFBQUVNcW8rSWVRZ1FBN2lOQWdOVG9ZWEVySVFJQXR4RWd3TU5XCmk0cDdD
QkVBdUk0QUFUNGxMRzRuUkFEZzd3UUliRVpVTklRSUFIeE1nTUFpaE1XWWhBZ0F2Q2RBWUdDaVlo
MUNCQUQrVDRCQVRGVHMKVFlnQXNEc0JBazhpTExqRnp4QjVlUkVqQU94RmdNQmZpQW9LVmhFQWRp
SkEySkt3WUVSQ0JJQWRDQkNXSVNwWWhSQUJZR1VDaE9FSgpDM1lsUkFCWWtRRGhGS0lDcmlkRUFG
aUpBT0dwaEFVY1I0Z0FzQUlCd3BmZUxtOVgvYi9mZjFZVU9JNFFBV0JtQW1SVDEwYkZMUzV2CkZ4
RUNJU0VDd0l3RXlHS09DQXRnYkVJRWdKbThYaTRYTnhaUFpRV0Jjd2tSQUViMjdld0RBUEJjcno5
ZWZSQUF3TEFzSUJ6QzR3ZkcKWVJFQllDUVdFSURGV1VRQUdJa0ZoTU40OE1DWUxDSUFuTW12WUFG
czV2Y1BCOFFJQURVTENJZXlnc0FjaEFnQUZkOEJBY0QzUkFESQpXRUE0bkVjTnpNY2lBc0JSTENB
QS9NRWlBc0JSTENBa1BHUmdiaFlSQUo3RkFnTEFseXdpQUR5TEJZU014d3Vzd3lJQ3dMMHNJQURj
CnpDSUN3TDBzSUtROFdHQk5GaEVBcm1VQkFlQmhGaEVBcm1VQkllZVJBdXV6aUFEd0dRc0lBRTlu
RVFIZ014WVFUdUZoQW51eGlBRHcKa3dVRWdNTlpSQUQ0eVFMQ2FUeEdZRzlXRVlBOVdVQUFPSVZW
QkdCUEZoQk81ZkVCL0dRUkFkaURCUVNBSVZoRUFQWmdBZUYwSGh6QQpSeXdpQUd1eWdBQXdKSXNJ
d0pvc0lBekJJd1A0aWtVRVlBMFdFQUNtWUJFQldJTUZoR0Y0V0FDM3NJZ0F6TWtDQXNDVUxDSUFj
N0tBCk1CU1BDZUJlRmhHQU9WaEFBRmlDUlFSZ0RoWVFodU1CQVR5RFJRUmdUQllRQUpaa0VRRVlr
d1dFSVhrMEFNOW1FUUVZdy9lekR3QUEKaGQ4LzJCQWpBT2V4Z0RBc0t3aHdOQ0VDMFBNZEVBQzI1
WHNpQUQwTENFUHpNQUJLRmhHQTQxbEFBT0JmRmhHQTQxbEFHSjdIQUhBVwppd2pBODFsQUFPQVRG
aEdBNTdPQU1BVVBBR0FFRmhHQXgxbEFBT0JLRmhHQXgxbEFtSVpMSHhpTlJRVGdkaFlRQUxpVFJR
VGdkaFlRCnB1S2lCMFptRVFING1nVUVBSjdFSWdMd05Rc0kwM0c1QTdPd2lBRDh5UUlDQUFleGlB
RDh5UUxDbEZ6b3dJd3NJZ0F2TDkvUFBnQUEKN09MM0QwL0VDTEFyQ3dqVHNvSUFLeEFpd0c1OEJ3
UUFUdVI3SXNCdUxDQk16YVVOck1ZaUFxek9BZ0lBQTdHSUFLdXpnREE5RnpXdwpNb3NJc0JvTENB
QU16Q0lDck1ZQ3doSmN6c0F1TENMQTdDd2dBREFSaXdnd093c0l5M0FoQXp1eWlBQ3pzWUFBd01R
c0lzQnNMQ0FzCnhTVU03TTRpQW96T0FnSUFDN0dJQUtPemdMQWNGeS9BTHhZUllEUVdFQUJZbUVV
RUdJMEZoQ1c1YkFFK1p4VUJ6bVFCQVlETldFV0EKTTFsQVdKYkxGZUE2RmhHZ1pBRUJnTTFaUklD
U0JZU2x1VkFCYm1jUkFZNWtBUUVBM3JHSUFFZXlnTEE4bHlqQVl5d2l3RE5aUUFDQQp2N0tJQU05
a0FXRUxMazZBNTdHSUFJOFFJR3hEaEFBOGx4QUI3dUZQc0FDQXUvalRMT0FlRmhDMjRxSUVPSTVG
QkxpR0JRUUFlQXFMCkNIQU5Dd2piY1RrQ05Dd2l3RWNzSUFEQUlTd2l3RWNzSUd6SmhRaHdES3NI
OEpYdlp4OEFBSmlUMkFEdVlRRmhXMVlRZ091SkRlQloKTENBQXdEdGlBemlTQllTdFdVR0EzWWtO
b0dZQkFZQk5pQTFnQkJZUXRtY0ZBVllrTm9CUldVQUFZQUdDQTVpRkJRUmVyQ0RBWE1RRwpNRE1M
Q0FBTVRHd0FxN0dBd0wrc0lNRFp4QWF3QXdzSUFKeEFiQUM3c29EQWI2d2d3QkhFQnNBdkZoQUFl
Q0t4QWZCM0ZoRDREeXNJCmNBdkJBWEFiQ3dnQVhFbHNBRHpPQWdJZnNJSUFZZ1BnR0JZUUFMWW5O
Z0E2RmhENGhCVUUxaVEyQU01bEFRRmdXV0lEWUR3V0VQZ0wKS3dqTVEyd0F6TUVDQXNCMHhBYkF2
Q3dnOEFVckNKeFBjQUNzd3dJQ3dGREVCc0RhTENCd0JTc0lIRU5zQU96SEFnSkFRbXdBOFBKaQpB
WUdyV1VIZ2VtSURnTTlZUUFCNGlOZ0E0QllXRUxpQkZZVGRpUTBBSG1VQkFlQlRnZ09BWjdPQXdJ
MnNJS3hLYkFCUXNJQUFiRWhzCkFIQVdDd2pjd1FyQ1RNUUdBQ094Z0FBc1JHd0FNRG9MQ056SkNz
TFp4QVlBTTdLQUFFeEFiQUN3Q2dzSVBNQUt3aEhFQmdBcnM0QUEKbkV4d0FMQVRDd2c4eUFyQ0xj
UUdBTHV6Z0FBY1JHd0F3SjhzSVBBRVZoREVCZ0JjeHdJQ2NDT3hBUUQzczREQWsxaEIxaVEyQU9D
NQpMQ0FBL3hJYkFIQThDd2c4a1JWa0htSURBTTVoQVFHMklEZ0FZQXdXRUhneUs4ajV4QVlBak1z
Q0FreE5iQURBWEN3Z2NBQXJ5REhFCkJnRE16d0lDREVsc0FNQ2FMQ0J3RUN2STljUUdBT3pEQWdL
a3hBWUE3TTBDQWdleWdnZ09BT0E5Q3dqd05HSURBUGlLQlFRT3R1b0sKSWpZQWdIdFlRSUF2aVEw
QTRGa3NJQkNZYVFVUkd3REFrU3dnc0RHeEFRRFVMQ0FRT1hzRkVSc0F3QWdzSUxBZ3NRRUFqTW9D
QXFHagpWaERCQVFETXdnSUNreEViQU1ETUxDQVF1MlVGRVJzQXdHb3NJREFJc1FFQTdNQUNBZ0FB
Wkw2ZGZRQUFBR0FmQWdRQUFNZ0lFQUFBCklDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05B
QUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUEKQU1nSUVBQUFJQ05B
QUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFB
QUNBakFBQgpBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFB
QUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BCkFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFB
QUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0kKRUFBQUlDTkFB
QUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFB
Q0FqQUFCQUFBeQpBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFB
Q0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBCmpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFB
Q0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUEKSUNOQUFB
Q0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQQpBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCCkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFD
QWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWo4RDYwL1RvUWsKbCs3
K0FBQUFBRWxGVGtTdVFtQ0MKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91757</attachid>
            <date>2011-04-29 15:49:59 -0700</date>
            <delta_ts>2011-05-02 19:04:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59255-20110429154958.patch</filename>
            <type>text/plain</type>
            <size>40012</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMjkgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wcm92ZSBzb3J0aW5nIG9m
IGxheWVycyBpbiBoaWVyYXJjaGllcyB0aGF0IHByZXNlcnZlLTNkCisgICAgICAgIGJ5IHRlc3Rp
bmcgZm9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgYmV0d2VlbiBsYXllciBwYWlycyBhbmQgZG9pbmcg
YQorICAgICAgICB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSB0aGUgcmlnaHQgb3JkZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI1NQor
CisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3Vs
YXItbGF5ZXItc29ydGluZy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGVycFBy
b2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6aW5uZXJQcm9kdWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50SW5Db2xpbmVhckVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUVkZ2VUZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6Okxh
eWVySW50ZXJzZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6Z28pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
U29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpjaGVja1pEaWZmKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmxheWVy
WkZyb21Qcm9qZWN0ZWRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpD
Q0xheWVyU29ydGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNoZWNrT3Zl
cmxhcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoRWRnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclNvcnRlcjo6cmVtb3ZlRWRnZUZyb21MaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6OnNvcnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpHcmFwaE5vZGU6OkdyYXBoTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpHcmFwaEVkZ2U6OkdyYXBoRWRnZSk6CisKIDIwMTEtMDQt
MjkgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA4NDU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNDA4MCw2ICs0MDgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDg0NTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4
LDYgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVAogCiB9CiAKLWJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xh
eWVySW1wbD4mIGEsIGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmRyYXdEZXB0aCgpIDwgYi0+ZHJhd0RlcHRoKCk7Ci19Ci0KIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFj
ZT4gY29udGVudFBhaW50KQogewogICAgIGlmICghY29udGV4dCkKQEAgLTU5OSw2ICs1OTQsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgLy8gMi4gSWYg
dGhlIGxheWVyIGhhcyBvcGFjaXR5ICE9IDEgYW5kIGRvZXMgbm90IGhhdmUgYSBwcmVzZXJ2ZXMt
M2QgdHJhbnNmb3JtIHN0eWxlLgogICAgIC8vIDMuIFRoZSBsYXllciB1c2VzIGEgbWFzawogICAg
IC8vIDQuIFRoZSBsYXllciBoYXMgYSByZXBsaWNhICh1c2VkIGZvciByZWZsZWN0aW9ucykKKyAg
ICAvLyA1LiBUaGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZS0zZCBidXQgaXMgdGhlIGNoaWxkIG9m
IGEgbGF5ZXIgd2hpY2ggZG9lcy4KICAgICAvLyBJZiBhIGxheWVyIHByZXNlcnZlcy0zZCB0aGVu
IHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRlclN1cmZhY2UgZm9yIGl0IHRvIGF2b2lkIGZsYXR0ZW5p
bmcKICAgICAvLyBvdXQgaXRzIGNoaWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hp
bGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxpZWQgYnkgdGhlIG9wYWNpdHkKICAgICAvLyBvZiB0aGVp
ciBwYXJlbnQuCkBAIC02MDYsNyArNjAyLDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZVByb3BlcgogICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXIt
Pm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAgYm9vbCB1
c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7CiAgICAgYm9vbCB1
c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAg
aWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgo
dXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5
ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9y
RmxhdERlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+c3VwZXJsYXllcigpICYmIGRyYXdMYXllci0+
c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCkg
JiYgZHJhd0xheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKTsKKyAgICBpZiAodXNlU3Vy
ZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFjZUZv
ckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNl
Rm9yT3BhY2l0eSkgJiYgZHJhd0xheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewog
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlKQogICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpAQCAt
NzEzLDE3ICs3MTAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVy
CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1YmxheWVyTWF0cml4LnRyYW5z
bGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7
CiAKLSAgICAvLyBDb21wdXRlIHRoZSBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBs
YXllciB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbgotICAgIC8vIHNvcnRpbmcgdGhlIGxheWVycyBm
b3IgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJEcmF3TWF0cml4ID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBkcmF3
TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9kcmF3VHJhbnNmb3JtIDogZHJhd0xheWVyLT5kcmF3
VHJhbnNmb3JtKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+c3VwZXJsYXllcigpKSB7Ci0gICAgICAg
IGlmICghZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAg
ICBkcmF3TGF5ZXItPnNldERyYXdEZXB0aChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+ZHJhd0Rl
cHRoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdEZXB0
aChsYXllckRyYXdNYXRyaXgubTQzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkcmF3TGF5ZXIt
PnNldERyYXdEZXB0aCgwKTsKLQogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAoZHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXll
ckxpc3QgOiBsYXllckxpc3QpOwogICAgIGRlc2NlbmRhbnRzLmFwcGVuZChkcmF3TGF5ZXIpOwog
ICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKQEAg
LTc5NSwxMSArNzgxLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9w
ZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQg
YWxsIHRoZSBkZXNjZW5kYW50cyBieSB0aGUgWiBjb29yZGluYXRlIG9mIHRoZWlyCi0gICAgLy8g
Y2VudGVyLiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBz
dXBlcmxheWVyIHRoZW4KKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUg
ZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZSAKKyAgICAvLyBkcmF3biBmcm9t
IGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQg
b24gdGhlIHN1cGVybGF5ZXIgdGhlbgogICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHN1
cGVybGF5ZXIgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgogICAgIGlmIChk
cmF3TGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSB8fCAh
ZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzdGQ6OnN0
YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVu
ZCgpLCBjb21wYXJlTGF5ZXJaKTsKKyAgICAgICAgbV9sYXllclNvcnRlci5zb3J0KCZkZXNjZW5k
YW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpKTsKIH0KIAogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkocmV2aXNpb24gODQ1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQAogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgpAQCAtMjMxLDYgKzIzMiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRl
eHRTdXBwb3J0c0xhdGNoOwogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlOworCisgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwogfTsKIAog
Ly8gU2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0
ZXIgYWxtb3N0IGV2ZXJ5IEdMCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgJKHJldmlzaW9uIDg0
NTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw2IEBAIHB1YmxpYzoKIAog
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkg
eyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQotICAgIGZsb2F0IGRyYXdEZXB0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhd0RlcHRoOyB9Ci0gICAgdm9pZCBzZXREcmF3RGVwdGgoZmxvYXQgZGVw
dGgpIHsgbV9kcmF3RGVwdGggPSBkZXB0aDsgfQogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKworI2luY2x1ZGUgIkxvb3BCbGlu
bk1hdGhVdGlscy5oIgorI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKKyNkZWZpbmUgTE9HX0NIQU5ORUxfUFJFRklYIExvZworI2RlZmlu
ZSBTSE9XX0RFQlVHX0xPRyAwCisKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyNpZiBTSE9XX0RF
QlVHX0xPRworc3RhdGljIFdURkxvZ0NoYW5uZWwgTG9nQ0NMYXllclNvcnRlciA9IHsgMHgwMDAw
MDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPbiB9OworI2Vsc2UKK3N0YXRpYyBXVEZMb2dDaGFubmVs
IExvZ0NDTGF5ZXJTb3J0ZXIgPSB7IDB4MDAwMDAwMDAsICIiLCBXVEZMb2dDaGFubmVsT2ZmIH07
CisjZW5kaWYKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIExvb3BCbGlu
bk1hdGhVdGlsczo6cG9pbnRJblRyaWFuZ2xlOworCitpbmxpbmUgc3RhdGljIGZsb2F0IHBlcnBQ
cm9kdWN0KGNvbnN0IEZsb2F0U2l6ZSYgdSwgY29uc3QgRmxvYXRTaXplJiB2KQoreworICAgIHJl
dHVybiB1LndpZHRoKCkgKiB2LmhlaWdodCgpIC0gdS5oZWlnaHQoKSAqIHYud2lkdGgoKTsKK30K
KworaW5saW5lIHN0YXRpYyBmbG9hdCBpbm5lclByb2R1Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBj
b25zdCBGbG9hdFNpemUmIHYpCit7CisgICAgcmV0dXJuIHUud2lkdGgoKSAqIHYud2lkdGgoKSAr
IHUuaGVpZ2h0KCkgKiB2LmhlaWdodCgpOworfQorCisKK2lubGluZSBzdGF0aWMgYm9vbCBwb2lu
dEluQ29saW5lYXJFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIGEs
IGNvbnN0IEZsb2F0UG9pbnQmIGIpCit7CisgICAgLy8gaWYgYWIgaXMgbm90IHZlcnRpY2FsLgor
ICAgIGlmIChhLngoKSAhPSBiLngoKSkKKyAgICAgICAgcmV0dXJuIChwLngoKSA+PSBtaW4oYS54
KCksIGIueCgpKSAmJiBwLngoKSA8PSBtYXgoYS54KCksIGIueCgpKSk7CisKKyAgICByZXR1cm4g
KHAueSgpID49IG1pbihhLnkoKSwgYi55KCkpICYmIHAueSgpIDw9IG1heChhLnkoKSwgYi55KCkp
KTsKK30KKworLy8gVGVzdHMgaWYgdHdvIGVkZ2VzIGRlZmluZWQgYnkgdGhlaXIgZW5kcG9pbnRz
IChhLGIpIGFuZCAoYyxkKSBpbnRlcnNlY3QuIFJldHVybnMgdHJ1ZSBhbmQgdGhlCisvLyBwb2lu
dCBvZiBpbnRlcnNlY3Rpb24gaWYgdGhleSBkbyBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorc3RhdGlj
IGJvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIsIGNvbnN0IEZsb2F0UG9pbnQmIGMsIGNvbnN0IEZsb2F0UG9pbnQmIGQsIEZsb2F0UG9pbnQm
IHIpCit7CisgICAgRmxvYXRTaXplIHUgPSBiIC0gYTsKKyAgICBGbG9hdFNpemUgdiA9IGQgLSBj
OworICAgIEZsb2F0U2l6ZSB3ID0gYSAtIGM7CisKKyAgICBmbG9hdCBkZW5vbSA9IHBlcnBQcm9k
dWN0KHUsIHYpOworCisgICAgLy8gSWYgZGVub20gPT0gMCB0aGVuIHRoZSBlZGdlcyBhcmUgcGFy
YWxsZWwuCisgICAgaWYgKCFkZW5vbSkgeworICAgICAgICAvLyBJZiB0aGUgZWRnZXMgYXJlIG5v
dCBjb2xpbmVhciB0aGVuIHRoZXJlJ3Mgbm8gaW50ZXJzZWN0aW9uLgorICAgICAgICBpZiAocGVy
cFByb2R1Y3QodSwgdykgfHwgcGVycFByb2R1Y3QodiwgdykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKHBvaW50SW5Db2xpbmVhckVkZ2UoYSwgYywgZCkpIHsKKyAg
ICAgICAgICAgIHIgPSBhOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBvaW50SW5Db2xpbmVhckVkZ2UoYiwgYywgZCkpIHsKKyAgICAgICAgICAgIHIg
PSBiOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBv
aW50SW5Db2xpbmVhckVkZ2UoYywgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBjOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvaW50SW5Db2xpbmVh
ckVkZ2UoZCwgYSwgYikpIHsKKyAgICAgICAgICAgIHIgPSBkOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZs
b2F0IHMgPSBwZXJwUHJvZHVjdCh2LCB3KSAvIGRlbm9tOworICAgIGlmIChzIDwgMCB8fCBzID4g
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgdCA9IHBlcnBQcm9kdWN0KHUs
IHcpIC8gZGVub207CisgICAgaWYgKHQgPCAwIHx8IHQgPiAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1LnNjYWxlKHMpOworICAgIHIgPSBhICsgdTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6TGF5ZXJJbnRlcnNlY3RvcihH
cmFwaE5vZGUqIG5vZGVBLCBHcmFwaE5vZGUqIG5vZGVCLCBmbG9hdCBlYXJseUV4aXRUaHJlc2hv
bGQpCisgICAgOiBub2RlQShub2RlQSkKKyAgICAsIG5vZGVCKG5vZGVCKQorICAgICwgekRpZmYo
MCkKKyAgICAsIGVhcmx5RXhpdFRocmVzaG9sZChlYXJseUV4aXRUaHJlc2hvbGQpCit7Cit9CisK
K3ZvaWQgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6Z28oKQoreworICAgICh0cmlh
bmdsZVRyaWFuZ2xlVGVzdChub2RlQS0+YzEsIG5vZGVBLT5jMiwgbm9kZUEtPmMzLCBub2RlQi0+
YzEsIG5vZGVCLT5jMiwgbm9kZUItPmMzKQorICAgICB8fCB0cmlhbmdsZVRyaWFuZ2xlVGVzdChu
b2RlQS0+YzMsIG5vZGVBLT5jNCwgbm9kZUEtPmMxLCBub2RlQi0+YzEsIG5vZGVCLT5jMiwgbm9k
ZUItPmMzKQorICAgICB8fCB0cmlhbmdsZVRyaWFuZ2xlVGVzdChub2RlQS0+YzEsIG5vZGVBLT5j
Miwgbm9kZUEtPmMzLCBub2RlQi0+YzMsIG5vZGVCLT5jNCwgbm9kZUItPmMxKQorICAgICB8fCB0
cmlhbmdsZVRyaWFuZ2xlVGVzdChub2RlQS0+YzMsIG5vZGVBLT5jNCwgbm9kZUEtPmMxLCBub2Rl
Qi0+YzMsIG5vZGVCLT5jNCwgbm9kZUItPmMxKSk7Cit9CisKKworLy8gQ2hlY2tzIGlmIHNlZ21l
bnQgcHEgaW50ZXJzZWN0cyBhbnkgb2YgdGhlIHNpZGVzIG9mIHRyaWFuZ2xlIGFiYy4KK2Jvb2wg
Q0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdChjb25zdCBG
bG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBjb25zdCBGbG9hdFBvaW50JiBhLCBj
b25zdCBGbG9hdFBvaW50JiBiLCBjb25zdCBGbG9hdFBvaW50JiBjKQoreworICAgIEZsb2F0UG9p
bnQgcjsKKyAgICBpZiAoKGVkZ2VFZGdlVGVzdChwLCBxLCBhLCBiLCByKSAmJiBjaGVja1pEaWZm
KHIpKQorICAgICAgICB8fCAoZWRnZUVkZ2VUZXN0KHAsIHEsIGEsIGMsIHIpICYmIGNoZWNrWkRp
ZmYocikpCisgICAgICAgIHx8IChlZGdlRWRnZVRlc3QocCwgcSwgYiwgYywgcikgJiYgY2hlY2ta
RGlmZihyKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisvLyBDaGVja3MgaWYgdHdvIGNvLXBsYW5hciB0cmlhbmdsZXMgaW50ZXJzZWN0LgorYm9vbCBD
Q0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25z
dCBGbG9hdFBvaW50JiBhMSwgY29uc3QgRmxvYXRQb2ludCYgYjEsIGNvbnN0IEZsb2F0UG9pbnQm
IGMxLCBjb25zdCBGbG9hdFBvaW50JiBhMiwgY29uc3QgRmxvYXRQb2ludCYgYjIsIGNvbnN0IEZs
b2F0UG9pbnQmIGMyKQoreworICAgIC8vIENoZWNrIGFsbCBlZGdlcyBvZiBmaXJzdCB0cmlhbmds
ZSB3aXRoIGVkZ2VzIG9mIHRoZSBzZWNvbmQgb25lLgorICAgIGlmIChlZGdlVHJpYW5nbGVUZXN0
KGExLCBiMSwgYTIsIGIyLCBjMikKKyAgICAgICAgfHwgZWRnZVRyaWFuZ2xlVGVzdChhMSwgYzEs
IGEyLCBiMiwgYzIpCisgICAgICAgIHx8IGVkZ2VUcmlhbmdsZVRlc3QoYjEsIGMxLCBhMiwgYjIs
IGMyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBDaGVjayBhbGwgcG9pbnRzIG9m
IHRoZSBmaXJzdCB0cmlhbmdsZSBmb3IgaW5jbHVzaW9uIGluIHRoZSBzZWNvbmQgdHJpYW5nbGUu
CisgICAgaWYgKChwb2ludEluVHJpYW5nbGUoYTEsIGEyLCBiMiwgYzIpICYmIGNoZWNrWkRpZmYo
YTEpKQorICAgICAgICB8fCAocG9pbnRJblRyaWFuZ2xlKGIxLCBhMiwgYjIsIGMyKSAmJiBjaGVj
a1pEaWZmKGIxKSkKKyAgICAgICAgfHwgKHBvaW50SW5UcmlhbmdsZShjMSwgYTIsIGIyLCBjMikg
JiYgY2hlY2taRGlmZihjMSkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENoZWNr
IGFsbCBwb2ludHMgb2YgdGhlIHNlY29uZCB0cmlhbmdsZSBmb3IgaW5jbHVzaW9uIGluIHRoZSBm
aXJzdCB0cmlhbmdsZS4KKyAgICBpZiAoKHBvaW50SW5UcmlhbmdsZShhMiwgYTEsIGIxLCBjMSkg
JiYgY2hlY2taRGlmZihhMikpCisgICAgICAgIHx8IChwb2ludEluVHJpYW5nbGUoYjIsIGExLCBi
MSwgYzEpICYmIGNoZWNrWkRpZmYoYjIpKQorICAgICAgICB8fCAocG9pbnRJblRyaWFuZ2xlKGMy
LCBhMSwgYjEsIGMxKSAmJiBjaGVja1pEaWZmKGMyKSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBDb21wdXRlcyB0aGUgeiBkaWZmZXJlbmNlIGJl
dHdlZW4gcG9pbnQgcCBwcm9qZWN0ZWQgb250byB0aGUgdHdvIGxheWVycyB0byBkZXRlcm1pbmUK
Ky8vIHdoaWNoIGxheWVyIGlzIGluIGZyb250LiBJZiB0aGUgbmV3IHogZGlmZmVyZW5jZSBpcyBo
aWdoZXIgdGhhbiB0aGUgY3VycmVudGx5CisvLyByZWNvcmRlZCBvbmUgdGhlIHRoaXMgYmVjb21l
cyB0aGUgcG9pbnQgb2YgY2hvaWNlIGZvciBkb2luZyB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRo
ZSAKKy8vIGxheWVycy4gSWYgdGhlIHZhbHVlIG9mIGRpZmZlcmVuY2UgaXMgaGlnaGVyIHRoYW4g
b3VyIGVhcmx5IGV4aXQgdGhyZXNob2xkIHRoZW4KKy8vIGl0IG1lYW5zIHRoYXQgdGhlIHogZGlm
ZmVyZW5jZSBpcyBjb25jbHVzaXZlIGVub3VnaCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY2hlY2sK
Ky8vIG90aGVyIGludGVyc2VjdGlvbiBwb2ludHMuCitib29sIENDTGF5ZXJTb3J0ZXI6OkxheWVy
SW50ZXJzZWN0b3I6OmNoZWNrWkRpZmYoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBmbG9h
dCB6YSA9IGxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChub2RlQSwgcCk7CisgICAgZmxvYXQgemIg
PSBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQobm9kZUIsIHApOworCisgICAgZmxvYXQgZGlmZiA9
IHphIC0gemI7CisgICAgZmxvYXQgYWJzRGlmZiA9IGZhYnNmKGRpZmYpOworICAgIGlmICgoYWJz
RGlmZikgPiBmYWJzZih6RGlmZikpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uUG9pbnQgPSBwOwor
ICAgICAgICB6RGlmZiA9IGRpZmY7CisgICAgfQorCisgICAgaWYgKGFic0RpZmYgPiBlYXJseUV4
aXRUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKKy8vIFJldHVybnMgdGhlIFogY29vcmRpbmF0ZSBvZiBhIHBvaW50IG9uIHRoZSBnaXZl
biBsYXllciB0aGF0IHByb2plY3RzCisvLyB0byBwb2ludCBwIHdoaWNoIGxpZXMgb24gdGhlIHog
PSAwIHBsYW5lLiBJdCBkb2VzIGl0IGJ5IGNvbXB1dGluZyB0aGUKKy8vIGludGVyc2VjdGlvbiBv
ZiBhIGxpbmUgc3RhcnRpbmcgZnJvbSBwIGFsb25nIHRoZSBaIGF4aXMgYW5kIHRoZSBwbGFuZQor
Ly8gb2YgdGhlIGxheWVyLgorZmxvYXQgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6
bGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KEdyYXBoTm9kZSogbGF5ZXIsIGNvbnN0IEZsb2F0UG9p
bnQmIHApCit7CisgICAgY29uc3QgRmxvYXRQb2ludDNEIHpBeGlzKDAsIDAsIDEpOworICAgIEZs
b2F0UG9pbnQzRCB3ID0gRmxvYXRQb2ludDNEKHAueCgpLCBwLnkoKSwgMCkgLSBsYXllci0+b3Jp
Z2luOworCisgICAgZmxvYXQgZCA9IGxheWVyLT5ub3JtYWwuZG90KHpBeGlzKTsKKyAgICBmbG9h
dCBuID0gLWxheWVyLT5ub3JtYWwuZG90KHcpOworCisgICAgLy8gQ2hlY2sgaWYgbGF5ZXIgaXMg
cGFyYWxsZWwgdG8gdGhlIHogPSAwIGF4aXMKKyAgICBpZiAoIWQpCisgICAgICAgIHJldHVybiBs
YXllci0+b3JpZ2luLnooKTsKKworICAgIC8vIFRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgd291bGQg
YmUgZ2l2ZW4gYnk6CisgICAgLy8gcCArIChuIC8gZCkgKiB1ICBidXQgc2luY2Ugd2UgYXJlIG9u
bHkgaW50ZXJlc3RlZCBpbiB0aGUgCisgICAgLy8geiBjb29yZGluYXRlIGFuZCBwJ3MgeiBjb29y
ZCBpcyB6ZXJvLCBhbGwgd2UgbmVlZCBpcyB0aGUgdmFsdWUgb2Ygbi9kLgorICAgIHJldHVybiBu
IC8gZDsKK30KKworCitDQ0xheWVyU29ydGVyOjpDQ0xheWVyU29ydGVyKCkKKyAgICA6IG1felJh
bmdlKDApCit7Cit9CisKK0NDTGF5ZXJTb3J0ZXI6OkFCQ29tcGFyZVJlc3VsdCBDQ0xheWVyU29y
dGVyOjpjaGVja092ZXJsYXAoR3JhcGhOb2RlKiBhLCBHcmFwaE5vZGUqIGIpCit7CisgICAgaWYg
KCFhLT5ib3VuZGluZ0JveC5pbnRlcnNlY3RzKGItPmJvdW5kaW5nQm94KSkKKyAgICAgICAgcmV0
dXJuIE5vbmU7CisKKyAgICAvLyBNYWtlIHRoZSBlYXJseSBleGl0IHRocmVzaG9sZCBwcm9wb3J0
aW9uYWwgdG8gdGhlIHRvdGFsIFogcmFuZ2UuCisgICAgZmxvYXQgZXhpdFRocmVzaG9sZCA9IG1f
elJhbmdlICogMC4wMTsKKworICAgIExheWVySW50ZXJzZWN0b3IgaW50ZXJzZWN0b3IoYSwgYiwg
ZXhpdFRocmVzaG9sZCk7CisgICAgaW50ZXJzZWN0b3IuZ28oKTsKKworICAgIGlmIChpbnRlcnNl
Y3Rvci56RGlmZiA+IDApCisgICAgICAgIHJldHVybiBCQmVmb3JlQTsKKyAgICBpZiAoaW50ZXJz
ZWN0b3IuekRpZmYgPCAwKQorICAgICAgICByZXR1cm4gQUJlZm9yZUI7CisKKyAgICByZXR1cm4g
Tm9uZTsKK30KKwordm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlz
dDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCkKK3sKKyNpZiAhZGVm
aW5lZCggTkRFQlVHICkKKyAgICBMT0coQ0NMYXllclNvcnRlciwgIkNyZWF0aW5nIGdyYXBoIG5v
ZGVzOlxuIik7CisjZW5kaWYKKyAgICBmbG9hdCBtaW5aID0gRkxUX01BWDsKKyAgICBmbG9hdCBt
YXhaID0gLUZMVF9NQVg7CisgICAgZm9yIChMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Zmlyc3Q7IGl0IDwgbGFzdDsgaXQrKykgeworICAgICAgICBtX25vZGVzLmFwcGVuZChHcmFwaE5v
ZGUoaXQtPmdldCgpKSk7CisgICAgICAgIEdyYXBoTm9kZSYgbm9kZSA9IG1fbm9kZXMuYXQobV9u
b2Rlcy5zaXplKCkgLSAxKTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJT
dXJmYWNlID0gbm9kZS5sYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBpZiAoIW5vZGUu
bGF5ZXItPmRyYXdzQ29udGVudCgpICYmICFyZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyAgICAgICAgTE9HKENDTGF5ZXJTb3J0
ZXIsICJMYXllciAlZCAoJWQgeCAlZClcbiIsIG5vZGUubGF5ZXItPmRlYnVnSUQoKSwgbm9kZS5s
YXllci0+Ym91bmRzKCkud2lkdGgoKSwgbm9kZS5sYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwor
I2VuZGlmCisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKKyAg
ICAgICAgZmxvYXQgbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQ7CisgICAgICAgIGlmIChyZW5kZXJT
dXJmYWNlKSB7CisgICAgICAgICAgICBkcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+ZHJh
d1RyYW5zZm9ybSgpOworICAgICAgICAgICAgbGF5ZXJXaWR0aCA9IDAuNSAqIHJlbmRlclN1cmZh
Y2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKTsKKyAgICAgICAgICAgIGxheWVySGVpZ2h0ID0gMC41
ICogcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0gPSBub2RlLmxheWVyLT5kcmF3VHJhbnNmb3Jt
KCk7CisgICAgICAgICAgICBsYXllcldpZHRoID0gMC41ICogbm9kZS5sYXllci0+Ym91bmRzKCku
d2lkdGgoKTsKKyAgICAgICAgICAgIGxheWVySGVpZ2h0ID0gMC41ICogbm9kZS5sYXllci0+Ym91
bmRzKCkuaGVpZ2h0KCk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFBvaW50M0QgYzEgPSBk
cmF3VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQzRCgtbGF5ZXJXaWR0aCwgbGF5ZXJIZWln
aHQsIDApKTsKKyAgICAgICAgRmxvYXRQb2ludDNEIGMyID0gZHJhd1RyYW5zZm9ybS5tYXBQb2lu
dChGbG9hdFBvaW50M0QobGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQsIDApKTsKKyAgICAgICAgRmxv
YXRQb2ludDNEIGMzID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50M0QobGF5ZXJX
aWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEZsb2F0UG9pbnQzRCBjNCA9IGRyYXdU
cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKC1sYXllcldpZHRoLCAtbGF5ZXJIZWlnaHQs
IDApKTsKKyAgICAgICAgbm9kZS5ub3JtYWwgPSAoYzIgLSBjMSkuY3Jvc3MoYzMgLSBjMSk7Cisg
ICAgICAgIG5vZGUuYzEgPSBGbG9hdFBvaW50KGMxLngoKSwgYzEueSgpKTsKKyAgICAgICAgbm9k
ZS5jMiA9IEZsb2F0UG9pbnQoYzIueCgpLCBjMi55KCkpOworICAgICAgICBub2RlLmMzID0gRmxv
YXRQb2ludChjMy54KCksIGMzLnkoKSk7CisgICAgICAgIG5vZGUuYzQgPSBGbG9hdFBvaW50KGM0
LngoKSwgYzQueSgpKTsKKyAgICAgICAgbm9kZS5vcmlnaW4gPSBjMTsKKyAgICAgICAgbm9kZS5i
b3VuZGluZ0JveC5maXRUb1BvaW50cyhub2RlLmMxLCBub2RlLmMyLCBub2RlLmMzLCBub2RlLmM0
KTsKKyAgICAKKyAgICAgICAgbWF4WiA9IG1heChjNC56KCksIG1heChjMy56KCksIG1heChjMi56
KCksIG1heChtYXhaLCBjMS56KCkpKSkpOworICAgICAgICBtaW5aID0gbWluKGM0LnooKSwgbWlu
KGMzLnooKSwgbWluKGMyLnooKSwgbWluKG1pblosIGMxLnooKSkpKSk7CisgICAgfQorICAgIGlm
IChsYXN0IC0gZmlyc3QpCisgICAgICAgIG1felJhbmdlID0gZmFic2YobWF4WiAtIG1pblopOwor
fQorCit2b2lkIENDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoRWRnZXMoKQoreworI2lmICFkZWZp
bmVkKCBOREVCVUcgKQorICAgIExPRyhDQ0xheWVyU29ydGVyLCAiRWRnZXM6XG4iKTsKKyNlbmRp
ZgorICAgIGZvciAodW5zaWduZWQgbmEgPSAwOyBuYSA8IG1fbm9kZXMuc2l6ZSgpOyBuYSsrKSB7
CisgICAgICAgIEdyYXBoTm9kZSYgbm9kZUEgPSBtX25vZGVzW25hXTsKKyAgICAgICAgaWYgKCFu
b2RlQS5sYXllci0+ZHJhd3NDb250ZW50KCkgJiYgIW5vZGVBLmxheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuYiA9IG5h
ICsgMTsgbmIgPCBtX25vZGVzLnNpemUoKTsgbmIrKykgeworICAgICAgICAgICAgR3JhcGhOb2Rl
JiBub2RlQiA9IG1fbm9kZXNbbmJdOworICAgICAgICAgICAgaWYgKCFub2RlQi5sYXllci0+ZHJh
d3NDb250ZW50KCkgJiYgIW5vZGVCLmxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBBQkNvbXBhcmVSZXN1bHQgb3ZlcmxhcFJlc3Vs
dCA9IGNoZWNrT3ZlcmxhcCgmbm9kZUEsICZub2RlQik7CisgICAgICAgICAgICBHcmFwaE5vZGUq
IHN0YXJ0Tm9kZSA9IDA7CisgICAgICAgICAgICBHcmFwaE5vZGUqIGVuZE5vZGUgPSAwOworICAg
ICAgICAgICAgaWYgKG92ZXJsYXBSZXN1bHQgPT0gQUJlZm9yZUIpIHsKKyAgICAgICAgICAgICAg
ICBzdGFydE5vZGUgPSAmbm9kZUE7CisgICAgICAgICAgICAgICAgZW5kTm9kZSA9ICZub2RlQjsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcmxhcFJlc3VsdCA9PSBCQmVmb3JlQSkgeworICAg
ICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9ICZub2RlQjsKKyAgICAgICAgICAgICAgICBlbmROb2Rl
ID0gJm5vZGVBOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhcnROb2RlKSB7
CisjaWYgIWRlZmluZWQoIE5ERUJVRyApCisgICAgICAgICAgICAgICAgTE9HKENDTGF5ZXJTb3J0
ZXIsICIlZCAtPiAlZFxuIiwgc3RhcnROb2RlLT5sYXllci0+ZGVidWdJRCgpLCBlbmROb2RlLT5s
YXllci0+ZGVidWdJRCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIG1fZWRnZXMuYXBwZW5k
KEdyYXBoRWRnZShzdGFydE5vZGUsIGVuZE5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEdyYXBoRWRnZSYgZWRnZSA9IG1fZWRnZXNbaV07CisgICAgICAgIG1f
YWN0aXZlRWRnZXMuYWRkKCZlZGdlLCAmZWRnZSk7CisgICAgICAgIGVkZ2UuZnJvbS0+b3V0Z29p
bmcuYXBwZW5kKCZlZGdlKTsKKyAgICAgICAgZWRnZS50by0+aW5jb21pbmcuYXBwZW5kKCZlZGdl
KTsKKyAgICB9Cit9CisKKy8vIEZpbmRzIGFuZCByZW1vdmVzIGFuIGVkZ2UgZnJvbSB0aGUgbGlz
dCBieSBkb2luZyBhIHN3YXAgd2l0aCB0aGUKKy8vIGxhc3QgZWxlbWVudCBvZiB0aGUgbGlzdC4K
K3ZvaWQgQ0NMYXllclNvcnRlcjo6cmVtb3ZlRWRnZUZyb21MaXN0KEdyYXBoRWRnZSogZWRnZSwg
VmVjdG9yPEdyYXBoRWRnZSo+JiBsaXN0KQoreworICAgIHNpemVfdCBlZGdlSW5kZXggPSBsaXN0
LmZpbmQoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2VJbmRleCAhPSBub3RGb3VuZCk7CisgICAgaWYg
KGxpc3Quc2l6ZSgpID09IDEpIHsKKyAgICAgICAgQVNTRVJUKCFlZGdlSW5kZXgpOworICAgICAg
ICBsaXN0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGVkZ2VJbmRl
eCAhPSBsaXN0LnNpemUoKSAtIDEpCisgICAgICAgIGxpc3RbZWRnZUluZGV4XSA9IGxpc3RbbGlz
dC5zaXplKCkgLSAxXTsKKworICAgIGxpc3QucmVtb3ZlTGFzdCgpOworfQorCisvLyBTb3J0cyB0
aGUgZ2l2ZW4gbGlzdCBvZiBsYXllcnMgc3VjaCB0aGF0IHRoZXkgY2FuIGJlIHBhaW50ZWQgaW4g
YSBiYWNrLXRvLWZyb250CisvLyBvcmRlci4gU29ydGluZyBwcm9kdWNlcyBjb3JyZWN0IHJlc3Vs
dHMgZm9yIG5vbi1pbnRlcnNlY3RpbmcgbGF5ZXJzIHRoYXQgZG9uJ3QgaGF2ZQorLy8gY3ljbGlj
YWwgb3JkZXIgZGVwZW5kZW5jaWVzLiBDeWNsZXMgYW5kIGludGVyc2VjdGlvbnMgYXJlIGJyb2tl
biBhcmlidHJhcmlseS4KKy8vIFNvcnRpbmcgb2YgbGF5ZXJzIGlzIGRvbmUgdmlhIGEgdG9wb2xv
Z2ljYWwgc29ydCBvZiBhIGRpcmVjdGVkIGdyYXBoIHdob3NlIG5vZGVzIGFyZQorLy8gdGhlIGxh
eWVycyB0aGVtc2VsdmVzLiBBbiBlZGdlIGZyb20gbm9kZSBBIHRvIG5vZGUgQiBzaWduaWZpZXMg
dGhhdCBsYXllciBBIG5lZWRzIHRvCisvLyBiZSBkcmF3biBiZWZvcmUgbGF5ZXIgQi4KKy8vIFRo
ZSBkcmF3IG9yZGVyIGJldHdlZW4gdHdvIGxheWVycyBpcyBkZXRlcm1pbmVkIGJ5IHByb2plY3Rp
bmcgdGhlIHR3byB0cmlhbmdsZXMgbWFraW5nCisvLyB1cCBlYWNoIGxheWVyIHF1YWQgdG8gdGhl
IFogPSAwIHBsYW5lLCBmaW5kaW5nIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUg
dHJpYW5nbGVzCisvLyBhbmQgYmFja3Byb2plY3RpbmcgdGhvc2UgcG9pbnRzIHRvIHRoZSBwbGFu
ZSBvZiB0aGUgbGF5ZXIgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kaW5nIFoKKy8vIGNvb3Jk
aW5hdGUuIFRoZSBsYXllciB3aXRoIHRoZSBsb3dlciBaIGNvb3JkaW5hdGUgKGZhcnRoZXIgZnJv
bSB0aGUgZXllKSBuZWVkcyB0byBiZSByZW5kZXJlZAorLy8gZmlyc3QuIElmIHRoZSBsYXllciBw
cm9qZWN0aW9ucyBkb24ndCBpbnRlcnNlY3QgdGhlbiB0aGUgbGF5ZXJzIGNhbiBkcmF3biBpbiBh
bnkgb3JkZXIgYW5kIG5vCisvLyBlZGdlcyBhcmUgY3JlYXRlZCBiZXR3ZWVuIHRoZW0gaW4gdGhl
IGdyYXBoLgordm9pZCBDQ0xheWVyU29ydGVyOjpzb3J0KExheWVyTGlzdDo6aXRlcmF0b3IgZmly
c3QsIExheWVyTGlzdDo6aXRlcmF0b3IgbGFzdCkKK3sKKyNpZiAhZGVmaW5lZCggTkRFQlVHICkK
KyAgICBMT0coQ0NMYXllclNvcnRlciwgIlNvcnRpbmcgc3RhcnQgLS0tLVxuIik7CisjZW5kaWYK
KyAgICBjcmVhdGVHcmFwaE5vZGVzKGZpcnN0LCBsYXN0KTsKKworICAgIGNyZWF0ZUdyYXBoRWRn
ZXMoKTsKKworICAgIFZlY3RvcjxHcmFwaE5vZGUqPiBzb3J0ZWRMaXN0OworICAgIFZlY3RvcjxH
cmFwaE5vZGUqPiBub0luY29taW5nRWRnZU5vZGVMaXN0OworCisgICAgLy8gRmluZCBhbGwgdGhl
IG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4KKyAgICBmb3IgKE5vZGVMaXN0
OjppdGVyYXRvciBsYSA9IG1fbm9kZXMuYmVnaW4oKTsgbGEgPCBtX25vZGVzLmVuZCgpOyBsYSsr
KSB7CisgICAgICAgIGlmICghbGEtPmluY29taW5nLnNpemUoKSkKKyAgICAgICAgICAgIG5vSW5j
b21pbmdFZGdlTm9kZUxpc3QuYXBwZW5kKGxhKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZCggTkRF
QlVHICkKKyAgICBMT0coQ0NMYXllclNvcnRlciwgIlNvcnRlZCBsaXN0OiAiKTsKKyNlbmRpZgor
ICAgIHdoaWxlIChtX2FjdGl2ZUVkZ2VzLnNpemUoKSB8fCBub0luY29taW5nRWRnZU5vZGVMaXN0
LnNpemUoKSkgeworICAgICAgICB3aGlsZSAobm9JbmNvbWluZ0VkZ2VOb2RlTGlzdC5zaXplKCkp
IHsKKyAgICAgICAgICAgIC8vIFBvcCB0aGUgbGFzdCBlbnRyeSBmcm9tIHRoZSBsaXN0LgorICAg
ICAgICAgICAgR3JhcGhOb2RlKiBmcm9tTm9kZSA9IG5vSW5jb21pbmdFZGdlTm9kZUxpc3Rbbm9J
bmNvbWluZ0VkZ2VOb2RlTGlzdC5zaXplKCkgLSAxXTsKKyAgICAgICAgICAgIG5vSW5jb21pbmdF
ZGdlTm9kZUxpc3QucmVtb3ZlTGFzdCgpOworCisgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhl
IGZpbmFsIGxpc3QuCisgICAgICAgICAgICBzb3J0ZWRMaXN0LmFwcGVuZChmcm9tTm9kZSk7CisK
KyNpZiAhZGVmaW5lZCggTkRFQlVHICkKKyAgICAgICAgICAgIExPRyhDQ0xheWVyU29ydGVyLCAi
JWQsICIsIGZyb21Ob2RlLT5sYXllci0+ZGVidWdJRCgpKTsKKyNlbmRpZgorCisgICAgICAgICAg
ICAvLyBSZW1vdmUgYWxsIGl0cyBvdXRnb2luZyBlZGdlcyBmcm9tIHRoZSBncmFwaC4KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcm9tTm9kZS0+b3V0Z29pbmcuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBHcmFwaEVkZ2UqIG91dGdvaW5nRWRnZSA9IGZyb21O
b2RlLT5vdXRnb2luZ1tpXTsKKworICAgICAgICAgICAgICAgIG1fYWN0aXZlRWRnZXMucmVtb3Zl
KG91dGdvaW5nRWRnZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlRWRnZUZyb21MaXN0KG91dGdv
aW5nRWRnZSwgb3V0Z29pbmdFZGdlLT50by0+aW5jb21pbmcpOworCisgICAgICAgICAgICAgICAg
aWYgKCFvdXRnb2luZ0VkZ2UtPnRvLT5pbmNvbWluZy5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIG5vSW5jb21pbmdFZGdlTm9kZUxpc3QuYXBwZW5kKG91dGdvaW5nRWRnZS0+dG8pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZnJvbU5vZGUtPm91dGdvaW5nLmNsZWFyKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW1fYWN0aXZlRWRnZXMuc2l6ZSgpKQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHN0aWxsIGFjdGl2ZSBlZGdlcyBidXQg
dGhlIGxpc3Qgb2Ygbm9kZXMgd2l0aG91dCBpbmNvbWluZyBlZGdlcworICAgICAgICAvLyBpcyBl
bXB0eSB0aGVuIHdlIGhhdmUgcnVuIGludG8gYSBjeWNsZS4gQnJlYWsgdGhlIGN5Y2xlIGJ5IGZp
bmRpbmcgdGhlIG5vZGUKKyAgICAgICAgLy8gd2l0aCB0aGUgbGVhc3QgbnVtYmVyIGluY29taW5n
IGVkZ2VzIGFuZCByZW1vdmUgdGhlbSBhbGwuCisgICAgICAgIHVuc2lnbmVkIG1pbkluY29taW5n
RWRnZUNvdW50ID0gVUlOVF9NQVg7CisgICAgICAgIEdyYXBoTm9kZSogbmV4dE5vZGUgPSAwOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgaWYgKG1fbm9kZXNbaV0uaW5jb21pbmcuc2l6ZSgpICYmIChtX25vZGVzW2ld
LmluY29taW5nLnNpemUoKSA8IG1pbkluY29taW5nRWRnZUNvdW50KSkgeworICAgICAgICAgICAg
ICAgIG1pbkluY29taW5nRWRnZUNvdW50ID0gbV9ub2Rlc1tpXS5pbmNvbWluZy5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSAmbV9ub2Rlc1tpXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQobmV4dE5vZGUpOworICAgICAgICAvLyBSZW1vdmUgYWxs
IGl0cyBpbmNvbWluZyBlZGdlcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBlID0gMDsgZSA8IG5l
eHROb2RlLT5pbmNvbWluZy5zaXplKCk7IGUrKykgeworICAgICAgICAgICAgR3JhcGhFZGdlKiBp
bmNvbWluZ0VkZ2UgPSBuZXh0Tm9kZS0+aW5jb21pbmdbZV07CisKKyAgICAgICAgICAgIG1fYWN0
aXZlRWRnZXMucmVtb3ZlKGluY29taW5nRWRnZSk7CisgICAgICAgICAgICByZW1vdmVFZGdlRnJv
bUxpc3QoaW5jb21pbmdFZGdlLCBpbmNvbWluZ0VkZ2UtPmZyb20tPm91dGdvaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBuZXh0Tm9kZS0+aW5jb21pbmcuY2xlYXIoKTsKKyAgICAgICAgbm9JbmNv
bWluZ0VkZ2VOb2RlTGlzdC5hcHBlbmQobmV4dE5vZGUpOworI2lmICFkZWZpbmVkKCBOREVCVUcg
KQorICAgICAgICBMT0coQ0NMYXllclNvcnRlciwgIkJyZWFraW5nIGN5Y2xlIGJ5IGNsZWFuaW5n
IHVwICVkIGVkZ2VzIGZyb20gJWRcbiIsIG1pbkluY29taW5nRWRnZUNvdW50LCBuZXh0Tm9kZS0+
bGF5ZXItPmRlYnVnSUQoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBOb3RlOiBUaGUgb3Jp
Z2luYWwgZWxlbWVudHMgb2YgdGhlIGxpc3QgYXJlIGluIG5vIGRhbmdlciBvZiBoYXZpbmcgdGhl
aXIgcmVmIGNvdW50IGdvIHRvIHplcm8KKyAgICAvLyBoZXJlIGFzIHRoZXkgYXJlIGFsbCBub2Rl
cyBvZiB0aGUgbGF5ZXIgaGllcmFyY2h5IGFuZCBhcmUga2VwdCBhbGl2ZSBieSB0aGVpciBwYXJl
bnQgbm9kZXMuCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKExheWVyTGlzdDo6aXRlcmF0
b3IgaXQgPSBmaXJzdDsgaXQgPCBsYXN0OyBpdCsrKQorICAgICAgICAqaXQgPSBzb3J0ZWRMaXN0
W2NvdW50KytdLT5sYXllcjsKKworI2lmICFkZWZpbmVkKCBOREVCVUcgKQorICAgIExPRyhDQ0xh
eWVyU29ydGVyLCAiU29ydGluZyBlbmQgLS0tLVxuIik7CisjZW5kaWYKKworICAgIG1fbm9kZXMu
Y2xlYXIoKTsKKyAgICBtX2VkZ2VzLmNsZWFyKCk7CisgICAgbV9hY3RpdmVFZGdlcy5jbGVhcigp
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyU29ydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ0xheWVyU29ydGVyX2gKKyNkZWZpbmUgQ0NMYXllclNvcnRlcl9oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENDTGF5ZXJTb3J0ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5
ZXJTb3J0ZXIpOworcHVibGljOgorICAgIENDTGF5ZXJTb3J0ZXIoKTsKKworICAgIHR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CisKKyAgICB2b2lkIHNvcnQo
TGF5ZXJMaXN0OjppdGVyYXRvciBmaXJzdCwgTGF5ZXJMaXN0OjppdGVyYXRvciBsYXN0KTsKK3By
aXZhdGU6CisgICAgc3RydWN0IEdyYXBoRWRnZTsKKworICAgIHN0cnVjdCBHcmFwaE5vZGUgewor
ICAgICAgICBHcmFwaE5vZGUoQ0NMYXllckltcGwqIGNjbGF5ZXIpIDogbGF5ZXIoY2NsYXllcikg
eyB9OworICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXI7CisgICAgICAgIEZsb2F0UG9pbnQgYzEs
IGMyLCBjMywgYzQ7CisgICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWw7CisgICAgICAgIEZsb2F0
UG9pbnQzRCBvcmlnaW47CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICAgICAg
VmVjdG9yPEdyYXBoRWRnZSo+IGluY29taW5nOworICAgICAgICBWZWN0b3I8R3JhcGhFZGdlKj4g
b3V0Z29pbmc7CisgICAgfTsKKworICAgIHN0cnVjdCBHcmFwaEVkZ2UgeworICAgICAgICBHcmFw
aEVkZ2UoR3JhcGhOb2RlKiBmcm9tTm9kZSwgR3JhcGhOb2RlKiB0b05vZGUpIDogZnJvbShmcm9t
Tm9kZSksIHRvKHRvTm9kZSkgeyB9OworCisgICAgICAgIEdyYXBoTm9kZSogZnJvbTsKKyAgICAg
ICAgR3JhcGhOb2RlKiB0bzsKKyAgICB9OworCisgICAgc3RydWN0IExheWVySW50ZXJzZWN0b3Ig
eworICAgICAgICBMYXllckludGVyc2VjdG9yKEdyYXBoTm9kZSosIEdyYXBoTm9kZSosIGZsb2F0
KTsKKworICAgICAgICB2b2lkIGdvKCk7CisKKyAgICAgICAgZmxvYXQgbGF5ZXJaRnJvbVByb2pl
Y3RlZFBvaW50KEdyYXBoTm9kZSosIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgYm9vbCB0
cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgYm9vbCBlZGdlVHJpYW5nbGVUZXN0KGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIGJvb2wgY2hlY2taRGlm
Zihjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICAgICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb25Q
b2ludDsKKyAgICAgICAgR3JhcGhOb2RlKiBub2RlQTsKKyAgICAgICAgR3JhcGhOb2RlKiBub2Rl
QjsKKyAgICAgICAgZmxvYXQgekRpZmY7CisgICAgICAgIGZsb2F0IGVhcmx5RXhpdFRocmVzaG9s
ZDsKKyAgICB9OworCisgICAgdHlwZWRlZiBWZWN0b3I8R3JhcGhOb2RlPiBOb2RlTGlzdDsKKyAg
ICB0eXBlZGVmIFZlY3RvcjxHcmFwaEVkZ2U+IEVkZ2VMaXN0OworICAgIE5vZGVMaXN0IG1fbm9k
ZXM7CisgICAgRWRnZUxpc3QgbV9lZGdlczsKKyAgICBmbG9hdCBtX3pSYW5nZTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxHcmFwaEVkZ2UqLCBHcmFwaEVkZ2UqPiBFZGdlTWFwOworICAgIEVkZ2VN
YXAgbV9hY3RpdmVFZGdlczsKKworICAgIGZsb2F0IG1fekRpZmZFcHNpbG9uOworCisgICAgdm9p
ZCBjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlzdDo6aXRlcmF0b3IgZmlyc3QsIExheWVyTGlzdDo6
aXRlcmF0b3IgbGFzdCk7CisgICAgdm9pZCBjcmVhdGVHcmFwaEVkZ2VzKCk7CisgICAgdm9pZCBy
ZW1vdmVFZGdlRnJvbUxpc3QoR3JhcGhFZGdlKiwgVmVjdG9yPEdyYXBoRWRnZSo+Jik7CisKKyAg
ICBlbnVtIEFCQ29tcGFyZVJlc3VsdCB7CisgICAgICAgIEFCZWZvcmVCLAorICAgICAgICBCQmVm
b3JlQSwKKyAgICAgICAgTm9uZQorICAgIH07CisgICAgQUJDb21wYXJlUmVzdWx0IGNoZWNrT3Zl
cmxhcChHcmFwaE5vZGUqLCBHcmFwaE5vZGUqKTsKK307CisKK30KKyNlbmRpZgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gODUzMzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNC0yOSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxp
c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBBZGRpbmcgYSBuZXcgbGF5b3V0IHRlc3QgZm9yIHBlcnBlbmRp
Y3VsYXIgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTkyNTUKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZv
cm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVj
dGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tZ3B1LW1hYy9wbGF0
Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmctZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGlu
Zy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTA0LTI4ICBBYmhp
c2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0t
Z3B1LW1hYy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVy
LXNvcnRpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGlj
dWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRp
bmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA4NDU4MSkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMjgzNiw2ICsyODM2LDcgQEAgQlVHSkFNRVNSIEdQVSBNQUMgTEVPUEFSRCA6IGNvbXBv
c2l0aW5nLwogLy8gV2lsbCBuZWVkIHdpbmRvd3MgYW5kIGxpbnV4IGJhc2VsaW5lcwogQlVHV0s1
ODE4MiBHUFUgOiBjb21wb3NpdGluZy9pbWFnZXMvY29udGVudC1pbWFnZS1jaGFuZ2UuaHRtbCA9
IFBBU1MgRkFJTAogQlVHV0s1ODM5OCBHUFUgOiBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGlu
Zy9jaGlsZC1sYXllci0zZC1zb3J0aW5nLmh0bWwgPSBQQVNTIEZBSUwgTUlTU0lORworQlVHVkFO
R0VMSVMgR1BVIFdJTiBMSU5VWCA6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBl
bmRpY3VsYXItbGF5ZXItc29ydGluZy5odG1sID0gUEFTUyBGQUlMIE1JU1NJTkcKIAogLy8gVGhl
IHBpY3R1cmUgZG9lcyBub3QgbWF0Y2ggdGhlIHZpZGVvIGluIHRoZSB0ZXN0LgogQlVHV0s1NTUx
OSBHUFUgV0lOIExJTlVYIDogY29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tYmFja2dyb3VuZC1jb2xv
ci5odG1sID0gSU1BR0UrVEVYVApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
Y29tcG9zaXRpbmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcGVycGVuZGljdWxh
ci1sYXllci1zb3J0aW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9jb21wb3NpdGluZy9wZXJwZW5kaWN1bGFyLWxheWVyLXNvcnRpbmcuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVhZD4K
Kzx0aXRsZT5QZXJwZW5kaWN1bGFyIGxheWVyIHNvcnRpbmc8L3RpdGxlPgorCis8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICNjb250YWluZXIgeworICAgICAgICBw
b3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICAgIHdpZHRo
OiAzMDBweDsKKyAgICAgICAgbWFyZ2luOiA1MHB4IDEwMHB4OworICAgICAgICAtd2Via2l0LXBl
cnNwZWN0aXZlOiA1MDA7CisgICAgfQorIAorICAgICNwYXJlbnQgeworICAgICAgICBtYXJnaW46
IDEwcHg7CisgICAgICAgIHdpZHRoOiAyODBweDsKKyAgICAgICAgaGVpZ2h0OiAyODBweDsKKyAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlOworICAgICAgICAtd2Via2l0LXRyYW5zZm9y
bS1zdHlsZTogcHJlc2VydmUtM2Q7CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZ
KDIwZGVnKTsKKyAgICB9CisKKyAgICAjcGFyZW50ID4gZGl2IHsKKyAgICAgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgICAgICB0b3A6IDQwcHg7CisgICAgICAgIGxlZnQ6IDQwcHg7CisgICAg
ICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiA0MDBweDsKKyAgICAgICAgcGFkZGlu
ZzogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgICAgIC13ZWJr
aXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwcHgpIHRyYW5zbGF0ZVooMTBweCkgcm90YXRlWCg5
MGRlZyk7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBj
aGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCh0cnVlKTsKKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8IS0tIFRoZSBncmVlbiBsYXllciBzaG91bGQgbm90IG92ZXJsYXAg
dGhlIHB1cnBsZSBsYXllciAtLT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+IAorICAgIDxkaXYgaWQ9
InBhcmVudCI+IAorICAgICAgICA8ZGl2PjwvZGl2PiAKKyAgICA8L2Rpdj4gCis8L2Rpdj4gCisK
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS1tYWMvcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRp
bmcvcGVycGVuZGljdWxhci1sYXllci1zb3J0aW5nLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNh
bm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBl
ID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUtbWFjL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
aW5nL3BlcnBlbmRpY3VsYXItbGF5ZXItc29ydGluZy1leHBlY3RlZC5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBQUtYUkZXSFJqYUdWamEz
TjFiUUEwWVRBM056STIKTnpCaE9XWXlZVGd6TnpCbFlXSmxPR00yT0dKbE5tTmpOT2k2d1dJQUFC
Q05TVVJCVkhpYzdkekxjbFBKQWtWQm0rQy8zWHk1N3VBMgpBVzVzck5kWnB4NlpNeUlZMUt4cWFW
dDZ2Vnd1bHhjQUFJREF0N01QQUFBQTdFT0FBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBCkFB
QUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFB
QUdRRUNBQUJrQkFnQUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFB
QUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCawpCQWdBQUpBUklBQUFRRWFBQUFB
QUdRRUNBQUJrQkFnQUFKQVJJQUFBUU9iNzJRZmdNVDllZjd6Nzk5dmw3YVNUQUFEQTF3VElZdjRi
CkpCOFJLUUFBbkVXQWJFaWtBQUJ3RmdIQ2gwUUtBQUJIRUNEYzdacEllWGtSS2dBQS9DSkFPSncx
QlFDQW53UUlReEFwQUFCN0VDQk0KUTZRQUFNeFBnTEFVa1FJQU1EWUJ3blpFQ2dEQWVRUUlmRUNr
QUFBY1E0REFuZndNTVFEQTdRUUlITXlhQWdEd2l3Q0JBWWdVQUdBWApBZ1FtSVZJQWdCVUlFRmlJ
U0FFQVJpZEFZRE1pQlFBNGt3QUIvdUFYdmdDQW93Z1E0RzdXRkFEZ1ZnSUVPSlJJQVFCK0owQ0Ew
NGtVCkFOaUhBQUdtSUZJQVlBMENCRmlHU0FHQThRa1FZQ3QrNFFzQXppVkFBRDVnVFFHQVl3Z1Fn
RHVKRkFDNG5RQUJPSkJJQVlEM0JBakEKeVVRS0FEc1JJQUFURUNrQXJFS0FBQ3ppczBnUkpnQ001
TnZaQndBQUFQWWhRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQQpnSXdBQVFBQU1nSUVB
QURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBCkFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUUKQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QQpBUUFBTWdJRUFB
RElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqClFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBREkKQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQQpNZ0lFQUFE
SUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBCmdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUEKQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJ
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRQpBQURJ
Q0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBCkFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWoKUUFBQWdJd0FBUUFBTWdJRUFBRElD
QkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESQpD
QkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNC
QUFBQ0FqUUFBQWdJd0FBUUFBCk1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNC
QUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUEKZ0l3QUFRQUFNZ0lFQUFESUNC
QUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JB
QQpBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JB
QUFDQWpRQUFBZ0l3QUFRQUFNZ0lFCkFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JB
QUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0EKQVFBQU1nSUVBQURJQ0JB
QUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFB
QUNBagpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFB
QUNBalFBQUFnSXdBQVFBQU1nSUVBQURJCkNCQUFBQ0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFB
QUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUEKTWdJRUFBRElDQkFB
QUNBalFBQUFnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQQpnSXdBQVFBQU1nSUVBQURJQ0JBQUFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBCkFDQWpRQUFBZ0l3QUFRQUFNZ0lFQUFESUNCQUFB
Q0FqUUFBQWdJd0FBUUFBTWdJRUFBRElDQkFBQUNBalFBQUFnSXdBQVFBQU10L1AKUGdBQTkzdTd2
SjE5QkFDNGlRQUJHSkN3QUdCVkFnUWdJaW9BUUlBQVBFeFlBTUQxQkFqQUIvNzU1NTkzLzc2OFhj
NDVDQUFzUm9BQQpXL2x2V0Z6cjljZnJ5OHVMRUFHQVJ3a1FZSHIzUnNVOWhBZ0FQRWFBQUVNcW8r
SWVRZ1FBN2lOQWdOVG9ZWEVySVFJQXR4RWd3TU5XCmk0cDdDQkVBdUk0QUFUNGxMRzRuUkFEZzd3
UUliRVpVTklRSUFIeE1nTUFpaE1XWWhBZ0F2Q2RBWUdDaVloMUNCQUQrVDRCQVRGVHMKVFlnQXNE
c0JBazhpTExqRnp4QjVlUkVqQU94RmdNQmZpQW9LVmhFQWRpSkEySkt3WUVSQ0JJQWRDQkNXSVNw
WWhSQUJZR1VDaE9FSgpDM1lsUkFCWWtRRGhGS0lDcmlkRUFGaUpBT0dwaEFVY1I0Z0FzQUlCd3Bm
ZUxtOVgvYi9mZjFZVU9JNFFBV0JtQW1SVDEwYkZMUzV2CkZ4RUNJU0VDd0l3RXlHS09DQXRnYkVJ
RWdKbThYaTRYTnhaUFpRV0Jjd2tSQUViMjdld0RBUEJjcno5ZWZSQUF3TEFzSUJ6QzR3ZkcKWVJF
QllDUVdFSURGV1VRQUdJa0ZoTU40OE1DWUxDSUFuTW12WUFGczV2Y1BCOFFJQURVTENJZXlnc0Fj
aEFnQUZkOEJBY0QzUkFESQpXRUE0bkVjTnpNY2lBc0JSTENBQS9NRWlBc0JSTENBa1BHUmdiaFlS
QUo3RkFnTEFseXdpQUR5TEJZU014d3Vzd3lJQ3dMMHNJQURjCnpDSUN3TDBzSUtROFdHQk5GaEVB
cm1VQkFlQmhGaEVBcm1VQkllZVJBdXV6aUFEd0dRc0lBRTluRVFIZ014WVFUdUZoQW51eGlBRHcK
a3dVRWdNTlpSQUQ0eVFMQ2FUeEdZRzlXRVlBOVdVQUFPSVZWQkdCUEZoQk81ZkVCL0dRUkFkaURC
UVNBSVZoRUFQWmdBZUYwSGh6QQpSeXdpQUd1eWdBQXdKSXNJd0pvc0lBekJJd1A0aWtVRVlBMFdF
QUNtWUJFQldJTUZoR0Y0V0FDM3NJZ0F6TWtDQXNDVUxDSUFjN0tBCk1CU1BDZUJlRmhHQU9WaEFB
RmlDUlFSZ0RoWVFodU1CQVR5RFJRUmdUQllRQUpaa0VRRVlrd1dFSVhrMEFNOW1FUUVZdy9lekR3
QUEKaGQ4LzJCQWpBT2V4Z0RBc0t3aHdOQ0VDMFBNZEVBQzI1WHNpQUQwTENFUHpNQUJLRmhHQTQx
bEFBT0JmRmhHQTQxbEFHSjdIQUhBVwppd2pBODFsQUFPQVRGaEdBNTdPQU1BVVBBR0FFRmhHQXgx
bEFBT0JLRmhHQXgxbEFtSVpMSHhpTlJRVGdkaFlRQUxpVFJRVGdkaFlRCnB1S2lCMFptRVFING1n
VUVBSjdFSWdMd05Rc0kwM0c1QTdPd2lBRDh5UUlDQUFleGlBRDh5UUxDbEZ6b3dJd3NJZ0F2TDkv
UFBnQUEKN09MM0QwL0VDTEFyQ3dqVHNvSUFLeEFpd0c1OEJ3UUFUdVI3SXNCdUxDQk16YVVOck1Z
aUFxek9BZ0lBQTdHSUFLdXpnREE5RnpXdwpNb3NJc0JvTENBQU16Q0lDck1ZQ3doSmN6c0F1TENM
QTdDd2dBREFSaXdnd093c0l5M0FoQXp1eWlBQ3pzWUFBd01Rc0lzQnNMQ0FzCnhTVU03TTRpQW96
T0FnSUFDN0dJQUtPemdMQWNGeS9BTHhZUllEUVdFQUJZbUVVRUdJMEZoQ1c1YkFFK1p4VUJ6bVFC
QVlETldFV0EKTTFsQVdKYkxGZUE2RmhHZ1pBRUJnTTFaUklDU0JZU2x1VkFCYm1jUkFZNWtBUUVB
M3JHSUFFZXlnTEE4bHlqQVl5d2l3RE5aUUFDQQp2N0tJQU05a0FXRUxMazZBNTdHSUFJOFFJR3hE
aEFBOGx4QUI3dUZQc0FDQXUvalRMT0FlRmhDMjRxSUVPSTVGQkxpR0JRUUFlQXFMCkNIQU5Dd2pi
Y1RrQ05Dd2l3RWNzSUFEQUlTd2l3RWNzSUd6SmhRaHdES3NIOEpYdlp4OEFBSmlUMkFEdVlRRmhX
MVlRZ091SkRlQloKTENBQXdEdGlBemlTQllTdFdVR0EzWWtOb0dZQkFZQk5pQTFnQkJZUXRtY0ZB
VllrTm9CUldVQUFZQUdDQTVpRkJRUmVyQ0RBWE1RRwpNRE1MQ0FBTVRHd0FxN0dBd0wrc0lNRFp4
QWF3QXdzSUFKeEFiQUM3c29EQWI2d2d3QkhFQnNBdkZoQUFlQ0t4QWZCM0ZoRDREeXNJCmNBdkJB
WEFiQ3dnQVhFbHNBRHpPQWdJZnNJSUFZZ1BnR0JZUUFMWW5OZ0E2RmhENGhCVUUxaVEyQU01bEFR
RmdXV0lEWUR3V0VQZ0wKS3dqTVEyd0F6TUVDQXNCMHhBYkF2Q3dnOEFVckNKeFBjQUNzd3dJQ3dG
REVCc0RhTENCd0JTc0lIRU5zQU96SEFnSkFRbXdBOFBKaQpBWUdyV1VIZ2VtSURnTTlZUUFCNGlO
Z0E0QllXRUxpQkZZVGRpUTBBSG1VQkFlQlRnZ09BWjdPQXdJMnNJS3hLYkFCUXNJQUFiRWhzCkFI
QVdDd2pjd1FyQ1RNUUdBQ094Z0FBc1JHd0FNRG9MQ056SkNzTFp4QVlBTTdLQUFFeEFiQUN3Q2dz
SVBNQUt3aEhFQmdBcnM0QUEKbkV4d0FMQVRDd2c4eUFyQ0xjUUdBTHV6Z0FBY1JHd0F3SjhzSVBB
RVZoREVCZ0JjeHdJQ2NDT3hBUUQzczREQWsxaEIxaVEyQU9DNQpMQ0FBL3hJYkFIQThDd2c4a1JW
a0htSURBTTVoQVFHMklEZ0FZQXdXRUhneUs4ajV4QVlBak1zQ0FreE5iQURBWEN3Z2NBQXJ5REhF
CkJnRE16d0lDREVsc0FNQ2FMQ0J3RUN2STljUUdBT3pEQWdLa3hBWUE3TTBDQWdleWdnZ09BT0E5
Q3dqd05HSURBUGlLQlFRT3R1b0sKSWpZQWdIdFlRSUF2aVEwQTRGa3NJQkNZYVFVUkd3REFrU3dn
c0RHeEFRRFVMQ0FRT1hzRkVSc0F3QWdzSUxBZ3NRRUFqTW9DQXFHagpWaERCQVFETXdnSUNreEVi
QU1ETUxDQVF1MlVGRVJzQXdHb3NJREFJc1FFQTdNQUNBZ0FBWkw2ZGZRQUFBR0FmQWdRQUFNZ0lF
QUFBCklDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lF
QUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUEKQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lF
QUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQgpBQUF5QWdRQUFNZ0lF
QUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVB
QUFJQ05BCkFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVB
QUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0kKRUFBQUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVB
QUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeQpBZ1FBQU1nSUVB
QUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFB
QUlDTkFBQUNBCmpBQUJBQUF5QWdRQUFNZ0lFQUFBSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFB
QUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUEKSUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWdJRUFB
QUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQQpBTWdJRUFB
QUlDTkFBQUNBakFBQkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFB
SUNOQUFBQ0FqQUFCCkFBQXlBZ1FBQU1nSUVBQUFJQ05BQUFDQWpBQUJBQUF5QWdRQUFNZ0lFQUFB
SUNOQUFBQ0FqQUFCQUFBeUFnUUFBTWo4RDYwL1RvUWsKbCs3K0FBQUFBRWxGVGtTdVFtQ0MKCg==
</data>
<flag name="review"
          id="84637"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>