<?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>27038</bug_id>
          
          <creation_ts>2009-07-07 12:48:37 -0700</creation_ts>
          <short_desc>htmlediting.cpp needs more utility functions to fix the bug 26816</short_desc>
          <delta_ts>2009-07-20 16:22:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26816</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>eric</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130256</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 12:48:37 -0700</bug_when>
    <thetext>We need to add several utility functions in htmlediting.cpp to fix the bug 26816.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130264</commentid>
    <comment_count>1</comment_count>
      <attachid>32389</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 13:42:19 -0700</bug_when>
    <thetext>Created attachment 32389
fixes the bug

This patch supplies utility functions to resolve the bug 26816.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130267</commentid>
    <comment_count>2</comment_count>
      <attachid>32391</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 13:46:40 -0700</bug_when>
    <thetext>Created attachment 32391
removed tab from the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130268</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 13:47:56 -0700</bug_when>
    <thetext>Lots of style nits. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130269</commentid>
    <comment_count>4</comment_count>
      <attachid>32391</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-07-07 13:59:17 -0700</bug_when>
    <thetext>Comment on attachment 32391
removed tab from the patch

I&apos;m not a real reviewer, but I saw a couple style violations.  See below for details.  Also, I know it isn&apos;t the style of these files, but could you add function level descriptions for the new functions you are adding?  Particularly for functions that are designed to be re-usable utilities, documentation will really help others use them in the future, rather than rolling their own.
 
