<?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>80415</bug_id>
          
          <creation_ts>2012-03-06 06:17:20 -0800</creation_ts>
          <short_desc>Eliminate redundant Phis in DFG</short_desc>
          <delta_ts>2012-03-07 19:10:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80361</dependson>
          <blocked>76770</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571796</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 06:17:20 -0800</bug_when>
    <thetext>Although this may not have any advantage at current stage, this is towards minimal SSA to make more high level optimizations (like bug 76770) easier.
We have the choices either to build minimal SSA from scratch or to keep current simple Phi insertion mechanism and remove the redundancy in another phase. Currently we choose the latter because the change could be smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571824</commentid>
    <comment_count>1</comment_count>
      <attachid>130375</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 07:13:42 -0800</bug_when>
    <thetext>Created attachment 130375
WIP patch

WIP - Please let me know if this is the right approach or not. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571827</commentid>
    <comment_count>2</comment_count>
      <attachid>130377</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 07:16:56 -0800</bug_when>
    <thetext>Created attachment 130377
Initial performance result

There seems to be a 9% regression on SunSpider-crypto-sha1, which should be caused by the additional compilation overhead. Will try to investigate it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571860</commentid>
    <comment_count>3</comment_count>
      <attachid>130384</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 07:53:29 -0800</bug_when>
    <thetext>Created attachment 130384
WIP patch

This partially reduces the 9% regression on sunspider-crypto-sha1 to 6-7%. The remaining overhead mainly comes from recording Phi uses when building the graph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572127</commentid>
    <comment_count>4</comment_count>
      <attachid>130384</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 13:55:51 -0800</bug_when>
    <thetext>Comment on attachment 130384
WIP patch

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

I think this is great.  My intuition is that we could simplify this further by doing away with the phi use map.  But maybe I&apos;m wrong?  Have you tried it without the use map?

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:1006
&gt; -    if (!node.refCount())
&gt; +    // We don&apos;t want to ignore the skipped Phi nodes, otherwise we may fail to
&gt; +    // propagate the type predictions to other blocks.
&gt; +    if (!node.refCount() &amp;&amp; node.op != Phi)

Why?  The idea here is that if we have a node that claims that it is using a variable from another block, and its uses of that variable are dead, then we have no work to do.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:594
&gt; +    void addPhiUse(NodeIndex phi, NodeIndex node, unsigned childIndex, NodeIndex replace = NoNode)
&gt; +    {
&gt; +        ASSERT(phi != NoNode &amp;&amp; m_graph[phi].op == Phi);
&gt; +
&gt; +        Vector&lt;PhiUse&gt;* phiUse;
&gt; +        PhiUseMap::iterator iter = m_graph.m_phiUses.find(phi);
&gt; +        if (iter != m_graph.m_phiUses.end())
&gt; +            phiUse = &amp;iter-&gt;second;
&gt; +        else {
&gt; +            Vector&lt;PhiUse&gt; emptyUse;
&gt; +            pair&lt;PhiUseMap::iterator, bool&gt; result = m_graph.m_phiUses.add(phi, emptyUse);
&gt; +            phiUse = &amp;result.first-&gt;second;
&gt; +        }
&gt; +
&gt; +        // If a replacement is needed, we want to remove the old use entry.
&gt; +        // This would find and delete an entry in the middle of a vector,
&gt; +        // but we expect this would be rarely happened in practice - only when
&gt; +        // a Phi node in a joint block needs to handle more than 3 incoming edges.
&gt; +        if (replace != NoNode) {
&gt; +            size_t i = phiUse-&gt;find(PhiUse(replace, childIndex));
&gt; +            ASSERT(i != notFound);
&gt; +            phiUse-&gt;remove(i);
&gt; +        }
&gt; +
&gt; +        phiUse-&gt;append(PhiUse(node, childIndex));
&gt; +    }

Not sure I buy that the phi use map is necessary.  I kind of don&apos;t like it because it means we cannot rerun the redundant phi replacement algorithm a second time unless we also maintain the consistency of this map.  In general, in the future I want to be able to have a phase that introduces new nodes or switches the children of nodes, and then rerun the phi simplification if I had also done some control flow simplification.  But playing with the children of nodes seems hard if I have to maintain the phi use map as I do it.

&gt; Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:87
&gt; +                    switch (use.childIndex()) {
&gt; +                    case 1:
&gt; +                        ASSERT(useNode.child1().indexUnchecked() == phi);
&gt; +                        useNode.children.child1().setIndex(replacement);
&gt; +                        m_graph[replacement].ref();
&gt; +                        break;
&gt; +                    case 2:
&gt; +                        ASSERT(useNode.child2().indexUnchecked() == phi);
&gt; +                        useNode.children.child2().setIndex(replacement);
&gt; +                        m_graph[replacement].ref();
&gt; +                        break;
&gt; +                    case 3:
&gt; +                        ASSERT(useNode.child3().indexUnchecked() == phi);
&gt; +                        useNode.children.child3().setIndex(replacement);
&gt; +                        m_graph[replacement].ref();
&gt; +                        break;
&gt; +                    default:
&gt; +                        break;
&gt; +                    }

Why not kill the switch statement and say useNode.children.child(use.childIndex() - 1)?

&gt; Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:126
&gt; +    NodeIndex getRedundantReplacement(NodeIndex phi)
&gt; +    {
&gt; +        NodeIndex child1 = m_graph[phi].child1().indexUnchecked();
&gt; +        NodeIndex candidate = child1 == phi ? NoNode : child1;
&gt; +
&gt; +        NodeIndex child2 = m_graph[phi].child2().indexUnchecked();
&gt; +        if (candidate != NoNode) {
&gt; +            if (child2 != NoNode &amp;&amp; child2 != candidate &amp;&amp; child2 != phi)
&gt; +                return NoNode;
&gt; +        } else if (child2 != phi)
&gt; +            candidate = child2;
&gt; +
&gt; +        NodeIndex child3 = m_graph[phi].child3().indexUnchecked();
&gt; +        if (candidate != NoNode) {
&gt; +            if (child3 != NoNode &amp;&amp; child3 != candidate &amp;&amp; child3 != phi)
&gt; +                return NoNode;
&gt; +        } else if (child3 != phi)
&gt; +            candidate = child3;
&gt; +        
&gt; +        return candidate;
&gt; +    }

Can&apos;t we run this algorithm without having a phi use map?  Seems to me that we could:

1) Wrap the algorithm in a fixpoint.  You&apos;re using a worklist; maybe we could do that too.

2) Walk over the graph inside the fixpoint.

3) For every child that is a phi and fits the simplification criteria, attempt to simplify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572131</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 13:58:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=130377) [details]
&gt; Initial performance result
&gt; 
&gt; There seems to be a 9% regression on SunSpider-crypto-sha1, which should be caused by the additional compilation overhead. Will try to investigate it later.

I would not worry about this too much, since it hardly affects the overall average.  Looking at the perf results, it does not feel like a blocker for landing this patch.

Plus, maybe it&apos;s just because the DFG is recompiling like crazy on that benchmark because it is doing something that our speculations don&apos;t support?  If that were the case then that would further imply to me that we should ignore that result, and file a separate bug to reduce compile times on that program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572330</commentid>
    <comment_count>6</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 17:30:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think this is great.  My intuition is that we could simplify this further by doing away with the phi use map.  But maybe I&apos;m wrong?  Have you tried it without the use map?

No, I haven&apos;t tried it - I was just worried that traversing the whole graph for Phi replacement may be time consuming especially when the traversal can be iterative. We can try it and I think we should only need the iterative traversal on the Phi nodes (if we have the fix of bug 80361 it would be easier) and a one-time traversal on other nodes in the graph (actually, at current stage, the GetLocals) after all of the Phi replacements are identified.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:1006
&gt; &gt; -    if (!node.refCount())
&gt; &gt; +    // We don&apos;t want to ignore the skipped Phi nodes, otherwise we may fail to
&gt; &gt; +    // propagate the type predictions to other blocks.
&gt; &gt; +    if (!node.refCount() &amp;&amp; node.op != Phi)
&gt; 
&gt; Why?  The idea here is that if we have a node that claims that it is using a variable from another block, and its uses of that variable are dead, then we have no work to do.
&gt; 

I will attach a case to explain this problem soon.

&gt; 
&gt; Not sure I buy that the phi use map is necessary.  I kind of don&apos;t like it because it means we cannot rerun the redundant phi replacement algorithm a second time unless we also maintain the consistency of this map.  In general, in the future I want to be able to have a phase that introduces new nodes or switches the children of nodes, and then rerun the phi simplification if I had also done some control flow simplification.  But playing with the children of nodes seems hard if I have to maintain the phi use map as I do it.
&gt; 

Yes. In the redundant phi elimination, we maintain the consistency of this map. But on the other hand, it really brought troubles when we play with the children, though currently only GetLocals have Phi children (except for Phis), but in the future if we get rid of GetLocal/SetLocals (will?) that may be a problem.

&gt; &gt; Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:87
&gt; 
&gt; Why not kill the switch statement and say useNode.children.child(use.childIndex() - 1)?
&gt; 

Agree.

&gt; &gt; Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:126
&gt; 
&gt; Can&apos;t we run this algorithm without having a phi use map?  Seems to me that we could:
&gt; 
&gt; 1) Wrap the algorithm in a fixpoint.  You&apos;re using a worklist; maybe we could do that too.
&gt; 
&gt; 2) Walk over the graph inside the fixpoint.
&gt; 
&gt; 3) For every child that is a phi and fits the simplification criteria, attempt to simplify.

It&apos;s possible to go without phi use map. I will try and see if it can be more efficient and simpler.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572335</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 17:34:41 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; I think this is great.  My intuition is that we could simplify this further by doing away with the phi use map.  But maybe I&apos;m wrong?  Have you tried it without the use map?
&gt; 
&gt; No, I haven&apos;t tried it - I was just worried that traversing the whole graph for Phi replacement may be time consuming especially when the traversal can be iterative. We can try it and I think we should only need the iterative traversal on the Phi nodes (if we have the fix of bug 80361 it would be easier) and a one-time traversal on other nodes in the graph (actually, at current stage, the GetLocals) after all of the Phi replacements are identified.

It seems like one way around this is to just track the Phis, and not the Phi uses.

We can first do a fixpoint where we simplify Phis only - which may leave dummy Phis like:

somePhi: Phi(@something)

where @something is either another Phi or something real (like a SetLocal), and somePhi is still referenced from various other places (GetLocal, etc).

Then we can do a second pass that considers all nodes (not just Phis) and checks if those nodes reference trivial Phis.  If they do, then replace.

I think that this should be sufficient, since the fixpoint (as I understand it) only depends on the shape of Phis and not the shapes of users of Phis.  So you only need to visit Phis repeatedly - and after that you can visit all non-Phi uses of Phis in one go.

Would that work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572344</commentid>
    <comment_count>8</comment_count>
      <attachid>130493</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 17:39:24 -0800</bug_when>
    <thetext>Created attachment 130493
Case showing the problem of type predications propagation after Phi elimination

This is the case showing the problem of type predications propagation after Phi elimination. Please pay attention to block 3, where node 51 and node 49 are eliminated since those two variables each have only one definition (in block 0). They&apos;re not used in block 3 but they should still be alive because they will be used in block 1 (block 3&apos;s successor). But after we eliminate 51 and 49 in block 3, the CFA ignores them and the type predictions of the two variables are not propagated to the end of the block, and hence not to the successors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572351</commentid>
    <comment_count>9</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 17:42:28 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; 
&gt; &gt; No, I haven&apos;t tried it - I was just worried that traversing the whole graph for Phi replacement may be time consuming especially when the traversal can be iterative. We can try it and I think we should only need the iterative traversal on the Phi nodes (if we have the fix of bug 80361 it would be easier) and a one-time traversal on other nodes in the graph (actually, at current stage, the GetLocals) after all of the Phi replacements are identified.
&gt; 
&gt; It seems like one way around this is to just track the Phis, and not the Phi uses.
&gt; 
&gt; We can first do a fixpoint where we simplify Phis only - which may leave dummy Phis like:
&gt; 
&gt; somePhi: Phi(@something)
&gt; 
&gt; where @something is either another Phi or something real (like a SetLocal), and somePhi is still referenced from various other places (GetLocal, etc).
&gt; 
&gt; Then we can do a second pass that considers all nodes (not just Phis) and checks if those nodes reference trivial Phis.  If they do, then replace.
&gt; 
&gt; I think that this should be sufficient, since the fixpoint (as I understand it) only depends on the shape of Phis and not the shapes of users of Phis.  So you only need to visit Phis repeatedly - and after that you can visit all non-Phi uses of Phis in one go.
&gt; 
&gt; Would that work?

Yes. I think that&apos;s exactly what I mean for &quot;iterative traversal on the Phi nodes only&quot; at first and then &quot;one-time traversal on other nodes in the graph&quot;. - if I understand you correctly. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572353</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 17:43:22 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; &gt; 
&gt; &gt; &gt; No, I haven&apos;t tried it - I was just worried that traversing the whole graph for Phi replacement may be time consuming especially when the traversal can be iterative. We can try it and I think we should only need the iterative traversal on the Phi nodes (if we have the fix of bug 80361 it would be easier) and a one-time traversal on other nodes in the graph (actually, at current stage, the GetLocals) after all of the Phi replacements are identified.
&gt; &gt; 
&gt; &gt; It seems like one way around this is to just track the Phis, and not the Phi uses.
&gt; &gt; 
&gt; &gt; We can first do a fixpoint where we simplify Phis only - which may leave dummy Phis like:
&gt; &gt; 
&gt; &gt; somePhi: Phi(@something)
&gt; &gt; 
&gt; &gt; where @something is either another Phi or something real (like a SetLocal), and somePhi is still referenced from various other places (GetLocal, etc).
&gt; &gt; 
&gt; &gt; Then we can do a second pass that considers all nodes (not just Phis) and checks if those nodes reference trivial Phis.  If they do, then replace.
&gt; &gt; 
&gt; &gt; I think that this should be sufficient, since the fixpoint (as I understand it) only depends on the shape of Phis and not the shapes of users of Phis.  So you only need to visit Phis repeatedly - and after that you can visit all non-Phi uses of Phis in one go.
&gt; &gt; 
&gt; &gt; Would that work?
&gt; 
&gt; Yes. I think that&apos;s exactly what I mean for &quot;iterative traversal on the Phi nodes only&quot; at first and then &quot;one-time traversal on other nodes in the graph&quot;. - if I understand you correctly. :)

Ooops, sorry, yes, we&apos;re thinking the same thing. :-)  I didn&apos;t read carefully enough the first time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572356</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 17:44:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=130493) [details]
&gt; Case showing the problem of type predications propagation after Phi elimination
&gt; 
&gt; This is the case showing the problem of type predications propagation after Phi elimination. Please pay attention to block 3, where node 51 and node 49 are eliminated since those two variables each have only one definition (in block 0). They&apos;re not used in block 3 but they should still be alive because they will be used in block 1 (block 3&apos;s successor). But after we eliminate 51 and 49 in block 3, the CFA ignores them and the type predictions of the two variables are not propagated to the end of the block, and hence not to the successors.

Aha!  I think that the thing that our dummy Phi insertion was giving us was liveness, and you&apos;re saying that we&apos;ve lost this.

This is dangerous since we need to know liveness to compute DFG OSR entry constraints.

So we have two options:

1) Have a different way of computing liveness.  I&apos;m OK with this if you want to do it, since we&apos;ll need it eventually!

2) If we eliminate a Phi from a block, then have the block&apos;s references to that Phi (i.e. variablesAtHead/AtTail) refer to its replacement.

I like (2) better for this patch, since it feels like a more minimal change.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572365</commentid>
    <comment_count>12</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-06 17:53:51 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; 
&gt; Aha!  I think that the thing that our dummy Phi insertion was giving us was liveness, and you&apos;re saying that we&apos;ve lost this.
&gt; 
&gt; This is dangerous since we need to know liveness to compute DFG OSR entry constraints.
&gt; 
&gt; So we have two options:
&gt; 
&gt; 1) Have a different way of computing liveness.  I&apos;m OK with this if you want to do it, since we&apos;ll need it eventually!
&gt; 
&gt; 2) If we eliminate a Phi from a block, then have the block&apos;s references to that Phi (i.e. variablesAtHead/AtTail) refer to its replacement.
&gt; 
&gt; I like (2) better for this patch, since it feels like a more minimal change.
&gt; 
&gt; What do you think?

I agree. Then the variablesAtHead/Tail of a block may reference a node outside the block and we need to extract the type predictions from it. But it _should_ not be a problem as we now keep the abstract values of all the nodes in the graph in one AbstractState - will verify it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572734</commentid>
    <comment_count>13</comment_count>
      <attachid>130579</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-07 02:54:30 -0800</bug_when>
    <thetext>Created attachment 130579
proposed patch

Patch w/o the Phi use map.

Additionally, we don&apos;t observe any performance regression on the 3 benchmarks with this version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572737</commentid>
    <comment_count>14</comment_count>
      <attachid>130581</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-07 02:56:44 -0800</bug_when>
    <thetext>Created attachment 130581
Latest performance result

As you could see, no obvious performance regression on the 3 major benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572739</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 02:58:17 -0800</bug_when>
    <thetext>Attachment 130579 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:128:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572858</commentid>
    <comment_count>16</comment_count>
      <attachid>130619</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-07 06:51:21 -0800</bug_when>
    <thetext>Created attachment 130619
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573094</commentid>
    <comment_count>17</comment_count>
      <attachid>130619</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-07 11:59:18 -0800</bug_when>
    <thetext>Comment on attachment 130619
updated patch

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

R=me as it is, but it might be worth considering doing away with the Phi-to-block links, if possible.

&gt; Source/JavaScriptCore/dfg/DFGRedundantPhiEliminationPhase.cpp:83
&gt; +                if (replacement != NoNode) {
&gt; +                    // Current Phi node will be skipped, we need to update
&gt; +                    // the variable information if it references this node.
&gt; +                    BasicBlock* basicBlock = m_graph.m_blocks[node.blockIndex()].get();
&gt; +                    VirtualRegister operand = node.local();
&gt; +                    if (operandIsArgument(operand)) {
&gt; +                        unsigned arg = operandToArgument(operand);
&gt; +                        if (basicBlock-&gt;variablesAtHead.argument(arg) == index) {
&gt; +                            // This argument must be unused in this block.
&gt; +                            ASSERT(basicBlock-&gt;variablesAtTail.argument(arg) == index);
&gt; +                            basicBlock-&gt;variablesAtHead.argument(arg) = replacement;
&gt; +                            basicBlock-&gt;variablesAtTail.argument(arg) = replacement;
&gt; +                        }
&gt; +                    } else {
&gt; +                        if (basicBlock-&gt;variablesAtHead.local(operand) == index) {
&gt; +                            // This local variable must be unused in this block.
&gt; +                            ASSERT(basicBlock-&gt;variablesAtTail.local(operand) == index);
&gt; +                            basicBlock-&gt;variablesAtHead.local(operand) = replacement;
&gt; +                            basicBlock-&gt;variablesAtTail.local(operand) = replacement;
&gt; +                        }
&gt; +                    }

I think this is fine, but why didn&apos;t you just walk all blocks&apos; variablesAtHead|Tail lists after the Phi fixup fixpoint?  That way, you wouldn&apos;t have had to save the block index in the Phi nodes&apos; OpInfos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573400</commentid>
    <comment_count>18</comment_count>
      <attachid>130732</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-07 17:26:58 -0800</bug_when>
    <thetext>Created attachment 130732
patch updated

Yes. It should be far cleaner! Patch is updated.

Thanks for the review comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573425</commentid>
    <comment_count>19</comment_count>
      <attachid>130732</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-07 17:53:37 -0800</bug_when>
    <thetext>Comment on attachment 130732
patch updated

Yay! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573488</commentid>
    <comment_count>20</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-03-07 19:10:19 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/110132</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130375</attachid>
            <date>2012-03-06 07:13:42 -0800</date>
            <delta_ts>2012-03-06 07:53:29 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>80415.wip.patch</filename>
            <type>text/plain</type>
            <size>25770</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5OTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDEyLTAzLTA2ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUGhpcyBpbiBERkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBtYXkgbm90IGhhdmUg
YW55IGFkdmFudGFnZSBhdCBjdXJyZW50IHN0YWdlLCB0aGlzIGlzIHRvd2FyZHMKKyAgICAgICAg
bWluaW1hbCBTU0EgdG8gbWFrZSBtb3JlIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9ucyAobGlrZSBi
dWcgNzY3NzApIGVhc2llci4KKyAgICAgICAgV2UgaGF2ZSB0aGUgY2hvaWNlcyBlaXRoZXIgdG8g
YnVpbGQgbWluaW1hbCBTU0EgZnJvbSBzY3JhdGNoIG9yIHRvCisgICAgICAgIGtlZXAgY3VycmVu
dCBzaW1wbGUgUGhpIGluc2VydGlvbiBtZWNoYW5pc20gYW5kIHJlbW92ZSB0aGUgcmVkdW5kYW5j
eQorICAgICAgICBpbiBhbm90aGVyIHBoYXNlLiBDdXJyZW50bHkgd2UgY2hvb3NlIHRoZSBsYXR0
ZXIgYmVjYXVzZSB0aGUgY2hhbmdlCisgICAgICAgIGNvdWxkIGJlIHNtYWxsZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRQaGlVc2UpOgor
ICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoUGhpVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6OlBoaVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpVXNlOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6
OmNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlBoaVVzZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGhpVXNlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6REZH
OjpQaGlVc2U6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6Om1ha2VXb3JkKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR1JlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OmdldFJl
ZHVuZGFudFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVkdW5kYW50
UGhpRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKwogMjAxMi0wMy0wNiAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjEwOTgzNy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAK
ICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1Jl
ZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAg
ICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1p
bmF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBcCiAgICAgZGZn
L0RGR1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBcCisgICAgZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwIFwKICAgICBk
ZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogICAg
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTA5OTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDggQEAKIAkJMDhDQUJCQTYxMjY1QUIzOTAwQjIwNkNFIC8qIFN0cmluZ0NvbmNh
dGVuYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODk2QzI5RTEyNjVBQjA5MDBCMUNERDMgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEREQTVDMTEyNjQ2MzE3
MDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4RERBNUJCMTI2NDVGMUQwMDc1MTczMiAvKiBVU3RyaW5nQnVp
bGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTA4RTI3OUU5MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEUyNzlFODBFRjgzQjEwMDA3
REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovOyB9OworCQkwQTQzMzdCQjE1MDYyMTg4MDA5
OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdCQTE1MDYyMTg4MDA5OTFD
OTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBBNDMz
N0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdCRDE1
MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oICovOyB9
OwogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMzMEMyNjBGMzhDNjIzMDA2
OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1
OCAvKiBUeXBlVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCQUM5NEEwMTMzODcy
ODQwMENGMTM1QiAvKiBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIg
LyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNiArOTI3LDggQEAKIAkJMDg5NkMyOUUxMjY1
QUIwOTAwQjFDREQzIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFN0cmluZ0NvbmNhdGVuYXRlLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RERBNUJCMTI2NDVGMUQw
MDc1MTczMiAvKiBVU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEUy
NzlFODBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSYW5kb21OdW1iZXJTZWVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBBNDMzN0JBMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1JlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjMzMEMyNjBGMzhDNjIzMDA2
OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUeXBlVHJhaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI0RDdF
NjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
QkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzE3LDYgKzI3MjEsOCBAQAogCQkJ
CTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAogCQkJCTBGRkZDOTUx
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8s
CiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmggKi8sCisJCQkJMEE0MzM3QkExNTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwICovLAorCQkJCTBBNDMzN0JEMTUwNjIxOUIwMDk5MUM5
NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzEx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTg2QkIwOUJFMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLywKIAkJCQk4NkJCMDlCRjEzOEUzODFC
MDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovLApAQCAtMzQyMCw2ICszNDI2LDcgQEAKIAkJCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyogU2ltcGxl
U3RhdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBE
RkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwMzAs
NiArNDAzNyw3IEBACiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBBNDMzN0JCMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMDk5MDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgQWJzdHJhY3RWYWx1ZSogc291cmNlOwogICAgICAgICAKICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgIGlmICghbm9kZS5yZWZDb3Vu
dCgpKQorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gaWdub3JlIHRoZSBza2lwcGVkIFBoaSBub2Rl
cywgb3RoZXJ3aXNlIHdlIG1heSBmYWlsIHRvCisgICAgLy8gcHJvcGFnYXRlIHRoZSB0eXBlIHBy
ZWRpY3Rpb25zIHRvIG90aGVyIGJsb2Nrcy4KKyAgICBpZiAoIW5vZGUucmVmQ291bnQoKSAmJiBu
b2RlLm9wICE9IFBoaSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDk5MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkg
PSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBt
X2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwg
b3BlcmFuZCkpOwogICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFByZWRpY3Rp
b24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkp
OworICAgICAgICBhZGRQaGlVc2UocGhpLCBub2RlSW5kZXgsIDEpOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAg
ICAgICAKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwpAQCAtMjk3LDYgKzI5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAgICAgICAgbm9kZUluZGV4
ID0gaW5qZWN0TGF6eU9wZXJhbmRQcmVkaWN0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgYWRkUGhpVXNlKHBoaSwgbm9k
ZUluZGV4LCAxKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgIAogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOwpAQCAtMzUyLDYgKzM1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIGFkZFBoaVVzZShwaGks
IG5vZGVJbmRleCwgMSk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkg
ewogICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1f
Y3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKQEAgLTU2Myw2ICs1
NjYsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5k
ZXgsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLCBtX2N1cnJlbnRQcm9maWxp
bmdJbmRleCAtIG1fY3VycmVudEluZGV4KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFBoaVVzZShO
b2RlSW5kZXggcGhpLCBOb2RlSW5kZXggbm9kZSwgdW5zaWduZWQgY2hpbGRJbmRleCwgTm9kZUlu
ZGV4IHJlcGxhY2UgPSBOb05vZGUpCisgICAgeworICAgICAgICBBU1NFUlQocGhpICE9IE5vTm9k
ZSAmJiBtX2dyYXBoW3BoaV0ub3AgPT0gUGhpKTsKKworICAgICAgICBWZWN0b3I8UGhpVXNlPiog
cGhpVXNlOworICAgICAgICBQaGlVc2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGhp
VXNlcy5maW5kKHBoaSk7CisgICAgICAgIGlmIChpdGVyICE9IG1fZ3JhcGgubV9waGlVc2VzLmVu
ZCgpKQorICAgICAgICAgICAgcGhpVXNlID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWZWN0b3I8UGhpVXNlPiBlbXB0eVVzZTsKKyAgICAgICAgICAgIHBhaXI8
UGhpVXNlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9ncmFwaC5tX3BoaVVzZXMuYWRk
KHBoaSwgZW1wdHlVc2UpOworICAgICAgICAgICAgcGhpVXNlID0gJnJlc3VsdC5maXJzdC0+c2Vj
b25kOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBpcyBuZWVkZWQs
IHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBvbGQgdXNlIGVudHJ5LgorICAgICAgICAvLyBUaGlzIHdv
dWxkIGZpbmQgYW5kIGRlbGV0ZSBhbiBlbnRyeSBpbiB0aGUgbWlkZGxlIG9mIGEgdmVjdG9yLAor
ICAgICAgICAvLyBidXQgd2UgZXhwZWN0IHRoaXMgd291bGQgYmUgcmFyZWx5IGhhcHBlbmVkIGlu
IHByYWN0aWNlIC0gb25seSB3aGVuCisgICAgICAgIC8vIGEgUGhpIG5vZGUgaW4gYSBqb2ludCBi
bG9jayBuZWVkcyB0byBoYW5kbGUgbW9yZSB0aGFuIDMgaW5jb21pbmcgZWRnZXMuCisgICAgICAg
IGlmIChyZXBsYWNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgc2l6ZV90IGkgPSBwaGlVc2Ut
PmZpbmQoUGhpVXNlKHJlcGxhY2UsIGNoaWxkSW5kZXgpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
ICE9IG5vdEZvdW5kKTsKKyAgICAgICAgICAgIHBoaVVzZS0+cmVtb3ZlKGkpOworICAgICAgICB9
CisKKyAgICAgICAgcGhpVXNlLT5hcHBlbmQoUGhpVXNlKG5vZGUsIGNoaWxkSW5kZXgpKTsKKyAg
ICB9CisKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0
aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdlbmVyYXRl
JyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5l
cmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXgg
Y2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQzID0gTm9Ob2RlKQpAQCAtMjM3OCw2ICsyNDA4LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBTZXR0aW5n
IEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5QcmVkZWNlc3Nvcik7
CiAjZW5kaWYKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoTm9k
ZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUGhp
VXNlKHZhbHVlSW5QcmVkZWNlc3NvciwgZW50cnkubV9waGksIDEpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlO
b2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTIzOTAsNiArMjQyMiw4IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIGVudHJ5Lm1fcGhp
LCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQyKE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpCisgICAg
ICAgICAgICAgICAgICAgIGFkZFBoaVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IsIGVudHJ5Lm1fcGhp
LCAyKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CkBAIC0yNDAyLDYgKzI0MzYsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMg
PSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhOb2RlVXNlKHZhbHVlSW5Q
cmVkZWNlc3NvcikpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICBhZGRQaGlVc2UodmFsdWVJblBy
ZWRlY2Vzc29yLCBlbnRyeS5tX3BoaSwgMyk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIENoaWxkcmVuIG9m
IEAldTogIiwgZW50cnkubV9waGkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGls
ZHJlbihXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMjQyMiw2ICsyNDU4LDEyIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYo
bmV3UGhpKTsKIAogICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbiA9IHBoaU5vZGUtPmNo
aWxkcmVuOworICAgICAgICAgICAgaWYgKG1fZ3JhcGhbcGhpTm9kZS0+Y2hpbGQxKCkuaW5kZXhV
bmNoZWNrZWQoKV0ub3AgPT0gUGhpKQorICAgICAgICAgICAgICAgIGFkZFBoaVVzZShwaGlOb2Rl
LT5jaGlsZDEoKS5pbmRleFVuY2hlY2tlZCgpLCBuZXdQaGksIDEsIGVudHJ5Lm1fcGhpKTsKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoW3BoaU5vZGUtPmNoaWxkMigpLmluZGV4VW5jaGVja2VkKCld
Lm9wID09IFBoaSkKKyAgICAgICAgICAgICAgICBhZGRQaGlVc2UocGhpTm9kZS0+Y2hpbGQyKCku
aW5kZXhVbmNoZWNrZWQoKSwgbmV3UGhpLCAyLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICBp
ZiAobV9ncmFwaFtwaGlOb2RlLT5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpXS5vcCA9PSBQaGkp
CisgICAgICAgICAgICAgICAgYWRkUGhpVXNlKHBoaU5vZGUtPmNoaWxkMygpLmluZGV4VW5jaGVj
a2VkKCksIG5ld1BoaSwgMywgZW50cnkubV9waGkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgQ2hpbGRyZW4g
b2YgQCV1OiAiLCBuZXdQaGkpOwpAQCAtMjQzMCw2ICsyNDcyLDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogCiAgICAgICAgICAgICBwaGlOb2RlLT5j
aGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJblByZWRlY2Vzc29yLCBOb05vZGUpOwor
ICAgICAgICAgICAgYWRkUGhpVXNlKG5ld1BoaSwgZW50cnkubV9waGksIDEpOworICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpCisgICAgICAgICAg
ICAgICAgYWRkUGhpVXNlKHZhbHVlSW5QcmVkZWNlc3NvciwgZW50cnkubV9waGksIDIpOwogCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMDk5MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIK
KyNpbmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKQEAgLTU4LDYgKzU5LDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24p
CiAgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwogCisgICAgcGVyZm9ybVJlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUFyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBl
cmZvcm1DU0UoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNDEgQEAgc3RydWN0IFJlc29sdmVHbG9iYWxEYXRh
IHsKICAgICB1bnNpZ25lZCByZXNvbHZlSW5mb0luZGV4OwogfTsKIAorY2xhc3MgUGhpVXNlIHsK
K3B1YmxpYzoKKyAgICBQaGlVc2UoTm9kZUluZGV4IG5vZGUsIHVuc2lnbmVkIGNoaWxkSW5kZXgp
CisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCBjaGlsZEluZGV4KSkKKyAg
ICB7CisgICAgfQorCisgICAgTm9kZUluZGV4IG5vZGUoKSB7cmV0dXJuIG1fZW5jb2RlZFdvcmQg
Pj4gc2hpZnQoKTsgfQorICAgIHVuc2lnbmVkIGNoaWxkSW5kZXgoKSB7cmV0dXJuIG1fZW5jb2Rl
ZFdvcmQgJiAoKDEgPDwgc2hpZnQoKSkgLSAxKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBoaVVzZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbmNvZGVk
V29yZCA9PSBvdGhlci5tX2VuY29kZWRXb3JkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBQaGlVc2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW5j
b2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIAorICAgIHN0YXRpYyBp
bnQzMl90IG1ha2VXb3JkKE5vZGVJbmRleCBub2RlLCB1bnNpZ25lZCBjaGlsZEluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG5vZGUpIDw8IHNoaWZ0KCkpID4+IHNoaWZ0KCkpKSA9PSBub2RlKTsKKyAgICAgICAg
QVNTRVJUKGNoaWxkSW5kZXggPD0gKDEgPDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gKG5v
ZGUgPDwgc2hpZnQoKSkgfCBjaGlsZEluZGV4OworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1f
ZW5jb2RlZFdvcmQ7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8Tm9kZUluZGV4LCBWZWN0b3I8UGhp
VXNlPiwgV1RGOjpJbnRIYXNoPE5vZGVJbmRleD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8Tm9kZUluZGV4PiA+IFBoaVVzZU1hcDsKKwogLy8gCiAvLyA9PT0gR3JhcGggPT09
CiAvLwpAQCAtMzU1LDYgKzM5MCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vz
c0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRh
PiBtX3Jlc29sdmVHbG9iYWxEYXRhOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1l
bnRzOworICAgIFBoaVVzZU1hcCBtX3BoaVVzZXM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlh
YmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZl
Y3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKICAgICBTZWdtZW50ZWRWZWN0
b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJyZWR1bmRhbnQgcGhpIGVsaW1pbmF0aW9uIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIFZlY3Rv
cjxOb2RlSW5kZXgsIDg+IHdvcmtsaXN0OworICAgICAgICAKKyAgICAgICAgZm9yIChQaGlVc2VN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGhpVXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
Z3JhcGgubV9waGlVc2VzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQoaXRlci0+Zmlyc3QpOworCisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBOb2RlSW5kZXggcGhpID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICAg
ICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworCisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbcGhp
XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBnZXRSZWR1bmRhbnRSZXBsYWNlbWVudChwaGkp
OworCisgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQgIT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgUGhpVXNlTWFwOjppdGVyYXRvciBwaGlFbnRyeSA9IG1fZ3JhcGgubV9waGlVc2VzLmZp
bmQocGhpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpRW50cnkgIT0gbV9ncmFwaC5tX3Bo
aVVzZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFZlY3RvcjxQaGlVc2U+JiBwaGlVc2UgPSBw
aGlFbnRyeS0+c2Vjb25kOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBoaVVzZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBQaGlVc2UmIHVz
ZSA9IHBoaVVzZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgdXNlTm9kZSA9IG1fZ3Jh
cGhbdXNlLm5vZGUoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICghdXNlTm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoICh1c2UuY2hpbGRJbmRleCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh1c2VOb2RlLmNoaWxk
MSgpLmluZGV4VW5jaGVja2VkKCkgPT0gcGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZU5vZGUuY2hpbGRyZW4uY2hpbGQxKCkuc2V0SW5kZXgocmVwbGFjZW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtyZXBsYWNlbWVudF0ucmVmKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHVzZU5vZGUuY2hpbGQyKCkuaW5kZXhVbmNoZWNrZWQoKSA9
PSBwaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgdXNlTm9kZS5jaGlsZHJlbi5jaGlsZDIo
KS5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W3JlcGxhY2VtZW50XS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
dXNlTm9kZS5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpID09IHBoaSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VOb2RlLmNoaWxkcmVuLmNoaWxkMygpLnNldEluZGV4KHJlcGxhY2VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnJlZigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmICh1c2VOb2RlLm9wID09IFBoaSAmJiAhd29ya2xp
c3QuY29udGFpbnModXNlLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQodXNlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9ncmFwaFtwaGldLnNldFJlZkNvdW50KDApOworICAgICAgICAgICAgICAgIG1fZ3JhcGhb
cmVwbGFjZW1lbnRdLmRlcmVmKCk7CisgICAgICAgICAgICAgICAgUGhpVXNlTWFwOjppdGVyYXRv
ciByZXBsYWNlbWVudEVudHJ5ID0gbV9ncmFwaC5tX3BoaVVzZXMuZmluZChyZXBsYWNlbWVudCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50RW50cnkgIT0gbV9ncmFwaC5tX3BoaVVz
ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFBoaVVzZT4mIHJlcGxhY2Vt
ZW50VXNlID0gcmVwbGFjZW1lbnRFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlbWVudFVzZS5hcHBlbmQocGhpVXNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcGhpVXNlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTm9kZUluZGV4IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KE5vZGVJ
bmRleCBwaGkpCisgICAgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbV9ncmFwaFtwaGld
LmNoaWxkMSgpLmluZGV4VW5jaGVja2VkKCk7CisgICAgICAgIE5vZGVJbmRleCBjYW5kaWRhdGUg
PSBjaGlsZDEgPT0gcGhpID8gTm9Ob2RlIDogY2hpbGQxOworCisgICAgICAgIE5vZGVJbmRleCBj
aGlsZDIgPSBtX2dyYXBoW3BoaV0uY2hpbGQyKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAg
aWYgKGNhbmRpZGF0ZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZDIgIT0gTm9O
b2RlICYmIGNoaWxkMiAhPSBjYW5kaWRhdGUgJiYgY2hpbGQyICE9IHBoaSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkMiAhPSBwaGkpCisg
ICAgICAgICAgICBjYW5kaWRhdGUgPSBjaGlsZDI7CisKKyAgICAgICAgTm9kZUluZGV4IGNoaWxk
MyA9IG1fZ3JhcGhbcGhpXS5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpOworICAgICAgICBpZiAo
Y2FuZGlkYXRlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKGNoaWxkMyAhPSBOb05vZGUg
JiYgY2hpbGQzICE9IGNhbmRpZGF0ZSAmJiBjaGlsZDMgIT0gcGhpKQorICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQzICE9IHBoaSkKKyAgICAg
ICAgICAgIGNhbmRpZGF0ZSA9IGNoaWxkMzsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjYW5k
aWRhdGU7CisgICAgfQorCit9OworCit2b2lkIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlv
bihHcmFwaCYgZ3JhcGgpCit7CisgICAgcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVk
dW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBXZSBpbnNlcnRlZCBtYW55IGNhbi1iZS1yZWR1
bmRhbnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgorLy8gVGhpcyBwaGFzZSB3
aWxsIGp1c3QgcmVtb3ZlIHRoZW0uCisKK3ZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0
aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFz
ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>130377</attachid>
            <date>2012-03-06 07:16:56 -0800</date>
            <delta_ts>2012-03-07 02:56:44 -0800</delta_ts>
            <desc>Initial performance result</desc>
            <filename>ToT_PhiElimination_SunSpiderV8Kraken_20120306_2245_benchReport.txt</filename>
            <type>text/plain</type>
            <size>7201</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBWOCwgYW5kIEtyYWtlbiBvbiBcYy4KClZN
cyB0ZXN0ZWQ6CiJUb1QiIGF0IC9ob21lL3l4aWFuL1dlYktpdF9vcmlnL1dlYktpdEJ1aWxkL1Jl
bGVhc2UvYmluL2pzYwoiUGhpRWxpbWluYXRpb24iIGF0IC9tbnQvc3VwcGxlbWVudC9XZWJLaXQv
V2ViS2l0QnVpbGQvUXQvUmVsZWFzZS9iaW4vanNjCgpDb2xsZWN0ZWQgMTIgc2FtcGxlcyBwZXIg
YmVuY2htYXJrL1ZNLCB3aXRoIDQgVk0gaW52b2NhdGlvbnMgcGVyIGJlbmNobWFyay4gRW1pdHRl
ZCBhIGNhbGwgdG8gZ2MoKSBiZXR3ZWVuIHNhbXBsZQptZWFzdXJlbWVudHMuIFVzZWQgMSBiZW5j
aG1hcmsgaXRlcmF0aW9uIHBlciBWTSBpbnZvY2F0aW9uIGZvciB3YXJtLXVwLiBVc2VkIHRoZSBq
c2Mtc3BlY2lmaWMgcHJlY2lzZVRpbWUoKQpmdW5jdGlvbiB0byBnZXQgbWljcm9zZWNvbmQtbGV2
ZWwgdGltaW5nLiBSZXBvcnRpbmcgYmVuY2htYXJrIGV4ZWN1dGlvbiB0aW1lcyB3aXRoIDk1JSBj
b25maWRlbmNlIGludGVydmFscyBpbgptaWxsaXNlY29uZHMuCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvVCAgICAgICAgICAgICAgICBQaGlFbGltaW5h
dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApTdW5TcGlkZXI6CiAgIDNkLWN1
YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMDk5NistMC4wNTAwICAgID8gICAg
IDguMzAzNCstMC4xODEwICAgICAgID8gbWlnaHQgYmUgMS4wMjUyeCBzbG93ZXIKICAgM2QtbW9y
cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS42Njc3Ky0wLjEwNDQgICAgPyAgICAg
OS43MzE2Ky0wLjExMjQgICAgICAgPwogICAzZC1yYXl0cmFjZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEwLjQ0OTIrLTAuMTA4MCAgICA/ICAgIDEwLjU4NzUrLTAuMDk2MSAgICAgICA/IG1p
Z2h0IGJlIDEuMDEzMnggc2xvd2VyCiAgIGFjY2Vzcy1iaW5hcnktdHJlZXMgICAgICAgICAgICAg
ICAgICAgIDIuMzc0MCstMC4wNTAyICAgICAgICAgIDIuMzYzMSstMC4wMzgzICAgICAgIAogICBh
Y2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgICAgICAgICAgIDEwLjIyNjgrLTAuMDMyNiAgICAh
ICAgIDEwLjU5MzMrLTAuMDM4NiAgICAgICAhIGRlZmluaXRlbHkgMS4wMzU4eCBzbG93ZXIKICAg
YWNjZXNzLW5ib2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgNS40ODc4Ky0wLjA1NDkgICAg
ICAgICAgNS40NzI2Ky0wLjA0MzMgICAgICAgCiAgIGFjY2Vzcy1uc2lldmUgICAgICAgICAgICAg
ICAgICAgICAgICAgIDMuOTczNSstMC4wNDg4ICAgICAgICAgIDMuOTcyOSstMC4wMTE5ICAgICAg
IAogICBiaXRvcHMtM2JpdC1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAxLjIzNDUrLTAuMDMw
MyAgICA/ICAgICAxLjI1MTErLTAuMDU0OSAgICAgICA/IG1pZ2h0IGJlIDEuMDEzNHggc2xvd2Vy
CiAgIGJpdG9wcy1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgIDQuNjQyMistMC4wNDk3
ICAgID8gICAgIDQuNjczNSstMC4wMzg2ICAgICAgID8KICAgYml0b3BzLWJpdHdpc2UtYW5kICAg
ICAgICAgICAgICAgICAgICAgNC4zMDI4Ky0wLjA2NDggICAgICAgICAgNC4yNDU3Ky0wLjA4Mjkg
ICAgICAgICBtaWdodCBiZSAxLjAxMzR4IGZhc3RlcgogICBiaXRvcHMtbnNpZXZlLWJpdHMgICAg
ICAgICAgICAgICAgICAgICA0LjI2ODgrLTAuMDQ0MiAgICA/ICAgICA0LjI4NTgrLTAuMDQ5NCAg
ICAgICA/CiAgIGNvbnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgIDIuODM3NCst
MC4wODIwICAgICAgICAgIDIuODEyMystMC4wMzc3ICAgICAgIAogICBjcnlwdG8tYWVzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA5LjcxMzkrLTAuMTkwNCAgICA/ICAgIDEwLjAwOTcrLTAu
MTQxOSAgICAgICA/IG1pZ2h0IGJlIDEuMDMwNXggc2xvd2VyCiAgIGNyeXB0by1tZDUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMuNDAzOCstMC4wMzcwICAgID8gICAgIDMuNDA1NSstMC4w
MjMyICAgICAgID8KICAgY3J5cHRvLXNoYTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42
OTMxKy0wLjAzODYgICAgISAgICAgMi45MzI3Ky0wLjA1MTIgICAgICAgISBkZWZpbml0ZWx5IDEu
MDg5MHggc2xvd2VyCiAgIGRhdGUtZm9ybWF0LXRvZnRlICAgICAgICAgICAgICAgICAgICAgMTIu
ODAyMistMC4xNzE2ICAgID8gICAgMTIuODcwMCstMC4xNTg0ICAgICAgID8KICAgZGF0ZS1mb3Jt
YXQteHBhcmIgICAgICAgICAgICAgICAgICAgICAxMS44ODM2Ky0wLjE2NjIgICAgICAgICAxMS44
NjEyKy0wLjEyOTYgICAgICAgCiAgIG1hdGgtY29yZGljICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMuOTYxOCstMC4wNjU5ICAgICAgICAgIDMuOTU2NSstMC4wMjcyICAgICAgIAogICBtYXRo
LXBhcnRpYWwtc3VtcyAgICAgICAgICAgICAgICAgICAgIDE0Ljk0OTgrLTAuMDczNyAgICAgICAg
IDE0LjkwMDErLTAuMDYwOSAgICAgICAKICAgbWF0aC1zcGVjdHJhbC1ub3JtICAgICAgICAgICAg
ICAgICAgICAgMi42Mjk1Ky0wLjA0MDMgICAgPyAgICAgMi43MTM3Ky0wLjA0NjggICAgICAgPyBt
aWdodCBiZSAxLjAzMjB4IHNsb3dlcgogICByZWdleHAtZG5hICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA5LjM3MTErLTAuMDcwMiAgICA/ICAgICA5LjQyNjUrLTAuMDg0NCAgICAgICA/CiAg
IHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAgIDUuODIwNSstMC4yNjI2ICAg
ICAgICAgIDUuNTQ1NistMC4wODI2ICAgICAgICAgbWlnaHQgYmUgMS4wNDk2eCBmYXN0ZXIKICAg
c3RyaW5nLWZhc3RhICAgICAgICAgICAgICAgICAgICAgICAgICAgOS40Njk0Ky0wLjA4MDQgICAg
PyAgICAgOS41NDEzKy0wLjA3NTkgICAgICAgPwogICBzdHJpbmctdGFnY2xvdWQgICAgICAgICAg
ICAgICAgICAgICAgIDE2LjI5NzcrLTAuMDk3NCAgICAgICAgIDE2LjI4ODUrLTAuMDc5NSAgICAg
ICAKICAgc3RyaW5nLXVucGFjay1jb2RlICAgICAgICAgICAgICAgICAgICAyNy43Nzg3Ky0wLjI0
MTggICAgICAgICAyNy41MTg1Ky0wLjIzNDQgICAgICAgCiAgIHN0cmluZy12YWxpZGF0ZS1pbnB1
dCAgICAgICAgICAgICAgICAgIDguNjMwNystMC43MTMzICAgICAgICAgIDguNDY4NistMC4wNzQz
ICAgICAgICAgbWlnaHQgYmUgMS4wMTkxeCBmYXN0ZXIKCiAgIDxhcml0aG1ldGljPiAqICAgICAg
ICAgICAgICAgICAgICAgICAgIDcuOTYwNCstMC4wNDQxICAgID8gICAgIDcuOTg5NystMC4wMzUz
ICAgICAgID8gbWlnaHQgYmUgMS4wMDM3eCBzbG93ZXIKICAgPGdlb21ldHJpYz4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNi4yNzM2Ky0wLjAzNzIgICAgPyAgICAgNi4zMTMyKy0wLjAyOTcg
ICAgICAgPyBtaWdodCBiZSAxLjAwNjN4IHNsb3dlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0Ljg1ODArLTAuMDM4NCAgICA/ICAgICA0LjkwMjYrLTAuMDQwNyAg
ICAgICA/IG1pZ2h0IGJlIDEuMDA5Mnggc2xvd2VyCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRvVCAgICAgICAgICAgICAgICBQaGlFbGltaW5hdGlvbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApWODoKICAgY3J5cHRvICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA5My45MjA0Ky0wLjI2OTUgICAgISAgICA5NS4xNTgzKy0wLjE2
NjIgICAgICAgISBkZWZpbml0ZWx5IDEuMDEzMnggc2xvd2VyCiAgIGRlbHRhYmx1ZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNjUuODcxNistMC42MjQxICAgID8gICAxNjYuODEzMCstMC44
MDYxICAgICAgID8KICAgZWFybGV5LWJveWVyICAgICAgICAgICAgICAgICAgICAgICAgIDEyMS4z
NTMwKy0yLjM0MzYgICAgPyAgIDEyMS44Mzc4Ky0yLjY3MDggICAgICAgPwogICByYXl0cmFjZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5LjEwMDErLTAuNDEzMSAgICAgICAgIDU4Ljg1
MzQrLTAuNDEyNiAgICAgICAKICAgcmVnZXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDExMS41NDY4Ky0wLjQ4NjkgICAgPyAgIDExMS42ODY3Ky0wLjU1NDAgICAgICAgPwogICByaWNo
YXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk0LjQwNDIrLTMuMTA2NiAgICAgICAg
MTkxLjM0NjcrLTAuODM2NCAgICAgICAgIG1pZ2h0IGJlIDEuMDE2MHggZmFzdGVyCiAgIHNwbGF5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzcuMjY3NystMC40MTQ2ICAgID8gICAg
NzcuNzM4MCstMC41MTA1ICAgICAgID8KCiAgIDxhcml0aG1ldGljPiAgICAgICAgICAgICAgICAg
ICAgICAgICAxMTcuNjM3NystMC41NTMzICAgICAgICAxMTcuNjMzNCstMC40NDA4ICAgICAgICAg
bWlnaHQgYmUgMS4wMDAweCBmYXN0ZXIKICAgPGdlb21ldHJpYz4gKiAgICAgICAgICAgICAgICAg
ICAgICAgIDEwOS4zNjA4Ky0wLjQ4NTYgICAgPyAgIDEwOS41MTg5Ky0wLjQyOTQgICAgICAgPyBt
aWdodCBiZSAxLjAwMTR4IHNsb3dlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTAxLjU5OTUrLTAuNDU3MSAgICA/ICAgMTAxLjgwODQrLTAuNDA2OSAgICAgICA/IG1p
Z2h0IGJlIDEuMDAyMXggc2xvd2VyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRvVCAgICAgICAgICAgICAgICBQaGlFbGltaW5hdGlvbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIApLcmFrZW46CiAgIGFpLWFzdGFyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA3ODUuMzgwNSstMS44NTYxICAgID8gICA3ODguMjg2MCstMi4yNzExICAg
ICAgID8KICAgYXVkaW8tYmVhdC1kZXRlY3Rpb24gICAgICAgICAgICAgICAgIDIzOC41MzU2Ky0x
LjI1MTIgICAgICAgIDIzOC41MjQ0Ky0wLjI4MTggICAgICAgCiAgIGF1ZGlvLWRmdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzNjguNTEyOCstMi40MTM2ICAgID8gICAzNjkuMTgxOCstMi4z
OTEzICAgICAgID8KICAgYXVkaW8tZmZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Mi44
NjM0Ky0xLjI4MjUgICAgICAgIDE1MS41MjkyKy0wLjE2NDIgICAgICAgCiAgIGF1ZGlvLW9zY2ls
bGF0b3IgICAgICAgICAgICAgICAgICAgICAzNDUuNzgzNystMS4zMTUxICAgID8gICAzNDYuMTY4
NSstMi4xNTM1ICAgICAgID8KICAgaW1hZ2luZy1kYXJrcm9vbSAgICAgICAgICAgICAgICAgICAg
IDM4My4xMDQyKy0xNC42NjczICAgICAgIDM3OC4wNjczKy01Ljg4MzQgICAgICAgICBtaWdodCBi
ZSAxLjAxMzN4IGZhc3RlcgogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAgICAgICAgICAgICAgICAg
MzA0LjAwMDErLTAuODQzOCAgICAgICAgMzAzLjM4NDErLTAuNjAxMiAgICAgICAKICAgaW1hZ2lu
Zy1nYXVzc2lhbi1ibHVyICAgICAgICAgICAgICAgIDUwNy43MDcyKy0xLjY3NzYgICAgICAgIDUw
Ny4wNDUxKy0wLjg4NzQgICAgICAgCiAgIGpzb24tcGFyc2UtZmluYW5jaWFsICAgICAgICAgICAg
ICAgICAgODYuNTI4NistMC4yMjAzICAgIF4gICAgODUuMTg4NSstMC4yMTcxICAgICAgIF4gZGVm
aW5pdGVseSAxLjAxNTd4IGZhc3RlcgogICBqc29uLXN0cmluZ2lmeS10aW5kZXJib3ggICAgICAg
ICAgICAgMTA1Ljc5OTgrLTEuMDQwMiAgICAgICAgMTA1Ljc1ODQrLTAuNTE2NyAgICAgICAKICAg
c3RhbmZvcmQtY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgIDEwNi4wMTg3Ky0wLjQwNTMgICAg
ICAgIDEwNS43MzY2Ky0wLjY0NTkgICAgICAgCiAgIHN0YW5mb3JkLWNyeXB0by1jY20gICAgICAg
ICAgICAgICAgICAgOTkuMzY3OSstMC43MTQxICAgID8gICAgOTkuNTAzOCstMC44NTI2ICAgICAg
ID8KICAgc3RhbmZvcmQtY3J5cHRvLXBia2RmMiAgICAgICAgICAgICAgIDI0MC42NDU0Ky0xMC42
MDk5ICAgICAgIDIzMS4wMzIyKy0wLjUwMDEgICAgICAgICBtaWdodCBiZSAxLjA0MTZ4IGZhc3Rl
cgogICBzdGFuZm9yZC1jcnlwdG8tc2hhMjU2LWl0ZXJhdGl2ZSAgICAgMTAyLjQzMjYrLTEuMDg5
MSAgICAgICAgMTAxLjQ0MjUrLTAuMjgwNyAgICAgICAKCiAgIDxhcml0aG1ldGljPiAqICAgICAg
ICAgICAgICAgICAgICAgICAyNzMuMzM0MystMS4zNTY0ICAgICAgICAyNzIuMjAzNSstMC43MTU0
ICAgICAgICAgbWlnaHQgYmUgMS4wMDQyeCBmYXN0ZXIKICAgPGdlb21ldHJpYz4gICAgICAgICAg
ICAgICAgICAgICAgICAgIDIxNi45Mjc5Ky0xLjA2NDcgICAgICAgIDIxNS42NDMwKy0wLjQ5NTAg
ICAgICAgICBtaWdodCBiZSAxLjAwNjB4IGZhc3RlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMTc1LjE0MjgrLTAuNzU1MSAgICBeICAgMTczLjk5MTUrLTAuMzQ4MyAg
ICAgICBeIGRlZmluaXRlbHkgMS4wMDY2eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVG9UICAgICAgICAgICAgICAgIFBoaUVsaW1pbmF0aW9u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFsbCBiZW5jaG1hcmtzOgogICA8YXJp
dGhtZXRpYz4gICAgICAgICAgICAgICAgICAgICAgICAgMTAzLjM0MjkrLTAuNDE3MSAgICAgICAg
MTAzLjAyMTYrLTAuMjgyMyAgICAgICAgIG1pZ2h0IGJlIDEuMDAzMXggZmFzdGVyCiAgIDxnZW9t
ZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuNTkwNSstMC4xMjI5ICAgID8gICAg
MjcuNjQzOSstMC4wOTg3ICAgICAgID8gbWlnaHQgYmUgMS4wMDE5eCBzbG93ZXIKICAgPGhhcm1v
bmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC41NDQxKy0wLjA2NjMgICAgPyAgICAg
OC42MTk4Ky0wLjA3MDAgICAgICAgPyBtaWdodCBiZSAxLjAwODl4IHNsb3dlcgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAg
UGhpRWxpbWluYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKR2VvbWVhbiBv
ZiBwcmVmZXJyZWQgbWVhbnM6CiAgIDxzY2FsZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAgICAg
ICAgNjEuOTY2NSstMC4yMjIwICAgID8gICAgNjEuOTg3MistMC4yMDQwICAgICAgID8gbWlnaHQg
YmUgMS4wMDAzeCBzbG93ZXIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130384</attachid>
            <date>2012-03-06 07:53:29 -0800</date>
            <delta_ts>2012-03-07 02:54:30 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>80415.wip.1.patch</filename>
            <type>text/plain</type>
            <size>25736</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5OTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDEyLTAzLTA2ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUGhpcyBpbiBERkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBtYXkgbm90IGhhdmUg
YW55IGFkdmFudGFnZSBhdCBjdXJyZW50IHN0YWdlLCB0aGlzIGlzIHRvd2FyZHMKKyAgICAgICAg
bWluaW1hbCBTU0EgdG8gbWFrZSBtb3JlIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9ucyAobGlrZSBi
dWcgNzY3NzApIGVhc2llci4KKyAgICAgICAgV2UgaGF2ZSB0aGUgY2hvaWNlcyBlaXRoZXIgdG8g
YnVpbGQgbWluaW1hbCBTU0EgZnJvbSBzY3JhdGNoIG9yIHRvCisgICAgICAgIGtlZXAgY3VycmVu
dCBzaW1wbGUgUGhpIGluc2VydGlvbiBtZWNoYW5pc20gYW5kIHJlbW92ZSB0aGUgcmVkdW5kYW5j
eQorICAgICAgICBpbiBhbm90aGVyIHBoYXNlLiBDdXJyZW50bHkgd2UgY2hvb3NlIHRoZSBsYXR0
ZXIgYmVjYXVzZSB0aGUgY2hhbmdlCisgICAgICAgIGNvdWxkIGJlIHNtYWxsZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRQaGlVc2UpOgor
ICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoUGhpVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6OlBoaVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGhpVXNlOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6
OmNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlBoaVVzZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGhpVXNlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6REZH
OjpQaGlVc2U6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6REZHOjpQaGlVc2U6Om1ha2VXb3JkKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR1JlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OmdldFJl
ZHVuZGFudFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVkdW5kYW50
UGhpRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKwogMjAxMi0wMy0wNiAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjEwOTgzNy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAK
ICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1Jl
ZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAg
ICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1p
bmF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBcCiAgICAgZGZn
L0RGR1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBcCisgICAgZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwIFwKICAgICBk
ZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogICAg
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTA5OTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDggQEAKIAkJMDhDQUJCQTYxMjY1QUIzOTAwQjIwNkNFIC8qIFN0cmluZ0NvbmNh
dGVuYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODk2QzI5RTEyNjVBQjA5MDBCMUNERDMgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEREQTVDMTEyNjQ2MzE3
MDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4RERBNUJCMTI2NDVGMUQwMDc1MTczMiAvKiBVU3RyaW5nQnVp
bGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTA4RTI3OUU5MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEUyNzlFODBFRjgzQjEwMDA3
REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovOyB9OworCQkwQTQzMzdCQjE1MDYyMTg4MDA5
OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdCQTE1MDYyMTg4MDA5OTFD
OTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBBNDMz
N0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdCRDE1
MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oICovOyB9
OwogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMzMEMyNjBGMzhDNjIzMDA2
OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1
OCAvKiBUeXBlVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCQUM5NEEwMTMzODcy
ODQwMENGMTM1QiAvKiBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIg
LyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUsNiArOTI3LDggQEAKIAkJMDg5NkMyOUUxMjY1
QUIwOTAwQjFDREQzIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFN0cmluZ0NvbmNhdGVuYXRlLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RERBNUJCMTI2NDVGMUQw
MDc1MTczMiAvKiBVU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEUy
NzlFODBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSYW5kb21OdW1iZXJTZWVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBBNDMzN0JBMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1JlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjMzMEMyNjBGMzhDNjIzMDA2
OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUeXBlVHJhaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI0RDdF
NjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
QkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzE3LDYgKzI3MjEsOCBAQAogCQkJ
CTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAogCQkJCTBGRkZDOTUx
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8s
CiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmggKi8sCisJCQkJMEE0MzM3QkExNTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwICovLAorCQkJCTBBNDMzN0JEMTUwNjIxOUIwMDk5MUM5
NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzEx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAogCQkJCTg2QkIwOUJFMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLywKIAkJCQk4NkJCMDlCRjEzOEUzODFC
MDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovLApAQCAtMzQyMCw2ICszNDI2LDcgQEAKIAkJCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU2QTFENzE1MDAyOEJCMDAyOTkyQjEgLyogU2ltcGxl
U3RhdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBE
RkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwMzAs
NiArNDAzNyw3IEBACiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBBNDMzN0JCMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMDk5MDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUCiAgICAgQWJzdHJhY3RWYWx1ZSogc291cmNlOwogICAgICAgICAKICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgIGlmICghbm9kZS5yZWZDb3Vu
dCgpKQorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gaWdub3JlIHRoZSBza2lwcGVkIFBoaSBub2Rl
cywgb3RoZXJ3aXNlIHdlIG1heSBmYWlsIHRvCisgICAgLy8gcHJvcGFnYXRlIHRoZSB0eXBlIHBy
ZWRpY3Rpb25zIHRvIG90aGVyIGJsb2Nrcy4KKyAgICBpZiAoIW5vZGUucmVmQ291bnQoKSAmJiBu
b2RlLm9wICE9IFBoaSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDk5MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkg
PSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBt
X2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwg
b3BlcmFuZCkpOwogICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFByZWRpY3Rp
b24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkp
OworICAgICAgICBhZGRQaGlVc2UocGhpLCBub2RlSW5kZXgsIDEpOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAg
ICAgICAKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwpAQCAtMjk3LDYgKzI5OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAgICAgICAgbm9kZUluZGV4
ID0gaW5qZWN0TGF6eU9wZXJhbmRQcmVkaWN0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgYWRkUGhpVXNlKHBoaSwgbm9k
ZUluZGV4LCAxKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgIAogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOwpAQCAtMzUyLDYgKzM1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIGFkZFBoaVVzZShwaGks
IG5vZGVJbmRleCwgMSk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkg
ewogICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1f
Y3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKQEAgLTU2Myw2ICs1
NjYsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5k
ZXgsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLCBtX2N1cnJlbnRQcm9maWxp
bmdJbmRleCAtIG1fY3VycmVudEluZGV4KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFBoaVVzZShO
b2RlSW5kZXggcGhpLCBOb2RlSW5kZXggbm9kZSwgdW5zaWduZWQgY2hpbGRJbmRleCwgTm9kZUlu
ZGV4IHJlcGxhY2UgPSBOb05vZGUpCisgICAgeworICAgICAgICBBU1NFUlQocGhpICE9IE5vTm9k
ZSAmJiBtX2dyYXBoW3BoaV0ub3AgPT0gUGhpKTsKKworICAgICAgICBWZWN0b3I8UGhpVXNlPiog
cGhpVXNlOworICAgICAgICBQaGlVc2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGhp
VXNlcy5maW5kKHBoaSk7CisgICAgICAgIGlmIChpdGVyICE9IG1fZ3JhcGgubV9waGlVc2VzLmVu
ZCgpKQorICAgICAgICAgICAgcGhpVXNlID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBWZWN0b3I8UGhpVXNlPiBlbXB0eVVzZTsKKyAgICAgICAgICAgIHBhaXI8
UGhpVXNlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9ncmFwaC5tX3BoaVVzZXMuYWRk
KHBoaSwgZW1wdHlVc2UpOworICAgICAgICAgICAgcGhpVXNlID0gJnJlc3VsdC5maXJzdC0+c2Vj
b25kOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBpcyBuZWVkZWQs
IHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBvbGQgdXNlIGVudHJ5LgorICAgICAgICAvLyBUaGlzIHdv
dWxkIGZpbmQgYW5kIGRlbGV0ZSBhbiBlbnRyeSBpbiB0aGUgbWlkZGxlIG9mIGEgdmVjdG9yLAor
ICAgICAgICAvLyBidXQgd2UgZXhwZWN0IHRoaXMgd291bGQgYmUgcmFyZWx5IGhhcHBlbmVkIGlu
IHByYWN0aWNlIC0gb25seSB3aGVuCisgICAgICAgIC8vIGEgUGhpIG5vZGUgaW4gYSBqb2ludCBi
bG9jayBuZWVkcyB0byBoYW5kbGUgbW9yZSB0aGFuIDMgaW5jb21pbmcgZWRnZXMuCisgICAgICAg
IGlmIChyZXBsYWNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgc2l6ZV90IGkgPSBwaGlVc2Ut
PmZpbmQoUGhpVXNlKHJlcGxhY2UsIGNoaWxkSW5kZXgpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
ICE9IG5vdEZvdW5kKTsKKyAgICAgICAgICAgIHBoaVVzZS0+cmVtb3ZlKGkpOworICAgICAgICB9
CisKKyAgICAgICAgcGhpVXNlLT5hcHBlbmQoUGhpVXNlKG5vZGUsIGNoaWxkSW5kZXgpKTsKKyAg
ICB9CisKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0
aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdlbmVyYXRl
JyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5l
cmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXgg
Y2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQzID0gTm9Ob2RlKQpAQCAtMjM3OCw2ICsyNDA4LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBTZXR0aW5n
IEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5QcmVkZWNlc3Nvcik7
CiAjZW5kaWYKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoTm9k
ZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUGhp
VXNlKHZhbHVlSW5QcmVkZWNlc3NvciwgZW50cnkubV9waGksIDEpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlO
b2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTIzOTAsNiArMjQyMiw4IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIGVudHJ5Lm1fcGhp
LCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQyKE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpCisgICAg
ICAgICAgICAgICAgICAgIGFkZFBoaVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IsIGVudHJ5Lm1fcGhp
LCAyKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7
CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
CkBAIC0yNDAyLDYgKzI0MzYsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMg
PSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgogICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhOb2RlVXNlKHZhbHVlSW5Q
cmVkZWNlc3NvcikpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICBhZGRQaGlVc2UodmFsdWVJblBy
ZWRlY2Vzc29yLCBlbnRyeS5tX3BoaSwgMyk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIENoaWxkcmVuIG9m
IEAldTogIiwgZW50cnkubV9waGkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGls
ZHJlbihXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMjQyMiw2ICsyNDU4LDEyIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYo
bmV3UGhpKTsKIAogICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbiA9IHBoaU5vZGUtPmNo
aWxkcmVuOworICAgICAgICAgICAgaWYgKG1fZ3JhcGhbcGhpTm9kZS0+Y2hpbGQxKCkuaW5kZXhV
bmNoZWNrZWQoKV0ub3AgPT0gUGhpKQorICAgICAgICAgICAgICAgIGFkZFBoaVVzZShwaGlOb2Rl
LT5jaGlsZDEoKS5pbmRleFVuY2hlY2tlZCgpLCBuZXdQaGksIDEsIGVudHJ5Lm1fcGhpKTsKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoW3BoaU5vZGUtPmNoaWxkMigpLmluZGV4VW5jaGVja2VkKCld
Lm9wID09IFBoaSkKKyAgICAgICAgICAgICAgICBhZGRQaGlVc2UocGhpTm9kZS0+Y2hpbGQyKCku
aW5kZXhVbmNoZWNrZWQoKSwgbmV3UGhpLCAyLCBlbnRyeS5tX3BoaSk7CisgICAgICAgICAgICBp
ZiAobV9ncmFwaFtwaGlOb2RlLT5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpXS5vcCA9PSBQaGkp
CisgICAgICAgICAgICAgICAgYWRkUGhpVXNlKHBoaU5vZGUtPmNoaWxkMygpLmluZGV4VW5jaGVj
a2VkKCksIG5ld1BoaSwgMywgZW50cnkubV9waGkpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgQ2hpbGRyZW4g
b2YgQCV1OiAiLCBuZXdQaGkpOwpAQCAtMjQzMCw2ICsyNDcyLDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogCiAgICAgICAgICAgICBwaGlOb2RlLT5j
aGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJblByZWRlY2Vzc29yLCBOb05vZGUpOwor
ICAgICAgICAgICAgYWRkUGhpVXNlKG5ld1BoaSwgZW50cnkubV9waGksIDEpOworICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkpCisgICAgICAgICAg
ICAgICAgYWRkUGhpVXNlKHZhbHVlSW5QcmVkZWNlc3NvciwgZW50cnkubV9waGksIDIpOwogCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMDk5MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIK
KyNpbmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKQEAgLTU4LDYgKzU5LDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24p
CiAgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwogCisgICAgcGVyZm9ybVJlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUFyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBl
cmZvcm1DU0UoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDEwOTkwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNDEgQEAgc3RydWN0IFJlc29sdmVHbG9iYWxEYXRh
IHsKICAgICB1bnNpZ25lZCByZXNvbHZlSW5mb0luZGV4OwogfTsKIAorY2xhc3MgUGhpVXNlIHsK
K3B1YmxpYzoKKyAgICBQaGlVc2UoTm9kZUluZGV4IG5vZGUsIHVuc2lnbmVkIGNoaWxkSW5kZXgp
CisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCBjaGlsZEluZGV4KSkKKyAg
ICB7CisgICAgfQorCisgICAgTm9kZUluZGV4IG5vZGUoKSB7cmV0dXJuIG1fZW5jb2RlZFdvcmQg
Pj4gc2hpZnQoKTsgfQorICAgIHVuc2lnbmVkIGNoaWxkSW5kZXgoKSB7cmV0dXJuIG1fZW5jb2Rl
ZFdvcmQgJiAoKDEgPDwgc2hpZnQoKSkgLSAxKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBoaVVzZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbmNvZGVk
V29yZCA9PSBvdGhlci5tX2VuY29kZWRXb3JkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBQaGlVc2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW5j
b2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIAorICAgIHN0YXRpYyBp
bnQzMl90IG1ha2VXb3JkKE5vZGVJbmRleCBub2RlLCB1bnNpZ25lZCBjaGlsZEluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG5vZGUpIDw8IHNoaWZ0KCkpID4+IHNoaWZ0KCkpKSA9PSBub2RlKTsKKyAgICAgICAg
QVNTRVJUKGNoaWxkSW5kZXggPD0gKDEgPDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gKG5v
ZGUgPDwgc2hpZnQoKSkgfCBjaGlsZEluZGV4OworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1f
ZW5jb2RlZFdvcmQ7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8Tm9kZUluZGV4LCBWZWN0b3I8UGhp
VXNlPiwgV1RGOjpJbnRIYXNoPE5vZGVJbmRleD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8Tm9kZUluZGV4PiA+IFBoaVVzZU1hcDsKKwogLy8gCiAvLyA9PT0gR3JhcGggPT09
CiAvLwpAQCAtMzU1LDYgKzM5MCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vz
c0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRh
PiBtX3Jlc29sdmVHbG9iYWxEYXRhOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1l
bnRzOworICAgIFBoaVVzZU1hcCBtX3BoaVVzZXM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlh
YmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZl
Y3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKICAgICBTZWdtZW50ZWRWZWN0
b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJyZWR1bmRhbnQgcGhpIGVsaW1pbmF0aW9uIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIFZlY3Rv
cjxOb2RlSW5kZXgsIDg+IHdvcmtsaXN0OworICAgICAgICAKKyAgICAgICAgZm9yIChQaGlVc2VN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGhpVXNlcy5iZWdpbigpOyBpdGVyICE9IG1f
Z3JhcGgubV9waGlVc2VzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQoaXRlci0+Zmlyc3QpOworCisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBOb2RlSW5kZXggcGhpID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICAg
ICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworCisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbcGhp
XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBnZXRSZWR1bmRhbnRSZXBsYWNlbWVudChwaGkp
OworCisgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQgIT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgUGhpVXNlTWFwOjppdGVyYXRvciBwaGlFbnRyeSA9IG1fZ3JhcGgubV9waGlVc2VzLmZp
bmQocGhpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpRW50cnkgIT0gbV9ncmFwaC5tX3Bo
aVVzZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFZlY3RvcjxQaGlVc2U+JiBwaGlVc2UgPSBw
aGlFbnRyeS0+c2Vjb25kOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBoaVVzZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBQaGlVc2UmIHVz
ZSA9IHBoaVVzZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgdXNlTm9kZSA9IG1fZ3Jh
cGhbdXNlLm5vZGUoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICghdXNlTm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoICh1c2UuY2hpbGRJbmRleCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh1c2VOb2RlLmNoaWxk
MSgpLmluZGV4VW5jaGVja2VkKCkgPT0gcGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZU5vZGUuY2hpbGRyZW4uY2hpbGQxKCkuc2V0SW5kZXgocmVwbGFjZW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtyZXBsYWNlbWVudF0ucmVmKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHVzZU5vZGUuY2hpbGQyKCkuaW5kZXhVbmNoZWNrZWQoKSA9
PSBwaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgdXNlTm9kZS5jaGlsZHJlbi5jaGlsZDIo
KS5zZXRJbmRleChyZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W3JlcGxhY2VtZW50XS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
dXNlTm9kZS5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpID09IHBoaSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VOb2RlLmNoaWxkcmVuLmNoaWxkMygpLnNldEluZGV4KHJlcGxhY2VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnJlZigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmICh1c2VOb2RlLm9wID09IFBoaSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZCh1c2Uubm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoW3BoaV0uc2V0UmVmQ291bnQoMCk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaFtyZXBsYWNlbWVudF0uZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICBQaGlVc2VNYXA6Oml0ZXJhdG9yIHJlcGxhY2VtZW50RW50cnkgPSBtX2dyYXBoLm1fcGhp
VXNlcy5maW5kKHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRF
bnRyeSAhPSBtX2dyYXBoLm1fcGhpVXNlcy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8UGhpVXNlPiYgcmVwbGFjZW1lbnRVc2UgPSByZXBsYWNlbWVudEVudHJ5LT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VXNlLmFwcGVuZChwaGlVc2UpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaGlVc2UuY2xlYXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBOb2RlSW5kZXggZ2V0UmVk
dW5kYW50UmVwbGFjZW1lbnQoTm9kZUluZGV4IHBoaSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDEgPSBtX2dyYXBoW3BoaV0uY2hpbGQxKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAg
ICAgTm9kZUluZGV4IGNhbmRpZGF0ZSA9IGNoaWxkMSA9PSBwaGkgPyBOb05vZGUgOiBjaGlsZDE7
CisKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IG1fZ3JhcGhbcGhpXS5jaGlsZDIoKS5pbmRl
eFVuY2hlY2tlZCgpOworICAgICAgICBpZiAoY2FuZGlkYXRlICE9IE5vTm9kZSkgeworICAgICAg
ICAgICAgaWYgKGNoaWxkMiAhPSBOb05vZGUgJiYgY2hpbGQyICE9IGNhbmRpZGF0ZSAmJiBjaGls
ZDIgIT0gcGhpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0gZWxz
ZSBpZiAoY2hpbGQyICE9IHBoaSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNoaWxkMjsKKwor
ICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbV9ncmFwaFtwaGldLmNoaWxkMygpLmluZGV4VW5j
aGVja2VkKCk7CisgICAgICAgIGlmIChjYW5kaWRhdGUgIT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBpZiAoY2hpbGQzICE9IE5vTm9kZSAmJiBjaGlsZDMgIT0gY2FuZGlkYXRlICYmIGNoaWxkMyAh
PSBwaGkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgfSBlbHNlIGlm
IChjaGlsZDMgIT0gcGhpKQorICAgICAgICAgICAgY2FuZGlkYXRlID0gY2hpbGQzOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICB9CisKK307CisKK3ZvaWQgcGVyZm9y
bVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBydW5QaGFzZTxS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5h
dGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZV9oCisjZGVmaW5lIERG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFdlIGlu
c2VydGVkIG1hbnkgY2FuLWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBidWlsZGluZyB0aGUg
Z3JhcGguCisvLyBUaGlzIHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4KKwordm9pZCBwZXJm
b3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdSZWR1
bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>130493</attachid>
            <date>2012-03-06 17:39:24 -0800</date>
            <delta_ts>2012-03-06 17:39:24 -0800</delta_ts>
            <desc>Case showing the problem of type predications propagation after Phi elimination</desc>
            <filename>debug.phi.txt</filename>
            <type>text/plain</type>
            <size>6889</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">R3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOgpCbG9jayAjMCAoYmMjMCk6IAogIHZhcnMgYmVmb3Jl
OiAoTm9uZSwgW10pIChJbnQsIFtdKSA6IChOb25lLCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10p
IChOb25lLCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pCiAgdmFyIGxpbmtzOiBAMCBAMSA6IC0g
LSAtIC0gLSAtCiAgIDA6ICBza2lwcGVkICA8IDA6LT4gIFNldEFyZ3VtZW50KGFyZzAoQSkpCiAg
IDE6ICAgICAgICAgICA8IDI6LT4gIFNldEFyZ3VtZW50KGFyZzEoVikpICBwcmVkaWN0aW5nIElu
dCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgIDI6ICBza2lwcGVkICA8IDA6LT4gIEpTQ29uc3Rh
bnQoJDMgPSBVbmRlZmluZWQpCiAgIDM6ICBza2lwcGVkICA8IDA6LT4gIFNldExvY2FsKEAyLCBy
MChDKSkKICAgNDogIHNraXBwZWQgIDwgMDotPiAgU2V0TG9jYWwoQDIsIHIxKEQpKQogICA1OiAg
c2tpcHBlZCAgPCAwOi0+ICBTZXRMb2NhbChAMiwgcjIoRSkpCiAgIDY6ICBza2lwcGVkICA8IDA6
LT4gIFNldExvY2FsKEAyLCByMyhGKSkKICAgNzogICAgICAgICAgIDwgMjo0PiAgSlNDb25zdGFu
dCgkMCA9IEludDMyOiAwKQogICA4OiAgICAgICAgICAgPCAxOi0+ICBTZXRMb2NhbChANywgcjAo
SykpICBwcmVkaWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgIDk6ICAgICAgICAg
ICA8IDI6NT4gIEpTQ29uc3RhbnQoJDEgPSBJbnQzMjogMSkKICAxMDogICAgICAgICAgIDwgMjot
PiAgU2V0TG9jYWwoQDksIHIxKE0pKSAgcHJlZGljdGluZyBJbnQsIGRvdWJsZSByYXRpbyAwLjAw
MDAwMAogIDExOiAgICAgICAgICAgPCAyOi0+ICBTZXRMb2NhbChAOSwgcjIoTikpICBwcmVkaWN0
aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgMTI6ICAgICAgICAgICA8IDE6LT4gIFNl
dExvY2FsKEA3LCByMyhTKSkgIHByZWRpY3RpbmcgSW50LCBkb3VibGUgcmF0aW8gMC4wMDAwMDAK
ICAxMzogICAgICAgICAgIDwhMDotPiAgSnVtcChUOiMzKQogIHZhcnMgYWZ0ZXI6IChOb25lLCBb
XSkgKEludCwgW10pIDogKEludCwgW10pIChJbnQsIFtdKSAoSW50LCBbXSkgKEludCwgW10pIChO
b25lLCBbXSkgKE5vbmUsIFtdKQpCbG9jayAjMSAoYmMjMTUpOiAgKE9TUiB0YXJnZXQpCiAgdmFy
cyBiZWZvcmU6IChOb25lLCBbXSkgKEludCwgW10pIDogKEludCwgW10pIChOb25lLCBbXSkgKE5v
bmUsIFtdKSAoSW50LCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pCiAgdmFyIGxpbmtzOiAtIEA1
NCA6IEAxNiBAMTkgQDIxIEA0OCAtIC0KICA1NDogIHNraXBwZWQgIDwgMDotPiAgUGhpKEAzOSwg
YXJnMShWKSkKICA0ODogIHNraXBwZWQgIDwgMDotPiAgUGhpKEAzNywgcjMoUykpCiAgMTQ6ICAg
ICAgICAgICA8ITA6LT4gIFBoYW50b20oKQogIDE1OiAgc2tpcHBlZCAgPCAwOi0+ICBQaGkoQDQ2
LCByMChLKSkKICAxNjogICAgICAgICAgIDwgMTo0PiAgR2V0TG9jYWwoQDQ2LCByMChLKSkgIHBy
ZWRpY3RpbmcgSW50LCBkb3VibGUgcmF0aW8gMC4wMDAwMDAKICAxNzogIHNraXBwZWQgIDwgMDot
PiAgU2V0TG9jYWwoQDE2LCByNChMKSkKICAxODogIHNraXBwZWQgIDwgMDotPiAgUGhpKEA1MSwg
cjEoTSkpCiAgMTk6ICAgICAgICAgICA8IDE6NT4gIEdldExvY2FsKEAxMCwgcjEoTSkpICBwcmVk
aWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgMjA6ICBza2lwcGVkICA8IDA6LT4g
IFBoaShANDksIHIyKE4pKQogIDIxOiAgICAgICAgICAgPCAxOjY+ICBHZXRMb2NhbChAMTEsIHIy
KE4pKSAgcHJlZGljdGluZyBJbnQsIGRvdWJsZSByYXRpbyAwLjAwMDAwMAogIDIyOiAgICAgICAg
ICAgPCExOjY+ICBWYWx1ZUFkZChAMTksIEAyMSwgVXNlZEFzTnVtfE5lZWRzTmVnWmVybykKICAy
MzogIHNraXBwZWQgIDwgMDotPiAgU2V0TG9jYWwoQDIyLCByNShPKSkKICAyNDogICAgICAgICAg
IDwgMTo1PiAgSlNDb25zdGFudCgkMiA9IEludDMyOiAyKQogIDI1OiAgICAgICAgICAgPCAxOjY+
ICBBcml0aE11bChAMjQsIEAyMiwgVXNlZEFzTnVtfE5lZWRzTmVnWmVybykKICAyNjogIHNraXBw
ZWQgIDwgMDotPiAgU2V0TG9jYWwoQDI1LCByNShQKSkKICAyNzogICAgICAgICAgIDwhMTo2PiAg
VmFsdWVBZGQoQDE2LCBAMjUsIFVzZWRBc051bXxOZWVkc05lZ1plcm8pCiAgMjg6ICBza2lwcGVk
ICA8IDA6LT4gIFNldExvY2FsKEAyNywgcjQoUSkpCiAgMjk6ICAgICAgICAgICA8IDE6LT4gIFNl
dExvY2FsKEAyNywgcjAoSykpICBwcmVkaWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAw
CiAgMzA6ICAgICAgICAgICA8ITA6LT4gIEp1bXAoVDojMikKICB2YXJzIGFmdGVyOiAoTm9uZSwg
W10pIChOb25lLCBbXSkgOiAoSW50LCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pIChOb25lLCBb
XSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pCkJsb2NrICMyIChiYyMzNyk6IAogIHZhcnMgYmVmb3Jl
OiAoTm9uZSwgW10pIChOb25lLCBbXSkgOiAoSW50LCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10p
IChOb25lLCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pCiAgdmFyIGxpbmtzOiAtIEA1MyA6IEA0
NyBANTIgQDUwIEAzMiAtIC0KICA1MzogIHNraXBwZWQgIDwgMDotPiAgUGhpKEAzOSwgYXJnMShW
KSkKICA1MjogIHNraXBwZWQgIDwgMDotPiAgUGhpKEA1MSwgcjEoTSkpCiAgNTA6ICBza2lwcGVk
ICA8IDA6LT4gIFBoaShANDksIHIyKE4pKQogIDQ3OiAgc2tpcHBlZCAgPCAwOi0+ICBQaGkoQDI5
LCByMChLKSkKICAzMTogIHNraXBwZWQgIDwgMDotPiAgUGhpKEA0OCwgcjMoUykpCiAgMzI6ICAg
ICAgICAgICA8IDE6Nj4gIEdldExvY2FsKEAzNywgcjMoUykpICBwcmVkaWN0aW5nIEludCwgZG91
YmxlIHJhdGlvIDAuMDAwMDAwCiAgMzM6ICAgICAgICAgICA8IDE6ND4gIEpTQ29uc3RhbnQoJDEg
PSBJbnQzMjogMSkKICAzNDogICAgICAgICAgIDwgMTo0PiAgQXJpdGhBZGQoQDMyLCBAMzMsIFVz
ZWRBc051bXxOZWVkc05lZ1plcm8pCiAgMzU6ICAgICAgICAgICA8IDE6LT4gIFNldExvY2FsKEAz
NCwgcjMoUykpICBwcmVkaWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgMzY6ICAg
ICAgICAgICA8ITA6LT4gIEp1bXAoVDojMykKICB2YXJzIGFmdGVyOiAoTm9uZSwgW10pIChOb25l
LCBbXSkgOiAoTm9uZSwgW10pIChOb25lLCBbXSkgKE5vbmUsIFtdKSAoSW50LCBbXSkgKE5vbmUs
IFtdKSAoTm9uZSwgW10pCkJsb2NrICMzIChiYyMzOSk6IAogIHZhcnMgYmVmb3JlOiAoTm9uZSwg
W10pIChJbnQsIFtdKSA6IChJbnQsIFtdKSAoSW50LCBbXSkgKEludCwgW10pIChJbnQsIFtdKSAo
Tm9uZSwgW10pIChOb25lLCBbXSkKICB2YXIgbGlua3M6IC0gQDQwIDogQDQ2IEA1MSBANDkgQDM4
IC0gLQogIDUxOiAgc2tpcHBlZCAgPCAwOi0+ICBQaGkoQDEwLCBAMTAsIHIxKE0pKQogIDQ5OiAg
c2tpcHBlZCAgPCAwOi0+ICBQaGkoQDExLCBAMTEsIHIyKE4pKQogIDQ2OiAgICAgICAgICAgPCAy
Oi0+ICBQaGkoQDgsIEAyOSwgcjAoSykpICBwcmVkaWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAu
MDAwMDAwCiAgMzc6ICAgICAgICAgICA8IDI6LT4gIFBoaShAMTIsIEAzNSwgcjMoUykpICBwcmVk
aWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAwMDAwCiAgMzg6ICAgICAgICAgICA8IDE6ND4g
IEdldExvY2FsKEAzNywgcjMoUykpICBwcmVkaWN0aW5nIEludCwgZG91YmxlIHJhdGlvIDAuMDAw
MDAwCiAgMzk6ICBza2lwcGVkICA8IDA6LT4gIFBoaShAMSwgQDEsIGFyZzEoVikpCiAgNDA6ICAg
ICAgICAgICA8IDE6Nj4gIEdldExvY2FsKEAxLCBhcmcxKFYpKSAgcHJlZGljdGluZyBJbnQsIGRv
dWJsZSByYXRpbyAwLjAwMDAwMAogIDQxOiAgICAgICAgICAgPCExOjY+ICBDb21wYXJlTGVzcyhA
MzgsIEA0MCkKICA0MjogICAgICAgICAgIDwhMDotPiAgQnJhbmNoKEA0MSwgVDojMSwgRjojNCkK
ICB2YXJzIGFmdGVyOiAoTm9uZSwgW10pIChJbnQsIFtdKSA6IChJbnQsIFtdKSAoTm9uZSwgW10p
IChOb25lLCBbXSkgKEludCwgW10pIChOb25lLCBbXSkgKE5vbmUsIFtdKQpCbG9jayAjNCAoYmMj
NDMpOiAKICB2YXJzIGJlZm9yZTogKE5vbmUsIFtdKSAoTm9uZSwgW10pIDogKEludCwgW10pIChO
b25lLCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pIChOb25lLCBbXSkgKE5vbmUsIFtdKQogIHZh
ciBsaW5rczogLSAtIDogQDQ0IC0gLSAtIC0gLQogIDQzOiAgc2tpcHBlZCAgPCAwOi0+ICBQaGko
QDQ2LCByMChLKSkKICA0NDogICAgICAgICAgIDwgMTo2PiAgR2V0TG9jYWwoQDQ2LCByMChLKSkg
IHByZWRpY3RpbmcgSW50LCBkb3VibGUgcmF0aW8gMC4wMDAwMDAKICA0NTogICAgICAgICAgIDwh
MDotPiAgUmV0dXJuKEA0NCkKICB2YXJzIGFmdGVyOiAoTm9uZSwgW10pIChOb25lLCBbXSkgOiAo
Tm9uZSwgW10pIChOb25lLCBbXSkgKE5vbmUsIFtdKSAoTm9uZSwgW10pIChOb25lLCBbXSkgKE5v
bmUsIFtdKQpTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2RlIEAwIChiYyMwKSBhdCBKSVQgb2Zm
c2V0IDB4MmIgICAgIApTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQDEgKGJjIzApIGF0
IEpJVCBvZmZzZXQgMHgyYiAgICAgICAKU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAMiAo
YmMjMCkgYXQgSklUIG9mZnNldCAweDJiICAgICAKU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9k
ZSBAMyAoYmMjMCkgYXQgSklUIG9mZnNldCAweDJiICAgICAKU3BlY3VsYXRpdmVKSVQgc2tpcHBp
bmcgTm9kZSBANCAoYmMjMCkgYXQgSklUIG9mZnNldCAweDJiICAgICAKU3BlY3VsYXRpdmVKSVQg
c2tpcHBpbmcgTm9kZSBANSAoYmMjMCkgYXQgSklUIG9mZnNldCAweDJiICAgICAKU3BlY3VsYXRp
dmVKSVQgc2tpcHBpbmcgTm9kZSBANiAoYmMjMCkgYXQgSklUIG9mZnNldCAweDJiICAgICAKU3Bl
Y3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEA3IChiYyMxKSBhdCBKSVQgb2Zmc2V0IDB4MmIg
ICAtPiBOb25lLCB2ciM0ICAgIApTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQDggKGJj
IzEpIGF0IEpJVCBvZmZzZXQgMHgyYiAgIFNwZWNJbnRANyAgICAgICAKU3BlY3VsYXRpdmVKSVQg
Z2VuZXJhdGluZyBOb2RlIEA5IChiYyM0KSBhdCBKSVQgb2Zmc2V0IDB4MmYgICAtPiBOb25lLCB2
ciM1ICAgIApTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQDEwIChiYyM0KSBhdCBKSVQg
b2Zmc2V0IDB4MmYgICBTcGVjSW50QDkgICAgICAgClNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcg
Tm9kZSBAMTEgKGJjIzcpIGF0IEpJVCBvZmZzZXQgMHgzNyAgIFNwZWNJbnRAOSAgICAgICAKU3Bl
Y3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAxMiAoYmMjMTApIGF0IEpJVCBvZmZzZXQgMHgz
YSAgIFNwZWNJbnRANyAgICAgICAKU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAxMyAo
YmMjMTMpIGF0IEpJVCBvZmZzZXQgMHgzZCAgICAgICAKU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGlu
ZyBOb2RlIEAxNCAoYmMjMTUpIGF0IEpJVCBvZmZzZXQgMHg0MiAgICAgICAKU3BlY3VsYXRpdmVK
SVQgc2tpcHBpbmcgTm9kZSBAMTUgKGJjIzE2KSBhdCBKSVQgb2Zmc2V0IDB4NDIgICAgIApTcGVj
dWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQDE2IChiYyMxNikgYXQgSklUIG9mZnNldCAweDQy
ICAgLT4gSW50ZWdlciwgdnIjNCwgZWN4ICAgIApTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2Rl
IEAxNyAoYmMjMTYpIGF0IEpJVCBvZmZzZXQgMHg0NCAgICAgClNwZWN1bGF0aXZlSklUIHNraXBw
aW5nIE5vZGUgQDE4IChiYyMxOSkgYXQgSklUIG9mZnNldCAweDQ0ICAgICAKU3BlY3VsYXRpdmVK
SVQgZ2VuZXJhdGluZyBOb2RlIEAxOSAoYmMjMTkpIGF0IEpJVCBvZmZzZXQgMHg0NCAgIFNwZWN1
bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLgpTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2RlIEAz
MSAoYmMjMzcpIGF0IEpJVCBvZmZzZXQgMHg0OSAgICAgClNwZWN1bGF0aXZlSklUIGdlbmVyYXRp
bmcgTm9kZSBAMzIgKGJjIzM3KSBhdCBKSVQgb2Zmc2V0IDB4NDkgICBTcGVjdWxhdGl2ZUpJVCB3
YXMgdGVybWluYXRlZC4KU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAzNyAoYmMjMzkp
IGF0IEpJVCBvZmZzZXQgMHg0ZSAgICAgICAKU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2Rl
IEAzOCAoYmMjMzkpIGF0IEpJVCBvZmZzZXQgMHg0ZSAgIC0+IEludGVnZXIsIHZyIzQsIGVheCAg
ICAKU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAMzkgKGJjIzM5KSBhdCBKSVQgb2Zmc2V0
IDB4NTEgICAgIApTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQDQwIChiYyMzOSkgYXQg
SklUIG9mZnNldCAweDUxICAgLT4gSW50ZWdlciwgdnIjNiwgZWR4ICAgIApTcGVjdWxhdGl2ZUpJ
VCBnZW5lcmF0aW5nIE5vZGUgQDQxIChiYyMzOSkgYXQgSklUIG9mZnNldCAweDU0ICAgU3BlY0lu
dEAzOCAgIFNwZWNJbnRANDAgICAtPiBJbnRlZ2VyLCB2ciM2LCBlZHggICAgClNwZWN1bGF0aXZl
SklUIHNraXBwaW5nIE5vZGUgQDQzIChiYyM0MykgYXQgSklUIG9mZnNldCAweDVjICAgICAKU3Bl
Y3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEA0NCAoYmMjNDMpIGF0IEpJVCBvZmZzZXQgMHg1
YyAgIC0+IEludGVnZXIsIHZyIzYsIGVjeCAgICAKU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBO
b2RlIEA0NSAoYmMjNDMpIGF0IEpJVCBvZmZzZXQgMHg1ZSAgICAgICAKSklUIGNvZGUgZm9yIDB4
ODcyNTQ0OCBzdGFydCBhdCBbMHhiMzc4NWZjMCwgMHhiMzc4NjBhMykuIFNpemUgPSAyMjcuCk9T
UiBpbiAweDg3MjU0NDgoMHg4NzE3Yzg4KSBmcm9tIGJjIzE1CiAgICBPU1IgZmFpbGVkIGJlY2F1
c2UgdmFyaWFibGUgMSBpcyBJbnQzMjogMSwgZXhwZWN0ZWQgKE5vbmUsIFtdKS4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130579</attachid>
            <date>2012-03-07 02:54:30 -0800</date>
            <delta_ts>2012-03-07 06:51:21 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>80415.1.patch</filename>
            <type>text/plain</type>
            <size>26510</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTAzLTA3ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUGhpcyBpbiBERkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBtYXkgbm90IGhhdmUg
YW55IGFkdmFudGFnZSBhdCBjdXJyZW50IHN0YWdlLCB0aGlzIGlzIHRvd2FyZHMKKyAgICAgICAg
bWluaW1hbCBTU0EgdG8gbWFrZSBtb3JlIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9ucyAobGlrZSBi
dWcgNzY3NzApIGVhc2llci4KKyAgICAgICAgV2UgaGF2ZSB0aGUgY2hvaWNlcyBlaXRoZXIgdG8g
YnVpbGQgbWluaW1hbCBTU0EgZnJvbSBzY3JhdGNoIG9yIHRvCisgICAgICAgIGtlZXAgY3VycmVu
dCBzaW1wbGUgUGhpIGluc2VydGlvbiBtZWNoYW5pc20gYW5kIHJlbW92ZSB0aGUgcmVkdW5kYW5j
eQorICAgICAgICBpbiBhbm90aGVyIHBoYXNlLiBDdXJyZW50bHkgd2UgY2hvb3NlIHRoZSBsYXR0
ZXIgYmVjYXVzZSB0aGUgY2hhbmdlCisgICAgICAgIGNvdWxkIGJlIHNtYWxsZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjppbnNlcnRQaGlOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6UGhp
U3RhY2tFbnRyeTo6UGhpU3RhY2tFbnRyeSk6CisgICAgICAgIChQaGlTdGFja0VudHJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAgICAg
ICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1w
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJs
b2NrSW5kZXgpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRh
bnRQaGlFbGltaW5hdGlvblBoYXNlOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OmdldFJlZHVuZGFu
dFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlOjpyZXBsYWNlUGhpQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2U6OmZpeHVwUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisKIDIwMTItMDMtMDcg
IEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFBhcnNlcjogSW5saW5l
IFNjb3BlTm9kZURhdGEgaW50byBTY29wZU5vZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBTRVQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1JlcGF0
Y2guY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFz
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAz
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBc
CiAgICAgZGZnL0RGR1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCBcCisgICAgZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
IFwKICAgICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDggQEAKIAkJMDZEMzU4QjQwREFBREFBQTAwM0IxNzRFIC8qIE1h
aW5UaHJlYWRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNkQzNThBMTBEQUFEOUM0MDAzQjE3NEUgLyogTWFpblRocmVhZE1hYy5tbSAqLzsgfTsK
IAkJMDg4RkE1QkIwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODhGQTVCOTBFRjc2RDQzMDA1
NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLzsgfTsKIAkJMDhEREE1QzExMjY0NjMxNzAwNzUx
NzMyIC8qIFVTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwOEREQTVCQjEyNjQ1RjFEMDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwQTQz
MzdCQjE1MDYyMTg4MDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdC
QTE1MDYyMTg4MDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAg
Ki87IH07CisJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRp
b25QaGFzZS5oICovOyB9OwogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMz
MEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCRjI4QTI5
MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXpl
TGltaXRzLmNwcCAqLzsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBp
bGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzU2LDYg
Kzc1OCw4IEBACiAJCTA4OTZDMjlFMTI2NUFCMDkwMEIxQ0REMyAvKiBTdHJpbmdDb25jYXRlbmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHJpbmdDb25jYXRlbmF0ZS5o
OyBwYXRoID0gdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwOEREQTVCQjEyNjQ1RjFEMDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVN0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFMjc5RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51
bWJlclNlZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZG9tTnVtYmVy
U2VlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQTQzMzdCQTE1MDYyMTg4MDA5
OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEE0MzM3QkQxNTA2MjE5QjAwOTkxQzk1IC8qIERG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVRyYWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBCNEQ3RTYyMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVUcmFpdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJBQzk0OUUxMzM4NzI4NDAwQ0YxMzVCIC8qIFRocmVh
ZFJlc3RyaWN0aW9uVmVyaWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU0OCw2ICsyNTUyLDggQEAKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZH
UGhhc2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBBNDMzN0JBMTUwNjIx
ODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcCAqLywKKwkJ
CQkwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJh
bmsuaCAqLywKIAkJCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAg
Ki8sCiAJCQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLywKQEAg
LTMwODIsNiArMzA4OCw3IEBACiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRG
RjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM3MDcsNiArMzcxNCw3IEBACiAJ
CQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTZBMUQ1MTUw
MDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBBNDMzN0JCMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQsOCArMjI0LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBl
bmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7CisgICAgICAg
IE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSksIE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgbV9sb2Nh
bFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0g
MSwgcGhpLCBvcGVyYW5kKSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5k
UHJlZGljdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgcGhpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlSW5kZXg7CiAgICAgICAgIApAQCAtMjk0LDggKzI5NCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAgICAgICBOb2RlSW5k
ZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGFyZ3VtZW50KSk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBo
KFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSAtIDEpKTsKKyAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgcGhpLCBhcmd1bWVudCkpOwogICAg
ICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFByZWRpY3Rpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOwogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRl
eDsKICAgICAgICAgCkBAIC0zNTAsMTQgKzM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9
IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIE5v
ZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKICAgICAgICAgbm9kZUluZGV4
ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CiAg
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGluZGV4KSk7CisgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBwaGksIGluZGV4KSk7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5v
ZGVJbmRleDsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50
QmxvY2ssIHBoaSwgaW5kZXgpKTsKKyAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQo
UGhpU3RhY2tFbnRyeShtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsIHBoaSwgaW5kZXgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgp
ID0gbm9kZUluZGV4OwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKICAgICAgICAgfQpAQCAtNTgw
LDEwICs1ODAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdElu
ZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykpOwotICAgICAgICBpZiAob3AgPT0gUGhpKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnBoaXMuYXBwZW5kKHJlc3VsdEluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAogICAg
ICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYo
cmVzdWx0SW5kZXgpOwpAQCAtNTkzLDggKzU5MSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEs
IGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7Ci0gICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAg
ICAgaWYgKG9wID09IFBoaSkKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmQocmVzdWx0SW5kZXgpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJh
dGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC02MTUsMTAgKzYx
NSwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CiAgICAgfQogCi0g
ICAgTm9kZUluZGV4IGluc2VydFBoaU5vZGUoT3BJbmZvIGluZm8sIEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIE5vZGVJbmRleCBpbnNlcnRQaGlOb2RlKE9wSW5mbyBpbmZvLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCiAgICAgeworICAgICAgICBBU1NFUlQoYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworCiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9
IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUo
UGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvKSk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5k
KE5vZGUoUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBPcEluZm8oYmxvY2tJbmRleCkp
KTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdEluZGV4KTsKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0SW5kZXg7CkBAIC04NjUsMTQgKzg2OCwxNCBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZU51bWJlcjsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5
IHsKLSAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBo
aSwgdW5zaWduZWQgdmFyTm8pCisgICAgICAgIFBoaVN0YWNrRW50cnkoQmxvY2tJbmRleCBibG9j
aywgTm9kZUluZGV4IHBoaSwgdW5zaWduZWQgdmFyTm8pCiAgICAgICAgICAgICA6IG1fYmxvY2so
YmxvY2spCiAgICAgICAgICAgICAsIG1fcGhpKHBoaSkKICAgICAgICAgICAgICwgbV92YXJObyh2
YXJObykKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKKyAgICAgICAgQmxvY2tJbmRleCBtX2Jsb2NrOwogICAgICAgICBOb2RlSW5kZXggbV9waGk7
CiAgICAgICAgIHVuc2lnbmVkIG1fdmFyTm87CiAgICAgfTsKQEAgLTIzMTAsNyArMjMxMyw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIFBoaVN0YWNr
RW50cnkgZW50cnkgPSBwaGlTdGFjay5sYXN0KCk7CiAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgCi0gICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0g
ZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgIFByZWRlY2Vzc29yTGlzdCYg
cHJlZGVjZXNzb3JzID0gbV9ncmFwaC5tX2Jsb2Nrc1tlbnRyeS5tX2Jsb2NrXS0+bV9wcmVkZWNl
c3NvcnM7CiAgICAgICAgIHVuc2lnbmVkIHZhck5vID0gZW50cnkubV92YXJObzsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAKQEAgLTIzMzMsMTMgKzIzMzYsMTMgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICBEaWQgbm90IGZpbmQgbm9kZSwgYWRkaW5nIHBoaS5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAg
ICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyBhcmd1bWVudFRv
T3BlcmFuZCh2YXJObykgOiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSkpLCBwcmVkZWNlc3NvckJs
b2NrKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2Rl
KE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3Rh
Y2sgPyBhcmd1bWVudFRvT3BlcmFuZCh2YXJObykgOiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSkp
LCBwcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNl
c3NvcjsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sp
CiAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5z
ZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsK
LSAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3Nv
ckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7CisgICAgICAgICAgICAgICAgcGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JzW2ldLCB2YWx1ZUluUHJlZGVj
ZXNzb3IsIHZhck5vKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBGb3VuZCBHZXRM
b2NhbCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5o
IgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAi
REZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC01OCw2ICs1OSw3IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU0KICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAgICBk
ZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKIAorICAgIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGlt
aW5hdGlvbihkZmcpOwogICAgIHBlcmZvcm1Bcml0aE5vZGVGbGFnc0luZmVyZW5jZShkZmcpOwog
ICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1NFKGRm
Zyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTEwMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Niw4ICsyNjYsMTEgQEAgdm9pZCBHcmFwaDo6ZHVtcCgpCiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7CiAgICAgICAgIGRhdGFMb2co
IkJsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2lu
LCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFy
Z2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOwogICAgICAgICBkYXRhTG9nKCIgIFBoaSBOb2Rl
czpcbiIpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgZHVtcChibG9jay0+cGhpc1tpXSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IC8vIER1bXBpbmcgdGhlIGRlYWQgUGhpIG5vZGVzIGlzIGp1c3QgYW5ub3lpbmchCisgICAgICAg
ICAgICBpZiAoYXQoYmxvY2stPnBoaXNbaV0pLnJlZkNvdW50KCkpCisgICAgICAgICAgICAgICAg
ZHVtcChibG9jay0+cGhpc1tpXSk7CisgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICB2YXJz
IGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAg
ICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBXVEY6OmRhdGFGaWxlKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMDAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTgsNiArNDk4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0KICAgICAKKyAgICBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgoKQorICAgIHsKKyAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgUGhpIG5vZGVzIGhhdmUgdGhl
IGJsb2NrIGluZGV4IGVuY29kZWQuCisgICAgICAgIEFTU0VSVChvcCA9PSBQaGkpOworICAgICAg
ICByZXR1cm4gbV9vcEluZm8yOworICAgIH0KKwogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG9wKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUmVkdW5kYW50UGhpRWxp
bWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJy
ZWR1bmRhbnQgcGhpIGVsaW1pbmF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBkbyB7
CisgICAgICAgICAgICBjaGFuZ2VkID0gZml4dXBQaGlzKCk7CisgICAgICAgIH0gd2hpbGUgKGNo
YW5nZWQpOworCisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBtX2dy
YXBoLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOworCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpeCB0aGUgdmFyaWFibGUgaW5m
b3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZGVhZCBQaGkgbm9kZXMuCisgICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSAmJiBub2RlLm9wICE9IFBoaSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5v
ZGUuY2hpbGQxKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aFtjaGlsZDFdLm9wID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hp
bGRSZXBsYWNlbWVudCA9IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KGNoaWxkMSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZFJlcGxhY2VtZW50ICE9IE5vTm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKS5zZXRJbmRleChjaGlsZFJlcGxh
Y2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5kZXJlZigp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBnZXRSZWR1bmRhbnRSZXBsYWNlbWVu
dChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IE5vTm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50IFBoaSBub2RlIHdpbGwgYmUgc2tpcHBlZCwg
d2UgbmVlZCB0byB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHZhcmlhYmxlIGlu
Zm9ybWF0aW9uIGlmIGl0IHJlZmVyZW5jZXMgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLmJsb2NrSW5k
ZXgoKV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gbm9kZS5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZyA9IG9w
ZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJh
c2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmcpID09IGluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmd1bWVudCBtdXN0IGJlIHVudXNlZCBp
biB0aGlzIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNpY0Js
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJnKSA9PSBpbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFy
ZykgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJnKSA9IHJlcGxhY2VtZW50OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChvcGVy
YW5kKSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbG9j
YWwgdmFyaWFibGUgbXVzdCBiZSB1bnVzZWQgaW4gdGhpcyBibG9jay4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID09IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwob3BlcmFuZCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3Bl
cmFuZCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9k
ZUluZGV4IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KE5vZGVJbmRleCBwaGkpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQxID0gbV9ncmFwaFtwaGldLmNoaWxkMSgpLmluZGV4VW5jaGVj
a2VkKCk7CisgICAgICAgIE5vZGVJbmRleCBjYW5kaWRhdGUgPSBjaGlsZDEgPT0gcGhpID8gTm9O
b2RlIDogY2hpbGQxOworCisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBtX2dyYXBoW3BoaV0u
Y2hpbGQyKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBOb05v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZDIgIT0gTm9Ob2RlICYmIGNoaWxkMiAhPSBjYW5k
aWRhdGUgJiYgY2hpbGQyICE9IHBoaSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkMiAhPSBwaGkpCisgICAgICAgICAgICBjYW5kaWRhdGUg
PSBjaGlsZDI7CisKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG1fZ3JhcGhbcGhpXS5jaGls
ZDMoKS5pbmRleFVuY2hlY2tlZCgpOworICAgICAgICBpZiAoY2FuZGlkYXRlICE9IE5vTm9kZSkg
eworICAgICAgICAgICAgaWYgKGNoaWxkMyAhPSBOb05vZGUgJiYgY2hpbGQzICE9IGNhbmRpZGF0
ZSAmJiBjaGlsZDMgIT0gcGhpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGQzICE9IHBoaSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNo
aWxkMzsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorCisgICAg
Ym9vbCByZXBsYWNlUGhpQ2hpbGQoTm9kZSYgcGhpTm9kZSwgdW5zaWduZWQgY2hpbGRJbmRleCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZEluZGV4IDwgMyk7CisKKyAgICAgICAgYm9vbCBy
ZXBsYWNlZCA9IGZhbHNlOworCU5vZGVJbmRleCBjaGlsZCA9IHBoaU5vZGUuY2hpbGRyZW4uY2hp
bGQoY2hpbGRJbmRleCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAgaWYgKGNoaWxkICE9IE5v
Tm9kZSAmJiBtX2dyYXBoW2NoaWxkXS5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGlsZFJlcGxhY2VtZW50ID0gZ2V0UmVkdW5kYW50UmVwbGFjZW1lbnQoY2hpbGQpOworICAg
ICAgICAgICAgaWYgKGNoaWxkUmVwbGFjZW1lbnQgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZHJlbi5jaGlsZChjaGlsZEluZGV4KS5zZXRJbmRleChjaGlsZFJlcGxh
Y2VtZW50KTsKKyAgICAgICAgICAgICAgICByZXBsYWNlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKHBoaU5vZGUucmVmQ291bnQoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZihjaGlsZFJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJl
ZihjaGlsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXBsYWNlZDsKKyAgICB9CisKKyAgICBib29sIGZpeHVwUGhpcygpCisg
ICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
KSB7CisgICAgICAgICAgICBWZWN0b3I8Tm9kZUluZGV4PiYgcGhpcyA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tdLT5waGlzOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBo
aXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhpID0gcGhpc1tp
XTsKKyAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGldOworCisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDApICYmIHBo
aU5vZGUucmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBo
aUNoaWxkKHBoaU5vZGUsIDEpICYmIHBoaU5vZGUucmVmQ291bnQoKSk7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDIpICYmIHBoaU5vZGUucmVm
Q291bnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hh
bmdlZDsKKyAgICB9CisKK307CisKK3ZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1
bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUmVkdW5kYW50
UGhpRWxpbWluYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFdlIGluc2VydGVkIG1hbnkgY2FuLWJlLXJlZHVu
ZGFudCBQaGkgbm9kZXMgd2hlbiBidWlsZGluZyB0aGUgZ3JhcGguCisvLyBUaGlzIHBoYXNlIHdp
bGwganVzdCByZW1vdmUgdGhlbS4KKwordm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRp
b24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>130581</attachid>
            <date>2012-03-07 02:56:44 -0800</date>
            <delta_ts>2012-03-07 02:56:44 -0800</delta_ts>
            <desc>Latest performance result</desc>
            <filename>c_20120307_1807_benchReport.txt</filename>
            <type>text/plain</type>
            <size>7129</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBWOCwgYW5kIEtyYWtlbiBvbiBcYy4KClZN
cyB0ZXN0ZWQ6CiJUb1QiIGF0IC9ob21lL3l4aWFuL1dlYktpdF9vcmlnL1dlYktpdEJ1aWxkL1Jl
bGVhc2UvYmluL2pzYwoiODA0MTUiIGF0IC9tbnQvc3VwcGxlbWVudC9XZWJLaXQvV2ViS2l0QnVp
bGQvUXQvUmVsZWFzZS9iaW4vanNjCgpDb2xsZWN0ZWQgMTIgc2FtcGxlcyBwZXIgYmVuY2htYXJr
L1ZNLCB3aXRoIDQgVk0gaW52b2NhdGlvbnMgcGVyIGJlbmNobWFyay4gRW1pdHRlZCBhIGNhbGwg
dG8gZ2MoKSBiZXR3ZWVuIHNhbXBsZQptZWFzdXJlbWVudHMuIFVzZWQgMSBiZW5jaG1hcmsgaXRl
cmF0aW9uIHBlciBWTSBpbnZvY2F0aW9uIGZvciB3YXJtLXVwLiBVc2VkIHRoZSBqc2Mtc3BlY2lm
aWMgcHJlY2lzZVRpbWUoKQpmdW5jdGlvbiB0byBnZXQgbWljcm9zZWNvbmQtbGV2ZWwgdGltaW5n
LiBSZXBvcnRpbmcgYmVuY2htYXJrIGV4ZWN1dGlvbiB0aW1lcyB3aXRoIDk1JSBjb25maWRlbmNl
IGludGVydmFscyBpbgptaWxsaXNlY29uZHMuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRvVCAgICAgICAgICAgICAgICAgICAgODA0MTUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIApTdW5TcGlkZXI6CiAgIDNkLWN1YmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDguMTEzMCstMC4wNzE5ICAgID8gICAgIDguMTQ0MCst
MC4wNDIxICAgICAgID8KICAgM2QtbW9ycGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OS41OTQ0Ky0wLjAzNjYgICAgPyAgICAgOS42OTkxKy0wLjA5MjQgICAgICAgPyBtaWdodCBiZSAx
LjAxMDl4IHNsb3dlcgogICAzZC1yYXl0cmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw
LjM2MjkrLTAuMDQwNSAgICA/ICAgIDEwLjQzMjErLTAuMDM0OSAgICAgICA/CiAgIGFjY2Vzcy1i
aW5hcnktdHJlZXMgICAgICAgICAgICAgICAgICAgIDIuNDE1MCstMC4wNTA5ICAgICAgICAgIDIu
MzkxMystMC4wNDMxICAgICAgIAogICBhY2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgICAgICAg
ICAgIDEwLjE3ODIrLTAuMDU0OCAgICAhICAgIDEwLjI4NDArLTAuMDQxOSAgICAgICAhIGRlZmlu
aXRlbHkgMS4wMTA0eCBzbG93ZXIKICAgYWNjZXNzLW5ib2R5ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNS40NzA1Ky0wLjAzNzYgICAgICAgICAgNS40NzAyKy0wLjA0NjcgICAgICAgCiAgIGFj
Y2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAgICAgIDMuOTczNSstMC4wMzE2ICAgID8g
ICAgIDMuOTc3MystMC4wMzU4ICAgICAgID8KICAgYml0b3BzLTNiaXQtYml0cy1pbi1ieXRlICAg
ICAgICAgICAgICAgMS4yMzEwKy0wLjAyNDEgICAgPyAgICAgMS4yNDI2Ky0wLjAyODIgICAgICAg
PwogICBiaXRvcHMtYml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgICA0LjYzNTUrLTAuMDQ0
NCAgICA/ICAgICA0LjY1NjUrLTAuMDMzNiAgICAgICA/CiAgIGJpdG9wcy1iaXR3aXNlLWFuZCAg
ICAgICAgICAgICAgICAgICAgIDQuMjQ1MystMC4wMzc2ICAgID8gICAgIDQuMjYyNSstMC4wNDk2
ICAgICAgID8KICAgYml0b3BzLW5zaWV2ZS1iaXRzICAgICAgICAgICAgICAgICAgICAgNC4yMzYy
Ky0wLjA1NDcgICAgPyAgICAgNC4yNDM0Ky0wLjAyNTggICAgICAgPwogICBjb250cm9sZmxvdy1y
ZWN1cnNpdmUgICAgICAgICAgICAgICAgICAyLjgzODUrLTAuMDUyNiAgICAgICAgICAyLjgzODUr
LTAuMDQ2NCAgICAgICAKICAgY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OS41Mjk0Ky0wLjEwNDMgICAgPyAgICAgOS42MzQ3Ky0wLjEwNTEgICAgICAgPyBtaWdodCBiZSAx
LjAxMTF4IHNsb3dlcgogICBjcnlwdG8tbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
LjQxNjUrLTAuMDQ1NyAgICA/ICAgICAzLjQyOTIrLTAuMDQ2MiAgICAgICA/CiAgIGNyeXB0by1z
aGExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzMwOSstMC4wODMzICAgID8gICAgIDIu
NzY3MSstMC4wMzA2ICAgICAgID8gbWlnaHQgYmUgMS4wMTMzeCBzbG93ZXIKICAgZGF0ZS1mb3Jt
YXQtdG9mdGUgICAgICAgICAgICAgICAgICAgICAxMi44NTAwKy0wLjA4OTYgICAgPyAgICAxMi45
MTIyKy0wLjA4MTIgICAgICAgPwogICBkYXRlLWZvcm1hdC14cGFyYiAgICAgICAgICAgICAgICAg
ICAgIDEyLjIwNDQrLTAuMTYxMyAgICAgICAgIDEyLjEzMzMrLTAuMjMzMiAgICAgICAKICAgbWF0
aC1jb3JkaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45NjgzKy0wLjA2NDcgICAgPyAg
ICAgMy45ODE1Ky0wLjAzMDAgICAgICAgPwogICBtYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAg
ICAgICAgICAgIDE0Ljg5MzUrLTAuMDM3OSAgICAgICAgIDE0Ljg2OTMrLTAuMDM5NCAgICAgICAK
ICAgbWF0aC1zcGVjdHJhbC1ub3JtICAgICAgICAgICAgICAgICAgICAgMi42NzEyKy0wLjAzMzUg
ICAgPyAgICAgMi42OTIwKy0wLjAzNzMgICAgICAgPwogICByZWdleHAtZG5hICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA5LjUwNDArLTAuMDk2MiAgICA/ICAgICA5LjUwOTArLTAuMDk1OSAg
ICAgICA/CiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNTQ2NCst
MC4wMzQ1ICAgID8gICAgIDUuNTc5MCstMC4wNDg4ICAgICAgID8KICAgc3RyaW5nLWZhc3RhICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOS4zODQzKy0wLjA1MzAgICAgISAgICAgOS41MjA3Ky0w
LjA1NDggICAgICAgISBkZWZpbml0ZWx5IDEuMDE0NXggc2xvd2VyCiAgIHN0cmluZy10YWdjbG91
ZCAgICAgICAgICAgICAgICAgICAgICAgMTYuMDA5MCstMC4wNjMyICAgICEgICAgMTYuMjYyNSst
MC4wNjI5ICAgICAgICEgZGVmaW5pdGVseSAxLjAxNTh4IHNsb3dlcgogICBzdHJpbmctdW5wYWNr
LWNvZGUgICAgICAgICAgICAgICAgICAgIDI3LjcwMDQrLTAuMTIzMCAgICAgICAgIDI3LjUwMjAr
LTAuMjAxOSAgICAgICAKICAgc3RyaW5nLXZhbGlkYXRlLWlucHV0ICAgICAgICAgICAgICAgICAg
OC4zMDAwKy0wLjAzMDggICAgISAgICAgOC40MDMxKy0wLjAzOTUgICAgICAgISBkZWZpbml0ZWx5
IDEuMDEyNHggc2xvd2VyCgogICA8YXJpdGhtZXRpYz4gKiAgICAgICAgICAgICAgICAgICAgICAg
ICA3LjkyMzIrLTAuMDIyMSAgICA/ICAgICA3Ljk1NTMrLTAuMDI5NiAgICAgICA/IG1pZ2h0IGJl
IDEuMDA0MXggc2xvd2VyCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYuMjUzOSstMC4wMjIwICAgID8gICAgIDYuMjgzMistMC4wMjQ3ICAgICAgID8gbWlnaHQgYmUg
MS4wMDQ3eCBzbG93ZXIKICAgPGhhcm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NC44NTY2Ky0wLjAyNjAgICAgPyAgICAgNC44Nzk3Ky0wLjAyNjAgICAgICAgPyBtaWdodCBiZSAx
LjAwNDd4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUb1QgICAgICAgICAgICAgICAgICAgIDgwNDE1ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKVjg6CiAgIGNyeXB0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOTMuNTkxNSstMC4xODc0ICAgID8gICAgOTMuODk5OCstMC4zOTgxICAgICAgID8KICAgZGVs
dGFibHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NC41NzM1Ky0wLjQzMjAgICAgISAg
IDE2Ni44MzI4Ky0wLjY5MDggICAgICAgISBkZWZpbml0ZWx5IDEuMDEzN3ggc2xvd2VyCiAgIGVh
cmxleS1ib3llciAgICAgICAgICAgICAgICAgICAgICAgICAxMTkuMzAxNCstMi4zMzc2ICAgID8g
ICAxMjAuNDYzNCstMi42MDUwICAgICAgID8KICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA1OS4xNTUzKy0wLjc4MzYgICAgPyAgICA1OS40NDg0Ky0wLjkxODAgICAgICAg
PwogICByZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExLjY0NTkrLTAuNjMy
NiAgICA/ICAgMTExLjkwNTUrLTAuNDkxMSAgICAgICA/CiAgIHJpY2hhcmRzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxOTAuODUxMSstMC42MTUyICAgICAgICAxOTAuNzMzMCstMS4wMjQ1
ICAgICAgIAogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3LjA0NTgr
LTAuMzc2MyAgICA/ICAgIDc3LjkzOTArLTEuMDc5MSAgICAgICA/IG1pZ2h0IGJlIDEuMDExNngg
c2xvd2VyCgogICA8YXJpdGhtZXRpYz4gICAgICAgICAgICAgICAgICAgICAgICAgMTE2LjU5NDkr
LTAuNDYwNSAgICA/ICAgMTE3LjMxNzQrLTAuNjI2NyAgICAgICA/IG1pZ2h0IGJlIDEuMDA2Mngg
c2xvd2VyCiAgIDxnZW9tZXRyaWM+ICogICAgICAgICAgICAgICAgICAgICAgICAxMDguNjE3Mist
MC41MjQ2ICAgID8gICAxMDkuMzEwNistMC42OTg1ICAgICAgID8gbWlnaHQgYmUgMS4wMDY0eCBz
bG93ZXIKICAgPGhhcm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMS4xMDYyKy0w
LjU3NzEgICAgPyAgIDEwMS43NTc1Ky0wLjc4NzEgICAgICAgPyBtaWdodCBiZSAxLjAwNjR4IHNs
b3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb1Qg
ICAgICAgICAgICAgICAgICAgIDgwNDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKS3Jha2VuOgogICBhaS1hc3RhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzg4
Ljc5NzUrLTIuOTEyMiAgICA/ICAgNzg5LjE5MDYrLTMuODkwNCAgICAgICA/CiAgIGF1ZGlvLWJl
YXQtZGV0ZWN0aW9uICAgICAgICAgICAgICAgICAyMzcuNDA0MystMC4zMTQ2ICAgID8gICAyMzgu
NTkxMistMS4xOTc2ICAgICAgID8KICAgYXVkaW8tZGZ0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDM3MC4yMDMxKy0zLjY4NzEgICAgPyAgIDM3OC4xMDk2Ky02LjA0OTYgICAgICAgPyBtaWdo
dCBiZSAxLjAyMTR4IHNsb3dlcgogICBhdWRpby1mZnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTUxLjU2MjgrLTAuMzE2OCAgICA/ICAgMTUxLjc4NTArLTAuNDIzNSAgICAgICA/CiAgIGF1
ZGlvLW9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAzNDUuOTc3OCstMi44MDk1ICAgID8g
ICAzNDcuMjgyOCstMi40OTg1ICAgICAgID8KICAgaW1hZ2luZy1kYXJrcm9vbSAgICAgICAgICAg
ICAgICAgICAgIDM3NC4xOTk5Ky04LjQ2OTUgICAgPyAgIDM3Ni4zMjIzKy05LjU4OTEgICAgICAg
PwogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAgICAgICAgICAgICAgICAgMzAzLjkyMjYrLTAuNzk1
MiAgICA/ICAgMzA1Ljg1MTErLTMuNDI5NyAgICAgICA/CiAgIGltYWdpbmctZ2F1c3NpYW4tYmx1
ciAgICAgICAgICAgICAgICA1MDkuMzgxOCstMy4yODk0ICAgICAgICA1MDcuMDE5MistMS4xOTQ5
ICAgICAgIAogICBqc29uLXBhcnNlLWZpbmFuY2lhbCAgICAgICAgICAgICAgICAgIDg2LjAzMTAr
LTAuMTk1MSAgICAgICAgIDg1Ljg5NzErLTAuMTc4NyAgICAgICAKICAganNvbi1zdHJpbmdpZnkt
dGluZGVyYm94ICAgICAgICAgICAgIDExMi4wMDA0Ky0wLjk3NDQgICAgXiAgIDEwNi4wNDI2Ky0w
LjU5MDggICAgICAgXiBkZWZpbml0ZWx5IDEuMDU2MnggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0
by1hZXMgICAgICAgICAgICAgICAgICAxMDUuNDQxMCstMC41MTU1ICAgID8gICAxMDUuNDk0OSst
MC4zMjE4ICAgICAgID8KICAgc3RhbmZvcmQtY3J5cHRvLWNjbSAgICAgICAgICAgICAgICAgICA5
OC4wMDYxKy0wLjU5MTMgICAgPyAgICA5OS43Nzc1Ky0xLjgyMTMgICAgICAgPyBtaWdodCBiZSAx
LjAxODF4IHNsb3dlcgogICBzdGFuZm9yZC1jcnlwdG8tcGJrZGYyICAgICAgICAgICAgICAgMjMy
LjI1ODcrLTEuNDE1NCAgICAgICAgMjMyLjA5OTgrLTMuODAwNCAgICAgICAKICAgc3RhbmZvcmQt
Y3J5cHRvLXNoYTI1Ni1pdGVyYXRpdmUgICAgIDEwMS4xNTUyKy0wLjIwNzQgICAgPyAgIDEwMS4z
Mjk1Ky0wLjIxNTggICAgICAgPwoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAgICAg
ICAgIDI3Mi41OTU5Ky0wLjk0NzkgICAgPyAgIDI3My4xOTk1Ky0xLjIyMDkgICAgICAgPyBtaWdo
dCBiZSAxLjAwMjJ4IHNsb3dlcgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjE2LjM0ODMrLTAuNjcxMyAgICA/ICAgMjE2LjM3MTcrLTAuNzgzOSAgICAgICA/IG1pZ2h0
IGJlIDEuMDAwMXggc2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAxNzQuOTI3OSstMC40OTAzICAgICAgICAxNzQuNDgyNystMC41NDQzICAgICAgICAgbWlnaHQg
YmUgMS4wMDI2eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVG9UICAgICAgICAgICAgICAgICAgICA4MDQxNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCkFsbCBiZW5jaG1hcmtzOgogICA8YXJpdGhtZXRpYz4gICAgICAg
ICAgICAgICAgICAgICAgICAgMTAyLjk0NzArLTAuMzM1NiAgICA/ICAgMTAzLjI1MjIrLTAuNDE3
NiAgICAgICA/IG1pZ2h0IGJlIDEuMDAzMHggc2xvd2VyCiAgIDxnZW9tZXRyaWM+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjcuNDkyOSstMC4wODc2ICAgID8gICAgMjcuNTkxMCstMC4xMDI1
ICAgICAgID8gbWlnaHQgYmUgMS4wMDM2eCBzbG93ZXIKICAgPGhhcm1vbmljPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOC41NDExKy0wLjA0NDcgICAgPyAgICAgOC41ODA5Ky0wLjA0NTEg
ICAgICAgPyBtaWdodCBiZSAxLjAwNDd4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgIDgwNDE1ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKR2VvbWVhbiBvZiBwcmVmZXJyZWQgbWVh
bnM6CiAgIDxzY2FsZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAgICAgICAgNjEuNjc0MistMC4x
OTcxICAgID8gICAgNjEuOTMzOSstMC4yNTAxICAgICAgID8gbWlnaHQgYmUgMS4wMDQyeCBzbG93
ZXIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130619</attachid>
            <date>2012-03-07 06:51:21 -0800</date>
            <delta_ts>2012-03-07 17:26:58 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>80415.2.patch</filename>
            <type>text/plain</type>
            <size>26126</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTAzLTA3ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUGhpcyBpbiBERkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBtYXkgbm90IGhhdmUg
YW55IGFkdmFudGFnZSBhdCBjdXJyZW50IHN0YWdlLCB0aGlzIGlzIHRvd2FyZHMKKyAgICAgICAg
bWluaW1hbCBTU0EgdG8gbWFrZSBtb3JlIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9ucyAobGlrZSBi
dWcgNzY3NzApIGVhc2llci4KKyAgICAgICAgV2UgaGF2ZSB0aGUgY2hvaWNlcyBlaXRoZXIgdG8g
YnVpbGQgbWluaW1hbCBTU0EgZnJvbSBzY3JhdGNoIG9yIHRvCisgICAgICAgIGtlZXAgY3VycmVu
dCBzaW1wbGUgUGhpIGluc2VydGlvbiBtZWNoYW5pc20gYW5kIHJlbW92ZSB0aGUgcmVkdW5kYW5j
eQorICAgICAgICBpbiBhbm90aGVyIHBoYXNlLiBDdXJyZW50bHkgd2UgY2hvb3NlIHRoZSBsYXR0
ZXIgYmVjYXVzZSB0aGUgY2hhbmdlCisgICAgICAgIGNvdWxkIGJlIHNtYWxsZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Zmx1c2hBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjppbnNlcnRQaGlOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6UGhp
U3RhY2tFbnRyeTo6UGhpU3RhY2tFbnRyeSk6CisgICAgICAgIChQaGlTdGFja0VudHJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAgICAg
ICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1w
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJs
b2NrSW5kZXgpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRh
bnRQaGlFbGltaW5hdGlvblBoYXNlOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OmdldFJlZHVuZGFu
dFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlOjpyZXBsYWNlUGhpQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2U6OmZpeHVwUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisKIDIwMTItMDMtMDcg
IEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFBhcnNlcjogSW5saW5l
IFNjb3BlTm9kZURhdGEgaW50byBTY29wZU5vZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBTRVQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdQ
aGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisgICAg
ZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1JlcGF0
Y2guY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFz
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAz
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBc
CiAgICAgZGZnL0RGR1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCBcCisgICAgZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
IFwKICAgICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDggQEAKIAkJMDZEMzU4QjQwREFBREFBQTAwM0IxNzRFIC8qIE1h
aW5UaHJlYWRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNkQzNThBMTBEQUFEOUM0MDAzQjE3NEUgLyogTWFpblRocmVhZE1hYy5tbSAqLzsgfTsK
IAkJMDg4RkE1QkIwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODhGQTVCOTBFRjc2RDQzMDA1
NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLzsgfTsKIAkJMDhEREE1QzExMjY0NjMxNzAwNzUx
NzMyIC8qIFVTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwOEREQTVCQjEyNjQ1RjFEMDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwQTQz
MzdCQjE1MDYyMTg4MDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQzMzdC
QTE1MDYyMTg4MDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAg
Ki87IH07CisJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRp
b25QaGFzZS5oICovOyB9OwogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMz
MEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCRjI4QTI5
MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXpl
TGltaXRzLmNwcCAqLzsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBp
bGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzU2LDYg
Kzc1OCw4IEBACiAJCTA4OTZDMjlFMTI2NUFCMDkwMEIxQ0REMyAvKiBTdHJpbmdDb25jYXRlbmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHJpbmdDb25jYXRlbmF0ZS5o
OyBwYXRoID0gdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwOEREQTVCQjEyNjQ1RjFEMDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVN0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFMjc5RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51
bWJlclNlZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZG9tTnVtYmVy
U2VlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQTQzMzdCQTE1MDYyMTg4MDA5
OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEE0MzM3QkQxNTA2MjE5QjAwOTkxQzk1IC8qIERG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVRyYWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBCNEQ3RTYyMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVUcmFpdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJBQzk0OUUxMzM4NzI4NDAwQ0YxMzVCIC8qIFRocmVh
ZFJlc3RyaWN0aW9uVmVyaWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU0OCw2ICsyNTUyLDggQEAKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZH
UGhhc2UuaCAqLywKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAorCQkJCTBBNDMzN0JBMTUwNjIx
ODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcCAqLywKKwkJ
CQkwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUgLyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJh
bmsuaCAqLywKIAkJCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAg
Ki8sCiAJCQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLywKQEAg
LTMwODIsNiArMzA4OCw3IEBACiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRG
RjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBBNDMzN0JFMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM3MDcsNiArMzcxNCw3IEBACiAJ
CQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTZBMUQ1MTUw
MDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBBNDMzN0JCMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExMDAzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQsOCArMjI0LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBl
bmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7CisgICAgICAg
IE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSksIE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgbV9sb2Nh
bFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0g
MSwgcGhpLCBvcGVyYW5kKSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5k
UHJlZGljdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgcGhpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlSW5kZXg7CiAgICAgICAgIApAQCAtMjk0LDggKzI5NCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKIAotICAgICAgICBOb2RlSW5k
ZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGFyZ3VtZW50KSk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBo
KFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSAtIDEpKTsKKyAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgcGhpLCBhcmd1bWVudCkpOwogICAg
ICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFByZWRpY3Rpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOwogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRl
eDsKICAgICAgICAgCkBAIC0zNTAsMTQgKzM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKLSAgICAgICAgTm9kZUluZGV4IHBoaSA9
IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIE5v
ZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IE9wSW5mbyhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKICAgICAgICAgbm9kZUluZGV4
ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CiAg
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGluZGV4KSk7CisgICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBwaGksIGluZGV4KSk7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5v
ZGVJbmRleDsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50
QmxvY2ssIHBoaSwgaW5kZXgpKTsKKyAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQo
UGhpU3RhY2tFbnRyeShtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsIHBoaSwgaW5kZXgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgp
ID0gbm9kZUluZGV4OwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKICAgICAgICAgfQpAQCAtNTgw
LDEwICs1ODAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdElu
ZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykpOwotICAgICAgICBpZiAob3AgPT0gUGhpKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnBoaXMuYXBwZW5kKHJlc3VsdEluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJbmRleCk7CisgICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAogICAg
ICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYo
cmVzdWx0SW5kZXgpOwpAQCAtNTkzLDggKzU5MSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEs
IGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7Ci0gICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKKyAgICAg
ICAgaWYgKG9wID09IFBoaSkKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHRJbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmQocmVzdWx0SW5kZXgpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJh
dGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC02MTUsMTAgKzYx
NSwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CiAgICAgfQogCi0g
ICAgTm9kZUluZGV4IGluc2VydFBoaU5vZGUoT3BJbmZvIGluZm8sIEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIE5vZGVJbmRleCBpbnNlcnRQaGlOb2RlKE9wSW5mbyBpbmZvLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCiAgICAgeworICAgICAgICBBU1NFUlQoYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworCiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9
IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUo
UGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvKSk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5k
KE5vZGUoUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBPcEluZm8oYmxvY2tJbmRleCkp
KTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdEluZGV4KTsKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0SW5kZXg7CkBAIC04NjUsMTQgKzg2OCwxNCBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZU51bWJlcjsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5
IHsKLSAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBo
aSwgdW5zaWduZWQgdmFyTm8pCisgICAgICAgIFBoaVN0YWNrRW50cnkoQmxvY2tJbmRleCBibG9j
aywgTm9kZUluZGV4IHBoaSwgdW5zaWduZWQgdmFyTm8pCiAgICAgICAgICAgICA6IG1fYmxvY2so
YmxvY2spCiAgICAgICAgICAgICAsIG1fcGhpKHBoaSkKICAgICAgICAgICAgICwgbV92YXJObyh2
YXJObykKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKKyAgICAgICAgQmxvY2tJbmRleCBtX2Jsb2NrOwogICAgICAgICBOb2RlSW5kZXggbV9waGk7
CiAgICAgICAgIHVuc2lnbmVkIG1fdmFyTm87CiAgICAgfTsKQEAgLTIzMTAsNyArMjMxMyw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIFBoaVN0YWNr
RW50cnkgZW50cnkgPSBwaGlTdGFjay5sYXN0KCk7CiAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgCi0gICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0g
ZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgIFByZWRlY2Vzc29yTGlzdCYg
cHJlZGVjZXNzb3JzID0gbV9ncmFwaC5tX2Jsb2Nrc1tlbnRyeS5tX2Jsb2NrXS0+bV9wcmVkZWNl
c3NvcnM7CiAgICAgICAgIHVuc2lnbmVkIHZhck5vID0gZW50cnkubV92YXJObzsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAKQEAgLTIzMzMsMTMgKzIzMzYsMTMgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICBEaWQgbm90IGZpbmQgbm9kZSwgYWRkaW5nIHBoaS5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAg
ICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyBhcmd1bWVudFRv
T3BlcmFuZCh2YXJObykgOiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSkpLCBwcmVkZWNlc3NvckJs
b2NrKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2Rl
KE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3Rh
Y2sgPyBhcmd1bWVudFRvT3BlcmFuZCh2YXJObykgOiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSkp
LCBwcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNl
c3NvcjsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sp
CiAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5z
ZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsK
LSAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3Nv
ckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7CisgICAgICAgICAgICAgICAgcGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JzW2ldLCB2YWx1ZUluUHJlZGVj
ZXNzb3IsIHZhck5vKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBGb3VuZCBHZXRM
b2NhbCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5o
IgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAi
REZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC01OCw2ICs1OSw3IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU0KICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAgICBk
ZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKIAorICAgIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGlt
aW5hdGlvbihkZmcpOwogICAgIHBlcmZvcm1Bcml0aE5vZGVGbGFnc0luZmVyZW5jZShkZmcpOwog
ICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1NFKGRm
Zyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTEwMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Niw4ICsyNjYsMTEgQEAgdm9pZCBHcmFwaDo6ZHVtcCgpCiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7CiAgICAgICAgIGRhdGFMb2co
IkJsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2lu
LCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFy
Z2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOwogICAgICAgICBkYXRhTG9nKCIgIFBoaSBOb2Rl
czpcbiIpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgZHVtcChibG9jay0+cGhpc1tpXSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IC8vIER1bXBpbmcgdGhlIGRlYWQgUGhpIG5vZGVzIGlzIGp1c3QgYW5ub3lpbmchCisgICAgICAg
ICAgICBpZiAoYXQoYmxvY2stPnBoaXNbaV0pLnJlZkNvdW50KCkpCisgICAgICAgICAgICAgICAg
ZHVtcChibG9jay0+cGhpc1tpXSk7CisgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICB2YXJz
IGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAg
ICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBXVEY6OmRhdGFGaWxlKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMDAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTgsNiArNDk4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0KICAgICAKKyAgICBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgoKQorICAgIHsKKyAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgUGhpIG5vZGVzIGhhdmUgdGhl
IGJsb2NrIGluZGV4IGVuY29kZWQuCisgICAgICAgIEFTU0VSVChvcCA9PSBQaGkpOworICAgICAg
ICByZXR1cm4gbV9vcEluZm8yOworICAgIH0KKwogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG9wKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUmVkdW5kYW50UGhpRWxp
bWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJy
ZWR1bmRhbnQgcGhpIGVsaW1pbmF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBkbyB7
CisgICAgICAgICAgICBjaGFuZ2VkID0gZml4dXBQaGlzKCk7CisgICAgICAgIH0gd2hpbGUgKGNo
YW5nZWQpOworCisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBtX2dy
YXBoLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOworCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpeCB0aGUgdmFyaWFibGUgaW5m
b3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZGVhZCBQaGkgbm9kZXMuCisgICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSAmJiBub2RlLm9wICE9IFBoaSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVBoaUNoaWxkKG5vZGUs
IDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBnZXRS
ZWR1bmRhbnRSZXBsYWNlbWVudChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2Vt
ZW50ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50IFBoaSBub2Rl
IHdpbGwgYmUgc2tpcHBlZCwgd2UgbmVlZCB0byB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIHZhcmlhYmxlIGluZm9ybWF0aW9uIGlmIGl0IHJlZmVyZW5jZXMgdGhpcyBub2RlLgor
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tub2RlLmJsb2NrSW5kZXgoKV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZyA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmcp
ID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmd1bWVu
dCBtdXN0IGJlIHVudXNlZCBpbiB0aGlzIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJnKSA9PSBp
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNCbG9jay0+dmFyaWFibGVz
QXRIZWFkLmFyZ3VtZW50KGFyZykgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJnKSA9IHJlcGxh
Y2VtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChvcGVyYW5kKSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgbG9jYWwgdmFyaWFibGUgbXVzdCBiZSB1bnVzZWQgaW4gdGhpcyBibG9j
ay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID09IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwob3BlcmFuZCkgPSByZXBs
YWNlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTm9kZUluZGV4IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KE5vZGVJbmRl
eCBwaGkpCisgICAgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbV9ncmFwaFtwaGldLmNo
aWxkMSgpLmluZGV4VW5jaGVja2VkKCk7CisgICAgICAgIE5vZGVJbmRleCBjYW5kaWRhdGUgPSBj
aGlsZDEgPT0gcGhpID8gTm9Ob2RlIDogY2hpbGQxOworCisgICAgICAgIE5vZGVJbmRleCBjaGls
ZDIgPSBtX2dyYXBoW3BoaV0uY2hpbGQyKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAgaWYg
KGNhbmRpZGF0ZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZDIgIT0gTm9Ob2Rl
ICYmIGNoaWxkMiAhPSBjYW5kaWRhdGUgJiYgY2hpbGQyICE9IHBoaSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkMiAhPSBwaGkpCisgICAg
ICAgICAgICBjYW5kaWRhdGUgPSBjaGlsZDI7CisKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9
IG1fZ3JhcGhbcGhpXS5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpOworICAgICAgICBpZiAoY2Fu
ZGlkYXRlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKGNoaWxkMyAhPSBOb05vZGUgJiYg
Y2hpbGQzICE9IGNhbmRpZGF0ZSAmJiBjaGlsZDMgIT0gcGhpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQzICE9IHBoaSkKKyAgICAgICAg
ICAgIGNhbmRpZGF0ZSA9IGNoaWxkMzsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjYW5kaWRh
dGU7CisgICAgfQorCisgICAgYm9vbCByZXBsYWNlUGhpQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgY2hpbGRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZEluZGV4IDwgMyk7CisK
KyAgICAgICAgYm9vbCByZXBsYWNlZCA9IGZhbHNlOworICAgICAgICBOb2RlSW5kZXggY2hpbGQg
PSBub2RlLmNoaWxkcmVuLmNoaWxkKGNoaWxkSW5kZXgpLmluZGV4VW5jaGVja2VkKCk7CisgICAg
ICAgIGlmIChjaGlsZCAhPSBOb05vZGUgJiYgbV9ncmFwaFtjaGlsZF0ub3AgPT0gUGhpKSB7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggY2hpbGRSZXBsYWNlbWVudCA9IGdldFJlZHVuZGFudFJlcGxh
Y2VtZW50KGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChjaGlsZFJlcGxhY2VtZW50ICE9IE5vTm9k
ZSkgeworICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQoY2hpbGRJbmRleCkuc2V0
SW5kZXgoY2hpbGRSZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFtjaGlsZFJlcGxhY2VtZW50XS5yZWYoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihjaGlsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXBsYWNlZDsKKyAgICB9CisKKyAgICBib29s
IGZpeHVwUGhpcygpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrKSB7CisgICAgICAgICAgICBWZWN0b3I8Tm9kZUluZGV4PiYgcGhpcyA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdLT5waGlzOworCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcGhpID0gcGhpc1tpXTsKKyAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFw
aFtwaGldOworCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBo
aU5vZGUsIDApICYmIHBoaU5vZGUucmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDEpICYmIHBoaU5vZGUucmVmQ291bnQoKSk7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDIp
ICYmIHBoaU5vZGUucmVmQ291bnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKK307CisKK3ZvaWQgcGVyZm9ybVJlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBydW5QaGFzZTxSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFdlIGluc2VydGVkIG1h
bnkgY2FuLWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBidWlsZGluZyB0aGUgZ3JhcGguCisv
LyBUaGlzIHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4KKwordm9pZCBwZXJmb3JtUmVkdW5k
YW50UGhpRWxpbWluYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlX2gKKwo=
</data>
<flag name="review"
          id="133680"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130732</attachid>
            <date>2012-03-07 17:26:58 -0800</date>
            <delta_ts>2012-03-07 17:53:37 -0800</delta_ts>
            <desc>patch updated</desc>
            <filename>80415.3.patch</filename>
            <type>text/plain</type>
            <size>19136</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDEyLTAzLTA3ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEVsaW1pbmF0ZSByZWR1bmRhbnQgUGhpcyBpbiBERkcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNDE1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWx0aG91Z2ggdGhpcyBtYXkgbm90IGhhdmUg
YW55IGFkdmFudGFnZSBhdCBjdXJyZW50IHN0YWdlLCB0aGlzIGlzIHRvd2FyZHMKKyAgICAgICAg
bWluaW1hbCBTU0EgdG8gbWFrZSBtb3JlIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9ucyAobGlrZSBi
dWcgNzY3NzApIGVhc2llci4KKyAgICAgICAgV2UgaGF2ZSB0aGUgY2hvaWNlcyBlaXRoZXIgdG8g
YnVpbGQgbWluaW1hbCBTU0EgZnJvbSBzY3JhdGNoIG9yIHRvCisgICAgICAgIGtlZXAgY3VycmVu
dCBzaW1wbGUgUGhpIGluc2VydGlvbiBtZWNoYW5pc20gYW5kIHJlbW92ZSB0aGUgcmVkdW5kYW5j
eQorICAgICAgICBpbiBhbm90aGVyIHBoYXNlLiBDdXJyZW50bHkgd2UgY2hvb3NlIHRoZSBsYXR0
ZXIgYmVjYXVzZSB0aGUgY2hhbmdlCisgICAgICAgIGNvdWxkIGJlIHNtYWxsZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhpRWxp
bWluYXRpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFJlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2U6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZTo6Z2V0UmVkdW5kYW50UmVw
bGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhh
c2U6OnJlcGxhY2VQaGlDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6UmVkdW5kYW50UGhpRWxp
bWluYXRpb25QaGFzZTo6Zml4dXBQaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlOjp1cGRhdGVCbG9ja1ZhcmlhYmxlSW5mb3JtYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAg
ICogZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAg
IChERkcpOgorCiAyMDEyLTAzLTA2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgRnVydGhlciBoYXJkZW4gNjQtYml0IEpJVApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIFNFVChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwCiAgICAgZGZn
L0RGR1BoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
KyAgICBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
UmVwYXRjaC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTEwMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVk
dW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTEwMDM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQu
Y3BwIFwKICAgICBkZmcvREZHUGhhc2UuY3BwIFwKICAgICBkZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKKyAgICBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFz
ZS5jcHAgXAogICAgIGRmZy9ERkdSZXBhdGNoLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTAwMzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQAogCQkwNkQzNThCNDBEQUFEQUFBMDAzQjE3NEUg
LyogTWFpblRocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA2RDM1OEExMERBQUQ5QzQwMDNCMTc0RSAvKiBNYWluVGhyZWFkTWFjLm1tICov
OyB9OwogCQkwODhGQTVCQjBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OEZBNUI5MEVGNzZE
NDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuY3BwICovOyB9OwogCQkwOEREQTVDMTEyNjQ2MzE3
MDA3NTE3MzIgLyogVVN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4RERBNUJCMTI2NDVGMUQwMDc1MTczMiAvKiBVU3RyaW5nQnVp
bGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBBNDMzN0JCMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBB
NDMzN0JBMTUwNjIxODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNl
LmNwcCAqLzsgfTsKKwkJMEE0MzM3QkUxNTA2MjE5QjAwOTkxQzk1IC8qIERGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBBNDMzN0JEMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmggKi87IH07CiAJCTBCMzMwQzI3MEYzOEM2MjMwMDY5MkRFMyAvKiBUeXBl
VHJhaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCMzMwQzI2MEYzOEM2MjMwMDY5MkRFMyAvKiBUeXBlVHJhaXRzLmNwcCAqLzsgfTsKIAkJMEJG
MjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9y
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
NTYsNiArNzU4LDggQEAKIAkJMDg5NkMyOUUxMjY1QUIwOTAwQjFDREQzIC8qIFN0cmluZ0NvbmNh
dGVuYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0NvbmNhdGVu
YXRlLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4RERBNUJCMTI2NDVGMUQwMDc1MTczMiAvKiBVU3RyaW5nQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVU3RyaW5nQnVpbGRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEUyNzlFODBFRjgzQjEwMDA3REI1MjMgLyogUmFu
ZG9tTnVtYmVyU2VlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5kb21O
dW1iZXJTZWVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBBNDMzN0JBMTUwNjIx
ODgwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQTQzMzdCRDE1MDYyMTlCMDA5OTFDOTUg
LyogREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlVHJhaXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVU
cmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyog
VGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTQ4LDYgKzI1NTIsOCBAQAogCQkJCTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQaGFzZS5oICovLAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEE0MzM3QkEx
NTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwICov
LAorCQkJCTBBNDMzN0JEMTUwNjIxOUIwMDk5MUM5NSAvKiBERkdSZWR1bmRhbnRQaGlFbGltaW5h
dGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lz
dGVyQmFuay5oICovLAogCQkJCTg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNo
LmNwcCAqLywKIAkJCQk4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICov
LApAQCAtMzA4Miw2ICszMDg4LDcgQEAKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyog
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2
QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEE0MzM3QkUxNTA2MjE5QjAwOTkxQzk1IC8qIERGR1JlZHVuZGFu
dFBoaUVsaW1pbmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzcwNyw2ICszNzE0LDcg
QEAKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NkEx
RDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEE0MzM3QkIxNTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMTAwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdSZWR1
bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAg
LTU4LDYgKzU5LDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQog
ICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCiAgICAgICAgIGRmZy5wcmVk
aWN0QXJndW1lbnRUeXBlcygpOwogCisgICAgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
KGRmZyk7CiAgICAgcGVyZm9ybUFyaXRoTm9kZUZsYWdzSW5mZXJlbmNlKGRmZyk7CiAgICAgcGVy
Zm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMTAwMzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY2LDggKzI2NiwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgZGF0YUxvZygiQmxvY2sg
IyV1IChiYyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2Nr
LT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAi
IChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIGRhdGFMb2coIiAgUGhpIE5vZGVzOlxuIik7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBkdW1wKGJsb2NrLT5waGlzW2ldKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgLy8gRHVt
cGluZyB0aGUgZGVhZCBQaGkgbm9kZXMgaXMganVzdCBhbm5veWluZyEKKyAgICAgICAgICAgIGlm
IChhdChibG9jay0+cGhpc1tpXSkucmVmQ291bnQoKSkKKyAgICAgICAgICAgICAgICBkdW1wKGJs
b2NrLT5waGlzW2ldKTsKKyAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgIHZhcnMgYmVmb3Jl
OiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgZHVt
cE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50
UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdSZWR1
bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJyZWR1bmRhbnQgcGhpIGVsaW1pbmF0aW9uIikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZml4dXBQaGlzKCk7
CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgICAgIHVwZGF0ZUJsb2NrVmFyaWFi
bGVJbmZvcm1hdGlvbigpOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgUGhpIHJlZmVyZW5jZXMg
ZnJvbSBub24tUGhpIG5vZGVzLCBlLmcuLCB0aGUgR2V0TG9jYWxzLgorICAgICAgICBmb3IgKE5v
ZGVJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKworICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICByZXBsYWNlUGhpQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9kZUlu
ZGV4IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KE5vZGVJbmRleCBwaGkpCisgICAgeworICAgICAg
ICBOb2RlSW5kZXggY2hpbGQxID0gbV9ncmFwaFtwaGldLmNoaWxkMSgpLmluZGV4VW5jaGVja2Vk
KCk7CisgICAgICAgIE5vZGVJbmRleCBjYW5kaWRhdGUgPSBjaGlsZDEgPT0gcGhpID8gTm9Ob2Rl
IDogY2hpbGQxOworCisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBtX2dyYXBoW3BoaV0uY2hp
bGQyKCkuaW5kZXhVbmNoZWNrZWQoKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBOb05vZGUp
IHsKKyAgICAgICAgICAgIGlmIChjaGlsZDIgIT0gTm9Ob2RlICYmIGNoaWxkMiAhPSBjYW5kaWRh
dGUgJiYgY2hpbGQyICE9IHBoaSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICB9IGVsc2UgaWYgKGNoaWxkMiAhPSBwaGkpCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBj
aGlsZDI7CisKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG1fZ3JhcGhbcGhpXS5jaGlsZDMo
KS5pbmRleFVuY2hlY2tlZCgpOworICAgICAgICBpZiAoY2FuZGlkYXRlICE9IE5vTm9kZSkgewor
ICAgICAgICAgICAgaWYgKGNoaWxkMyAhPSBOb05vZGUgJiYgY2hpbGQzICE9IGNhbmRpZGF0ZSAm
JiBjaGlsZDMgIT0gcGhpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGQzICE9IHBoaSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNoaWxk
MzsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorCisgICAgYm9v
bCByZXBsYWNlUGhpQ2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgY2hpbGRJbmRleCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChjaGlsZEluZGV4IDwgMyk7CisKKyAgICAgICAgYm9vbCByZXBsYWNl
ZCA9IGZhbHNlOworICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkcmVuLmNoaWxk
KGNoaWxkSW5kZXgpLmluZGV4VW5jaGVja2VkKCk7CisgICAgICAgIGlmIChjaGlsZCAhPSBOb05v
ZGUgJiYgbV9ncmFwaFtjaGlsZF0ub3AgPT0gUGhpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXgg
Y2hpbGRSZXBsYWNlbWVudCA9IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KGNoaWxkKTsKKyAgICAg
ICAgICAgIGlmIChjaGlsZFJlcGxhY2VtZW50ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAg
IG5vZGUuY2hpbGRyZW4uY2hpbGQoY2hpbGRJbmRleCkuc2V0SW5kZXgoY2hpbGRSZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChub2RlLnJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZFJl
cGxhY2VtZW50XS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihjaGls
ZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXBsYWNlZDsKKyAgICB9CisKKyAgICBib29sIGZpeHVwUGhpcygpCisgICAgewor
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrKSB7Cisg
ICAgICAgICAgICBWZWN0b3I8Tm9kZUluZGV4PiYgcGhpcyA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tdLT5waGlzOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoaXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhpID0gcGhpc1tpXTsKKyAg
ICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGldOworCisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDApICYmIHBoaU5vZGUu
cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSAocmVwbGFjZVBoaUNoaWxk
KHBoaU5vZGUsIDEpICYmIHBoaU5vZGUucmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSAocmVwbGFjZVBoaUNoaWxkKHBoaU5vZGUsIDIpICYmIHBoaU5vZGUucmVmQ291bnQo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hhbmdlZDsK
KyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZUJsb2NrVmFyaWFibGVJbmZvcm1hdGlvbigpCisgICAg
eworICAgICAgICAvLyBSZWR1bmRhbnQgUGhpIG5vZGVzIGFyZSBlbGltaW5hdGVkLCB3ZSBuZWVk
IHRvIHVwZGF0ZQorICAgICAgICAvLyB0aGUgdmFyaWFibGUgaW5mb3JtYXRpb24gaWYgaXQgcmVm
ZXJlbmNlcyB0aGVtLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgYmFz
aWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJnKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChhcmcpOworICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0g
Tm9Ob2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS5vcCA9PSBQaGkgJiYgIW1fZ3JhcGhbbm9kZUlu
ZGV4XS5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNl
bWVudCA9IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYXJndW1lbnQgbXVzdCBiZSB1bnVzZWQgaW4gdGhpcyBibG9jay4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJn
dW1lbnQoYXJnKSA9PSBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNC
bG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZykgPSByZXBsYWNlbWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmcpID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKyts
b2NhbCkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAgICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS5vcCA9PSBQaGkgJiYgIW1fZ3Jh
cGhbbm9kZUluZGV4XS5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCByZXBsYWNlbWVudCA9IGdldFJlZHVuZGFudFJlcGxhY2VtZW50KG5vZGVJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBOb05vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbG9jYWwgdmFyaWFibGUgbXVzdCBiZSB1bnVzZWQgaW4gdGhp
cyBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID09IG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpID0gcmVwbGFj
ZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwobG9jYWwpID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK307CisK
K3ZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRh
bnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZV9o
CisjZGVmaW5lIERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIFdlIGluc2VydGVkIG1hbnkgY2FuLWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBi
dWlsZGluZyB0aGUgZ3JhcGguCisvLyBUaGlzIHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4K
Kwordm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlX2gKKwo=
</data>
<flag name="review"
          id="133817"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>