&gt; +PassRefPtr&lt;Range&gt; createRange(PassRefPtr&lt;Document&gt; document, const VisiblePosition&amp; start, const VisiblePosition&amp; end, ExceptionCode&amp; ec)
&gt; +{
&gt; +    ec=0;
&gt; +    RefPtr&lt;Range&gt; selectedRange = Range::create(document);
&gt; +    selectedRange-&gt;setStart( start.deepEquivalent().containerNode(), start.deepEquivalent().computeOffsetInContainerNode(), ec);

Style, here and in a few other places in this file: Do not place spaces between a function and its parentheses, or between a parenthesis and its content.

&gt; +PassRefPtr&lt;Range&gt; exntendRangeToWrappingNodes(PassRefPtr&lt;Range&gt; rangeToExtend, PassRefPtr&lt;Range&gt; maximumRange, Node* rootNode)

Spelling: extend, not exntend

&gt; +{
&gt; +    ASSERT(rangeToExtend);
&gt; +    ASSERT(maximumRange);
&gt; +    
&gt; +    ExceptionCode ec=0;

Style:  Here, and in other places in this file. Do place spaces around binary and ternary operators.

&gt; Index: WebCore/editing/htmlediting.h
&gt; ===================================================================
&gt; --- WebCore/editing/htmlediting.h	(revision 45564)
&gt; +++ WebCore/editing/htmlediting.h	(working copy)
&gt; @@ -28,6 +28,7 @@
&gt;  
&gt;  #include &lt;wtf/Forward.h&gt;
&gt;  #include &quot;HTMLNames.h&quot;
&gt; +#include &quot;CompositeEditCommand.h&quot;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; @@ -61,6 +62,7 @@ Position previousVisuallyDistinctCandida
&gt;  bool isEditablePosition(const Position&amp;);
&gt;  bool isRichlyEditablePosition(const Position&amp;);
&gt;  Element* editableRootForPosition(const Position&amp;);
&gt; +    Element* unsplittableElementForPosition(const Position&amp; p);

Style: spacing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130281</commentid>
    <comment_count>5</comment_count>
      <attachid>32394</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 15:01:44 -0700</bug_when>
    <thetext>Created attachment 32394
fixed the style violations

I removed getVisibleRangeOfNode and added visiblePositionBeforeNode and visiblePositionAfterNode.  This would clean up the rest of my patch a little bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130282</commentid>
    <comment_count>6</comment_count>
      <attachid>32395</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 15:09:10 -0700</bug_when>
    <thetext>Created attachment 32395
updated ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130283</commentid>
    <comment_count>7</comment_count>
      <attachid>32395</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-07-07 15:09:39 -0700</bug_when>
    <thetext>Comment on attachment 32395
updated ChangeLog

&gt; Index: WebCore/editing/htmlediting.cpp
&gt; ===================================================================
&gt; --- WebCore/editing/htmlediting.cpp	(revision 45564)
&gt; +++ WebCore/editing/htmlediting.cpp	(working copy)
&gt; @@ -207,6 +207,15 @@ Element* editableRootForPosition(const P
&gt;      return node-&gt;rootEditableElement();
&gt;  }
&gt;  
&gt; +// Find the unsplittable element enclosing the specified position.
&gt; +// The returned element is either table cell or root editable node.

Sorry I wasn&apos;t more clear before.  I asked for function level comments because it wasn&apos;t clear to me from the function names what they should/should not be used for.  These comments only repeat the function names, which isn&apos;t much more useful.  For example, what does it mean to be an unsplittable element?

&gt; +Element* unsplittableElementForPosition(const Position&amp; p)
&gt; +{
&gt; +    Element* enclosingCell = static_cast&lt;Element*&gt;(enclosingNodeOfType(p, &amp;isTableCell));
&gt; +    
&gt; +    return enclosingCell ? enclosingCell : editableRootForPosition(p);
&gt; +}

This isn&apos;t quite right - what if the editableRoot is inside of the td?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130296</commentid>
    <comment_count>8</comment_count>
      <attachid>32400</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 16:01:19 -0700</bug_when>
    <thetext>Created attachment 32400
added more comments to each function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130308</commentid>
    <comment_count>9</comment_count>
      <attachid>32402</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-07 17:01:16 -0700</bug_when>
    <thetext>Created attachment 32402
removed the change to CompositeEditCommand.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130502</commentid>
    <comment_count>10</comment_count>
      <attachid>32402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-08 14:09:27 -0700</bug_when>
    <thetext>Comment on attachment 32402
removed the change to CompositeEditCommand.cpp

Style:
 63     short comparePoint(Node* refNode, int offset, ExceptionCode&amp; ec) const;

I would have used early return:
 215     Element* enclosingCell = static_cast&lt;Element*&gt;(enclosingNodeOfType(p, &amp;isTableCell, true));
 216     // Since enclosingNodeOfType won&apos;t search beyond the highest root editable node,
 217     // this code works even if the closest table cell was outside of the root editable node.
 218     return enclosingCell ? enclosingCell : editableRootForPosition(p);

This could assert ASSERT(node-&gt;parentNode()):
 592 VisiblePosition visiblePositionBeforeNode(const Node* node)

Please add a FIXME: to the other createRange:
 612 PassRefPtr&lt;Range&gt; createRange(PassRefPtr&lt;Document&gt; document, const VisiblePosition&amp; start, const VisiblePosition&amp; end, ExceptionCode&amp; ec)

PassRefPtr seems the wrong type for these args:
 627 PassRefPtr&lt;Range&gt; extendRangeToWrappingNodes(PassRefPtr&lt;Range&gt; rangeToExtend, PassRefPtr&lt;Range&gt; maximumRange, Node* rootNode)

Explicit visiblePosition construction is not needed here:
 1076     return visiblePositionBeforeNode(node) == VisiblePosition(selectedRange.startPosition())
(but it also doesn&apos;t hurt)

Style:
 65 Element* unsplittableElementForPosition(const Position&amp; p);
 78 PassRefPtr&lt;Range&gt; createRange(PassRefPtr&lt;Document&gt; document, const VisiblePosition&amp; start, const VisiblePosition&amp; end, ExceptionCode&amp; ec);
 145 bool isNodeVisiblyContainedWithin(Node* node, const Range&amp; selectedRange);

Looks fine.  Normally we don&apos;t add unused code, but I can see how this will help make your future patches smaller.

Please re-submit a fixed version, and then we might wait to land this until the other patch which depends on these changes is approved to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130564</commentid>
    <comment_count>11</comment_count>
      <attachid>32484</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-08 16:11:05 -0700</bug_when>
    <thetext>Created attachment 32484
resubmission</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131693</commentid>
    <comment_count>12</comment_count>
      <attachid>32484</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-14 15:03:23 -0700</bug_when>
    <thetext>Comment on attachment 32484
resubmission

Looks fine.

I think the intent of the old comments (that something needs fixing) is lost:
    // FIXME: This should ASSERT(node-&gt;parentNode())
 582     ASSERT(node);
 583     // FIXME: adding ASSERT(node-&gt;parentNode()); results in editing/deleting/delete-ligature-001.html crashing
569584

No need to be const:
 595 VisiblePosition visiblePositionBeforeNode(const Node* node)

Generally we don&apos;t make RefCounted objects const, ever.  Because well... they&apos;re refcounted. :)  You can&apos;t ref them w/ them being const.

I probably would have named the argument &quot;range&quot; and the returned value &quot;extendRange&quot; but this is fine too:
 632 PassRefPtr&lt;Range&gt; extendRangeToWrappingNodes(PassRefPtr&lt;Range&gt; rangeToExtend, const Range* maximumRange, const Node* rootNode)

Thanks.!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132716</commentid>
    <comment_count>13</comment_count>
      <attachid>32973</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-17 14:56:01 -0700</bug_when>
    <thetext>Created attachment 32973
re-resubmission</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132718</commentid>
    <comment_count>14</comment_count>
      <attachid>32973</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-17 14:58:38 -0700</bug_when>
    <thetext>Comment on attachment 32973
re-resubmission

Why is this needed?
 #include &quot;HTMLNames.h&quot;
+#include &quot;CompositeEditCommand.h&quot;

Seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132727</commentid>
    <comment_count>15</comment_count>
      <attachid>32977</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-17 15:09:52 -0700</bug_when>
    <thetext>Created attachment 32977
9th submission</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132730</commentid>
    <comment_count>16</comment_count>
      <attachid>32977</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-17 15:16:20 -0700</bug_when>
    <thetext>Comment on attachment 32977
9th submission

Generally we sort headers in alphabetical order, but this is fine to land as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132748</commentid>
    <comment_count>17</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-07-17 15:59:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/46063</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32389</attachid>
            <date>2009-07-07 13:42:19 -0700</date>
            <delta_ts>2009-07-07 13:46:40 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>fix27038</filename>
            <type>text/plain</type>
            <size>11508</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKwkJSW4gb3JkZXIgdG8gZml4
IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBiZSBhZGRl
ZCB0byBodG1sZWRpdGluZy5jcHAKKworCQlObyB0ZXN0cyBiZWNhdXNlIGZ1bmN0aW9ucyBoYXZl
bid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVkIGNvbnN0IHF1YWxp
ZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTogYWRkZWQgY29uc3Qg
cXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJvdG90eXBlCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVkIGNvbW1lbnQgdG8g
bW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTogZmluZCBhbiBlbmNs
b3NpbmcgdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGVkaXRpbmcgcm9vdCAmIHRhYmxlIGNlbGwpCisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVSYW5nZSk6IGNyZWF0ZSBhIHJhbmdlIG9iamVjdCBmcm9t
IHR3byB2aXNpYmxlIHBvc2l0aW9ucworICAgICAgICAoV2ViQ29yZTo6ZXhudGVuZFJhbmdlVG9X
cmFwcGluZ05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMgdGhhdCBzdGFydHMg
YW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlTGlz
dHMpOiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6IGFk
ZGVkIGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmx5QWRqYWNlbnQp
OiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTog
ZGV0ZXJtaW5lcyBpcyBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIHJhbmdlCisgICAgICAg
IChXZWJDb3JlOjpnZXRWaXNpYmxlUmFuZ2VPZk5vZGUpOiBvYnRhaW5zIHRoZSBzdGFydCBvZiBl
bmQgdmlzaWJsZSBwb3NpdGlvbnMgb2YgYSBub2RlCisgICAgICAgICogZWRpdGluZy9odG1sZWRp
dGluZy5oOiB1cGRhdGVkIHByb3RvdHlwZQorCiAyMDA5LTA3LTA3ICBHcmVnb3J5IEh1Z2hlcyAg
PGdmaHVnaGVzVk8rd2Via2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBSYW5nZTo6aXNQb2lu
dEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAgICAmJiBjb21wYXJlQm91bmRhcnlQb2ludHMo
cmVmTm9kZSwgb2Zmc2V0LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpIDw9IDA7
CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIC8vIGh0
dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFyZVBvaW50
CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVuZGluZyBvbiBpZiB0
aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKQEAgLTMzMiw3ICszMzIsNyBAQCBzaG9ydCBSYW5n
ZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsCiAgICAgcmV0dXJuIDA7CiB9CiAKLVJhbmdl
OjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCitSYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIC8vIGh0dHA6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFyZU5vZGUKICAgICAv
LyBUaGlzIG1ldGhvZCByZXR1cm5zIDAsIDEsIDIsIG9yIDMgYmFzZWQgb24gaWYgdGhlIG5vZGUg
aXMgYmVmb3JlLCBhZnRlciwKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gNDU1NjQpCisrKyBXZWJDb3JlL2RvbS9S
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNlcHRpb25Db2RlJik7
CiAgICAgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYyk7Ci0gICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBzaG9ydCBjb21wYXJlUG9pbnQoTm9k
ZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0OwogICAgIGVu
dW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVf
QU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIENvbXBhcmVSZXN1bHRzIGNvbXBhcmVOb2Rl
KE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBDb21wYXJlUmVzdWx0cyBjb21w
YXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZW51bSBD
b21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5E
X1RPX1NUQVJUIH07CiAgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3cs
IGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHN0
YXRpYyBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgaW50IG9m
ZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIGludCBvZmZzZXRCKTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNDU1NjQpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDcs
NiArNzQ3LDggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAg
IG1vdmVQYXJhZ3JhcGhzKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9N
b3ZlLCBkZXN0aW5hdGlvbiwgcHJlc2VydmVTZWxlY3Rpb24sIHByZXNlcnZlU3R5bGUpOwogfQog
CisvLyBGSVhNRTogbW92ZVBhcmFncmFwaCBpcyBvdmVybHkgY29tcGxpY2F0ZWQuICBXZSBuZWVk
IHRvIGNsZWFuIHVwIG1vdmVQYXJhZ3JhcGggc28gdGhhdCBpdCB1c2VzIGFwcGVuZFBhcmFncmFw
aEludG9Ob2RlCisvLyBvciBtYWtlIG1vcmUgc3BlY2lhbGl6ZWQgZnVuY3Rpb25zIGFuZCByZW1v
dmUgbW92ZVBhcmFncmFwaAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGRlc3RpbmF0aW9uLCBib29sIHByZXNlcnZlU2VsZWN0aW9uLCBib29sIHByZXNlcnZlU3R5
bGUpCiB7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZGVzdGluYXRpb24pCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNywxMyBA
QCBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQCiAgICAgcmV0dXJuIG5v
ZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAorRWxlbWVudCogdW5zcGxpdHRhYmxlRWxl
bWVudEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQoreworICAgIEVsZW1lbnQqIGVuY2xv
c2luZ0NlbGwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAm
aXNUYWJsZUNlbGwpKTsKKyAgICAKKyAgICByZXR1cm4gZW5jbG9zaW5nQ2VsbCA/IGVuY2xvc2lu
Z0NlbGwgOiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsKK30KKwogYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOwpAQCAtNTc1LDYgKzU4Miw0MSBAQCBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9k
ZShjb25zdCBOb2RlKiBuCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwg
bm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIAorUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFu
Z2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBlYz0wOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQpOworICAgIHNlbGVjdGVkUmFuZ2UtPnNldFN0YXJ0KCBzdGFydC5kZWVwRXF1
aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICBzZWxl
Y3RlZFJhbmdlLT5zZXRFbmQoIGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwg
ZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7
CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFzZSgpOworfQorCisvLyBFeHRlbmQgcmFu
Z2VUb0V4dGVuZCB0byBpbmNsdWRlIHdyYXBwaW5nIG5vZGVzLgorLy8gVGhlIHJlc3VsdGFudCBy
YW5nZSBpcyBjb250YWluZWQgd2l0aGluIChzZWUgYWxzbyBpc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKSBtYXhpbXVtUmFuZ2UgYW5kIGJlbG93IHJvb3ROb2RlCitQYXNzUmVmUHRyPFJhbmdl
PiBleG50ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4
dGVuZCwgUGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJhbmdlLCBOb2RlKiByb290Tm9kZSkKK3sK
KyAgICBBU1NFUlQocmFuZ2VUb0V4dGVuZCk7CisgICAgQVNTRVJUKG1heGltdW1SYW5nZSk7Cisg
ICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYz0wOworICAgIE5vZGUqIGFuY2VzdG9yID0gcmFuZ2VU
b0V4dGVuZC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOy8vIGZpbmQgdGhlIGNsb2VzZXQg
Y29tbW9uIGFuY2VzdG9yCisgICAgTm9kZSogaGlnaGVzdE5vZGUgPSAwOworICAgIC8vIHRyYXZl
cnNlIHRocm91Z2ggYW5jZXN0b3JzIGFzIGxvbmcgYXMgdGhleSBhcmUgY29udGFpbmVkIHdpdGhp
biB0aGUgcmFuZ2UsIGNvbnRlbnQtZWRpdGFibGUsIGFuZCBiZWxvdyByb290Tm9kZSAoY291bGQg
YmUgPTApLgorICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci0+aXNDb250ZW50RWRpdGFi
bGUoKSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGFuY2VzdG9yLCAqbWF4aW11bVJh
bmdlKSAmJiBhbmNlc3RvciAhPSByb290Tm9kZSkgeworICAgICAgICBoaWdoZXN0Tm9kZSA9IGFu
Y2VzdG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7CisgICAg
fQorCisgICAgaWYgKCFoaWdoZXN0Tm9kZSkKKyAgICAgICAgcmV0dXJuIHJhbmdlVG9FeHRlbmQ7
CisKKyAgICAvLyBDcmVhdGUgbmV3IHJhbmdlIHdpdGggdGhlIGhpZ2hlc3QgZWRpdGFibGUgbm9k
ZSBjb250YWluZWQgd2l0aGluIHRoZSByYW5nZQorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHJhbmdlVG9FeHRlbmQtPm93bmVyRG9jdW1lbnQoKSk7CisgICAgcmFuZ2Ut
PnNlbGVjdE5vZGUoaGlnaGVzdE5vZGUsIGVjKTsKKyAgICByZXR1cm4gcmFuZ2UucmVsZWFzZSgp
OworfQorCiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSAqbikKIHsKICAgICByZXR1cm4gKG4gJiYg
KG4tPmhhc1RhZ05hbWUodWxUYWcpIHx8IG4tPmhhc1RhZ05hbWUob2xUYWcpIHx8IG4tPmhhc1Rh
Z05hbWUoZGxUYWcpKSk7CkBAIC03NDYsNyArNzg4LDcgQEAgYm9vbCBjYW5NZXJnZUxpc3RzKEVs
ZW1lbnQqIGZpcnN0TGlzdCwgRQogICAgIHJldHVybiBmaXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vj
b25kTGlzdC0+dGFnUU5hbWUoKSkvLyBtYWtlIHN1cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9s
IHZzLiB1bCkKICAgICAmJiBpc0NvbnRlbnRFZGl0YWJsZShmaXJzdExpc3QpICYmIGlzQ29udGVu
dEVkaXRhYmxlKHNlY29uZExpc3QpLy8gYm90aCBsaXN0cyBhcmUgZWRpdGFibGUKICAgICAmJiBm
aXJzdExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBzZWNvbmRMaXN0LT5yb290RWRpdGFi
bGVFbGVtZW50KCkvLyBkb24ndCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJpZXMKLSAgICAmJiBpc1Zp
c2liaWx5QWRqYWNlbnQocG9zaXRpb25BZnRlck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25CZWZv
cmVOb2RlKHNlY29uZExpc3QpKTsKKyAgICAmJiBpc1Zpc2libHlBZGphY2VudChwb3NpdGlvbkFm
dGVyTm9kZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25kTGlzdCkpOwogICAg
IC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNvbnRlbnQgYmV0d2VlbiB0aGlzIGxp
IGFuZCB0aGUgcHJldmlvdXMgbGlzdAogfQogCkBAIC05NzQsNyArMTAxNiw3IEBAIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKIH0KIAogCi1pbnQgaW5kZXhGb3JWaXNp
YmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCitpbnQgaW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC05ODMsMTEgKzEwMjUsMzggQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKFZpc2li
bGVQb3NpdAogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgp
LCB0cnVlKTsKIH0KIAotYm9vbCBpc1Zpc2liaWx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZp
cnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQorYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25z
dCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiB7CiAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihmaXJzdCkgPT0gVmlzaWJsZVBvc2l0aW9uKHNlY29uZC51cHN0cmVh
bSgpKTsKIH0KIAorLy8gV2Ugc2F5IGEgbm9kZSBpcyB2aXNpYmx5IGNvbnRhaW5lZCB3aXRoaW4g
YSByYW5nZSBpZiB0aGUgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciBpZiB0aGUgbm9kZSB2aXNp
Ymx5IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUgYm91bmRhcmllcyBvZiByYW5nZS4KK2Jvb2wgaXNO
b2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2RlLCBjb25zdCBSYW5nZSYgc2VsZWN0
ZWRSYW5nZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5z
aWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbgorICAgIEV4
Y2VwdGlvbkNvZGUgZWM9MDsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlTm9kZShub2Rl
LCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxlY3RlZFJhbmdlIHN0
YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgorICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydDsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kOworICAgIGdldFZpc2libGVS
YW5nZU9mTm9kZShub2RlLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gc3RhcnQgPT0gVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGVkUmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSAmJiBlbmQgPT0gVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGVkUmFuZ2UuZW5kUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgZ2V0Vmlz
aWJsZVJhbmdlT2ZOb2RlKE5vZGUqIG5vZGUgLCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0ICwgVmlz
aWJsZVBvc2l0aW9uJiBlbmQgKQoreworICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKSB7
CisgICAgICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOwor
ICAgICAgICBlbmQgPSBWaXNpYmxlUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291bnQo
KSwgRE9XTlNUUkVBTSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhcnQgPSBWaXNpYmxlUG9z
aXRpb24ocG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpKTsKKyAgICAgICAgZW5kID0gVmlzaWJsZVBv
c2l0aW9uKHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpKTsKKyAgICB9Cit9CisKIFBhc3NSZWZQdHI8
UmFuZ2U+IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqIHJhbmdlLCBOb2Rl
KiBub2RlKQogewogICAgIGlmICghcmFuZ2UpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2
aXNpb24gNDU1NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDYgKzYyLDcgQEAgUG9zaXRpb24gcHJldmlvdXNW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYQogYm9vbCBpc0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9z
aXRpb24mKTsKIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7
CiBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOworICAg
IEVsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYg
cCk7CiBib29sIGlzQmxvY2soY29uc3QgTm9kZSopOwogTm9kZSogZW5jbG9zaW5nQmxvY2soTm9k
ZSopOwogCkBAIC03MSw2ICs3Myw4IEBAIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0
cmluZygpOwogCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSopOwogUG9z
aXRpb24gcG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSopOworUGFzc1JlZlB0cjxSYW5nZT4g
Y3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kLCBFeGNlcHRpb25Db2Rl
JiBlYyk7CitQYXNzUmVmUHRyPFJhbmdlPiBleG50ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVuZCwgUGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJh
bmdlLCBOb2RlKiByb290Tm9kZSk7CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IGF2b2lkSW50ZXJzZWN0
aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqLCBOb2RlKik7CiBWaXNpYmxlU2VsZWN0aW9uIGF2b2lk
SW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE5vZGUqKTsKQEAg
LTEzNCw4ICsxMzgsMTAgQEAgYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihj
bwogCiBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLWludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNp
YmxlUG9zaXRpb24mKTsKLWJvb2wgaXNWaXNpYmlseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBm
aXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCk7CitpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIGlzVmlzaWJseUFkamFjZW50KGNvbnN0
IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCk7Citib29sIGlzTm9kZVZp
c2libHlDb250YWluZWRXaXRoaW4oTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UmIHNlbGVjdGVkUmFu
Z2UpOwordm9pZCBnZXRWaXNpYmxlUmFuZ2VPZk5vZGUoTm9kZSogbm9kZSAsIFZpc2libGVQb3Np
dGlvbiYgc3RhcnQgLCBWaXNpYmxlUG9zaXRpb24mIGVuZCApOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32391</attachid>
            <date>2009-07-07 13:46:40 -0700</date>
            <delta_ts>2009-07-07 15:01:44 -0700</delta_ts>
            <desc>removed tab from the patch</desc>
            <filename>fix27038b</filename>
            <type>text/plain</type>
            <size>11520</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCBhbiBlbmNsb3NpbmcgdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGVkaXRpbmcgcm9vdCAmIHRh
YmxlIGNlbGwpCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSYW5nZSk6IGNyZWF0ZSBhIHJhbmdl
IG9iamVjdCBmcm9tIHR3byB2aXNpYmxlIHBvc2l0aW9ucworICAgICAgICAoV2ViQ29yZTo6ZXhu
dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMg
dGhhdCBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6
OmNhbk1lcmdlTGlzdHMpOiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQ
b3NpdGlvbik6IGFkZGVkIGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNp
Ymx5QWRqYWNlbnQpOiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFp
bmVkV2l0aGluKTogZGV0ZXJtaW5lcyBpcyBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIHJh
bmdlCisgICAgICAgIChXZWJDb3JlOjpnZXRWaXNpYmxlUmFuZ2VPZk5vZGUpOiBvYnRhaW5zIHRo
ZSBzdGFydCBvZiBlbmQgdmlzaWJsZSBwb3NpdGlvbnMgb2YgYSBub2RlCisgICAgICAgICogZWRp
dGluZy9odG1sZWRpdGluZy5oOiB1cGRhdGVkIHByb3RvdHlwZQorCiAyMDA5LTA3LTA3ICBHcmVn
b3J5IEh1Z2hlcyAgPGdmaHVnaGVzVk8rd2Via2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBS
YW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAgICAmJiBjb21wYXJlQm91
bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zm
c2V0KCkpIDw9IDA7CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9k
ZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCitzaG9ydCBSYW5nZTo6Y29tcGFyZVBv
aW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2Uu
Y29tcGFyZVBvaW50CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVu
ZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKQEAgLTMzMiw3ICszMzIsNyBA
QCBzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNv
bXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAg
IC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFy
ZU5vZGUKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIDAsIDEsIDIsIG9yIDMgYmFzZWQgb24g
aWYgdGhlIG5vZGUgaXMgYmVmb3JlLCBhZnRlciwKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gNDU1NjQpCisrKyBX
ZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUq
IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBzaG9ydCBjb21w
YXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0OwogICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwg
Tk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIENvbXBhcmVSZXN1bHRz
IGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBDb21wYXJl
UmVzdWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5E
X1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CiAgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KENvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIHN0YXRpYyBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFp
bmVyQSwgaW50IG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIGludCBvZmZzZXRCKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNDU1NjQp
CisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NDcsNiArNzQ3LDggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaAogICAgIG1vdmVQYXJhZ3JhcGhzKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9m
UGFyYWdyYXBoVG9Nb3ZlLCBkZXN0aW5hdGlvbiwgcHJlc2VydmVTZWxlY3Rpb24sIHByZXNlcnZl
U3R5bGUpOwogfQogCisvLyBGSVhNRTogbW92ZVBhcmFncmFwaCBpcyBvdmVybHkgY29tcGxpY2F0
ZWQuICBXZSBuZWVkIHRvIGNsZWFuIHVwIG1vdmVQYXJhZ3JhcGggc28gdGhhdCBpdCB1c2VzIGFw
cGVuZFBhcmFncmFwaEludG9Ob2RlCisvLyBvciBtYWtlIG1vcmUgc3BlY2lhbGl6ZWQgZnVuY3Rp
b25zIGFuZCByZW1vdmUgbW92ZVBhcmFncmFwaAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGRlc3RpbmF0aW9uLCBib29sIHByZXNlcnZlU2VsZWN0aW9uLCBib29s
IHByZXNlcnZlU3R5bGUpCiB7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZGVz
dGluYXRpb24pCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDQ1NTY0KQor
KysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3
LDYgKzIwNywxMyBAQCBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQCiAg
ICAgcmV0dXJuIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAorRWxlbWVudCogdW5z
cGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQoreworICAgIEVs
ZW1lbnQqIGVuY2xvc2luZ0NlbGwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9k
ZU9mVHlwZShwLCAmaXNUYWJsZUNlbGwpKTsKKyAgICAKKyAgICByZXR1cm4gZW5jbG9zaW5nQ2Vs
bCA/IGVuY2xvc2luZ0NlbGwgOiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsKK30KKwogYm9v
bCBpc0NvbnRlbnRFZGl0YWJsZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwpAQCAtNTc1LDYgKzU4Miw0MSBAQCBQb3NpdGlvbiBwb3Np
dGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKiBuCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBh
cmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIAorUGFzc1JlZlB0cjxSYW5n
ZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBlYz0wOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpOworICAgIHNlbGVjdGVkUmFuZ2UtPnNldFN0YXJ0KCBz
dGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIWVjKQor
ICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZXRFbmQoIGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbnRh
aW5lck5vZGUoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFzZSgpOworfQorCisv
LyBFeHRlbmQgcmFuZ2VUb0V4dGVuZCB0byBpbmNsdWRlIHdyYXBwaW5nIG5vZGVzLgorLy8gVGhl
IHJlc3VsdGFudCByYW5nZSBpcyBjb250YWluZWQgd2l0aGluIChzZWUgYWxzbyBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKSBtYXhpbXVtUmFuZ2UgYW5kIGJlbG93IHJvb3ROb2RlCitQYXNz
UmVmUHRyPFJhbmdlPiBleG50ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0V4dGVuZCwgUGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJhbmdlLCBOb2RlKiBy
b290Tm9kZSkKK3sKKyAgICBBU1NFUlQocmFuZ2VUb0V4dGVuZCk7CisgICAgQVNTRVJUKG1heGlt
dW1SYW5nZSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYz0wOworICAgIE5vZGUqIGFuY2Vz
dG9yID0gcmFuZ2VUb0V4dGVuZC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOy8vIGZpbmQg
dGhlIGNsb2VzZXQgY29tbW9uIGFuY2VzdG9yCisgICAgTm9kZSogaGlnaGVzdE5vZGUgPSAwOwor
ICAgIC8vIHRyYXZlcnNlIHRocm91Z2ggYW5jZXN0b3JzIGFzIGxvbmcgYXMgdGhleSBhcmUgY29u
dGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2UsIGNvbnRlbnQtZWRpdGFibGUsIGFuZCBiZWxvdyByb290
Tm9kZSAoY291bGQgYmUgPTApLgorICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci0+aXND
b250ZW50RWRpdGFibGUoKSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGFuY2VzdG9y
LCAqbWF4aW11bVJhbmdlKSAmJiBhbmNlc3RvciAhPSByb290Tm9kZSkgeworICAgICAgICBoaWdo
ZXN0Tm9kZSA9IGFuY2VzdG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRO
b2RlKCk7CisgICAgfQorCisgICAgaWYgKCFoaWdoZXN0Tm9kZSkKKyAgICAgICAgcmV0dXJuIHJh
bmdlVG9FeHRlbmQ7CisKKyAgICAvLyBDcmVhdGUgbmV3IHJhbmdlIHdpdGggdGhlIGhpZ2hlc3Qg
ZWRpdGFibGUgbm9kZSBjb250YWluZWQgd2l0aGluIHRoZSByYW5nZQorICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlVG9FeHRlbmQtPm93bmVyRG9jdW1lbnQoKSk7
CisgICAgcmFuZ2UtPnNlbGVjdE5vZGUoaGlnaGVzdE5vZGUsIGVjKTsKKyAgICByZXR1cm4gcmFu
Z2UucmVsZWFzZSgpOworfQorCiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSAqbikKIHsKICAgICBy
ZXR1cm4gKG4gJiYgKG4tPmhhc1RhZ05hbWUodWxUYWcpIHx8IG4tPmhhc1RhZ05hbWUob2xUYWcp
IHx8IG4tPmhhc1RhZ05hbWUoZGxUYWcpKSk7CkBAIC03NDYsNyArNzg4LDcgQEAgYm9vbCBjYW5N
ZXJnZUxpc3RzKEVsZW1lbnQqIGZpcnN0TGlzdCwgRQogICAgIHJldHVybiBmaXJzdExpc3QtPmhh
c1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkvLyBtYWtlIHN1cmUgdGhlIGxpc3QgdHlw
ZXMgbWF0Y2ggKG9sIHZzLiB1bCkKICAgICAmJiBpc0NvbnRlbnRFZGl0YWJsZShmaXJzdExpc3Qp
ICYmIGlzQ29udGVudEVkaXRhYmxlKHNlY29uZExpc3QpLy8gYm90aCBsaXN0cyBhcmUgZWRpdGFi
bGUKICAgICAmJiBmaXJzdExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBzZWNvbmRMaXN0
LT5yb290RWRpdGFibGVFbGVtZW50KCkvLyBkb24ndCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJpZXMK
LSAgICAmJiBpc1Zpc2liaWx5QWRqYWNlbnQocG9zaXRpb25BZnRlck5vZGUoZmlyc3RMaXN0KSwg
cG9zaXRpb25CZWZvcmVOb2RlKHNlY29uZExpc3QpKTsKKyAgICAmJiBpc1Zpc2libHlBZGphY2Vu
dChwb3NpdGlvbkFmdGVyTm9kZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25k
TGlzdCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNvbnRlbnQgYmV0
d2VlbiB0aGlzIGxpIGFuZCB0aGUgcHJldmlvdXMgbGlzdAogfQogCkBAIC05NzQsNyArMTAxNiw3
IEBAIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKIH0KIAogCi1pbnQg
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CitpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC05ODMsMTEgKzEwMjUsMzggQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKFZpc2libGVQb3NpdAogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KHJhbmdlLmdldCgpLCB0cnVlKTsKIH0KIAotYm9vbCBpc1Zpc2liaWx5QWRqYWNlbnQoY29uc3Qg
UG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQorYm9vbCBpc1Zpc2libHlB
ZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiB7
CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdCkgPT0gVmlzaWJsZVBvc2l0aW9uKHNl
Y29uZC51cHN0cmVhbSgpKTsKIH0KIAorLy8gV2Ugc2F5IGEgbm9kZSBpcyB2aXNpYmx5IGNvbnRh
aW5lZCB3aXRoaW4gYSByYW5nZSBpZiB0aGUgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciBpZiB0
aGUgbm9kZSB2aXNpYmx5IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUgYm91bmRhcmllcyBvZiByYW5n
ZS4KK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2RlLCBjb25zdCBS
YW5nZSYgc2VsZWN0ZWRSYW5nZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gSWYgdGhl
IG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdp
dGhpbgorICAgIEV4Y2VwdGlvbkNvZGUgZWM9MDsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZS5jb21w
YXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxl
Y3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgor
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kOworICAg
IGdldFZpc2libGVSYW5nZU9mTm9kZShub2RlLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gc3Rh
cnQgPT0gVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGVkUmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSAmJiBl
bmQgPT0gVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGVkUmFuZ2UuZW5kUG9zaXRpb24oKSk7Cit9CisK
K3ZvaWQgZ2V0VmlzaWJsZVJhbmdlT2ZOb2RlKE5vZGUqIG5vZGUgLCBWaXNpYmxlUG9zaXRpb24m
IHN0YXJ0ICwgVmlzaWJsZVBvc2l0aW9uJiBlbmQgKQoreworICAgIGlmIChub2RlLT5jaGlsZE5v
ZGVDb3VudCgpKSB7CisgICAgICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERP
V05TVFJFQU0pOworICAgICAgICBlbmQgPSBWaXNpYmxlUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hp
bGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhcnQg
PSBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpKTsKKyAgICAgICAgZW5k
ID0gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpKTsKKyAgICB9Cit9CisK
IFBhc3NSZWZQdHI8UmFuZ2U+IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2Uq
IHJhbmdlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghcmFuZ2UpCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaAkocmV2aXNpb24gNDU1NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29t
bWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDYgKzYyLDcgQEAgUG9zaXRp
b24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYQogYm9vbCBpc0VkaXRhYmxlUG9zaXRp
b24oY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJik7CiBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiYpOworICAgIEVsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcCk7CiBib29sIGlzQmxvY2soY29uc3QgTm9kZSopOwogTm9kZSogZW5jbG9z
aW5nQmxvY2soTm9kZSopOwogCkBAIC03MSw2ICs3Myw4IEBAIGNvbnN0IFN0cmluZyYgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpOwogCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3Qg
Tm9kZSopOwogUG9zaXRpb24gcG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSopOworUGFzc1Jl
ZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kLCBF
eGNlcHRpb25Db2RlJiBlYyk7CitQYXNzUmVmUHRyPFJhbmdlPiBleG50ZW5kUmFuZ2VUb1dyYXBw
aW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVuZCwgUGFzc1JlZlB0cjxSYW5n
ZT4gbWF4aW11bVJhbmdlLCBOb2RlKiByb290Tm9kZSk7CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IGF2
b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqLCBOb2RlKik7CiBWaXNpYmxlU2Vs
ZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IE5vZGUqKTsKQEAgLTEzNCw4ICsxMzgsMTAgQEAgYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2li
bGVQb3NpdGlvbihjbwogCiBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0
ZXJhdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLWludCBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihWaXNpYmxlUG9zaXRpb24mKTsKLWJvb2wgaXNWaXNpYmlseUFkamFjZW50KGNvbnN0
IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCk7CitpbnQgaW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIGlzVmlzaWJseUFk
amFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCk7Citi
b29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSogbm9kZSwgY29uc3QgUmFuZ2Um
IHNlbGVjdGVkUmFuZ2UpOwordm9pZCBnZXRWaXNpYmxlUmFuZ2VPZk5vZGUoTm9kZSogbm9kZSAs
IFZpc2libGVQb3NpdGlvbiYgc3RhcnQgLCBWaXNpYmxlUG9zaXRpb24mIGVuZCApOwogfQogCiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32394</attachid>
            <date>2009-07-07 15:01:44 -0700</date>
            <delta_ts>2009-07-07 15:09:10 -0700</delta_ts>
            <desc>fixed the style violations</desc>
            <filename>fix27038c</filename>
            <type>text/plain</type>
            <size>12466</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCBhbiBlbmNsb3NpbmcgdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGVkaXRpbmcgcm9vdCAmIHRh
YmxlIGNlbGwpCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSYW5nZSk6IGNyZWF0ZSBhIHJhbmdl
IG9iamVjdCBmcm9tIHR3byB2aXNpYmxlIHBvc2l0aW9ucworICAgICAgICAoV2ViQ29yZTo6ZXhu
dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMg
dGhhdCBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6
OmNhbk1lcmdlTGlzdHMpOiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQ
b3NpdGlvbik6IGFkZGVkIGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNp
Ymx5QWRqYWNlbnQpOiB0eXBvCisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFp
bmVkV2l0aGluKTogZGV0ZXJtaW5lcyBpcyBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIHJh
bmdlCisgICAgICAgIChXZWJDb3JlOjpnZXRWaXNpYmxlUmFuZ2VPZk5vZGUpOiBvYnRhaW5zIHRo
ZSBzdGFydCBvZiBlbmQgdmlzaWJsZSBwb3NpdGlvbnMgb2YgYSBub2RlCisgICAgICAgICogZWRp
dGluZy9odG1sZWRpdGluZy5oOiB1cGRhdGVkIHByb3RvdHlwZQorCiAyMDA5LTA3LTA3ICBHcmVn
b3J5IEh1Z2hlcyAgPGdmaHVnaGVzVk8rd2Via2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBS
YW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAgICAmJiBjb21wYXJlQm91
bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zm
c2V0KCkpIDw9IDA7CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9k
ZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCitzaG9ydCBSYW5nZTo6Y29tcGFyZVBv
aW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2Uu
Y29tcGFyZVBvaW50CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVu
ZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKQEAgLTMzMiw3ICszMzIsNyBA
QCBzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitSYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNv
bXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAg
IC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFy
ZU5vZGUKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIDAsIDEsIDIsIG9yIDMgYmFzZWQgb24g
aWYgdGhlIG5vZGUgaXMgYmVmb3JlLCBhZnRlciwKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gNDU1NjQpCisrKyBX
ZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUq
IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBzaG9ydCBjb21w
YXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0OwogICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwg
Tk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIENvbXBhcmVSZXN1bHRz
IGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBDb21wYXJl
UmVzdWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5E
X1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CiAgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KENvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIHN0YXRpYyBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFp
bmVyQSwgaW50IG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIsIGludCBvZmZzZXRCKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNDU1NjQp
CisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NDcsNiArNzQ3LDggQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaAogICAgIG1vdmVQYXJhZ3JhcGhzKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9m
UGFyYWdyYXBoVG9Nb3ZlLCBkZXN0aW5hdGlvbiwgcHJlc2VydmVTZWxlY3Rpb24sIHByZXNlcnZl
U3R5bGUpOwogfQogCisvLyBGSVhNRTogbW92ZVBhcmFncmFwaCBpcyBvdmVybHkgY29tcGxpY2F0
ZWQuICBXZSBuZWVkIHRvIGNsZWFuIHVwIG1vdmVQYXJhZ3JhcGggc28gdGhhdCBpdCB1c2VzIGFw
cGVuZFBhcmFncmFwaEludG9Ob2RlCisvLyBvciBtYWtlIG1vcmUgc3BlY2lhbGl6ZWQgZnVuY3Rp
b25zIGFuZCByZW1vdmUgbW92ZVBhcmFncmFwaAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGRlc3RpbmF0aW9uLCBib29sIHByZXNlcnZlU2VsZWN0aW9uLCBib29s
IHByZXNlcnZlU3R5bGUpCiB7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZGVz
dGluYXRpb24pCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDQ1NTY0KQor
KysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3
LDYgKzIwNywxNSBAQCBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQCiAg
ICAgcmV0dXJuIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAorLy8gRmluZCB0aGUg
dW5zcGxpdHRhYmxlIGVsZW1lbnQgZW5jbG9zaW5nIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCisv
LyBUaGUgcmV0dXJuZWQgZWxlbWVudCBpcyBlaXRoZXIgdGFibGUgY2VsbCBvciByb290IGVkaXRh
YmxlIG5vZGUuCitFbGVtZW50KiB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oY29uc3Qg
UG9zaXRpb24mIHApCit7CisgICAgRWxlbWVudCogZW5jbG9zaW5nQ2VsbCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihlbmNsb3NpbmdOb2RlT2ZUeXBlKHAsICZpc1RhYmxlQ2VsbCkpOworICAgIAor
ICAgIHJldHVybiBlbmNsb3NpbmdDZWxsID8gZW5jbG9zaW5nQ2VsbCA6IGVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKHApOworfQorCiBib29sIGlzQ29udGVudEVkaXRhYmxlKGNvbnN0IE5vZGUqIG5v
ZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CkBAIC01NjUsMTYg
KzU3NCw3MiBAQCBOb2RlKiBpc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKGNvbnN0IFZpCiAKIFBv
c2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VSVChu
b2RlKTsKKyAgICAvLyBGSVhNRTogYWRkaW5nIEFTU0VSVChub2RlLT5wYXJlbnQoKSk7IHJlc3Vs
dHMgaW4gZmV3IHRlc3RzIGZhaWxpbmcKICAgICByZXR1cm4gUG9zaXRpb24obm9kZS0+cGFyZW50
Tm9kZSgpLCBub2RlLT5ub2RlSW5kZXgoKSk7CiB9CiAKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJO
b2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VS
VChub2RlLT5wYXJlbnROb2RlKCkpCisgICAgQVNTRVJUKG5vZGUpOworICAgIC8vIEZJWE1FOiBh
ZGRpbmcgQVNTRVJUKG5vZGUtPnBhcmVudCgpKTsgcmVzdWx0cyBpbiBmZXcgdGVzdHMgZmFpbGlu
ZwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRl
eCgpICsgMSk7CiB9CiAKKy8vIFJldHVybnMgdGhlIHZpc2libGUgcG9zaXRpb24gYXQgdGhlIGJl
Z2lubmluZyBvZiBhIG5vZGUKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVO
b2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChub2Rl
LT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpLCAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gcG9zaXRpb25C
ZWZvcmVOb2RlKG5vZGUpOworfQorCisvLyBSZXR1cm5zIHRoZSB2aXNpYmxlIHBvc2l0aW9uIGF0
IHRoZSBlbmRpbmcgb2YgYSBub2RlCitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0
ZXJOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChu
b2RlLT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFN
KTsKKyAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUobm9kZSk7Cit9CisKKy8vIENyZWF0ZSBh
IHJhbmdlIG9iamVjdCB0aGF0IHR3byB2aXNpYmxlIHBvc2l0aW9ucywgc3RhcnQgYW5kIGVuZC4K
K1Bhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZVJhbmdlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGRvY3Vt
ZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpOworICAgIHNlbGVjdGVk
UmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMp
OworICAgIGlmICghZWMpCisgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNldEVuZChlbmQuZGVlcEVx
dWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVP
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiBzZWxlY3RlZFJhbmdlLnJl
bGVhc2UoKTsKK30KKworLy8gRXh0ZW5kIHJhbmdlVG9FeHRlbmQgdG8gaW5jbHVkZSB3cmFwcGlu
ZyBub2Rlcy4KKy8vIFRoZSByZXN1bHRhbnQgcmFuZ2UgaXMgY29udGFpbmVkIHdpdGhpbiAoc2Vl
IGFsc28gaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbikgbWF4aW11bVJhbmdlIGFuZCBiZWxv
dyByb290Tm9kZQorUGFzc1JlZlB0cjxSYW5nZT4gZXh0ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMo
UGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVuZCwgUGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11
bVJhbmdlLCBOb2RlKiByb290Tm9kZSkKK3sKKyAgICBBU1NFUlQocmFuZ2VUb0V4dGVuZCk7Cisg
ICAgQVNTRVJUKG1heGltdW1SYW5nZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBOb2RlKiBhbmNlc3RvciA9IHJhbmdlVG9FeHRlbmQtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KGVjKTsvLyBmaW5kIHRoZSBjbG9lc2V0IGNvbW1vbiBhbmNlc3RvcgorICAgIE5vZGUqIGhpZ2hl
c3ROb2RlID0gMDsKKyAgICAvLyB0cmF2ZXJzZSB0aHJvdWdoIGFuY2VzdG9ycyBhcyBsb25nIGFz
IHRoZXkgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdlLCBjb250ZW50LWVkaXRhYmxlLCBh
bmQgYmVsb3cgcm9vdE5vZGUgKGNvdWxkIGJlID0wKS4KKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYg
YW5jZXN0b3ItPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdp
dGhpbihhbmNlc3RvciwgKm1heGltdW1SYW5nZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsK
KyAgICAgICAgaGlnaGVzdE5vZGUgPSBhbmNlc3RvcjsKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+cGFyZW50Tm9kZSgpOworICAgIH0KKworICAgIGlmICghaGlnaGVzdE5vZGUpCisgICAg
ICAgIHJldHVybiByYW5nZVRvRXh0ZW5kOworCisgICAgLy8gQ3JlYXRlIG5ldyByYW5nZSB3aXRo
IHRoZSBoaWdoZXN0IGVkaXRhYmxlIG5vZGUgY29udGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2UKKyAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShyYW5nZVRvRXh0ZW5kLT5vd25l
ckRvY3VtZW50KCkpOworICAgIHJhbmdlLT5zZWxlY3ROb2RlKGhpZ2hlc3ROb2RlLCBlYyk7Cisg
ICAgcmV0dXJuIHJhbmdlLnJlbGVhc2UoKTsKK30KKwogYm9vbCBpc0xpc3RFbGVtZW50KE5vZGUg
Km4pCiB7CiAgICAgcmV0dXJuIChuICYmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNU
YWdOYW1lKG9sVGFnKSB8fCBuLT5oYXNUYWdOYW1lKGRsVGFnKSkpOwpAQCAtNzQ2LDcgKzgxMSw3
IEBAIGJvb2wgY2FuTWVyZ2VMaXN0cyhFbGVtZW50KiBmaXJzdExpc3QsIEUKICAgICByZXR1cm4g
Zmlyc3RMaXN0LT5oYXNUYWdOYW1lKHNlY29uZExpc3QtPnRhZ1FOYW1lKCkpLy8gbWFrZSBzdXJl
IHRoZSBsaXN0IHR5cGVzIG1hdGNoIChvbCB2cy4gdWwpCiAgICAgJiYgaXNDb250ZW50RWRpdGFi
bGUoZmlyc3RMaXN0KSAmJiBpc0NvbnRlbnRFZGl0YWJsZShzZWNvbmRMaXN0KS8vIGJvdGggbGlz
dHMgYXJlIGVkaXRhYmxlCiAgICAgJiYgZmlyc3RMaXN0LT5yb290RWRpdGFibGVFbGVtZW50KCkg
PT0gc2Vjb25kTGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLy8gZG9uJ3QgY3Jvc3MgZWRpdGlu
ZyBib3VuZGFyaWVzCi0gICAgJiYgaXNWaXNpYmlseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2Rl
KGZpcnN0TGlzdCksIHBvc2l0aW9uQmVmb3JlTm9kZShzZWNvbmRMaXN0KSk7CisgICAgJiYgaXNW
aXNpYmx5QWRqYWNlbnQocG9zaXRpb25BZnRlck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25CZWZv
cmVOb2RlKHNlY29uZExpc3QpKTsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gdmlzaWJs
ZSBjb250ZW50IGJldHdlZW4gdGhpcyBsaSBhbmQgdGhlIHByZXZpb3VzIGxpc3QKIH0KIApAQCAt
OTc0LDcgKzEwMzksNyBAQCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0
CiB9CiAKIAotaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQoraW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtOTgzLDExICsxMDQ4LDI3IEBAIGludCBpbmRl
eEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXQKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgaXNWaXNpYmlseUFk
amFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCkKKy8v
IERldGVybWluZXMgd2hldGhlciB0d28gcG9zaXRpb25zIGFyZSB2aXNpYmx5IG5leHQgdG8gZWFj
aCBvdGhlciAoZmlyc3QgdGhlbiBzZWNvbmQpCisvLyB3aGlsZSBpZ25vcmluZyB3aGl0ZXNwYWNl
cyBhbmQgdW5yZW5kZXJlZCBub2RlcworYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3Np
dGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiB7CiAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihmaXJzdCkgPT0gVmlzaWJsZVBvc2l0aW9uKHNlY29uZC51cHN0cmVhbSgpKTsK
IH0KIAorLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB2
aXNpYmx5IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgcmFuZ2UuCiti
b29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSogbm9kZSwgY29uc3QgUmFuZ2Um
IHNlbGVjdGVkUmFuZ2UpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIC8vIElmIHRoZSBub2Rl
IGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRoaW4K
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZS5jb21wYXJl
Tm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxlY3Rl
ZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgorICAg
IHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IFZpc2libGVQb3NpdGlv
bihzZWxlY3RlZFJhbmdlLnN0YXJ0UG9zaXRpb24oKSkKKyAgICAgICAgJiYgdmlzaWJsZVBvc2l0
aW9uQWZ0ZXJOb2RlKG5vZGUpID09IFZpc2libGVQb3NpdGlvbihzZWxlY3RlZFJhbmdlLmVuZFBv
c2l0aW9uKCkpOworfQorCiBQYXNzUmVmUHRyPFJhbmdlPiBhdm9pZEludGVyc2VjdGlvbldpdGhO
b2RlKGNvbnN0IFJhbmdlKiByYW5nZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXJhbmdlKQpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
Q29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw2
ICs2Miw3IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGEKIGJvb2wg
aXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CiBib29sIGlzUmljaGx5RWRpdGFi
bGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogRWxlbWVudCogZWRpdGFibGVSb290Rm9yUG9z
aXRpb24oY29uc3QgUG9zaXRpb24mKTsKK0VsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRGb3JQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCk7CiBib29sIGlzQmxvY2soY29uc3QgTm9kZSopOwog
Tm9kZSogZW5jbG9zaW5nQmxvY2soTm9kZSopOwogCkBAIC03MSw2ICs3MywxMCBAQCBjb25zdCBT
dHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIAogUG9zaXRpb24gcG9zaXRpb25CZWZv
cmVOb2RlKGNvbnN0IE5vZGUqKTsKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0IE5v
ZGUqKTsKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKGNvbnN0IE5v
ZGUqKTsKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9k
ZSopOworUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgZW5kLCBFeGNlcHRpb25Db2RlJiBlYyk7CitQYXNzUmVmUHRyPFJhbmdlPiBleHRlbmRS
YW5nZVRvV3JhcHBpbmdOb2RlcyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvRXh0ZW5kLCBQYXNz
UmVmUHRyPFJhbmdlPiBtYXhpbXVtUmFuZ2UsIE5vZGUqIHJvb3ROb2RlKTsKIAogUGFzc1JlZlB0
cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBSYW5nZSosIE5vZGUqKTsK
IFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiwgTm9kZSopOwpAQCAtMTM0LDggKzE0MCw5IEBAIGJvb2wgbGluZUJyZWFrRXhp
c3RzQXRWaXNpYmxlUG9zaXRpb24oY28KIAogVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQ
YXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi1pbnQgaW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIGlzVmlzaWJpbHlBZGph
Y2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpOworaW50
IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBp
c1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBz
ZWNvbmQpOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNv
bnN0IFJhbmdlJiBzZWxlY3RlZFJhbmdlKTsKIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32395</attachid>
            <date>2009-07-07 15:09:10 -0700</date>
            <delta_ts>2009-07-07 16:01:19 -0700</delta_ts>
            <desc>updated ChangeLog</desc>
            <filename>fix27038d</filename>
            <type>text/plain</type>
            <size>12584</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCB0aGUgZW5jbG9zaW5nIHVuc3BsaXR0YWJsZSBlbGVtZW50IChlZGl0aW5nIHJvb3QgJiB0
YWJsZSBjZWxsKQorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25CZWZvcmVOb2RlKTogYWRkZWQg
QVNTRVJUKG5vZGUpCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyTm9kZSk6IGFkZGVk
IEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmFuZ2UpOiBjcmVhdGUgYSByYW5nZSBvYmplY3QgZnJvbSB0d28g
dmlzaWJsZSBwb3NpdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGlu
Z05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMgdGhhdCBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlTGlzdHMpOiB0
eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6IGFkZGVkIGNv
bnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmx5QWRqYWNlbnQpOiB0eXBv
CisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTogZGV0ZXJt
aW5lIGlmIGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB3aXRoaW4gdGhlIHZpc2libGUgYm91
bmRhcmllcyBvZiB0aGUgcmFuZ2UKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisK
IDIwMDktMDctMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIGJv
b2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUKICAgICAgICAgJiYgY29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9lbmQuY29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKSA8PSAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorc2hvcnQgUmFuZ2U6OmNvbXBh
cmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJh
bmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBk
ZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCkBAIC0zMzIsNyArMzMy
LDcgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLAogICAgIHJldHVy
biAwOwogfQogCi1SYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUq
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdl
Ojpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
ICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNv
bXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAxLCAyLCBvciAzIGJhc2Vk
IG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHJldmlzaW9uIDQ1NTY0KQor
KysgV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbGxhcHNlKGJvb2wgdG9TdGFydCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHNob3J0IGNvbXBhcmVQb2ludChO
b2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgc2hvcnQg
Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdDsKICAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZU
RVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVz
dWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ29t
cGFyZVJlc3VsdHMgY29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQs
IEVORF9UT19FTkQsIEVORF9UT19TVEFSVCB9OwogICAgIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNv
bnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCBpbnQgb2Zmc2V0Qik7Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQ1
NTY0KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ3LDYgKzc0Nyw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1v
dmVQYXJhZ3JhcGgKICAgICBtb3ZlUGFyYWdyYXBocyhzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBl
bmRPZlBhcmFncmFwaFRvTW92ZSwgZGVzdGluYXRpb24sIHByZXNlcnZlU2VsZWN0aW9uLCBwcmVz
ZXJ2ZVN0eWxlKTsKIH0KIAorLy8gRklYTUU6IG1vdmVQYXJhZ3JhcGggaXMgb3Zlcmx5IGNvbXBs
aWNhdGVkLiAgV2UgbmVlZCB0byBjbGVhbiB1cCBtb3ZlUGFyYWdyYXBoIHNvIHRoYXQgaXQgdXNl
cyBhcHBlbmRQYXJhZ3JhcGhJbnRvTm9kZQorLy8gb3IgbWFrZSBtb3JlIHNwZWNpYWxpemVkIGZ1
bmN0aW9ucyBhbmQgcmVtb3ZlIG1vdmVQYXJhZ3JhcGgKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaFRvTW92ZSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBkZXN0aW5hdGlvbiwgYm9vbCBwcmVzZXJ2ZVNlbGVjdGlvbiwg
Ym9vbCBwcmVzZXJ2ZVN0eWxlKQogewogICAgIGlmIChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlID09
IGRlc3RpbmF0aW9uKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0NTU2
NCkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNyw2ICsyMDcsMTUgQEAgRWxlbWVudCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3Qg
UAogICAgIHJldHVybiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKKy8vIEZpbmQg
dGhlIHVuc3BsaXR0YWJsZSBlbGVtZW50IGVuY2xvc2luZyB0aGUgc3BlY2lmaWVkIHBvc2l0aW9u
LgorLy8gVGhlIHJldHVybmVkIGVsZW1lbnQgaXMgZWl0aGVyIHRhYmxlIGNlbGwgb3Igcm9vdCBl
ZGl0YWJsZSBub2RlLgorRWxlbWVudCogdW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwKQoreworICAgIEVsZW1lbnQqIGVuY2xvc2luZ0NlbGwgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAmaXNUYWJsZUNlbGwpKTsKKyAg
ICAKKyAgICByZXR1cm4gZW5jbG9zaW5nQ2VsbCA/IGVuY2xvc2luZ0NlbGwgOiBlZGl0YWJsZVJv
b3RGb3JQb3NpdGlvbihwKTsKK30KKwogYm9vbCBpc0NvbnRlbnRFZGl0YWJsZShjb25zdCBOb2Rl
KiBub2RlKQogewogICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwpAQCAtNTY1
LDE2ICs1NzQsNzIgQEAgTm9kZSogaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShjb25zdCBWaQog
CiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICBBU1NF
UlQobm9kZSk7CisgICAgLy8gRklYTUU6IGFkZGluZyBBU1NFUlQobm9kZS0+cGFyZW50KCkpOyBy
ZXN1bHRzIGluIGZldyB0ZXN0cyBmYWlsaW5nCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBh
cmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwogfQogCiBQb3NpdGlvbiBwb3NpdGlvbkFm
dGVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBB
U1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICAvLyBGSVhN
RTogYWRkaW5nIEFTU0VSVChub2RlLT5wYXJlbnQoKSk7IHJlc3VsdHMgaW4gZmV3IHRlc3RzIGZh
aWxpbmcKICAgICByZXR1cm4gUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2Rl
SW5kZXgoKSArIDEpOwogfQogCisvLyBSZXR1cm5zIHRoZSB2aXNpYmxlIHBvc2l0aW9uIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgYSBub2RlCitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQmVm
b3JlTm9kZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBpZiAo
bm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihj
b25zdF9jYXN0PE5vZGUqPihub2RlKSwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIHBvc2l0
aW9uQmVmb3JlTm9kZShub2RlKTsKK30KKworLy8gUmV0dXJucyB0aGUgdmlzaWJsZSBwb3NpdGlv
biBhdCB0aGUgZW5kaW5nIG9mIGEgbm9kZQorVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkFmdGVyTm9kZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBp
ZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNU
UkVBTSk7CisgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpOworfQorCisvLyBDcmVh
dGUgYSByYW5nZSBvYmplY3QgdGhhdCB0d28gdmlzaWJsZSBwb3NpdGlvbnMsIHN0YXJ0IGFuZCBl
bmQuCitQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGVSYW5nZShQYXNzUmVmUHRyPERvY3VtZW50PiBk
b2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBzZWxl
Y3RlZFJhbmdlLT5zZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUo
KSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZXRFbmQoZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByZXR1cm4gc2VsZWN0ZWRSYW5n
ZS5yZWxlYXNlKCk7Cit9CisKKy8vIEV4dGVuZCByYW5nZVRvRXh0ZW5kIHRvIGluY2x1ZGUgd3Jh
cHBpbmcgbm9kZXMuCisvLyBUaGUgcmVzdWx0YW50IHJhbmdlIGlzIGNvbnRhaW5lZCB3aXRoaW4g
KHNlZSBhbHNvIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pIG1heGltdW1SYW5nZSBhbmQg
YmVsb3cgcm9vdE5vZGUKK1Bhc3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ05v
ZGVzKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9FeHRlbmQsIFBhc3NSZWZQdHI8UmFuZ2U+IG1h
eGltdW1SYW5nZSwgTm9kZSogcm9vdE5vZGUpCit7CisgICAgQVNTRVJUKHJhbmdlVG9FeHRlbmQp
OworICAgIEFTU0VSVChtYXhpbXVtUmFuZ2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgTm9kZSogYW5jZXN0b3IgPSByYW5nZVRvRXh0ZW5kLT5jb21tb25BbmNlc3RvckNvbnRh
aW5lcihlYyk7Ly8gZmluZCB0aGUgY2xvZXNldCBjb21tb24gYW5jZXN0b3IKKyAgICBOb2RlKiBo
aWdoZXN0Tm9kZSA9IDA7CisgICAgLy8gdHJhdmVyc2UgdGhyb3VnaCBhbmNlc3RvcnMgYXMgbG9u
ZyBhcyB0aGV5IGFyZSBjb250YWluZWQgd2l0aGluIHRoZSByYW5nZSwgY29udGVudC1lZGl0YWJs
ZSwgYW5kIGJlbG93IHJvb3ROb2RlIChjb3VsZCBiZSA9MCkuCisgICAgd2hpbGUgKGFuY2VzdG9y
ICYmIGFuY2VzdG9yLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4oYW5jZXN0b3IsICptYXhpbXVtUmFuZ2UpICYmIGFuY2VzdG9yICE9IHJvb3ROb2Rl
KSB7CisgICAgICAgIGhpZ2hlc3ROb2RlID0gYW5jZXN0b3I7CisgICAgICAgIGFuY2VzdG9yID0g
YW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKyAgICB9CisKKyAgICBpZiAoIWhpZ2hlc3ROb2RlKQor
ICAgICAgICByZXR1cm4gcmFuZ2VUb0V4dGVuZDsKKworICAgIC8vIENyZWF0ZSBuZXcgcmFuZ2Ug
d2l0aCB0aGUgaGlnaGVzdCBlZGl0YWJsZSBub2RlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdl
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocmFuZ2VUb0V4dGVuZC0+
b3duZXJEb2N1bWVudCgpKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZShoaWdoZXN0Tm9kZSwgZWMp
OworICAgIHJldHVybiByYW5nZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wgaXNMaXN0RWxlbWVudChO
b2RlICpuKQogewogICAgIHJldHVybiAobiAmJiAobi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+
aGFzVGFnTmFtZShvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShkbFRhZykpKTsKQEAgLTc0Niw3ICs4
MTEsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgcmV0
dXJuIGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNvbmRMaXN0LT50YWdRTmFtZSgpKS8vIG1ha2Ug
c3VyZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wgdnMuIHVsKQogICAgICYmIGlzQ29udGVudEVk
aXRhYmxlKGZpcnN0TGlzdCkgJiYgaXNDb250ZW50RWRpdGFibGUoc2Vjb25kTGlzdCkvLyBib3Ro
IGxpc3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVk
aXRpbmcgYm91bmRhcmllcwotICAgICYmIGlzVmlzaWJpbHlBZGphY2VudChwb3NpdGlvbkFmdGVy
Tm9kZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25kTGlzdCkpOworICAgICYm
IGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9u
QmVmb3JlTm9kZShzZWNvbmRMaXN0KSk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vIHZp
c2libGUgY29udGVudCBiZXR3ZWVuIHRoaXMgbGkgYW5kIHRoZSBwcmV2aW91cyBsaXN0CiB9CiAK
QEAgLTk3NCw3ICsxMDM5LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3Jh
cGhJdAogfQogCiAKLWludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKK2ludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk4MywxMSArMTA0OCwyNyBAQCBpbnQg
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAgcmV0dXJuIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCi1ib29sIGlzVmlzaWJp
bHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQp
CisvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUgdmlzaWJseSBuZXh0IHRv
IGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQorLy8gd2hpbGUgaWdub3Jpbmcgd2hpdGVz
cGFjZXMgYW5kIHVucmVuZGVyZWQgbm9kZXMKK2Jvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3Qg
UG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogewogICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZmlyc3QpID09IFZpc2libGVQb3NpdGlvbihzZWNvbmQudXBzdHJlYW0o
KSk7CiB9CiAKKy8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ug
b3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdl
LgorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJh
bmdlJiBzZWxlY3RlZFJhbmdlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICAvLyBJZiB0aGUg
bm9kZSBpcyBpbnNpZGUgdGhlIHJhbmdlLCB0aGVuIGl0IHN1cmVseSBpcyBjb250YWluZWQgd2l0
aGluCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UuY29t
cGFyZU5vZGUobm9kZSwgZWMpID09IFJhbmdlOjpOT0RFX0lOU0lERSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBJZiB0aGUgbm9kZSBzdGFydHMgYW5kIGVuZHMgYXQgd2hlcmUgc2Vs
ZWN0ZWRSYW5nZSBzdGFydHMgYW5kIGVuZHMsIHRoZSBub2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4K
KyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBWaXNpYmxlUG9z
aXRpb24oc2VsZWN0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCkpCisgICAgICAgICYmIHZpc2libGVQ
b3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0ZWRSYW5nZS5l
bmRQb3NpdGlvbigpKTsKK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25X
aXRoTm9kZShjb25zdCBSYW5nZSogcmFuZ2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFyYW5n
ZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjEsNiArNjIsNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhCiBi
b29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBpc1JpY2hseUVk
aXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CitFbGVtZW50KiB1bnNwbGl0dGFibGVFbGVtZW50
Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApOwogYm9vbCBpc0Jsb2NrKGNvbnN0IE5vZGUq
KTsKIE5vZGUqIGVuY2xvc2luZ0Jsb2NrKE5vZGUqKTsKIApAQCAtNzEsNiArNzMsMTAgQEAgY29u
c3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAKIFBvc2l0aW9uIHBvc2l0aW9u
QmVmb3JlTm9kZShjb25zdCBOb2RlKik7CiBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25z
dCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShjb25z
dCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0
IE5vZGUqKTsKK1Bhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZVJhbmdlKFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpOworUGFzc1JlZlB0cjxSYW5nZT4gZXh0
ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVuZCwg
UGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJhbmdlLCBOb2RlKiByb290Tm9kZSk7CiAKIFBhc3NS
ZWZQdHI8UmFuZ2U+IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqLCBOb2Rl
Kik7CiBWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYsIE5vZGUqKTsKQEAgLTEzNCw4ICsxNDAsOSBAQCBib29sIGxpbmVCcmVh
a0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNvCiAKIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiYpOwotYm9vbCBpc1Zpc2liaWx5
QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKTsK
K2ludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jv
b2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlv
biYgc2Vjb25kKTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSYgc2VsZWN0ZWRSYW5nZSk7CiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32400</attachid>
            <date>2009-07-07 16:01:19 -0700</date>
            <delta_ts>2009-07-07 17:01:16 -0700</delta_ts>
            <desc>added more comments to each function</desc>
            <filename>fix27038e</filename>
            <type>text/plain</type>
            <size>13495</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCB0aGUgZW5jbG9zaW5nIHVuc3BsaXR0YWJsZSBlbGVtZW50IChlZGl0aW5nIHJvb3QgJiB0
YWJsZSBjZWxsKQorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25CZWZvcmVOb2RlKTogYWRkZWQg
QVNTRVJUKG5vZGUpCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyTm9kZSk6IGFkZGVk
IEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmFuZ2UpOiBjcmVhdGUgYSByYW5nZSBvYmplY3QgZnJvbSB0d28g
dmlzaWJsZSBwb3NpdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGlu
Z05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMgdGhhdCBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlTGlzdHMpOiB0
eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6IGFkZGVkIGNv
bnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmx5QWRqYWNlbnQpOiB0eXBv
CisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTogZGV0ZXJt
aW5lIGlmIGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB3aXRoaW4gdGhlIHZpc2libGUgYm91
bmRhcmllcyBvZiB0aGUgcmFuZ2UKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisK
IDIwMDktMDctMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIGJv
b2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUKICAgICAgICAgJiYgY29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9lbmQuY29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKSA8PSAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorc2hvcnQgUmFuZ2U6OmNvbXBh
cmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJh
bmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBk
ZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCkBAIC0zMzIsNyArMzMy
LDcgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLAogICAgIHJldHVy
biAwOwogfQogCi1SYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUq
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdl
Ojpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
ICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNv
bXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAxLCAyLCBvciAzIGJhc2Vk
IG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHJldmlzaW9uIDQ1NTY0KQor
KysgV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbGxhcHNlKGJvb2wgdG9TdGFydCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHNob3J0IGNvbXBhcmVQb2ludChO
b2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgc2hvcnQg
Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdDsKICAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZU
RVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVz
dWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ29t
cGFyZVJlc3VsdHMgY29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQs
IEVORF9UT19FTkQsIEVORF9UT19TVEFSVCB9OwogICAgIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNv
bnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCBpbnQgb2Zmc2V0Qik7Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQ1
NTY0KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ3LDYgKzc0Nyw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1v
dmVQYXJhZ3JhcGgKICAgICBtb3ZlUGFyYWdyYXBocyhzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBl
bmRPZlBhcmFncmFwaFRvTW92ZSwgZGVzdGluYXRpb24sIHByZXNlcnZlU2VsZWN0aW9uLCBwcmVz
ZXJ2ZVN0eWxlKTsKIH0KIAorLy8gRklYTUU6IG1vdmVQYXJhZ3JhcGggaXMgb3Zlcmx5IGNvbXBs
aWNhdGVkLiAgV2UgbmVlZCB0byBjbGVhbiB1cCBtb3ZlUGFyYWdyYXBoIHNvIHRoYXQgaXQgdXNl
cyBhcHBlbmRQYXJhZ3JhcGhJbnRvTm9kZQorLy8gb3IgbWFrZSBtb3JlIHNwZWNpYWxpemVkIGZ1
bmN0aW9ucyBhbmQgcmVtb3ZlIG1vdmVQYXJhZ3JhcGgKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaFRvTW92ZSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBkZXN0aW5hdGlvbiwgYm9vbCBwcmVzZXJ2ZVNlbGVjdGlvbiwg
Ym9vbCBwcmVzZXJ2ZVN0eWxlKQogewogICAgIGlmIChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlID09
IGRlc3RpbmF0aW9uKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0NTU2
NCkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNyw2ICsyMDcsMTcgQEAgRWxlbWVudCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3Qg
UAogICAgIHJldHVybiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKKy8vIEZpbmRz
IHRoZSBlbmNsb3NpbmcgZWxlbWVudCB1bnRpbCB3aGljaCB0aGUgdHJlZSBjYW4gYmUgc3BsaXR0
ZWQuCisvLyBXaGVuIGEgdXNlciBoaXRzIEVOVEVSLCBoZS9zaGUgd29uJ3QgZXhwZWN0IHRoaXMg
ZWxlbWVudCB0byBiZSBzcGxpdHRlZCBpbnRvIHR3by4KKy8vIFlvdSBtYXkgcGFzcyBpdCBhcyB0
aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNwbGl0VHJlZVRvTm9kZS4KK0VsZW1lbnQqIHVuc3BsaXR0
YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKK3sKKyAgICBFbGVtZW50
KiBlbmNsb3NpbmdDZWxsID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5
cGUocCwgJmlzVGFibGVDZWxsLCB0cnVlKSk7CisgICAgLy8gU2luY2UgZW5jbG9zaW5nTm9kZU9m
VHlwZSB3b24ndCBzZWFyY2ggYmV5b25kIHRoZSBoaWdoZXN0IHJvb3QgZWRpdGFibGUgbm9kZSwK
KyAgICAvLyB0aGlzIGNvZGUgd29ya3MgZXZlbiBpZiB0aGUgY2xvc2VzdCB0YWJsZSBjZWxsIHdh
cyBvdXRzaWRlIG9mIHRoZSByb290IGVkaXRhYmxlIG5vZGUuCisgICAgcmV0dXJuIGVuY2xvc2lu
Z0NlbGwgPyBlbmNsb3NpbmdDZWxsIDogZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocCk7Cit9CisK
IGJvb2wgaXNDb250ZW50RWRpdGFibGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4g
bm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKQEAgLTU2NSwxNiArNTc2LDc3IEBAIE5vZGUqIGlz
TGFzdFBvc2l0aW9uQmVmb3JlVGFibGUoY29uc3QgVmkKIAogUG9zaXRpb24gcG9zaXRpb25CZWZv
cmVOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFT
U0VSVChub2RlLT5wYXJlbnROb2RlKCkpCisgICAgQVNTRVJUKG5vZGUpOworICAgIC8vIEZJWE1F
OiBhZGRpbmcgQVNTRVJUKG5vZGUtPnBhcmVudCgpKTsgcmVzdWx0cyBpbiBmZXcgdGVzdHMgZmFp
bGluZwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJ
bmRleCgpKTsKIH0KIAogUG9zaXRpb24gcG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSogbm9k
ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gRklYTUU6IGFkZGluZyBBU1NFUlQobm9kZS0+
cGFyZW50KCkpOyByZXN1bHRzIGluIGZldyB0ZXN0cyBmYWlsaW5nCiAgICAgcmV0dXJuIFBvc2l0
aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIAorLy8g
UmV0dXJucyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbm9kZQor
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkp
CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSks
IDAsIERPV05TVFJFQU0pOworICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSk7Cit9
CisKKy8vIFJldHVybnMgdGhlIHZpc2libGUgcG9zaXRpb24gYXQgdGhlIGVuZGluZyBvZiBhIG5v
ZGUKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSog
bm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50
KCkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9k
ZSksIG5vZGUtPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgIHJldHVybiBwb3Np
dGlvbkFmdGVyTm9kZShub2RlKTsKK30KKworLy8gQ3JlYXRlIGEgcmFuZ2Ugb2JqZWN0IHdpdGgg
dHdvIHZpc2libGUgcG9zaXRpb25zLCBzdGFydCBhbmQgZW5kLgorLy8gY3JlYXRlKFBhc3NSZWZQ
dHI8RG9jdW1lbnQ+LCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7IHdpbGwgdXNl
IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0CisvLyBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9m
IGNyZWF0ZSBhIHJlZ3VsYXIgcmFuZ2Ugb2JqZWN0IChhdm9pZGluZyBlZGl0aW5nIG9mZnNldCku
CitQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGVSYW5nZShQYXNzUmVmUHRyPERvY3VtZW50PiBkb2N1
bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBzZWxlY3Rl
ZFJhbmdlLT5zZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwg
c3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKKyAgICBpZiAoIWVjKQorICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZXRFbmQoZW5kLmRlZXBF
cXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByZXR1cm4gc2VsZWN0ZWRSYW5nZS5y
ZWxlYXNlKCk7Cit9CisKKy8vIEV4dGVuZCByYW5nZVRvRXh0ZW5kIHRvIGluY2x1ZGUgbm9kZXMg
dGhhdCB3cmFwcyByYW5nZVRvRXh0ZW5kIGFuZCB2aXNpYmx5IHN0YXJ0cyBhbmQgZW5kcyBpbnNp
ZGUgb3IgYXQgdGhlIGJvdWRuYXJpZXMgb2YgbWF4aW11bVJhbmdlCisvLyBlLmcuIGlmIHRoZSBv
cmlnaW5hbCByYW5nZSBzcGFuZWQgImhlbGxvIiBpbiA8ZGl2PmhlbGxvPC9kaXY+LCB0aGVuIHRo
aXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgcmFuZ2UgdG8gY29udGFpbiBkaXYncyBhcm91bmQgaXQu
CisvLyBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNvcHlpbmcgLyBtb3ZpbmcgcGFyYWdyYXBo
cyB0byBjb250YWluIGFsbCB3cmFwcGluZyBub2Rlcy4KKy8vIFRoaXMgZnVuY3Rpb24gc3RvcHMg
ZXh0ZW5kaW5nIHRoZSByYW5nZSBpbW1lZGlhdGVseSBiZWxvdyByb290Tm9kZTsgaS5lLiB0aGUg
ZXh0ZW5kZWQgcmFuZ2UgY2FuIGNvbnRhaW4gYSBjaGlsZCBub2RlIG9mIHJvb3ROb2RlCisvLyBi
dXQgaXQgY2FuIG5ldmVyIGNvbnRhaW4gcm9vdE5vZGUgaXRzZWxmLgorUGFzc1JlZlB0cjxSYW5n
ZT4gZXh0ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4
dGVuZCwgUGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJhbmdlLCBOb2RlKiByb290Tm9kZSkKK3sK
KyAgICBBU1NFUlQocmFuZ2VUb0V4dGVuZCk7CisgICAgQVNTRVJUKG1heGltdW1SYW5nZSk7CisK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBOb2RlKiBhbmNlc3RvciA9IHJhbmdlVG9F
eHRlbmQtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsvLyBmaW5kIHRoZSBjbG9lc2V0IGNv
bW1vbiBhbmNlc3RvcgorICAgIE5vZGUqIGhpZ2hlc3ROb2RlID0gMDsKKyAgICAvLyB0cmF2ZXJz
ZSB0aHJvdWdoIGFuY2VzdG9ycyBhcyBsb25nIGFzIHRoZXkgYXJlIGNvbnRhaW5lZCB3aXRoaW4g
dGhlIHJhbmdlLCBjb250ZW50LWVkaXRhYmxlLCBhbmQgYmVsb3cgcm9vdE5vZGUgKGNvdWxkIGJl
ID0wKS4KKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3ItPmlzQ29udGVudEVkaXRhYmxl
KCkgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihhbmNlc3RvciwgKm1heGltdW1SYW5n
ZSkgJiYgYW5jZXN0b3IgIT0gcm9vdE5vZGUpIHsKKyAgICAgICAgaGlnaGVzdE5vZGUgPSBhbmNl
c3RvcjsKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOworICAgIH0K
KworICAgIGlmICghaGlnaGVzdE5vZGUpCisgICAgICAgIHJldHVybiByYW5nZVRvRXh0ZW5kOwor
CisgICAgLy8gQ3JlYXRlIG5ldyByYW5nZSB3aXRoIHRoZSBoaWdoZXN0IGVkaXRhYmxlIG5vZGUg
Y29udGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2UKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShyYW5nZVRvRXh0ZW5kLT5vd25lckRvY3VtZW50KCkpOworICAgIHJhbmdlLT5z
ZWxlY3ROb2RlKGhpZ2hlc3ROb2RlLCBlYyk7CisgICAgcmV0dXJuIHJhbmdlLnJlbGVhc2UoKTsK
K30KKwogYm9vbCBpc0xpc3RFbGVtZW50KE5vZGUgKm4pCiB7CiAgICAgcmV0dXJuIChuICYmIChu
LT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdOYW1lKG9sVGFnKSB8fCBuLT5oYXNUYWdO
YW1lKGRsVGFnKSkpOwpAQCAtNzQ2LDcgKzgxOCw3IEBAIGJvb2wgY2FuTWVyZ2VMaXN0cyhFbGVt
ZW50KiBmaXJzdExpc3QsIEUKICAgICByZXR1cm4gZmlyc3RMaXN0LT5oYXNUYWdOYW1lKHNlY29u
ZExpc3QtPnRhZ1FOYW1lKCkpLy8gbWFrZSBzdXJlIHRoZSBsaXN0IHR5cGVzIG1hdGNoIChvbCB2
cy4gdWwpCiAgICAgJiYgaXNDb250ZW50RWRpdGFibGUoZmlyc3RMaXN0KSAmJiBpc0NvbnRlbnRF
ZGl0YWJsZShzZWNvbmRMaXN0KS8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCiAgICAgJiYgZmly
c3RMaXN0LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gc2Vjb25kTGlzdC0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpLy8gZG9uJ3QgY3Jvc3MgZWRpdGluZyBib3VuZGFyaWVzCi0gICAgJiYgaXNWaXNp
YmlseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9uQmVmb3Jl
Tm9kZShzZWNvbmRMaXN0KSk7CisgICAgJiYgaXNWaXNpYmx5QWRqYWNlbnQocG9zaXRpb25BZnRl
ck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25CZWZvcmVOb2RlKHNlY29uZExpc3QpKTsKICAgICAv
LyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gdmlzaWJsZSBjb250ZW50IGJldHdlZW4gdGhpcyBsaSBh
bmQgdGhlIHByZXZpb3VzIGxpc3QKIH0KIApAQCAtOTc0LDcgKzEwNDYsNyBAQCBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0CiB9CiAKIAotaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoraW50IGluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQog
ewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtOTgzLDExICsxMDU1LDI4IEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxl
UG9zaXQKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwg
dHJ1ZSk7CiB9CiAKLWJvb2wgaXNWaXNpYmlseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJz
dCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCkKKy8vIERldGVybWluZXMgd2hldGhlciB0d28gcG9z
aXRpb25zIGFyZSB2aXNpYmx5IG5leHQgdG8gZWFjaCBvdGhlciAoZmlyc3QgdGhlbiBzZWNvbmQp
CisvLyB3aGlsZSBpZ25vcmluZyB3aGl0ZXNwYWNlcyBhbmQgdW5yZW5kZXJlZCBub2RlcworYm9v
bCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9u
JiBzZWNvbmQpCiB7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdCkgPT0gVmlzaWJs
ZVBvc2l0aW9uKHNlY29uZC51cHN0cmVhbSgpKTsKIH0KIAorLy8gRGV0ZXJtaW5lcyB3aGV0aGVy
IGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB2aXNpYmx5IHN0YXJ0cyBhbmQgZW5kcyBhdCB0
aGUgYm91bmRhcmllcyBvZiB0aGUgcmFuZ2UuCisvLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0
ZXJtaW5lIHdoZXRoZXIgYSBub2RlIGlzIHZpc2libHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdl
Citib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSogbm9kZSwgY29uc3QgUmFu
Z2UmIHNlbGVjdGVkUmFuZ2UpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIC8vIElmIHRoZSBu
b2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRo
aW4KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZS5jb21w
YXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxl
Y3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgor
ICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IFZpc2libGVQb3Np
dGlvbihzZWxlY3RlZFJhbmdlLnN0YXJ0UG9zaXRpb24oKSkKKyAgICAgICAgJiYgdmlzaWJsZVBv
c2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IFZpc2libGVQb3NpdGlvbihzZWxlY3RlZFJhbmdlLmVu
ZFBvc2l0aW9uKCkpOworfQorCiBQYXNzUmVmUHRyPFJhbmdlPiBhdm9pZEludGVyc2VjdGlvbldp
dGhOb2RlKGNvbnN0IFJhbmdlKiByYW5nZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXJhbmdl
KQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MSw2ICs2Miw3IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGEKIGJv
b2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CiBib29sIGlzUmljaGx5RWRp
dGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogRWxlbWVudCogZWRpdGFibGVSb290Rm9y
UG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKK0VsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRG
b3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCk7CiBib29sIGlzQmxvY2soY29uc3QgTm9kZSop
OwogTm9kZSogZW5jbG9zaW5nQmxvY2soTm9kZSopOwogCkBAIC03MSw2ICs3MywxMCBAQCBjb25z
dCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIAogUG9zaXRpb24gcG9zaXRpb25C
ZWZvcmVOb2RlKGNvbnN0IE5vZGUqKTsKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0
IE5vZGUqKTsKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKGNvbnN0
IE5vZGUqKTsKK1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoY29uc3Qg
Tm9kZSopOworUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVu
dD4gZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgZW5kLCBFeGNlcHRpb25Db2RlJiBlYyk7CitQYXNzUmVmUHRyPFJhbmdlPiBleHRl
bmRSYW5nZVRvV3JhcHBpbmdOb2RlcyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvRXh0ZW5kLCBQ
YXNzUmVmUHRyPFJhbmdlPiBtYXhpbXVtUmFuZ2UsIE5vZGUqIHJvb3ROb2RlKTsKIAogUGFzc1Jl
ZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBSYW5nZSosIE5vZGUq
KTsKIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiwgTm9kZSopOwpAQCAtMTM0LDggKzE0MCw5IEBAIGJvb2wgbGluZUJyZWFr
RXhpc3RzQXRWaXNpYmxlUG9zaXRpb24oY28KIAogVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25G
b3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi1pbnQgaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIGlzVmlzaWJpbHlB
ZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpOwor
aW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9v
bCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9u
JiBzZWNvbmQpOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUs
IGNvbnN0IFJhbmdlJiBzZWxlY3RlZFJhbmdlKTsKIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32402</attachid>
            <date>2009-07-07 17:01:16 -0700</date>
            <delta_ts>2009-07-08 16:11:05 -0700</delta_ts>
            <desc>removed the change to CompositeEditCommand.cpp</desc>
            <filename>fix27038f</filename>
            <type>text/plain</type>
            <size>12698</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCB0aGUgZW5jbG9zaW5nIHVuc3BsaXR0YWJsZSBlbGVtZW50IChlZGl0aW5nIHJvb3QgJiB0
YWJsZSBjZWxsKQorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25CZWZvcmVOb2RlKTogYWRkZWQg
QVNTRVJUKG5vZGUpCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyTm9kZSk6IGFkZGVk
IEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmFuZ2UpOiBjcmVhdGUgYSByYW5nZSBvYmplY3QgZnJvbSB0d28g
dmlzaWJsZSBwb3NpdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGlu
Z05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMgdGhhdCBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlTGlzdHMpOiB0
eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6IGFkZGVkIGNv
bnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmx5QWRqYWNlbnQpOiB0eXBv
CisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTogZGV0ZXJt
aW5lIGlmIGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB3aXRoaW4gdGhlIHZpc2libGUgYm91
bmRhcmllcyBvZiB0aGUgcmFuZ2UKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisK
IDIwMDktMDctMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIGJv
b2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUKICAgICAgICAgJiYgY29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9lbmQuY29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKSA8PSAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorc2hvcnQgUmFuZ2U6OmNvbXBh
cmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJh
bmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBk
ZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCkBAIC0zMzIsNyArMzMy
LDcgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLAogICAgIHJldHVy
biAwOwogfQogCi1SYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUq
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdl
Ojpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
ICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNv
bXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAxLCAyLCBvciAzIGJhc2Vk
IG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHJldmlzaW9uIDQ1NTY0KQor
KysgV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbGxhcHNlKGJvb2wgdG9TdGFydCwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHNob3J0IGNvbXBhcmVQb2ludChO
b2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgc2hvcnQg
Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdDsKICAgICBlbnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZU
RVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVz
dWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJik7CisgICAgQ29t
cGFyZVJlc3VsdHMgY29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQs
IEVORF9UT19FTkQsIEVORF9UT19TVEFSVCB9OwogICAgIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNv
bnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCBpbnQgb2Zmc2V0Qik7Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNywxNyBA
QCBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQCiAgICAgcmV0dXJuIG5v
ZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAorLy8gRmluZHMgdGhlIGVuY2xvc2luZyBl
bGVtZW50IHVudGlsIHdoaWNoIHRoZSB0cmVlIGNhbiBiZSBzcGxpdHRlZC4KKy8vIFdoZW4gYSB1
c2VyIGhpdHMgRU5URVIsIGhlL3NoZSB3b24ndCBleHBlY3QgdGhpcyBlbGVtZW50IHRvIGJlIHNw
bGl0dGVkIGludG8gdHdvLgorLy8gWW91IG1heSBwYXNzIGl0IGFzIHRoZSBzZWNvbmQgYXJndW1l
bnQgb2Ygc3BsaXRUcmVlVG9Ob2RlLgorRWxlbWVudCogdW5zcGxpdHRhYmxlRWxlbWVudEZvclBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQoreworICAgIEVsZW1lbnQqIGVuY2xvc2luZ0NlbGwg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAmaXNUYWJsZUNl
bGwsIHRydWUpKTsKKyAgICAvLyBTaW5jZSBlbmNsb3NpbmdOb2RlT2ZUeXBlIHdvbid0IHNlYXJj
aCBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm9vdCBlZGl0YWJsZSBub2RlLAorICAgIC8vIHRoaXMgY29k
ZSB3b3JrcyBldmVuIGlmIHRoZSBjbG9zZXN0IHRhYmxlIGNlbGwgd2FzIG91dHNpZGUgb2YgdGhl
IHJvb3QgZWRpdGFibGUgbm9kZS4KKyAgICByZXR1cm4gZW5jbG9zaW5nQ2VsbCA/IGVuY2xvc2lu
Z0NlbGwgOiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsKK30KKwogYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOwpAQCAtNTY1LDE2ICs1NzYsNzcgQEAgTm9kZSogaXNMYXN0UG9zaXRpb25CZWZv
cmVUYWJsZShjb25zdCBWaQogCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9k
ZSogbm9kZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVu
dE5vZGUoKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gRklYTUU6IGFkZGluZyBBU1NFUlQo
bm9kZS0+cGFyZW50Tm9kZSgpKTsgcmVzdWx0cyBpbiBlZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1s
aWdhdHVyZS0wMDEuaHRtbCBjcmFzaGluZwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJl
bnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKTsKIH0KIAogUG9zaXRpb24gcG9zaXRpb25BZnRl
ck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNT
RVJUKG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gRklYTUU6
IGFkZGluZyBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsgcmVzdWx0cyBpbiBlZGl0aW5nL2Rl
bGV0aW5nL2RlbGV0ZS1saWdhdHVyZS0wMDEuaHRtbCBjcmFzaGluZwogICAgIHJldHVybiBQb3Np
dGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpICsgMSk7CiB9CiAKKy8v
IFJldHVybnMgdGhlIHZpc2libGUgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5vZGUK
K1Zpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKGNvbnN0IE5vZGUqIG5v
ZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgp
KQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUp
LCAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpOwor
fQorCisvLyBSZXR1cm5zIHRoZSB2aXNpYmxlIHBvc2l0aW9uIGF0IHRoZSBlbmRpbmcgb2YgYSBu
b2RlCitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3Vu
dCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5v
ZGUpLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gcG9z
aXRpb25BZnRlck5vZGUobm9kZSk7Cit9CisKKy8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCB3aXRo
IHR3byB2aXNpYmxlIHBvc2l0aW9ucywgc3RhcnQgYW5kIGVuZC4KKy8vIGNyZWF0ZShQYXNzUmVm
UHRyPERvY3VtZW50PiwgY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOyB3aWxsIHVz
ZSBkZXByZWNhdGVkRWRpdGluZ09mZnNldAorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBv
ZiBjcmVhdGUgYSByZWd1bGFyIHJhbmdlIG9iamVjdCAoYXZvaWRpbmcgZWRpdGluZyBvZmZzZXQp
LgorUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgZW5kLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgc2VsZWN0
ZWRSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCks
IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBl
Yyk7CisgICAgaWYgKCFlYykKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0RW5kKGVuZC5kZWVw
RXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2Uu
cmVsZWFzZSgpOworfQorCisvLyBFeHRlbmQgcmFuZ2VUb0V4dGVuZCB0byBpbmNsdWRlIG5vZGVz
IHRoYXQgd3JhcHMgcmFuZ2VUb0V4dGVuZCBhbmQgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgaW5z
aWRlIG9yIGF0IHRoZSBib3VkbmFyaWVzIG9mIG1heGltdW1SYW5nZQorLy8gZS5nLiBpZiB0aGUg
b3JpZ2luYWwgcmFuZ2Ugc3BhbmVkICJoZWxsbyIgaW4gPGRpdj5oZWxsbzwvZGl2PiwgdGhlbiB0
aGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHJhbmdlIHRvIGNvbnRhaW4gZGl2J3MgYXJvdW5kIGl0
LgorLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjb3B5aW5nIC8gbW92aW5nIHBhcmFncmFw
aHMgdG8gY29udGFpbiBhbGwgd3JhcHBpbmcgbm9kZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHN0b3Bz
IGV4dGVuZGluZyB0aGUgcmFuZ2UgaW1tZWRpYXRlbHkgYmVsb3cgcm9vdE5vZGU7IGkuZS4gdGhl
IGV4dGVuZGVkIHJhbmdlIGNhbiBjb250YWluIGEgY2hpbGQgbm9kZSBvZiByb290Tm9kZQorLy8g
YnV0IGl0IGNhbiBuZXZlciBjb250YWluIHJvb3ROb2RlIGl0c2VsZi4KK1Bhc3NSZWZQdHI8UmFu
Z2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9F
eHRlbmQsIFBhc3NSZWZQdHI8UmFuZ2U+IG1heGltdW1SYW5nZSwgTm9kZSogcm9vdE5vZGUpCit7
CisgICAgQVNTRVJUKHJhbmdlVG9FeHRlbmQpOworICAgIEFTU0VSVChtYXhpbXVtUmFuZ2UpOwor
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTm9kZSogYW5jZXN0b3IgPSByYW5nZVRv
RXh0ZW5kLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ly8gZmluZCB0aGUgY2xvZXNldCBj
b21tb24gYW5jZXN0b3IKKyAgICBOb2RlKiBoaWdoZXN0Tm9kZSA9IDA7CisgICAgLy8gdHJhdmVy
c2UgdGhyb3VnaCBhbmNlc3RvcnMgYXMgbG9uZyBhcyB0aGV5IGFyZSBjb250YWluZWQgd2l0aGlu
IHRoZSByYW5nZSwgY29udGVudC1lZGl0YWJsZSwgYW5kIGJlbG93IHJvb3ROb2RlIChjb3VsZCBi
ZSA9MCkuCisgICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oYW5jZXN0b3IsICptYXhpbXVtUmFu
Z2UpICYmIGFuY2VzdG9yICE9IHJvb3ROb2RlKSB7CisgICAgICAgIGhpZ2hlc3ROb2RlID0gYW5j
ZXN0b3I7CisgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKyAgICB9
CisKKyAgICBpZiAoIWhpZ2hlc3ROb2RlKQorICAgICAgICByZXR1cm4gcmFuZ2VUb0V4dGVuZDsK
KworICAgIC8vIENyZWF0ZSBuZXcgcmFuZ2Ugd2l0aCB0aGUgaGlnaGVzdCBlZGl0YWJsZSBub2Rl
IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdlCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUocmFuZ2VUb0V4dGVuZC0+b3duZXJEb2N1bWVudCgpKTsKKyAgICByYW5nZS0+
c2VsZWN0Tm9kZShoaWdoZXN0Tm9kZSwgZWMpOworICAgIHJldHVybiByYW5nZS5yZWxlYXNlKCk7
Cit9CisKIGJvb2wgaXNMaXN0RWxlbWVudChOb2RlICpuKQogewogICAgIHJldHVybiAobiAmJiAo
bi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRhZykgfHwgbi0+aGFzVGFn
TmFtZShkbFRhZykpKTsKQEAgLTc0Niw3ICs4MTgsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxl
bWVudCogZmlyc3RMaXN0LCBFCiAgICAgcmV0dXJuIGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNv
bmRMaXN0LT50YWdRTmFtZSgpKS8vIG1ha2Ugc3VyZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wg
dnMuIHVsKQogICAgICYmIGlzQ29udGVudEVkaXRhYmxlKGZpcnN0TGlzdCkgJiYgaXNDb250ZW50
RWRpdGFibGUoc2Vjb25kTGlzdCkvLyBib3RoIGxpc3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZp
cnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVkaXRpbmcgYm91bmRhcmllcwotICAgICYmIGlzVmlz
aWJpbHlBZGphY2VudChwb3NpdGlvbkFmdGVyTm9kZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9y
ZU5vZGUoc2Vjb25kTGlzdCkpOworICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uQWZ0
ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9uQmVmb3JlTm9kZShzZWNvbmRMaXN0KSk7CiAgICAg
Ly8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vIHZpc2libGUgY29udGVudCBiZXR3ZWVuIHRoaXMgbGkg
YW5kIHRoZSBwcmV2aW91cyBsaXN0CiB9CiAKQEAgLTk3NCw3ICsxMDQ2LDcgQEAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdAogfQogCiAKLWludCBpbmRleEZvclZpc2li
bGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK2ludCBpbmRleEZv
clZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikK
IHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTk4MywxMSArMTA1NSwyOCBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJs
ZVBvc2l0CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCks
IHRydWUpOwogfQogCi1ib29sIGlzVmlzaWJpbHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmly
c3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCisvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBv
c2l0aW9ucyBhcmUgdmlzaWJseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25k
KQorLy8gd2hpbGUgaWdub3Jpbmcgd2hpdGVzcGFjZXMgYW5kIHVucmVuZGVyZWQgbm9kZXMKK2Jv
b2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlv
biYgc2Vjb25kKQogewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3QpID09IFZpc2li
bGVQb3NpdGlvbihzZWNvbmQudXBzdHJlYW0oKSk7CiB9CiAKKy8vIERldGVybWluZXMgd2hldGhl
ciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQg
dGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgorLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRl
dGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5n
ZQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJh
bmdlJiBzZWxlY3RlZFJhbmdlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICAvLyBJZiB0aGUg
bm9kZSBpcyBpbnNpZGUgdGhlIHJhbmdlLCB0aGVuIGl0IHN1cmVseSBpcyBjb250YWluZWQgd2l0
aGluCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UuY29t
cGFyZU5vZGUobm9kZSwgZWMpID09IFJhbmdlOjpOT0RFX0lOU0lERSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBJZiB0aGUgbm9kZSBzdGFydHMgYW5kIGVuZHMgYXQgd2hlcmUgc2Vs
ZWN0ZWRSYW5nZSBzdGFydHMgYW5kIGVuZHMsIHRoZSBub2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4K
KyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBWaXNpYmxlUG9z
aXRpb24oc2VsZWN0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCkpCisgICAgICAgICYmIHZpc2libGVQ
b3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0ZWRSYW5nZS5l
bmRQb3NpdGlvbigpKTsKK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25X
aXRoTm9kZShjb25zdCBSYW5nZSogcmFuZ2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFyYW5n
ZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjEsNiArNjIsNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhCiBi
b29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBpc1JpY2hseUVk
aXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CitFbGVtZW50KiB1bnNwbGl0dGFibGVFbGVtZW50
Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApOwogYm9vbCBpc0Jsb2NrKGNvbnN0IE5vZGUq
KTsKIE5vZGUqIGVuY2xvc2luZ0Jsb2NrKE5vZGUqKTsKIApAQCAtNzEsNiArNzMsMTAgQEAgY29u
c3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAKIFBvc2l0aW9uIHBvc2l0aW9u
QmVmb3JlTm9kZShjb25zdCBOb2RlKik7CiBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25z
dCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShjb25z
dCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0
IE5vZGUqKTsKK1Bhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZVJhbmdlKFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpOworUGFzc1JlZlB0cjxSYW5nZT4gZXh0
ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVuZCwg
UGFzc1JlZlB0cjxSYW5nZT4gbWF4aW11bVJhbmdlLCBOb2RlKiByb290Tm9kZSk7CiAKIFBhc3NS
ZWZQdHI8UmFuZ2U+IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqLCBOb2Rl
Kik7CiBWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYsIE5vZGUqKTsKQEAgLTEzNCw4ICsxNDAsOSBAQCBib29sIGxpbmVCcmVh
a0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNvCiAKIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiYpOwotYm9vbCBpc1Zpc2liaWx5
QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKTsK
K2ludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jv
b2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlv
biYgc2Vjb25kKTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSYgc2VsZWN0ZWRSYW5nZSk7CiB9CiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="16851"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32484</attachid>
            <date>2009-07-08 16:11:05 -0700</date>
            <delta_ts>2009-07-17 14:56:01 -0700</delta_ts>
            <desc>resubmission</desc>
            <filename>fix27038g</filename>
            <type>text/plain</type>
            <size>13278</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyB1dGlsaXR5IGZ1bmN0aW9ucyB0byBodG1sZWR0aWluZy5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIg
dG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5lZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBi
ZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAKKworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1
bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBhbnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20v
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6IGFkZGVk
IGNvbnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVOb2RlKTog
YWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgICogZG9tL1JhbmdlLmg6IHVwZGF0ZWQgcHJv
dG90eXBlCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6IGFkZGVk
IGNvbW1lbnQgdG8gbW92ZVBhcmFncmFwaAorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKTog
ZmluZCB0aGUgZW5jbG9zaW5nIHVuc3BsaXR0YWJsZSBlbGVtZW50IChlZGl0aW5nIHJvb3QgJiB0
YWJsZSBjZWxsKQorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25CZWZvcmVOb2RlKTogYWRkZWQg
QVNTRVJUKG5vZGUpCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyTm9kZSk6IGFkZGVk
IEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmFuZ2UpOiBjcmVhdGUgYSByYW5nZSBvYmplY3QgZnJvbSB0d28g
dmlzaWJsZSBwb3NpdGlvbnMKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFJhbmdlVG9XcmFwcGlu
Z05vZGVzKTogZXh0ZW5kIHJhbmdlIHRvIGluY2x1ZGUgbm9kZXMgdGhhdCBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OmNhbk1lcmdlTGlzdHMpOiB0
eXBvCisgICAgICAgIChXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbik6IGFkZGVkIGNv
bnN0IHF1YWxpZmllcgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmx5QWRqYWNlbnQpOiB0eXBv
CisgICAgICAgIChXZWJDb3JlOjppc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKTogZGV0ZXJt
aW5lIGlmIGEgbm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB3aXRoaW4gdGhlIHZpc2libGUgYm91
bmRhcmllcyBvZiB0aGUgcmFuZ2UKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisK
IDIwMDktMDctMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQCBQYXNz
UmVmUHRyPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKFBhc3NSZWZQCiAKIFBhc3NSZWZQdHI8UmFuZ2U+
IFJhbmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogeworICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGRuJ3QgYmUgdXNpbmcgZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQgaGVyZQogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnQubm9kZSgpLCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSkpOwogfQogCkBAIC0yOTQsNyArMjk1LDcgQEAgYm9vbCBSYW5nZTo6aXNQ
b2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAgICAmJiBjb21wYXJlQm91bmRhcnlQb2lu
dHMocmVmTm9kZSwgb2Zmc2V0LCBtX2VuZC5jb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpIDw9
IDA7CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCitzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUq
IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIC8v
IGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFyZVBv
aW50CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVuZGluZyBvbiBp
ZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKQEAgLTMzMiw3ICszMzMsNyBAQCBzaG9ydCBS
YW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsCiAgICAgcmV0dXJuIDA7CiB9CiAKLVJh
bmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitSYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2Rl
KE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIC8vIGh0dHA6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFyZU5vZGUKICAg
ICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIDAsIDEsIDIsIG9yIDMgYmFzZWQgb24gaWYgdGhlIG5v
ZGUgaXMgYmVmb3JlLCBhZnRlciwKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gNDU1NjQpCisrKyBXZWJDb3JlL2Rv
bS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5l
ciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29sbGFwc2UoYm9vbCB0
b1N0YXJ0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiBy
ZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgc2hvcnQgY29tcGFy
ZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAg
ICBib29sIGlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBzaG9ydCBjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RF
X0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9
OwotICAgIENvbXBhcmVSZXN1bHRzIGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RB
UlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07CiAgICAgc2hvcnQg
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5n
ZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHN0YXRpYyBzaG9ydCBjb21wYXJlQm91bmRh
cnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgaW50IG9mZnNldEEsIE5vZGUqIGNvbnRhaW5lckIs
IGludCBvZmZzZXRCKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNDU1
NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDcsNiArMjA3LDIwIEBAIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0
IFAKICAgICByZXR1cm4gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCisvLyBGaW5k
cyB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgdW50aWwgd2hpY2ggdGhlIHRyZWUgY2FuIGJlIHNwbGl0
LgorLy8gV2hlbiBhIHVzZXIgaGl0cyBFTlRFUiwgaGUvc2hlIHdvbid0IGV4cGVjdCB0aGlzIGVs
ZW1lbnQgdG8gYmUgc3BsaXQgaW50byB0d28uCisvLyBZb3UgbWF5IHBhc3MgaXQgYXMgdGhlIHNl
Y29uZCBhcmd1bWVudCBvZiBzcGxpdFRyZWVUb05vZGUuCitFbGVtZW50KiB1bnNwbGl0dGFibGVF
bGVtZW50Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCit7CisgICAgLy8gU2luY2UgZW5j
bG9zaW5nTm9kZU9mVHlwZSB3b24ndCBzZWFyY2ggYmV5b25kIHRoZSBoaWdoZXN0IHJvb3QgZWRp
dGFibGUgbm9kZSwKKyAgICAvLyB0aGlzIGNvZGUgd29ya3MgZXZlbiBpZiB0aGUgY2xvc2VzdCB0
YWJsZSBjZWxsIHdhcyBvdXRzaWRlIG9mIHRoZSByb290IGVkaXRhYmxlIG5vZGUuCisgICAgRWxl
bWVudCogZW5jbG9zaW5nQ2VsbCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbmNsb3NpbmdOb2Rl
T2ZUeXBlKHAsICZpc1RhYmxlQ2VsbCwgdHJ1ZSkpOworICAgIGlmIChlbmNsb3NpbmdDZWxsKQor
ICAgICAgICByZXR1cm4gZW5jbG9zaW5nQ2VsbDsKKworICAgIHJldHVybiBlZGl0YWJsZVJvb3RG
b3JQb3NpdGlvbihwKTsKK30KKwogYm9vbCBpc0NvbnRlbnRFZGl0YWJsZShjb25zdCBOb2RlKiBu
b2RlKQogewogICAgIHJldHVybiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwpAQCAtNTY1LDE2
ICs1NzksNzkgQEAgTm9kZSogaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShjb25zdCBWaQogCiBQ
b3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICBBU1NFUlQo
bm9kZSk7CisgICAgLy8gRklYTUU6IGFkZGluZyBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsg
cmVzdWx0cyBpbiBlZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1saWdhdHVyZS0wMDEuaHRtbCBjcmFz
aGluZwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJ
bmRleCgpKTsKIH0KIAogUG9zaXRpb24gcG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSogbm9k
ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSkKKyAgICBBU1NFUlQobm9kZSk7CisgICAgLy8gRklYTUU6IGFkZGluZyBBU1NFUlQobm9kZS0+
cGFyZW50Tm9kZSgpKTsgcmVzdWx0cyBpbiBlZGl0aW5nL2RlbGV0aW5nL2RlbGV0ZS1saWdhdHVy
ZS0wMDEuaHRtbCBjcmFzaGluZwogICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnROb2Rl
KCksIG5vZGUtPm5vZGVJbmRleCgpICsgMSk7CiB9CiAKKy8vIFJldHVybnMgdGhlIHZpc2libGUg
cG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5vZGUKK1Zpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb25CZWZvcmVOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5v
ZGUpOworICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCAwLCBET1dOU1RSRUFNKTsKKyAg
ICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVO
b2RlKG5vZGUpOworfQorCisvLyBSZXR1cm5zIHRoZSB2aXNpYmxlIHBvc2l0aW9uIGF0IHRoZSBl
bmRpbmcgb2YgYSBub2RlCitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChub2RlLT5j
aGlsZE5vZGVDb3VudCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNvbnN0X2Nh
c3Q8Tm9kZSo+KG5vZGUpLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAg
ICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcG9zaXRpb25BZnRlck5v
ZGUobm9kZSk7Cit9CisKKy8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCB3aXRoIHR3byB2aXNpYmxl
IHBvc2l0aW9ucywgc3RhcnQgYW5kIGVuZC4KKy8vIGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50
PiwgY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOyB3aWxsIHVzZSBkZXByZWNhdGVk
RWRpdGluZ09mZnNldAorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBjcmVhdGUgYSBy
ZWd1bGFyIHJhbmdlIG9iamVjdCAoYXZvaWRpbmcgZWRpdGluZyBvZmZzZXQpLgorUGFzc1JlZlB0
cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgc2VsZWN0ZWRSYW5nZS0+c2V0
U3RhcnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIHN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYg
KCFlYykKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0RW5kKGVuZC5kZWVwRXF1aXZhbGVudCgp
LmNvbnRhaW5lck5vZGUoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFzZSgpOwor
fQorCisvLyBFeHRlbmQgcmFuZ2VUb0V4dGVuZCB0byBpbmNsdWRlIG5vZGVzIHRoYXQgd3JhcHMg
cmFuZ2VUb0V4dGVuZCBhbmQgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgaW5zaWRlIG9yIGF0IHRo
ZSBib3VkbmFyaWVzIG9mIG1heGltdW1SYW5nZQorLy8gZS5nLiBpZiB0aGUgb3JpZ2luYWwgcmFu
Z2Ugc3BhbmVkICJoZWxsbyIgaW4gPGRpdj5oZWxsbzwvZGl2PiwgdGhlbiB0aGlzIGZ1bmN0aW9u
IGV4dGVuZHMgdGhlIHJhbmdlIHRvIGNvbnRhaW4gZGl2J3MgYXJvdW5kIGl0LgorLy8gQ2FsbCB0
aGlzIGZ1bmN0aW9uIGJlZm9yZSBjb3B5aW5nIC8gbW92aW5nIHBhcmFncmFwaHMgdG8gY29udGFp
biBhbGwgd3JhcHBpbmcgbm9kZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHN0b3BzIGV4dGVuZGluZyB0
aGUgcmFuZ2UgaW1tZWRpYXRlbHkgYmVsb3cgcm9vdE5vZGU7IGkuZS4gdGhlIGV4dGVuZGVkIHJh
bmdlIGNhbiBjb250YWluIGEgY2hpbGQgbm9kZSBvZiByb290Tm9kZQorLy8gYnV0IGl0IGNhbiBu
ZXZlciBjb250YWluIHJvb3ROb2RlIGl0c2VsZi4KK1Bhc3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJh
bmdlVG9XcmFwcGluZ05vZGVzKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9FeHRlbmQsIGNvbnN0
IFJhbmdlKiBtYXhpbXVtUmFuZ2UsIGNvbnN0IE5vZGUqIHJvb3ROb2RlKQoreworICAgIEFTU0VS
VChyYW5nZVRvRXh0ZW5kKTsKKyAgICBBU1NFUlQobWF4aW11bVJhbmdlKTsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIE5vZGUqIGFuY2VzdG9yID0gcmFuZ2VUb0V4dGVuZC0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoZWMpOy8vIGZpbmQgdGhlIGNsb2VzZXQgY29tbW9uIGFuY2Vz
dG9yCisgICAgTm9kZSogaGlnaGVzdE5vZGUgPSAwOworICAgIC8vIHRyYXZlcnNlIHRocm91Z2gg
YW5jZXN0b3JzIGFzIGxvbmcgYXMgdGhleSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2Us
IGNvbnRlbnQtZWRpdGFibGUsIGFuZCBiZWxvdyByb290Tm9kZSAoY291bGQgYmUgPTApLgorICAg
IHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBpc05v
ZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGFuY2VzdG9yLCBtYXhpbXVtUmFuZ2UpICYmIGFuY2Vz
dG9yICE9IHJvb3ROb2RlKSB7CisgICAgICAgIGhpZ2hlc3ROb2RlID0gYW5jZXN0b3I7CisgICAg
ICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKyAgICB9CisKKyAgICBpZiAo
IWhpZ2hlc3ROb2RlKQorICAgICAgICByZXR1cm4gcmFuZ2VUb0V4dGVuZDsKKworICAgIC8vIENy
ZWF0ZSBuZXcgcmFuZ2Ugd2l0aCB0aGUgaGlnaGVzdCBlZGl0YWJsZSBub2RlIGNvbnRhaW5lZCB3
aXRoaW4gdGhlIHJhbmdlCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
cmFuZ2VUb0V4dGVuZC0+b3duZXJEb2N1bWVudCgpKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZSho
aWdoZXN0Tm9kZSwgZWMpOworICAgIHJldHVybiByYW5nZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wg
aXNMaXN0RWxlbWVudChOb2RlICpuKQogewogICAgIHJldHVybiAobiAmJiAobi0+aGFzVGFnTmFt
ZSh1bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShkbFRhZykp
KTsKQEAgLTc0Niw3ICs4MjMsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RM
aXN0LCBFCiAgICAgcmV0dXJuIGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNvbmRMaXN0LT50YWdR
TmFtZSgpKS8vIG1ha2Ugc3VyZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wgdnMuIHVsKQogICAg
ICYmIGlzQ29udGVudEVkaXRhYmxlKGZpcnN0TGlzdCkgJiYgaXNDb250ZW50RWRpdGFibGUoc2Vj
b25kTGlzdCkvLyBib3RoIGxpc3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8v
IGRvbid0IGNyb3NzIGVkaXRpbmcgYm91bmRhcmllcwotICAgICYmIGlzVmlzaWJpbHlBZGphY2Vu
dChwb3NpdGlvbkFmdGVyTm9kZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25k
TGlzdCkpOworICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKGZpcnN0
TGlzdCksIHBvc2l0aW9uQmVmb3JlTm9kZShzZWNvbmRMaXN0KSk7CiAgICAgLy8gTWFrZSBzdXJl
IHRoZXJlIGlzIG5vIHZpc2libGUgY29udGVudCBiZXR3ZWVuIHRoaXMgbGkgYW5kIHRoZSBwcmV2
aW91cyBsaXN0CiB9CiAKQEAgLTk3NCw3ICsxMDUxLDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Gb3JQYXJhZ3JhcGhJdAogfQogCiAKLWludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK2ludCBpbmRleEZvclZpc2libGVQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAo
dmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk4MywxMSAr
MTA2MCwyOSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAg
cmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQog
Ci1ib29sIGlzVmlzaWJpbHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBv
c2l0aW9uJiBzZWNvbmQpCisvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUg
dmlzaWJseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQorLy8gd2hpbGUg
aWdub3Jpbmcgd2hpdGVzcGFjZXMgYW5kIHVucmVuZGVyZWQgbm9kZXMKK2Jvb2wgaXNWaXNpYmx5
QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQog
ewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3QpID09IFZpc2libGVQb3NpdGlvbihz
ZWNvbmQudXBzdHJlYW0oKSk7CiB9CiAKKy8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMg
aW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJp
ZXMgb2YgdGhlIHJhbmdlLgorLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQorYm9vbCBpc05v
ZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3Rl
ZFJhbmdlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7
CisgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkg
aXMgY29udGFpbmVkIHdpdGhpbgorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChz
ZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQg
ZW5kcyBhdCB3aGVyZSBzZWxlY3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMg
Y29udGFpbmVkIHdpdGhpbgorICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5v
ZGUpID09IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKQorICAgICAgICAmJiB2aXNpYmxl
UG9zaXRpb25BZnRlck5vZGUobm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsK
K30KKwogUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBS
YW5nZSogcmFuZ2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFyYW5nZSkKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5oCShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUVk
aXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNiArNjIsNyBAQCBQ
b3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhCiBib29sIGlzRWRpdGFibGVQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBpc1JpY2hseUVkaXRhYmxlUG9zaXRpb24o
Y29uc3QgUG9zaXRpb24mKTsKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJik7CitFbGVtZW50KiB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oY29u
c3QgUG9zaXRpb24mKTsKIGJvb2wgaXNCbG9jayhjb25zdCBOb2RlKik7CiBOb2RlKiBlbmNsb3Np
bmdCbG9jayhOb2RlKik7CiAKQEAgLTcxLDYgKzczLDEwIEBAIGNvbnN0IFN0cmluZyYgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpOwogCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3Qg
Tm9kZSopOwogUG9zaXRpb24gcG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSopOworVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSopOworVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKik7CitQYXNzUmVm
UHRyPFJhbmdlPiBjcmVhdGVSYW5nZShQYXNzUmVmUHRyPERvY3VtZW50PiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1Bhc3NSZWZQdHI8UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKFBhc3NS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9FeHRlbmQsIGNvbnN0IFJhbmdlKiBtYXhpbXVtUmFuZ2UsIGNv
bnN0IE5vZGUqIHJvb3ROb2RlKTsKIAogUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rp
b25XaXRoTm9kZShjb25zdCBSYW5nZSosIE5vZGUqKTsKIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJ
bnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTm9kZSopOwpAQCAt
MTM0LDggKzE0MCw5IEBAIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24oY28K
IAogVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpOwogCi1pbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJs
ZVBvc2l0aW9uJik7Ci1ib29sIGlzVmlzaWJpbHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmly
c3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpOworaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQ
b3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpOworYm9vbCBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKE5vZGUqLCBjb25zdCBSYW5nZSopOwogfQogCiAjZW5kaWYK
</data>
<flag name="review"
          id="16911"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32973</attachid>
            <date>2009-07-17 14:56:01 -0700</date>
            <delta_ts>2009-07-17 15:09:52 -0700</delta_ts>
            <desc>re-resubmission</desc>
            <filename>fix27038h</filename>
            <type>text/plain</type>
            <size>13203</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMTcgIFJ5b3N1a2UgTml3YSAgPHJ5b3N1a2Uubml3YUBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHRtbGVkaXRpbmcuY3BwIG5lZWRzIG1vcmUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gZml4IHRo
ZSBidWcgMjY4MTYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIgdG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5l
ZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBiZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAK
KworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBh
bnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50
KTogYWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFy
ZU5vZGUpOiBhZGRlZCBjb25zdCBxdWFsaWZpZXIKKyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVuc3Bs
aXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbik6IGZpbmQgdGhlIGVuY2xvc2luZyB1bnNwbGl0dGFi
bGUgZWxlbWVudCAoZWRpdGluZyByb290ICYgdGFibGUgY2VsbCkKKyAgICAgICAgKFdlYkNvcmU6
OnBvc2l0aW9uQmVmb3JlTm9kZSk6IGFkZGVkIEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29y
ZTo6cG9zaXRpb25BZnRlck5vZGUpOiBhZGRlZCBBU1NFUlQobm9kZSkKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJs
ZVBvc2l0aW9uQWZ0ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJhbmdlKTogY3Jl
YXRlIGEgcmFuZ2Ugb2JqZWN0IGZyb20gdHdvIHZpc2libGUgcG9zaXRpb25zCisgICAgICAgIChX
ZWJDb3JlOjpleHRlbmRSYW5nZVRvV3JhcHBpbmdOb2Rlcyk6IGV4dGVuZCByYW5nZSB0byBpbmNs
dWRlIG5vZGVzIHRoYXQgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBib3VuZGFyaWVzCisgICAgICAg
IChXZWJDb3JlOjpjYW5NZXJnZUxpc3RzKTogdHlwbworICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBhZGRlZCBjb25zdCBxdWFsaWZpZXIKKyAgICAgICAgKFdlYkNv
cmU6OmlzVmlzaWJseUFkamFjZW50KTogdHlwbworICAgICAgICAoV2ViQ29yZTo6aXNOb2RlVmlz
aWJseUNvbnRhaW5lZFdpdGhpbik6IGRldGVybWluZSBpZiBhIG5vZGUgaXMgaW5zaWRlIGEgcmFu
Z2Ugb3Igd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlCisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAyMDA5LTA3LTE3ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
SW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9S
YW5nZS5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVh
dGUoUGFzc1JlZlAKIAogUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRy
PERvY3VtZW50PiBvd25lckRvY3VtZW50LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpCiB7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZG4ndCBiZSB1c2luZyBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCBoZXJlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYW5nZShv
d25lckRvY3VtZW50LCBzdGFydC5ub2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGVuZC5ub2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSk7CiB9CiAKQEAg
LTI5NCw3ICsyOTUsNyBAQCBib29sIFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2Rl
CiAgICAgICAgICYmIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fZW5k
LmNvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSkgPD0gMDsKIH0KIAotc2hvcnQgUmFuZ2U6OmNv
bXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
K3Nob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlUG9pbnQKICAgICAvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIC0xLCAwIG9yIDEgZGVwZW5kaW5nIG9uIGlmIHRoZSBwb2ludCBkZXNjcmliZWQgYnkg
dGhlIApAQCAtMzMyLDcgKzMzMyw3IEBAIHNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSog
cmVmTm9kZSwKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdl
Ojpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK1JhbmdlOjpD
b21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMg
MCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLApJbmRl
eDogV2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5o
CShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRy
PE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBjb2xsYXBzZShib29sIHRvU3RhcnQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBib29sIGlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9k
ZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHNob3J0IGNvbXBh
cmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgZW51bSBDb21wYXJlUmVzdWx0cyB7IE5PREVfQkVGT1JFLCBOT0RFX0FGVEVSLCBOT0RF
X0JFRk9SRV9BTkRfQUZURVIsIE5PREVfSU5TSURFIH07Ci0gICAgQ29tcGFyZVJlc3VsdHMgY29t
cGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIENvbXBhcmVSZXN1
bHRzIGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAg
ICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9f
RU5ELCBFTkRfVE9fU1RBUlQgfTsKICAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoQ29t
cGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWluZXJB
LCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50IG9mZnNldEIpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMjAgQEAgRWxlbWVu
dCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUAogICAgIHJldHVybiBub2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKKy8vIEZpbmRzIHRoZSBlbmNsb3NpbmcgZWxlbWVudCB1
bnRpbCB3aGljaCB0aGUgdHJlZSBjYW4gYmUgc3BsaXQuCisvLyBXaGVuIGEgdXNlciBoaXRzIEVO
VEVSLCBoZS9zaGUgd29uJ3QgZXhwZWN0IHRoaXMgZWxlbWVudCB0byBiZSBzcGxpdCBpbnRvIHR3
by4KKy8vIFlvdSBtYXkgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNwbGl0VHJl
ZVRvTm9kZS4KK0VsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcCkKK3sKKyAgICAvLyBTaW5jZSBlbmNsb3NpbmdOb2RlT2ZUeXBlIHdvbid0IHNl
YXJjaCBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm9vdCBlZGl0YWJsZSBub2RlLAorICAgIC8vIHRoaXMg
Y29kZSB3b3JrcyBldmVuIGlmIHRoZSBjbG9zZXN0IHRhYmxlIGNlbGwgd2FzIG91dHNpZGUgb2Yg
dGhlIHJvb3QgZWRpdGFibGUgbm9kZS4KKyAgICBFbGVtZW50KiBlbmNsb3NpbmdDZWxsID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlzVGFibGVDZWxsLCB0
cnVlKSk7CisgICAgaWYgKGVuY2xvc2luZ0NlbGwpCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdD
ZWxsOworCisgICAgcmV0dXJuIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOworfQorCiBib29s
IGlzQ29udGVudEVkaXRhYmxlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCk7CkBAIC01NjUsMTYgKzU3OSw3OSBAQCBOb2RlKiBpc0xhc3RQ
b3NpdGlvbkJlZm9yZVRhYmxlKGNvbnN0IFZpCiAKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9k
ZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQo
bm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICAvLyBGSVhNRTogU2hv
dWxkIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpIGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGVk
aXRpbmcvZGVsZXRpbmcvZGVsZXRlLWxpZ2F0dXJlLTAwMS5odG1sIGNyYXNoaW5nCiAgICAgcmV0
dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwogfQog
CiBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VS
VChub2RlKTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkp
IGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGVkaXRpbmcvZGVsZXRpbmcvZGVsZXRlLWxpZ2F0dXJl
LTAwMS5odG1sIGNyYXNoaW5nCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUo
KSwgbm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIAorLy8gUmV0dXJucyB0aGUgdmlzaWJsZSBw
b3NpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbm9kZQorVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3NpdGlvbkJlZm9yZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSk7CisgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsKK30KKworLy8gUmV0dXJu
cyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBhdCB0aGUgZW5kaW5nIG9mIGEgbm9kZQorVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlKTsKKyAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFN
KTsKKyAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcG9zaXRpb25B
ZnRlck5vZGUobm9kZSk7Cit9CisKKy8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCB3aXRoIHR3byB2
aXNpYmxlIHBvc2l0aW9ucywgc3RhcnQgYW5kIGVuZC4KKy8vIGNyZWF0ZShQYXNzUmVmUHRyPERv
Y3VtZW50PiwgY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOyB3aWxsIHVzZSBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldAorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBjcmVh
dGUgYSByZWd1bGFyIHJhbmdlIG9iamVjdCAoYXZvaWRpbmcgZWRpdGluZyBvZmZzZXQpLgorUGFz
c1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5k
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgc2VsZWN0ZWRSYW5n
ZS0+c2V0U3RhcnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIHN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Cisg
ICAgaWYgKCFlYykKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0RW5kKGVuZC5kZWVwRXF1aXZh
bGVudCgpLmNvbnRhaW5lck5vZGUoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFz
ZSgpOworfQorCisvLyBFeHRlbmQgcmFuZ2VUb0V4dGVuZCB0byBpbmNsdWRlIG5vZGVzIHRoYXQg
d3JhcHMgcmFuZ2UgYW5kIHZpc2libHkgc3RhcnRzIGFuZCBlbmRzIGluc2lkZSBvciBhdCB0aGUg
Ym91ZG5hcmllcyBvZiBtYXhpbXVtUmFuZ2UKKy8vIGUuZy4gaWYgdGhlIG9yaWdpbmFsIHJhbmdl
IHNwYW5lZCAiaGVsbG8iIGluIDxkaXY+aGVsbG88L2Rpdj4sIHRoZW4gdGhpcyBmdW5jdGlvbiBl
eHRlbmRzIHRoZSByYW5nZSB0byBjb250YWluIGRpdidzIGFyb3VuZCBpdC4KKy8vIENhbGwgdGhp
cyBmdW5jdGlvbiBiZWZvcmUgY29weWluZyAvIG1vdmluZyBwYXJhZ3JhcGhzIHRvIGNvbnRhaW4g
YWxsIHdyYXBwaW5nIG5vZGVzLgorLy8gVGhpcyBmdW5jdGlvbiBzdG9wcyBleHRlbmRpbmcgdGhl
IHJhbmdlIGltbWVkaWF0ZWx5IGJlbG93IHJvb3ROb2RlOyBpLmUuIHRoZSBleHRlbmRlZCByYW5n
ZSBjYW4gY29udGFpbiBhIGNoaWxkIG5vZGUgb2Ygcm9vdE5vZGUKKy8vIGJ1dCBpdCBjYW4gbmV2
ZXIgY29udGFpbiByb290Tm9kZSBpdHNlbGYuCitQYXNzUmVmUHRyPFJhbmdlPiBleHRlbmRSYW5n
ZVRvV3JhcHBpbmdOb2RlcyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgY29uc3QgUmFuZ2UqIG1h
eGltdW1SYW5nZSwgY29uc3QgTm9kZSogcm9vdE5vZGUpCit7CisgICAgQVNTRVJUKHJhbmdlKTsK
KyAgICBBU1NFUlQobWF4aW11bVJhbmdlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIE5vZGUqIGFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsv
LyBmaW5kIHRoZSBjbG9lc2V0IGNvbW1vbiBhbmNlc3RvcgorICAgIE5vZGUqIGhpZ2hlc3ROb2Rl
ID0gMDsKKyAgICAvLyB0cmF2ZXJzZSB0aHJvdWdoIGFuY2VzdG9ycyBhcyBsb25nIGFzIHRoZXkg
YXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdlLCBjb250ZW50LWVkaXRhYmxlLCBhbmQgYmVs
b3cgcm9vdE5vZGUgKGNvdWxkIGJlID0wKS4KKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0
b3ItPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihh
bmNlc3RvciwgbWF4aW11bVJhbmdlKSAmJiBhbmNlc3RvciAhPSByb290Tm9kZSkgeworICAgICAg
ICBoaWdoZXN0Tm9kZSA9IGFuY2VzdG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCk7CisgICAgfQorCisgICAgaWYgKCFoaWdoZXN0Tm9kZSkKKyAgICAgICAgcmV0
dXJuIHJhbmdlOworCisgICAgLy8gQ3JlYXRlIG5ldyByYW5nZSB3aXRoIHRoZSBoaWdoZXN0IGVk
aXRhYmxlIG5vZGUgY29udGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2UKKyAgICBSZWZQdHI8UmFuZ2U+
IGV4dGVuZGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCkpOwor
ICAgIGV4dGVuZGVkUmFuZ2UtPnNlbGVjdE5vZGUoaGlnaGVzdE5vZGUsIGVjKTsKKyAgICByZXR1
cm4gZXh0ZW5kZWRSYW5nZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wgaXNMaXN0RWxlbWVudChOb2Rl
ICpuKQogewogICAgIHJldHVybiAobiAmJiAobi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+aGFz
VGFnTmFtZShvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShkbFRhZykpKTsKQEAgLTc0Niw3ICs4MjMs
NyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgcmV0dXJu
IGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNvbmRMaXN0LT50YWdRTmFtZSgpKS8vIG1ha2Ugc3Vy
ZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wgdnMuIHVsKQogICAgICYmIGlzQ29udGVudEVkaXRh
YmxlKGZpcnN0TGlzdCkgJiYgaXNDb250ZW50RWRpdGFibGUoc2Vjb25kTGlzdCkvLyBib3RoIGxp
c3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
ID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVkaXRp
bmcgYm91bmRhcmllcwotICAgICYmIGlzVmlzaWJpbHlBZGphY2VudChwb3NpdGlvbkFmdGVyTm9k
ZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25kTGlzdCkpOworICAgICYmIGlz
VmlzaWJseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9uQmVm
b3JlTm9kZShzZWNvbmRMaXN0KSk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vIHZpc2li
bGUgY29udGVudCBiZXR3ZWVuIHRoaXMgbGkgYW5kIHRoZSBwcmV2aW91cyBsaXN0CiB9CiAKQEAg
LTk3NCw3ICsxMDUxLDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJ
dAogfQogCiAKLWludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKK2ludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk4MywxMSArMTA2MCwyOSBAQCBpbnQgaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAgcmV0dXJuIFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCi1ib29sIGlzVmlzaWJpbHlB
ZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCisv
LyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUgdmlzaWJseSBuZXh0IHRvIGVh
Y2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQorLy8gd2hpbGUgaWdub3Jpbmcgd2hpdGVzcGFj
ZXMgYW5kIHVucmVuZGVyZWQgbm9kZXMKK2Jvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9z
aXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogewogICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZmlyc3QpID09IFZpc2libGVQb3NpdGlvbihzZWNvbmQudXBzdHJlYW0oKSk7
CiB9CiAKKy8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3Ig
dmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgor
Ly8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNp
Ymx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQoreworICAgIEFT
U0VSVChub2RlKTsKKyAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CisgICAgLy8gSWYgdGhlIG5v
ZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhp
bgorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21w
YXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxl
Y3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgor
ICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKQorICAgICAgICAmJiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUo
bm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKK30KKwogUGFzc1JlZlB0cjxS
YW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBSYW5nZSogcmFuZ2UsIE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFyYW5nZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZp
c2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNiArNjIsNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zp
c3VhbGx5RGlzdGluY3RDYW5kaWRhCiBib29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiYpOwogYm9vbCBpc1JpY2hseUVkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsK
IEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CitFbGVt
ZW50KiB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKIGJv
b2wgaXNCbG9jayhjb25zdCBOb2RlKik7CiBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKik7CiAK
QEAgLTcxLDYgKzczLDEwIEBAIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
OwogCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSopOwogUG9zaXRpb24g
cG9zaXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSopOworVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSopOworVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKik7CitQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGVS
YW5nZShQYXNzUmVmUHRyPERvY3VtZW50PiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8
UmFuZ2U+IGV4dGVuZFJhbmdlVG9XcmFwcGluZ05vZGVzKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
VG9FeHRlbmQsIGNvbnN0IFJhbmdlKiBtYXhpbXVtUmFuZ2UsIGNvbnN0IE5vZGUqIHJvb3ROb2Rl
KTsKIAogUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBS
YW5nZSosIE5vZGUqKTsKIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9k
ZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTm9kZSopOwpAQCAtMTM0LDggKzE0MCw5IEBAIGJv
b2wgbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24oY28KIAogVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OwogCi1pbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29s
IGlzVmlzaWJpbHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9u
JiBzZWNvbmQpOworaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOworYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNv
bnN0IFBvc2l0aW9uJiBzZWNvbmQpOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGlu
KE5vZGUqLCBjb25zdCBSYW5nZSopOwogfQogCiAjZW5kaWYK
</data>
<flag name="review"
          id="17315"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32977</attachid>
            <date>2009-07-17 15:09:52 -0700</date>
            <delta_ts>2009-07-17 15:16:19 -0700</delta_ts>
            <desc>9th submission</desc>
            <filename>fix27038j</filename>
            <type>text/plain</type>
            <size>13196</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMTcgIFJ5b3N1a2UgTml3YSAgPHJ5b3N1a2Uubml3YUBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHRtbGVkaXRpbmcuY3BwIG5lZWRzIG1vcmUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gZml4IHRo
ZSBidWcgMjY4MTYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3MDM4CisKKyAgICAgICAgSW4gb3JkZXIgdG8gZml4IHRoZSBidWcgMjY4MTYsIHdlIG5l
ZWQgc2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyBiZSBhZGRlZCB0byBodG1sZWRpdGluZy5jcHAK
KworICAgICAgICBObyB0ZXN0cyBiZWNhdXNlIGZ1bmN0aW9ucyBoYXZlbid0IGJlZW4gdXNlZCBh
bnl3aGVyZSB5ZXQuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50
KTogYWRkZWQgY29uc3QgcXVhbGlmaWVyCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFy
ZU5vZGUpOiBhZGRlZCBjb25zdCBxdWFsaWZpZXIKKyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVuc3Bs
aXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbik6IGZpbmQgdGhlIGVuY2xvc2luZyB1bnNwbGl0dGFi
bGUgZWxlbWVudCAoZWRpdGluZyByb290ICYgdGFibGUgY2VsbCkKKyAgICAgICAgKFdlYkNvcmU6
OnBvc2l0aW9uQmVmb3JlTm9kZSk6IGFkZGVkIEFTU0VSVChub2RlKQorICAgICAgICAoV2ViQ29y
ZTo6cG9zaXRpb25BZnRlck5vZGUpOiBhZGRlZCBBU1NFUlQobm9kZSkKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJs
ZVBvc2l0aW9uQWZ0ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJhbmdlKTogY3Jl
YXRlIGEgcmFuZ2Ugb2JqZWN0IGZyb20gdHdvIHZpc2libGUgcG9zaXRpb25zCisgICAgICAgIChX
ZWJDb3JlOjpleHRlbmRSYW5nZVRvV3JhcHBpbmdOb2Rlcyk6IGV4dGVuZCByYW5nZSB0byBpbmNs
dWRlIG5vZGVzIHRoYXQgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBib3VuZGFyaWVzCisgICAgICAg
IChXZWJDb3JlOjpjYW5NZXJnZUxpc3RzKTogdHlwbworICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBhZGRlZCBjb25zdCBxdWFsaWZpZXIKKyAgICAgICAgKFdlYkNv
cmU6OmlzVmlzaWJseUFkamFjZW50KTogdHlwbworICAgICAgICAoV2ViQ29yZTo6aXNOb2RlVmlz
aWJseUNvbnRhaW5lZFdpdGhpbik6IGRldGVybWluZSBpZiBhIG5vZGUgaXMgaW5zaWRlIGEgcmFu
Z2Ugb3Igd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlCisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAyMDA5LTA3LTE3ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
SW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9S
YW5nZS5jcHAJKHJldmlzaW9uIDQ1NTY0KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVh
dGUoUGFzc1JlZlAKIAogUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRy
PERvY3VtZW50PiBvd25lckRvY3VtZW50LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpCiB7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZG4ndCBiZSB1c2luZyBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCBoZXJlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYW5nZShv
d25lckRvY3VtZW50LCBzdGFydC5ub2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGVuZC5ub2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSk7CiB9CiAKQEAg
LTI5NCw3ICsyOTUsNyBAQCBib29sIFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2Rl
CiAgICAgICAgICYmIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fZW5k
LmNvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSkgPD0gMDsKIH0KIAotc2hvcnQgUmFuZ2U6OmNv
bXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
K3Nob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlUG9pbnQKICAgICAvLyBUaGlzIG1ldGhvZCBy
ZXR1cm5zIC0xLCAwIG9yIDEgZGVwZW5kaW5nIG9uIGlmIHRoZSBwb2ludCBkZXNjcmliZWQgYnkg
dGhlIApAQCAtMzMyLDcgKzMzMyw3IEBAIHNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSog
cmVmTm9kZSwKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdl
Ojpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK1JhbmdlOjpD
b21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMg
MCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLApJbmRl
eDogV2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5o
CShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRy
PE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBjb2xsYXBzZShib29sIHRvU3RhcnQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBib29sIGlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9k
ZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHNob3J0IGNvbXBh
cmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgZW51bSBDb21wYXJlUmVzdWx0cyB7IE5PREVfQkVGT1JFLCBOT0RFX0FGVEVSLCBOT0RF
X0JFRk9SRV9BTkRfQUZURVIsIE5PREVfSU5TSURFIH07Ci0gICAgQ29tcGFyZVJlc3VsdHMgY29t
cGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIENvbXBhcmVSZXN1
bHRzIGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAg
ICBlbnVtIENvbXBhcmVIb3cgeyBTVEFSVF9UT19TVEFSVCwgU1RBUlRfVE9fRU5ELCBFTkRfVE9f
RU5ELCBFTkRfVE9fU1RBUlQgfTsKICAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoQ29t
cGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWluZXJB
LCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50IG9mZnNldEIpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMjAgQEAgRWxlbWVu
dCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUAogICAgIHJldHVybiBub2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKKy8vIEZpbmRzIHRoZSBlbmNsb3NpbmcgZWxlbWVudCB1
bnRpbCB3aGljaCB0aGUgdHJlZSBjYW4gYmUgc3BsaXQuCisvLyBXaGVuIGEgdXNlciBoaXRzIEVO
VEVSLCBoZS9zaGUgd29uJ3QgZXhwZWN0IHRoaXMgZWxlbWVudCB0byBiZSBzcGxpdCBpbnRvIHR3
by4KKy8vIFlvdSBtYXkgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNwbGl0VHJl
ZVRvTm9kZS4KK0VsZW1lbnQqIHVuc3BsaXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcCkKK3sKKyAgICAvLyBTaW5jZSBlbmNsb3NpbmdOb2RlT2ZUeXBlIHdvbid0IHNl
YXJjaCBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm9vdCBlZGl0YWJsZSBub2RlLAorICAgIC8vIHRoaXMg
Y29kZSB3b3JrcyBldmVuIGlmIHRoZSBjbG9zZXN0IHRhYmxlIGNlbGwgd2FzIG91dHNpZGUgb2Yg
dGhlIHJvb3QgZWRpdGFibGUgbm9kZS4KKyAgICBFbGVtZW50KiBlbmNsb3NpbmdDZWxsID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlzVGFibGVDZWxsLCB0
cnVlKSk7CisgICAgaWYgKGVuY2xvc2luZ0NlbGwpCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdD
ZWxsOworCisgICAgcmV0dXJuIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOworfQorCiBib29s
IGlzQ29udGVudEVkaXRhYmxlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCk7CkBAIC01NjUsMTYgKzU3OSw3OSBAQCBOb2RlKiBpc0xhc3RQ
b3NpdGlvbkJlZm9yZVRhYmxlKGNvbnN0IFZpCiAKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9k
ZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQo
bm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VSVChub2RlKTsKKyAgICAvLyBGSVhNRTogU2hv
dWxkIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpIGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGVk
aXRpbmcvZGVsZXRpbmcvZGVsZXRlLWxpZ2F0dXJlLTAwMS5odG1sIGNyYXNoaW5nCiAgICAgcmV0
dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwogfQog
CiBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQorICAgIEFTU0VS
VChub2RlKTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkp
IGJ1dCBkb2luZyBzbyByZXN1bHRzIGluIGVkaXRpbmcvZGVsZXRpbmcvZGVsZXRlLWxpZ2F0dXJl
LTAwMS5odG1sIGNyYXNoaW5nCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUo
KSwgbm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIAorLy8gUmV0dXJucyB0aGUgdmlzaWJsZSBw
b3NpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbm9kZQorVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3NpdGlvbkJlZm9yZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSk7CisgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsKK30KKworLy8gUmV0dXJu
cyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBhdCB0aGUgZW5kaW5nIG9mIGEgbm9kZQorVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlKTsKKyAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFN
KTsKKyAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcG9zaXRpb25B
ZnRlck5vZGUobm9kZSk7Cit9CisKKy8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCB3aXRoIHR3byB2
aXNpYmxlIHBvc2l0aW9ucywgc3RhcnQgYW5kIGVuZC4KKy8vIGNyZWF0ZShQYXNzUmVmUHRyPERv
Y3VtZW50PiwgY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOyB3aWxsIHVzZSBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldAorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBjcmVh
dGUgYSByZWd1bGFyIHJhbmdlIG9iamVjdCAoYXZvaWRpbmcgZWRpdGluZyBvZmZzZXQpLgorUGFz
c1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5k
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgc2VsZWN0ZWRSYW5n
ZS0+c2V0U3RhcnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIHN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Cisg
ICAgaWYgKCFlYykKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0RW5kKGVuZC5kZWVwRXF1aXZh
bGVudCgpLmNvbnRhaW5lck5vZGUoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFz
ZSgpOworfQorCisvLyBFeHRlbmQgcmFuZ2VUb0V4dGVuZCB0byBpbmNsdWRlIG5vZGVzIHRoYXQg
d3JhcHMgcmFuZ2UgYW5kIHZpc2libHkgc3RhcnRzIGFuZCBlbmRzIGluc2lkZSBvciBhdCB0aGUg
Ym91ZG5hcmllcyBvZiBtYXhpbXVtUmFuZ2UKKy8vIGUuZy4gaWYgdGhlIG9yaWdpbmFsIHJhbmdl
IHNwYW5lZCAiaGVsbG8iIGluIDxkaXY+aGVsbG88L2Rpdj4sIHRoZW4gdGhpcyBmdW5jdGlvbiBl
eHRlbmRzIHRoZSByYW5nZSB0byBjb250YWluIGRpdidzIGFyb3VuZCBpdC4KKy8vIENhbGwgdGhp
cyBmdW5jdGlvbiBiZWZvcmUgY29weWluZyAvIG1vdmluZyBwYXJhZ3JhcGhzIHRvIGNvbnRhaW4g
YWxsIHdyYXBwaW5nIG5vZGVzLgorLy8gVGhpcyBmdW5jdGlvbiBzdG9wcyBleHRlbmRpbmcgdGhl
IHJhbmdlIGltbWVkaWF0ZWx5IGJlbG93IHJvb3ROb2RlOyBpLmUuIHRoZSBleHRlbmRlZCByYW5n
ZSBjYW4gY29udGFpbiBhIGNoaWxkIG5vZGUgb2Ygcm9vdE5vZGUKKy8vIGJ1dCBpdCBjYW4gbmV2
ZXIgY29udGFpbiByb290Tm9kZSBpdHNlbGYuCitQYXNzUmVmUHRyPFJhbmdlPiBleHRlbmRSYW5n
ZVRvV3JhcHBpbmdOb2RlcyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgY29uc3QgUmFuZ2UqIG1h
eGltdW1SYW5nZSwgY29uc3QgTm9kZSogcm9vdE5vZGUpCit7CisgICAgQVNTRVJUKHJhbmdlKTsK
KyAgICBBU1NFUlQobWF4aW11bVJhbmdlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIE5vZGUqIGFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsv
LyBmaW5kIHRoZSBjbG9lc2V0IGNvbW1vbiBhbmNlc3RvcgorICAgIE5vZGUqIGhpZ2hlc3ROb2Rl
ID0gMDsKKyAgICAvLyB0cmF2ZXJzZSB0aHJvdWdoIGFuY2VzdG9ycyBhcyBsb25nIGFzIHRoZXkg
YXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJhbmdlLCBjb250ZW50LWVkaXRhYmxlLCBhbmQgYmVs
b3cgcm9vdE5vZGUgKGNvdWxkIGJlID0wKS4KKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0
b3ItPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihh
bmNlc3RvciwgbWF4aW11bVJhbmdlKSAmJiBhbmNlc3RvciAhPSByb290Tm9kZSkgeworICAgICAg
ICBoaWdoZXN0Tm9kZSA9IGFuY2VzdG9yOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCk7CisgICAgfQorCisgICAgaWYgKCFoaWdoZXN0Tm9kZSkKKyAgICAgICAgcmV0
dXJuIHJhbmdlOworCisgICAgLy8gQ3JlYXRlIG5ldyByYW5nZSB3aXRoIHRoZSBoaWdoZXN0IGVk
aXRhYmxlIG5vZGUgY29udGFpbmVkIHdpdGhpbiB0aGUgcmFuZ2UKKyAgICBSZWZQdHI8UmFuZ2U+
IGV4dGVuZGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCkpOwor
ICAgIGV4dGVuZGVkUmFuZ2UtPnNlbGVjdE5vZGUoaGlnaGVzdE5vZGUsIGVjKTsKKyAgICByZXR1
cm4gZXh0ZW5kZWRSYW5nZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wgaXNMaXN0RWxlbWVudChOb2Rl
ICpuKQogewogICAgIHJldHVybiAobiAmJiAobi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+aGFz
VGFnTmFtZShvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShkbFRhZykpKTsKQEAgLTc0Niw3ICs4MjMs
NyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAgICAgcmV0dXJu
IGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNvbmRMaXN0LT50YWdRTmFtZSgpKS8vIG1ha2Ugc3Vy
ZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wgdnMuIHVsKQogICAgICYmIGlzQ29udGVudEVkaXRh
YmxlKGZpcnN0TGlzdCkgJiYgaXNDb250ZW50RWRpdGFibGUoc2Vjb25kTGlzdCkvLyBib3RoIGxp
c3RzIGFyZSBlZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
ID09IHNlY29uZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS8vIGRvbid0IGNyb3NzIGVkaXRp
bmcgYm91bmRhcmllcwotICAgICYmIGlzVmlzaWJpbHlBZGphY2VudChwb3NpdGlvbkFmdGVyTm9k
ZShmaXJzdExpc3QpLCBwb3NpdGlvbkJlZm9yZU5vZGUoc2Vjb25kTGlzdCkpOworICAgICYmIGlz
VmlzaWJseUFkamFjZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKGZpcnN0TGlzdCksIHBvc2l0aW9uQmVm
b3JlTm9kZShzZWNvbmRMaXN0KSk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vIHZpc2li
bGUgY29udGVudCBiZXR3ZWVuIHRoaXMgbGkgYW5kIHRoZSBwcmV2aW91cyBsaXN0CiB9CiAKQEAg
LTk3NCw3ICsxMDUxLDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJ
dAogfQogCiAKLWludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKK2ludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk4MywxMSArMTA2MCwyOSBAQCBpbnQgaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAgcmV0dXJuIFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCi1ib29sIGlzVmlzaWJpbHlB
ZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCisv
LyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUgdmlzaWJseSBuZXh0IHRvIGVh
Y2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQorLy8gd2hpbGUgaWdub3Jpbmcgd2hpdGVzcGFj
ZXMgYW5kIHVucmVuZGVyZWQgbm9kZXMKK2Jvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9z
aXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogewogICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZmlyc3QpID09IFZpc2libGVQb3NpdGlvbihzZWNvbmQudXBzdHJlYW0oKSk7
CiB9CiAKKy8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3Ig
dmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgor
Ly8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNp
Ymx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQoreworICAgIEFT
U0VSVChub2RlKTsKKyAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CisgICAgLy8gSWYgdGhlIG5v
ZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhp
bgorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21w
YXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxl
Y3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgor
ICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKQorICAgICAgICAmJiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUo
bm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKK30KKwogUGFzc1JlZlB0cjxS
YW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBSYW5nZSogcmFuZ2UsIE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFyYW5nZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZp
c2lvbiA0NTU2NCkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02MSw2ICs2Miw3IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlE
aXN0aW5jdENhbmRpZGEKIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7
CiBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogRWxlbWVu
dCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKK0VsZW1lbnQqIHVu
c3BsaXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBpc0Js
b2NrKGNvbnN0IE5vZGUqKTsKIE5vZGUqIGVuY2xvc2luZ0Jsb2NrKE5vZGUqKTsKIApAQCAtNzEs
NiArNzMsMTAgQEAgY29uc3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7CiAKIFBv
c2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShjb25zdCBOb2RlKik7CiBQb3NpdGlvbiBwb3NpdGlv
bkFmdGVyTm9kZShjb25zdCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
QmVmb3JlTm9kZShjb25zdCBOb2RlKik7CitWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
QWZ0ZXJOb2RlKGNvbnN0IE5vZGUqKTsKK1Bhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZVJhbmdlKFBh
c3NSZWZQdHI8RG9jdW1lbnQ+LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGVuZCwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxSYW5nZT4g
ZXh0ZW5kUmFuZ2VUb1dyYXBwaW5nTm9kZXMoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb0V4dGVu
ZCwgY29uc3QgUmFuZ2UqIG1heGltdW1SYW5nZSwgY29uc3QgTm9kZSogcm9vdE5vZGUpOwogCiBQ
YXNzUmVmUHRyPFJhbmdlPiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2RlKGNvbnN0IFJhbmdlKiwg
Tm9kZSopOwogVmlzaWJsZVNlbGVjdGlvbiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2RlKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBOb2RlKik7CkBAIC0xMzQsOCArMTQwLDkgQEAgYm9vbCBsaW5l
QnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjbwogCiBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLWlu
dCBpbmRleEZvclZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24mKTsKLWJvb2wgaXNWaXNp
YmlseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29u
ZCk7CitpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
Citib29sIGlzVmlzaWJseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBmaXJzdCwgY29uc3QgUG9z
aXRpb24mIHNlY29uZCk7Citib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSos
IGNvbnN0IFJhbmdlKik7CiB9CiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="17319"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>