<?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>19221</bug_id>
          
          <creation_ts>2008-05-23 12:19:08 -0700</creation_ts>
          <short_desc>ASSERT during Range creation (due to editing commands)</short_desc>
          <delta_ts>2009-04-06 02:26:53 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>25056</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>25056</dependson>
          <blocked>18858</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>81336</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-05-23 12:19:08 -0700</bug_when>
    <thetext>ASSERT during Range creation (due to editing commands)

ASSERTION FAILED: !ec
(/Users/eseidel/Projects/WebKit/WebCore/dom/Range.cpp:96 WebCore::Range::Range(WTF::PassRefPtr&lt;WebCore::Document&gt;, WTF::PassRefPtr&lt;WebCore::Node&gt;, int, WTF::PassRefPtr&lt;WebCore::Node&gt;, int))

&lt;BODY&gt;&lt;SCRIPT&gt;
document.execCommand(&quot;selectall&quot;)
document.designMode = &quot;on&quot;
document.execCommand(&quot;insertimage&quot;, false, &quot;red&quot;)
document.execCommand(&quot;createLink&quot;, false, true)
document.execCommand(&quot;removeformat&quot;)
&lt;/SCRIPT&gt;

Yet another from the editing fuzzer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81337</commentid>
    <comment_count>1</comment_count>
      <attachid>21320</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-05-23 12:19:39 -0700</bug_when>
    <thetext>Created attachment 21320
hits ASSERT in debug mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110278</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 12:53:11 -0800</bug_when>
    <thetext>The ASSERT is tripping because we&apos;re getting back an INDEX_SIZE_ERR because the &quot;end&quot; is being set to (img, 1).

Tree for the end node:
BODY	0x1bf90d60
*	IMG	0x1bffa830
	SCRIPT	0x1a40b440
		#text	0x1bf91420 &quot;\ndocument.execCommand(&quot;selectall&quot;)\ndocument.designMode = &quot;on&quot;\ndocument.execCommand(&quot;insertimage&quot;, false, &quot;red&quot;)\ndocument.execCommand(&quot;createLink&quot;, false, true)\ndocument.execCommand(&quot;removeformat&quot;)\n&quot;

I expect this is just an &quot;internal&quot; range being passed off to a DOM Range object.  I&apos;m sure we have some functions for converting these.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110279</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 12:54:28 -0800</bug_when>
    <thetext>To explain for anyone following along at home.  WebKit sometimes uses (img, 1) style ranges (where 1, being off the end of the node, signifies the position directly after the node), instead of (img.parentNode, image-&gt;childIndex()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110280</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-19 12:55:30 -0800</bug_when>
    <thetext>&gt; I&apos;m sure we have some functions for converting these.

rangeCompliantEquivalent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110290</commentid>
    <comment_count>5</comment_count>
      <attachid>27811</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 13:32:17 -0800</bug_when>
    <thetext>Created attachment 27811
Fix and test case

 LayoutTests/ChangeLog                              |   15 +++++++++++++++
 .../assert-on-range-creation-expected.txt          |    1 +
 .../execCommand/assert-on-range-creation.html      |   12 ++++++++++++
 WebCore/ChangeLog                                  |   17 +++++++++++++++++
 WebCore/dom/Range.cpp                              |    7 ++++++-
 5 files changed, 51 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110293</commentid>
    <comment_count>6</comment_count>
      <attachid>27811</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-19 13:42:12 -0800</bug_when>
    <thetext>Comment on attachment 27811
Fix and test case

&gt; +        This fixes an ASSERT hit when trying to wrap an image in an link using
&gt; +        editing commands (which probably resulted in incorrect behavior before too).

Doesn&apos;t the ASSERT happen during RemoveFormat?  (I haven&apos;t looked at the backtrace, just the testcase that you&apos;ve included).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110295</commentid>
    <comment_count>7</comment_count>
      <attachid>27811</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-19 13:44:48 -0800</bug_when>
    <thetext>Comment on attachment 27811
Fix and test case

A lot of callers use rangeCompliantEquivalent() already. I don&apos;t know if that&apos;s important for performance, but if you add normalization in Range::create, it needs to be removed at call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110310</commentid>
    <comment_count>8</comment_count>
      <attachid>27812</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 15:58:48 -0800</bug_when>
    <thetext>Created attachment 27812
Further cleanup to rangeCompliantEquivalent callers

 WebCore/dom/Range.h                        |    2 +
 WebCore/editing/ApplyStyleCommand.cpp      |    4 +-
 WebCore/editing/CompositeEditCommand.cpp   |   20 +++++++---------
 WebCore/editing/DeleteSelectionCommand.cpp |    4 +-
 WebCore/editing/Editor.cpp                 |    2 +-
 WebCore/editing/VisiblePosition.cpp        |    2 +-
 WebCore/editing/VisibleSelection.cpp       |    8 +-----
 WebCore/editing/htmlediting.cpp            |    6 ++++-
 WebCore/editing/visible_units.cpp          |   34 +++++++++++++--------------
 WebCore/page/DOMSelection.cpp              |   12 +++------
 10 files changed, 44 insertions(+), 50 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110313</commentid>
    <comment_count>9</comment_count>
      <attachid>27814</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 16:03:09 -0800</bug_when>
    <thetext>Created attachment 27814
Complete fix, including ap&apos;s suggested cleanup of rangeCompliantEquivalent callers

 LayoutTests/ChangeLog                              |   15 ++++++
 .../assert-on-range-creation-expected.txt          |    1 +
 .../execCommand/assert-on-range-creation.html      |   12 +++++
 WebCore/ChangeLog                                  |   46 ++++++++++++++++++++
 WebCore/dom/Range.cpp                              |    7 +++-
 WebCore/dom/Range.h                                |    2 +
 WebCore/editing/ApplyStyleCommand.cpp              |    4 +-
 WebCore/editing/CompositeEditCommand.cpp           |   20 ++++-----
 WebCore/editing/DeleteSelectionCommand.cpp         |    4 +-
 WebCore/editing/Editor.cpp                         |    2 +-
 WebCore/editing/VisiblePosition.cpp                |    2 +-
 WebCore/editing/VisibleSelection.cpp               |    8 +---
 WebCore/editing/htmlediting.cpp                    |    6 ++-
 WebCore/editing/visible_units.cpp                  |   34 +++++++--------
 WebCore/page/DOMSelection.cpp                      |   12 ++---
 15 files changed, 124 insertions(+), 51 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110322</commentid>
    <comment_count>10</comment_count>
      <attachid>27814</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 16:49:01 -0800</bug_when>
    <thetext>Comment on attachment 27814
Complete fix, including ap&apos;s suggested cleanup of rangeCompliantEquivalent callers

Sigh.  I&apos;ve convinced myself that I really should split out the concept of positionAvoidingIgnoredContent out from rangeCompliantEquivalent before doing this massive replace. :(  Painful, but better for the codebase in the longrun I think.

https://bugs.webkit.org/show_bug.cgi?id=24045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110355</commentid>
    <comment_count>11</comment_count>
      <attachid>27814</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-19 23:39:23 -0800</bug_when>
    <thetext>Comment on attachment 27814
Complete fix, including ap&apos;s suggested cleanup of rangeCompliantEquivalent callers

Sigh.  I&apos;ll fix the other bug first as I mentioned in the previous comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111324</commentid>
    <comment_count>12</comment_count>
      <attachid>28043</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-26 15:11:59 -0800</bug_when>
    <thetext>Created attachment 28043
First pass renaming

 LayoutTests/ChangeLog                              |   24 +++++
 .../editing/assert-on-range-creation-expected.txt  |    1 +
 LayoutTests/editing/assert-on-range-creation.html  |   12 +++
 WebCore/ChangeLog                                  |  105 ++++++++++++++++++++
 WebCore/WebCore.base.exp                           |    5 +-
 WebCore/WebCore.xcodeproj/project.pbxproj          |    2 +-
 WebCore/dom/Position.cpp                           |   54 +++++++++-
 WebCore/dom/Position.h                             |   52 ++++++----
 WebCore/dom/Range.cpp                              |    8 +-
 WebCore/dom/RangeBoundaryPoint.h                   |   48 +++++-----
 WebCore/editing/ApplyStyleCommand.cpp              |    4 +-
 WebCore/editing/CompositeEditCommand.cpp           |   12 +-
 WebCore/editing/DeleteSelectionCommand.cpp         |   24 +++---
 WebCore/editing/Editor.cpp                         |    4 +-
 WebCore/editing/InsertLineBreakCommand.cpp         |    2 +-
 .../editing/InsertParagraphSeparatorCommand.cpp    |    6 +-
 WebCore/editing/ReplaceSelectionCommand.cpp        |    2 +-
 WebCore/editing/VisiblePosition.cpp                |   57 +++++------
 WebCore/editing/VisiblePosition.h                  |    4 +-
 WebCore/editing/VisibleSelection.cpp               |   12 +-
 WebCore/editing/htmlediting.cpp                    |   64 +++++-------
 WebCore/editing/htmlediting.h                      |    3 +-
 WebCore/editing/visible_units.cpp                  |   68 ++++++-------
 WebCore/page/DOMSelection.cpp                      |   16 ++--
 WebKit/mac/ChangeLog                               |   24 +++++
 WebKit/mac/WebView/WebFrame.mm                     |    9 +-
 26 files changed, 410 insertions(+), 212 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111371</commentid>
    <comment_count>13</comment_count>
      <attachid>28057</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-26 17:52:13 -0800</bug_when>
    <thetext>Created attachment 28057
Clean up DOMSelection some

 LayoutTests/ChangeLog                              |    9 +++
 .../selection/click-before-and-after-table.html    |   13 ++--
 WebCore/ChangeLog                                  |   27 ++++++++
 WebCore/page/DOMSelection.cpp                      |   70 ++++++++++++--------
 WebCore/page/DOMSelection.h                        |    6 ++-
 5 files changed, 89 insertions(+), 36 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111372</commentid>
    <comment_count>14</comment_count>
      <attachid>28057</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-26 17:52:46 -0800</bug_when>
    <thetext>Comment on attachment 28057
Clean up DOMSelection some

I&apos;ve continued work on my git branch, to try and explore what sections of the code I can remove these silly positionAvoidingIgnoredContent hacks from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111380</commentid>
    <comment_count>15</comment_count>
      <attachid>28043</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-26 19:10:17 -0800</bug_when>
    <thetext>Comment on attachment 28043
First pass renaming

Don&apos;t really need to talk about WebCore code changes in the LayoutTest ChangeLog.

+// Create a dom-compliant position which is outside of any ignored content

&quot;DOM&quot;

+// FIXME: This combines both avoiding tables and avoiding ignored nodes,
+// those should probably be separate functions.
+// FIXME: Split out part of this into positionAvoidingFirstPositionInTable?

These sound like the same FIXME.

+Position positionAvoidingIgnoredContent(const Position&amp; originalPosition)
+{
+    Position position = originalPosition.toRangeCompliantEquivalent();

Should also mention that this function includes making positions DOM compliant, which I believe is something you want to split out, no?

+        I also cleaned up Position a little bit to make it a real class.

Please include your rationale for doing this, I remember Darin felt quite strongly about Position being more like a struct.

+    // Returns node() cast to an element() or the closest element ancestor
+    Element* element() const;

&quot;or the cloest element ancestor of node().&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113131</commentid>
    <comment_count>16</comment_count>
      <attachid>28057</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-11 00:14:15 -0700</bug_when>
    <thetext>Comment on attachment 28057
Clean up DOMSelection some

seems ok.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113480</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-12 13:57:38 -0700</bug_when>
    <thetext>I&apos;m having second thoughts about this patch.  This doesn&apos;t solve the &quot;Position&quot; problem in Editing.  We still need to split out the two ways in which Positions are handled inside Editing.

I think I will make a new patch which does only enough to fix this ASSERT and try re-writing Positions in a different way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113521</commentid>
    <comment_count>18</comment_count>
      <attachid>28043</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-12 15:58:17 -0700</bug_when>
    <thetext>Comment on attachment 28043
First pass renaming

I&apos;ve decided I don&apos;t like this patch after all.  :(  Sorry for asking you to review this.  I think we need a different attack for fixing the Position mess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113526</commentid>
    <comment_count>19</comment_count>
      <attachid>28057</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-12 16:06:46 -0700</bug_when>
    <thetext>Comment on attachment 28057
Clean up DOMSelection some

I&apos;ve committed this cleanup patch.  However, this doesn&apos;t actually have to do anything with what this bug is about.  So I&apos;m clearing the review flags and marking this obsolete.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/editing/selection/click-before-and-after-table.html
	M	WebCore/ChangeLog
	M	WebCore/page/DOMSelection.cpp
	M	WebCore/page/DOMSelection.h
Committed r41657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116604</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-06 02:26:53 -0700</bug_when>
    <thetext>This will be fixed by landing bug 25056.

*** This bug has been marked as a duplicate of 25056 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>21320</attachid>
            <date>2008-05-23 12:19:39 -0700</date>
            <delta_ts>2008-05-23 12:19:39 -0700</delta_ts>
            <desc>hits ASSERT in debug mode</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>220</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PEJPRFk+PFNDUklQVD4KZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdGFsbCIpCmRvY3VtZW50
LmRlc2lnbk1vZGUgPSAib24iCmRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRpbWFnZSIsIGZh
bHNlLCAicmVkIikKZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNyZWF0ZUxpbmsiLCBmYWxzZSwgdHJ1
ZSkKZG9jdW1lbnQuZXhlY0NvbW1hbmQoInJlbW92ZWZvcm1hdCIpCjwvU0NSSVBUPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27811</attachid>
            <date>2009-02-19 13:32:17 -0800</date>
            <delta_ts>2009-02-26 15:20:36 -0800</delta_ts>
            <desc>Fix and test case</desc>
            <filename>Fix-and-test-case.patch</filename>
            <type>text/plain</type>
            <size>4122</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDYxNWMyYjVjNTI1ZDY0MmM5MGRmM2NiZmRlNzk0ZmU3NWIyZGViZgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ0MmI5MTQu
LmEzYTQxYjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wMi0xOSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQqLCBQb3NpdGlvbiwgUG9zaXRp
b24pIHRvIGNvcnJlY3RseQorICAgICAgICBjb252ZXJ0IHBvc2l0aW9ucyB1c2luZyByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQgYmVmb3JlIGNvbnN0cnVjdGluZworICAgICAgICB0aGUgUmFuZ2Ug
ZnJvbSB0aGVtLgorCisgICAgICAgIFRoaXMgZml4ZXMgYW4gQVNTRVJUIGhpdCB3aGVuIHRyeWlu
ZyB0byB3cmFwIGFuIGltYWdlIGluIGFuIGxpbmsgdXNpbmcKKyAgICAgICAgZWRpdGluZyBjb21t
YW5kcyAod2hpY2ggcHJvYmFibHkgcmVzdWx0ZWQgaW4gaW5jb3JyZWN0IGJlaGF2aW9yIGJlZm9y
ZSB0b28pLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkyMjEKKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNy
ZWF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFu
ZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMDktMDItMTkgIERp
bWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2FlODcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Fzc2VydC1vbi1yYW5nZS1j
cmVhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUyAtLSBXZWJLaXQgZGlkIG5v
dCBjcmFzaCBkdXJpbmcgcmFuZ2UgY3JlYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTIyMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxZjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwK
QEAgLTAsMCArMSwxMiBAQAorPEJPRFk+PFNDUklQVD4KK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJz
ZWxlY3RhbGwiKQorZG9jdW1lbnQuZGVzaWduTW9kZSA9ICJvbiIKK2RvY3VtZW50LmV4ZWNDb21t
YW5kKCJpbnNlcnRpbWFnZSIsIGZhbHNlLCAicmVkIikKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJj
cmVhdGVMaW5rIiwgZmFsc2UsIHRydWUpCitkb2N1bWVudC5leGVjQ29tbWFuZCgicmVtb3ZlZm9y
bWF0IikKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlBB
U1MgLS0gV2ViS2l0IGRpZCBub3QgY3Jhc2ggZHVyaW5nIHJhbmdlIGNyZWF0aW9uLiAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjIxIjsKKzwvU0NSSVBUPgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYjUy
NzlkLi4wMWIzYjZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDA5LTAyLTE5ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXggUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCosIFBvc2l0aW9uLCBQb3NpdGlvbikg
dG8gY29ycmVjdGx5CisgICAgICAgIGNvbnZlcnQgcG9zaXRpb25zIHVzaW5nIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCBiZWZvcmUgY29uc3RydWN0aW5nCisgICAgICAgIHRoZSBSYW5nZSBmcm9t
IHRoZW0uCisKKyAgICAgICAgVGhpcyBmaXhlcyBhbiBBU1NFUlQgaGl0IHdoZW4gdHJ5aW5nIHRv
IHdyYXAgYW4gaW1hZ2UgaW4gYW4gbGluayB1c2luZworICAgICAgICBlZGl0aW5nIGNvbW1hbmRz
ICh3aGljaCBwcm9iYWJseSByZXN1bHRlZCBpbiBpbmNvcnJlY3QgYmVoYXZpb3IgYmVmb3JlIHRv
bykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIy
MQorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNy
ZWF0aW9uLmh0bWwKKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y3JlYXRlKToKKwogMjAwOS0wMi0xOSAgSnVuZ3NoaWsgU2hpbiA8anNoaW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdh
ZTU2YjEuLjZhMmViZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU3RyaW5n
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIk5vZGVXaXRoSW5k
ZXguaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
QEAgLTg3LDggKzg4LDEyIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxOCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZz
ZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KSk7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IFJh
bmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQorUGFzc1JlZlB0cjxSYW5nZT4gUmFu
Z2U6OmNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50LCBjb25zdCBQb3Np
dGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgUG9zaXRpb24mIGVuZFBvc2l0aW9uKQogeworICAg
IC8vIEludGVybmFsbHkgd2Ugc29tZXRpbWVzIHVzZSAoaW1nLCAxKSB0byBtZWFuICJ0aGUgcG9z
aXRpb24gYWZ0ZXIgaW1nIiBjb252ZXJ0CisgICAgLy8gdG8gKGltZy0+cGFyZW50Tm9kZSgpLCBp
bWctPm5vZGVJbmRleCgpICsgMSkgYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgcmFuZ2UuCisgICAg
UG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnRQb3NpdGlvbik7
CisgICAgUG9zaXRpb24gZW5kID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZFBvc2l0aW9u
KTsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNv
bnRhaW5lci5nZXQoKSwgc3RhcnQucG9zT2Zmc2V0LCBlbmQuY29udGFpbmVyLmdldCgpLCBlbmQu
cG9zT2Zmc2V0KSk7CiB9CiAK
</data>
<flag name="review"
          id="13524"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27812</attachid>
            <date>2009-02-19 15:58:48 -0800</date>
            <delta_ts>2009-02-26 15:20:28 -0800</delta_ts>
            <desc>Further cleanup to rangeCompliantEquivalent callers</desc>
            <filename>Further-cleanup-to-rangeCompliantEquivalent-callers.patch</filename>
            <type>text/plain</type>
            <size>16123</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZTMxNWRhNzJjYzM3ZmZjODhjZmUyNDMxMTNkNjEzMjM5N2Q0MWE4YQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vUmFuZ2UuaCBiL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggNDlkZWE4Mi4uODAx
NjZhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9XZWJDb3JlL2RvbS9S
YW5nZS5oCkBAIC00MCw2ICs0MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
YW5nZT4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSYW5nZT4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IHN0
YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFp
bmVyLCBpbnQgZW5kT2Zmc2V0KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRl
KFBhc3NSZWZQdHI8RG9jdW1lbnQ+LCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7
CisgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgYSBWaXNpYmxlUG9zaXRpb24gYmFzZWQgY29uc3Ry
dWN0b3IgdW5sZXNzIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbikKKyAgICAvLyBpcyBtYXJrZWQg
ZXhwbGljaXQuICBGb3Igbm93LCB3ZSB1c2UgbWFrZVJhbmdlKFZpc2libGVQb3NpdGlvbiwgVmlz
aWJsZVBvc2l0aW9uKS4KICAgICB+UmFuZ2UoKTsKIAogICAgIERvY3VtZW50KiBvd25lckRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckRvY3VtZW50LmdldCgpOyB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBkODg4YWVkLi4xYmQyN2RhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTQxNiw4ICs0MTYsOCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
KnN0eWxlKQogICAgIC8vIENhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGluZGljZXMgZnJvbSB0aGUg
c3RhcnQgb2YgdGhlIHRyZWUgdGhhdCB0aGV5J3JlIGluLgogICAgIE5vZGUqIHNjb3BlID0gaGln
aGVzdEFuY2VzdG9yKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CiAgICAg
UG9zaXRpb24gcmFuZ2VTdGFydChzY29wZSwgMCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZVN0YXJ0LCByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKLSAgICBSZWZQdHI8
UmFuZ2U+IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZVN0YXJ0LCBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpKSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBy
YW5nZVN0YXJ0LCB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgUmVmUHRyPFJh
bmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgdmlz
aWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgaW50IGVuZElu
ZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
IGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCBmODgzZWVl
Li45ODJjNTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAg
LTc1NSwxMyArNzU1LDEzIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJh
Z3JhcGgpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFy
YWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgdmlz
aWJsZVN0YXJ0KTsKICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChzdGFydFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUuZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZFJh
bmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVFbmQpOwogICAg
ICAgICAgICAgICAgIGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRSYW5n
ZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc3NCwxNiArNzc0
LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgLy8gV2hlbiB3ZSBwYXN0ZSBhIGZy
YWdtZW50LCBzcGFjZXMgYWZ0ZXIgdGhlIGVuZCBhbmQgYmVmb3JlIHRoZSBzdGFydCBhcmUgdHJl
YXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIHJlbmRlcmVkLiAgICAKICAgICBQb3NpdGlvbiBzdGFy
dCA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7
CiAgICAgUG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS51cHN0cmVhbSgpOwotICAgIAotICAgIC8vIHN0YXJ0IGFuZCBlbmQgY2FuJ3QgYmUgdXNlZCBk
aXJlY3RseSB0byBjcmVhdGUgYSBSYW5nZTsgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIgot
ICAgIFBvc2l0aW9uIHN0YXJ0UmFuZ2VDb21wbGlhbnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQoc3RhcnQpOwotICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gcmFuZ2VDb21wbGlh
bnRFcXVpdmFsZW50KGVuZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5ub2RlKCksIHN0YXJ0UmFuZ2VDb21w
bGlhbnQub2Zmc2V0KCksIGVuZFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgZW5kUmFuZ2VDb21wbGlh
bnQub2Zmc2V0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHN0YXJ0LCBlbmQpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZp
Y2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8g
bW92ZS4gIEl0IAogICAgIC8vIHNob3VsZG4ndCBtYXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBw
YXJhZ3JhcGhzIHdpbGwgdXN1YWxseSBiZSBxdWl0ZSBzbWFsbC4KLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlICE9IGVuZE9mUGFy
YWdyYXBoVG9Nb3ZlID8gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvY3VtZW50KCksIGNyZWF0
ZU1hcmt1cChyYW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVl
KSwgIiIpIDogMDsKLSAgICAKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7
CisgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgIT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUp
CisgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvY3VtZW50KCks
IGNyZWF0ZU1hcmt1cChyYW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdl
LCB0cnVlKSwgIiIpOworCiAgICAgLy8gQSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMg
bW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAvLyBh
bnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBw
YXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUKICAgICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48L2Rp
dj4gZm9yIGV4YW1wbGUuICBTYXZlIGl0IHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxhdGVy
LgpAQCAtNzkzLDcgKzc5MSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIC8v
IFRoZSBtb3ZlZCBwYXJhZ3JhcGggc2hvdWxkIGFzc3VtZSB0aGUgYmxvY2sgc3R5bGUgb2YgdGhl
IGRlc3RpbmF0aW9uLgogICAgICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGgtPnJlbW92ZUJsb2Nr
UHJvcGVydGllcygpOwogICAgIH0KLSAgICAKKwogICAgIC8vIEZJWE1FICg1MDk4OTMxKTogV2Ug
c2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQi
IGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhlcmUuCiAgICAgCiAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwpAQCAt
ODQ3LDcgKzg0NSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhz
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIHVwZGF0ZUxh
eW91dCgpOwogICAgIH0KICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFRvRGVzdGlu
YXRpb25SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIFBvc2l0aW9uKGRvY3VtZW50KCks
IDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQo
KSkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlKFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgUG9zaXRpb24oZG9jdW1lbnQoKSwgMCksIGRlc3RpbmF0aW9uLmRl
ZXBFcXVpdmFsZW50KCkpKTsKICAgICBkZXN0aW5hdGlvbkluZGV4ID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChzdGFydFRvRGVzdGluYXRpb25SYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgCiAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRlc3RpbmF0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBlOGI3NDhiLi5hNDMwMzk1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01OTksOCArNTk5LDggQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kT2ZQ
YXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBl
bmRPZlBhcmFncmFwaFRvTW92ZSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNl
ZCA9IG1ha2VSYW5nZShtZXJnZURlc3RpbmF0aW9uLCBtZXJnZURlc3RpbmF0aW9uKTsKICAgICBp
ZiAoIWRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkTW92ZVJh
bmdlQWZ0ZXJEZWxldGUocmFuZ2UuZ2V0KCksIHJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxZWRjZGM2Li45ZjM5OTA3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtNDYzLDcgKzQ2Myw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9y
Ojp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJvb2wmIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJl
CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkpIHsKICAgICAgICAgZW5k
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCk7CiAK
LSAgICAgICAgTm9kZSogcGFzdExhc3QgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChwb3MpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQoZW5kKSktPnBhc3RMYXN0Tm9kZSgpOworICAgICAgICBOb2RlKiBwYXN0TGFzdCA9IFJhbmdl
OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgcG9zLCBlbmQpLT5wYXN0TGFzdE5vZGUoKTsK
ICAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHBhc3RMYXN0OyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW4tPmlzU3R5bGVkRWxlbWVu
dCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcAppbmRleCBlZmNkNTBkLi4wYWJmNjhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcApAQCAtNTk1LDcgKzU5NSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24KIHsKICAgICBp
ZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAKKwogICAgIFBvc2l0aW9uIHMgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnQpOwog
ICAgIFBvc2l0aW9uIGUgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKTsKICAgICByZXR1
cm4gUmFuZ2U6OmNyZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcy5ub2RlKCksIHMub2Zmc2V0
KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNw
cAppbmRleCBiOTlmNDFjLi5mMTExZjJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwCkBAIC0xMjcsOSArMTI3LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlv
bjo6Zmlyc3RSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBQb3NpdGlvbiBzdGFydCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtX3N0
YXJ0KTsKLSAgICBQb3NpdGlvbiBlbmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9lbmQp
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9zdGFydC5ub2RlKCktPmRvY3Vt
ZW50KCksIG1fc3RhcnQsIG1fZW5kKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNl
bGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdApAQCAtMTUyLDcgKzE1MCw3IEBAIFBh
c3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QKICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5n
ZSBzdGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1cyBtYXRjaAogICAgICAgICAvLyB0aGUgY29u
dmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1p
bmF0aW9ucyBiYXNlZAogICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2Fy
ZXQsIGlmIGFueS4gCi0gICAgICAgIHMgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zdGFy
dC51cHN0cmVhbSgpKTsKKyAgICAgICAgcyA9IG1fc3RhcnQudXBzdHJlYW0oKTsKICAgICAgICAg
ZSA9IHM7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIHJh
bmdlLCBzZWxlY3QgdGhlIG1pbmltdW0gcmFuZ2UgdGhhdCBlbmNvbXBhc3NlcyB0aGUgc2VsZWN0
aW9uLgpAQCAtMTc2LDggKzE3NCw2IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rp
b246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgICAgIHMgPSBlOwogICAgICAg
ICAgICAgZSA9IHRtcDsKICAgICAgICAgfQotICAgICAgICBzID0gcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KHMpOwotICAgICAgICBlID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGUpOwogICAg
IH0KIAogICAgIC8vIFZpc2libGVTZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBhbHdheXMgYmUg
dmFsaWQuICBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgQVNTRVJUCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAppbmRleCA0ZTM5ZTllLi41ZDEyZjA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTMy
Miw2ICszMjIsMTAgQEAgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBv
c2l0aW9uJiBwb3MpCiAgICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CiAKICAgICBpZiAocG9z
Lm9mZnNldCgpIDw9IDApIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgd3JvbmcgdGhh
dCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgc2hvdWxkIGJlCisgICAgICAgIC8vIG1vdmluZyBw
b3NpdGlvbnMgb3V0c2lkZSBvZiA8dGFibGU+IGVsZW1lbnRzIQorICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1pbmcgY29udmVyc2lvbnMgbGlrZQorICAgICAg
ICAvLyAoaW1nLCAxKSB0byAoaW1nLT5wYXJlbnROb2RlKCksIGltZy0+Y2hpbGRJbmRleCgpICsg
MSkKICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSAmJiAoZWRpdGluZ0lnbm9yZXNDb250
ZW50KG5vZGUpIHx8IGlzVGFibGVFbGVtZW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBw
b3NpdGlvbkJlZm9yZU5vZGUobm9kZSk7CiAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCAw
KTsKQEAgLTk0Niw3ICs5NTAsNyBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUG9zaXRpb24gcCh2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVh
dGUocC5ub2RlKCktPmRvY3VtZW50KCksIFBvc2l0aW9uKHAubm9kZSgpLT5kb2N1bWVudCgpLCAw
KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHApKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24ocC5ub2RlKCkt
PmRvY3VtZW50KCksIDApLCBwKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChyYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRl
eCA1YmE5YzRhLi4xYzdkNWFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC00MSw2
ICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKK3N0YXRpYyBib29sIGNvbnRhaW5zU2VjdXJlVGV4dChOb2RlKiBub2RlKQoreworICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBU
U05PTkU7Cit9CisKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNoRnVuY3Rpb24pKGNvbnN0IFVD
aGFyICosIHVuc2lnbmVkKSkKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50
KCk7CkBAIC01OCwyMiArNjUsMTIgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWduZWQgKCpzZWEKICAgICB3aGls
ZSAoYm91bmRhcnkgJiYgYm91bmRhcnkgIT0gZGUgJiYgYm91bmRhcnktPnBhcmVudE5vZGUoKSAm
JiBpc0NvbnRlbnRFZGl0YWJsZSA9PSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpKQogICAgICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCk7CiAK
LSAgICBQb3NpdGlvbiBzdGFydCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChQb3NpdGlvbihi
b3VuZGFyeSwgMCkpOwotICAgIFBvc2l0aW9uIGVuZCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dChwb3MpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGQp
OwotICAgIAotICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwotICAgIHNlYXJjaFJh
bmdlLT5zZXRFbmQoZW5kLm5vZGUoKSwgZW5kLm9mZnNldCgpLCBleGNlcHRpb24pOwotICAgIAot
ICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZCwgUG9zaXRpb24oYm91bmRhcnksIDApLCBwb3MpOwogICAgICAgICAKICAg
ICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpKTsK
ICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsK
LSAgICBib29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2Rl
KCktPnJlbmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0
U2VjdXJpdHkoKSAhPSBUU05PTkU7CisgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBjb250
YWluc1NlY3VyZVRleHQoc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpOwogICAgIHdoaWxl
ICghaXQuYXRFbmQoKSkgewogICAgICAgICAvLyBpdGVyYXRlIHRvIGdldCBjaHVua3MgdW50aWwg
dGhlIHNlYXJjaEZ1bmN0aW9uIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KICAgICAgICAgaWYg
KCFpblRleHRTZWN1cml0eU1vZGUpIApAQCAtOTEsMTAgKzg4LDEwIEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2ln
bmVkICgqc2VhCiAgICAgICAgIGl0LmFkdmFuY2UoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGl0
LmF0RW5kKCkgJiYgbmV4dCA9PSAwKSB7CisgICAgaWYgKGl0LmF0RW5kKCkgJiYgbmV4dCA9PSAw
KQogICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgfSBlbHNl
IGlmIChuZXh0ICE9IDApIHsKLSAgICAgICAgTm9kZSAqbm9kZSA9IGl0LnJhbmdlKCktPnN0YXJ0
Q29udGFpbmVyKGV4Y2VwdGlvbik7CisgICAgZWxzZSBpZiAobmV4dCAhPSAwKSB7CisgICAgICAg
IE5vZGUqIG5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICBpZiAo
bm9kZS0+aXNUZXh0Tm9kZSgpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVy
KCktPmlzQlIoKSkpCiAgICAgICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBh
IHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgICAgICBwb3MgPSBQb3NpdGlv
bihub2RlLCBuZXh0KTsKQEAgLTEzNSw2ICsxMzIsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9u
IG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNo
RgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2Rl
Q29udGVudHMoYm91bmRhcnksIGVjKTsKICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQu
bm9kZSgpLCBzdGFydC5vZmZzZXQoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOyAgLy8gRklYTUU6
IEV4Y2VwdGlvbnMgbWF5IGJlIE9LIGhlcmUsIGJ1dCB3ZSBzaG91bGQgaGFuZGxlIHRoZW0KICAg
ICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgIFZlY3RvcjxV
Q2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwpAQCAtMTU2LDEwICsx
NTQsMTAgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEYKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBpdC5hZHZhbmNlKCk7CiAgICAgfQotICAgIAotICAgIGlmIChpdC5hdEVuZCgpICYmIG5l
eHQgPT0gc3RyaW5nLnNpemUoKSkgeworCisgICAgaWYgKGl0LmF0RW5kKCkgJiYgbmV4dCA9PSBz
dHJpbmcuc2l6ZSgpKQogICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7
Ci0gICAgfSBlbHNlIGlmIChuZXh0ICE9IDApIHsKKyAgICBlbHNlIGlmIChuZXh0ICE9IDApIHsK
ICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBu
ZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCiAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9y
IGNoYXJJdChzZWFyY2hSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgIGNoYXJJdC5hZHZhbmNl
KG5leHQgLSAxKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggZGVhYmQ5NS4uYmMwNWU3YyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKQEAgLTYzLDggKzYzLDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjph
bmNob3JOb2RlKCkgY29uc3QKIAogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBQb3NpdGlvbiBhbmNo
b3IgPSBzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5zdGFydCgpIDogc2VsZWN0
aW9uLmVuZCgpOwotICAgIGFuY2hvciA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChhbmNob3Ip
OwotICAgIHJldHVybiBhbmNob3Iubm9kZSgpOworICAgIHJldHVybiByYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQoYW5jaG9yKS5ub2RlKCk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5v
ZGUoKSBjb25zdApAQCAtODEsOCArODAsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZz
ZXQoKSBjb25zdAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIGFuY2hvciA9IHNl
bGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5k
KCk7Ci0gICAgYW5jaG9yID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcik7Ci0gICAg
cmV0dXJuIGFuY2hvci5vZmZzZXQoKTsKKyAgICByZXR1cm4gcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KGFuY2hvcikub2Zmc2V0KCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmJhc2VPZmZzZXQo
KSBjb25zdApAQCAtOTksOCArOTcsNyBAQCBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgp
IGNvbnN0CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rp
b24uaXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwot
ICAgIGZvY3VzID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKLSAgICByZXR1cm4g
Zm9jdXMubm9kZSgpOworICAgIHJldHVybiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZm9jdXMp
Lm5vZGUoKTsKIH0KIAogTm9kZSogRE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKCkgY29uc3QKQEAg
LTExNyw4ICsxMTQsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjpmb2N1c09mZnNldCgpIGNvbnN0CiAK
ICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIGZvY3Vz
ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKLSAgICByZXR1cm4gZm9jdXMub2Zm
c2V0KCk7CisgICAgcmV0dXJuIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChmb2N1cykub2Zmc2V0
KCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmV4dGVudE9mZnNldCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27814</attachid>
            <date>2009-02-19 16:03:09 -0800</date>
            <delta_ts>2009-02-26 15:20:19 -0800</delta_ts>
            <desc>Complete fix, including ap&apos;s suggested cleanup of rangeCompliantEquivalent callers</desc>
            <filename>Complete-fix-including-ap-s-suggested-cleanup-of-rangeCompliantEquivalent-callers.patch</filename>
            <type>text/plain</type>
            <size>21506</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">M2E5OTI1NGMxMjkzNGE3NGI2NGRmMmJiNzQ5NjYzODI3OWRmZGJjMgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ0MmI5MTQu
LmEzYTQxYjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wMi0xOSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQqLCBQb3NpdGlvbiwgUG9zaXRp
b24pIHRvIGNvcnJlY3RseQorICAgICAgICBjb252ZXJ0IHBvc2l0aW9ucyB1c2luZyByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQgYmVmb3JlIGNvbnN0cnVjdGluZworICAgICAgICB0aGUgUmFuZ2Ug
ZnJvbSB0aGVtLgorCisgICAgICAgIFRoaXMgZml4ZXMgYW4gQVNTRVJUIGhpdCB3aGVuIHRyeWlu
ZyB0byB3cmFwIGFuIGltYWdlIGluIGFuIGxpbmsgdXNpbmcKKyAgICAgICAgZWRpdGluZyBjb21t
YW5kcyAod2hpY2ggcHJvYmFibHkgcmVzdWx0ZWQgaW4gaW5jb3JyZWN0IGJlaGF2aW9yIGJlZm9y
ZSB0b28pLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkyMjEKKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNy
ZWF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFu
ZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMDktMDItMTkgIERp
bWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2FlODcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Fzc2VydC1vbi1yYW5nZS1j
cmVhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUyAtLSBXZWJLaXQgZGlkIG5v
dCBjcmFzaCBkdXJpbmcgcmFuZ2UgY3JlYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTIyMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxZjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLmh0bWwK
QEAgLTAsMCArMSwxMiBAQAorPEJPRFk+PFNDUklQVD4KK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJz
ZWxlY3RhbGwiKQorZG9jdW1lbnQuZGVzaWduTW9kZSA9ICJvbiIKK2RvY3VtZW50LmV4ZWNDb21t
YW5kKCJpbnNlcnRpbWFnZSIsIGZhbHNlLCAicmVkIikKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCJj
cmVhdGVMaW5rIiwgZmFsc2UsIHRydWUpCitkb2N1bWVudC5leGVjQ29tbWFuZCgicmVtb3ZlZm9y
bWF0IikKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlBB
U1MgLS0gV2ViS2l0IGRpZCBub3QgY3Jhc2ggZHVyaW5nIHJhbmdlIGNyZWF0aW9uLiAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjIxIjsKKzwvU0NSSVBUPgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYjUy
NzlkLi44ZjY3MmI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDA5LTAyLTE5ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXggUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCosIFBvc2l0aW9uLCBQb3NpdGlvbikg
dG8gY29ycmVjdGx5CisgICAgICAgIGNvbnZlcnQgcG9zaXRpb25zIHVzaW5nIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCBiZWZvcmUgY29uc3RydWN0aW5nCisgICAgICAgIHRoZSBSYW5nZSBmcm9t
IHRoZW0uCisKKyAgICAgICAgVGhpcyBmaXhlcyBhbiBBU1NFUlQgaGl0IHdoZW4gdHJ5aW5nIHRv
IHdyYXAgYW4gaW1hZ2UgaW4gYW4gbGluayB1c2luZworICAgICAgICBlZGl0aW5nIGNvbW1hbmRz
ICh3aGljaCBwcm9iYWJseSByZXN1bHRlZCBpbiBpbmNvcnJlY3QgYmVoYXZpb3IgYmVmb3JlIHRv
bykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIy
MQorCisgICAgICAgIEFsc28gY2xlYW4gdXAgY2FsbGVycyBvZiByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQsIHNpbmNlIG1vc3QgZG9uJ3QgbmVlZAorICAgICAgICB0byBjYWxsIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCBub3cgdGhhdCBSYW5nZTo6Y3JlYXRlIGRvZXMgaXQgZm9yIHRoZW0uCisK
KyAgICAgICAgVGVzdDogZWRpdGluZy9leGVjQ29tbWFuZC9hc3NlcnQtb24tcmFuZ2UtY3JlYXRp
b24uaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJhbmdlKToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1NlY3VyZVRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpuZXh0Qm91bmRhcnkpOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YW5jaG9yTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01TZWxlY3Rpb246OmFuY2hvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxl
Y3Rpb246OmZvY3VzTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3Vz
T2Zmc2V0KToKKwogMjAwOS0wMi0xOSAgSnVuZ3NoaWsgU2hpbiA8anNoaW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwIGIvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdhZTU2YjEuLjZh
MmViZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKKyNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5o
IgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTg3LDgg
Kzg4LDEyIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1
bWVudD4gb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxOCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENv
bnRhaW5lciwgZW5kT2Zmc2V0KSk7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVh
dGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQorUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0
ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50LCBjb25zdCBQb3NpdGlvbiYgc3Rh
cnRQb3NpdGlvbiwgY29uc3QgUG9zaXRpb24mIGVuZFBvc2l0aW9uKQogeworICAgIC8vIEludGVy
bmFsbHkgd2Ugc29tZXRpbWVzIHVzZSAoaW1nLCAxKSB0byBtZWFuICJ0aGUgcG9zaXRpb24gYWZ0
ZXIgaW1nIiBjb252ZXJ0CisgICAgLy8gdG8gKGltZy0+cGFyZW50Tm9kZSgpLCBpbWctPm5vZGVJ
bmRleCgpICsgMSkgYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgcmFuZ2UuCisgICAgUG9zaXRpb24g
c3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnRQb3NpdGlvbik7CisgICAgUG9z
aXRpb24gZW5kID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZFBvc2l0aW9uKTsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNvbnRhaW5lci5n
ZXQoKSwgc3RhcnQucG9zT2Zmc2V0LCBlbmQuY29udGFpbmVyLmdldCgpLCBlbmQucG9zT2Zmc2V0
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9XZWJDb3JlL2RvbS9S
YW5nZS5oCmluZGV4IDQ5ZGVhODIuLjgwMTY2YTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Jh
bmdlLmgKKysrIGIvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50
Pik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3Vt
ZW50PiwgUGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBQ
YXNzUmVmUHRyPE5vZGU+IGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNldCk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiwgY29uc3QgUG9z
aXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOworICAgIC8vIFdlIHNob3VsZG4ndCBoYXZlIGEgVmlz
aWJsZVBvc2l0aW9uIGJhc2VkIGNvbnN0cnVjdG9yIHVubGVzcyBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24pCisgICAgLy8gaXMgbWFya2VkIGV4cGxpY2l0LiAgRm9yIG5vdywgd2UgdXNlIG1ha2VS
YW5nZShWaXNpYmxlUG9zaXRpb24sIFZpc2libGVQb3NpdGlvbikuCiAgICAgflJhbmdlKCk7CiAK
ICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJEb2N1
bWVudC5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggZDg4
OGFlZC4uMWJkMjdkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC00
MTYsOCArNDE2LDggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkKICAgICAvLyBDYWxjdWxhdGUgc3RhcnQg
YW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBp
bi4KICAgICBOb2RlKiBzY29wZSA9IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCkpOwogICAgIFBvc2l0aW9uIHJhbmdlU3RhcnQoc2NvcGUsIDApOwot
ICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
cmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgdmlzaWJsZVN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkpOworICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHJhbmdlU3RhcnQsIHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAg
aW50IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2UuZ2V0
KCksIHRydWUpOwogICAgIGludCBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
ZW5kUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKaW5kZXggZjg4M2VlZS4uOTgyYzU1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NTUsMTMgKzc1NSwxMyBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0
T2ZQYXJhZ3JhcAogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdGFydEluZGV4ID0gMDsKICAg
ICAgICAgICAgIGlmIChzdGFydEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwg
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7
CisgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIHZpc2libGVTdGFydCk7CiAgICAgICAgICAgICAgICAgc3Rh
cnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1
ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVuZEluZGV4ID0gMDsKICAgICAgICAg
ICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
ZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZh
bGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLCB2aXNpYmxlRW5kKTsKICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoZW5kUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC03NzQsMTYgKzc3NCwxNCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAog
ICAgIC8vIFdoZW4gd2UgcGFzdGUgYSBmcmFnbWVudCwgc3BhY2VzIGFmdGVyIHRoZSBlbmQgYW5k
IGJlZm9yZSB0aGUgc3RhcnQgYXJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSByZW5kZXJl
ZC4gICAgCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdy
YXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKLSAgICAKLSAgICAvLyBzdGFy
dCBhbmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRlIGEgUmFuZ2U7IHRoZXkg
YXJlICJlZGl0aW5nIHBvc2l0aW9ucyIKLSAgICBQb3NpdGlvbiBzdGFydFJhbmdlQ29tcGxpYW50
ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0KTsKLSAgICBQb3NpdGlvbiBlbmRSYW5n
ZUNvbXBsaWFudCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpOwotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlh
bnQubm9kZSgpLCBzdGFydFJhbmdlQ29tcGxpYW50Lm9mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFu
dC5ub2RlKCksIGVuZFJhbmdlQ29tcGxpYW50Lm9mZnNldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGFuIGluZWZmaWNpZW50IHdheSB0byBwcmVzZXJ2ZSBzdHlsZSBvbiBu
b2RlcyBpbiB0aGUgcGFyYWdyYXBoIHRvIG1vdmUuICBJdCAKICAgICAvLyBzaG91bGRuJ3QgbWF0
dGVyIHRob3VnaCwgc2luY2UgbW92ZWQgcGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUg
c21hbGwuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gc3RhcnRPZlBh
cmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSA/IGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cChkb2N1bWVudCgpLCBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIERvTm90QW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgdHJ1ZSksICIiKSA6IDA7Ci0gICAgCisgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OworICAgIGlmIChzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
ICE9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKQorICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChkb2N1bWVudCgpLCBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIERv
Tm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgdHJ1ZSksICIiKTsKKwogICAgIC8vIEEgbm9uLWVt
cHR5IHBhcmFncmFwaCdzIHN0eWxlIGlzIG1vdmVkIHdoZW4gd2UgY29weSBhbmQgbW92ZSBpdC4g
IFdlIGRvbid0IG1vdmUgCiAgICAgLy8gYW55dGhpbmcgaWYgd2UncmUgZ2l2ZW4gYW4gZW1wdHkg
cGFyYWdyYXBoLCBidXQgYW4gZW1wdHkgcGFyYWdyYXBoIGNhbiBoYXZlIHN0eWxlCiAgICAgLy8g
dG9vLCA8ZGl2PjxiPjxicj48L2I+PC9kaXY+IGZvciBleGFtcGxlLiAgU2F2ZSBpdCBzbyB0aGF0
IHdlIGNhbiBwcmVzZXJ2ZSBpdCBsYXRlci4KQEAgLTc5Myw3ICs3OTEsNyBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0
YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAvLyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNob3VsZCBhc3N1
bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBkZXN0aW5hdGlvbi4KICAgICAgICAgc3R5bGVJbkVt
cHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAi
V2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBo
ZXJlLgogICAgIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
LCBlbmQsIERPV05TVFJFQU0pKTsKQEAgLTg0Nyw3ICs4NDUsNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQ
YXJhZ3JhcAogICAgICAgICB1cGRhdGVMYXlvdXQoKTsKICAgICB9CiAgICAgICAgIAotICAgIFJl
ZlB0cjxSYW5nZT4gc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCgpLCBQb3NpdGlvbihkb2N1bWVudCgpLCAwKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGRl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpKSk7CisgICAgUmVmUHRyPFJhbmdlPiBzdGFydFRv
RGVzdGluYXRpb25SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIFBvc2l0aW9uKGRvY3Vt
ZW50KCksIDApLCBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSk7CiAgICAgZGVzdGluYXRp
b25JbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFu
Z2UuZ2V0KCksIHRydWUpOwogICAgIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlv
bik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggZThi
NzQ4Yi4uYTQzMDM5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcApAQCAtNTk5LDggKzU5OSw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkp
KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVw
RXF1aXZhbGVudCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uo
c3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUpOworICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtYWtlUmFuZ2UobWVyZ2VEZXN0aW5hdGlvbiwg
bWVyZ2VEZXN0aW5hdGlvbik7CiAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3Io
KS0+Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLmdldCgpLCByYW5n
ZVRvQmVSZXBsYWNlZC5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggMWVkY2RjNi4uOWYzOTkwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQ2Myw3ICs0NjMsNyBA
QCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihib29s
JiBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZQogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNSYW5nZSgpKSB7CiAgICAgICAgIGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpOwogCi0gICAgICAgIE5vZGUqIHBhc3RMYXN0ID0gUmFuZ2U6
OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9z
KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZCkpLT5wYXN0TGFzdE5vZGUoKTsKKyAgICAg
ICAgTm9kZSogcGFzdExhc3QgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHBv
cywgZW5kKS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4g
JiYgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICAg
ICAgaWYgKCFuLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggZWZjZDUwZC4uMGFiZjY4ZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTU5NSw3ICs1OTUsNyBAQCBQYXNzUmVm
UHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uCiB7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBQb3NpdGlvbiBzID0gcmFuZ2VDb21w
bGlhbnRFcXVpdmFsZW50KHN0YXJ0KTsKICAgICBQb3NpdGlvbiBlID0gcmFuZ2VDb21wbGlhbnRF
cXVpdmFsZW50KGVuZCk7CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3Vt
ZW50KCksIHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggYjk5ZjQxYy4uZjExMWYyZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMTI3LDkgKzEyNyw3IEBAIFBhc3NSZWZQ
dHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAogewogICAgIGlm
IChpc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zdGFydCk7Ci0gICAgUG9zaXRpb24gZW5kID0gcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KG1fZW5kKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFy
dC5ub2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBSYW5nZTo6Y3Jl
YXRlKG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLCBtX3N0YXJ0LCBtX2VuZCk7CiB9CiAKIFBh
c3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QKQEAgLTE1Miw3ICsxNTAsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9u
Ojp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24g
aXMgYSBjYXJldCwgbW92ZSB0aGUgcmFuZ2Ugc3RhcnQgdXBzdHJlYW0uIFRoaXMgaGVscHMgdXMg
bWF0Y2gKICAgICAgICAgLy8gdGhlIGNvbnZlbnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0ZWQs
IHdoaWNoIG1ha2Ugc3R5bGUgZGV0ZXJtaW5hdGlvbnMgYmFzZWQKICAgICAgICAgLy8gb24gdGhl
IGNoYXJhY3RlciBiZWZvcmUgdGhlIGNhcmV0LCBpZiBhbnkuIAotICAgICAgICBzID0gcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KG1fc3RhcnQudXBzdHJlYW0oKSk7CisgICAgICAgIHMgPSBtX3N0
YXJ0LnVwc3RyZWFtKCk7CiAgICAgICAgIGUgPSBzOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgc2VsZWN0IHRoZSBtaW5pbXVtIHJhbmdlIHRo
YXQgZW5jb21wYXNzZXMgdGhlIHNlbGVjdGlvbi4KQEAgLTE3Niw4ICsxNzQsNiBAQCBQYXNzUmVm
UHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAg
ICAgICAgICAgICBzID0gZTsKICAgICAgICAgICAgIGUgPSB0bXA7CiAgICAgICAgIH0KLSAgICAg
ICAgcyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzKTsKLSAgICAgICAgZSA9IHJhbmdlQ29t
cGxpYW50RXF1aXZhbGVudChlKTsKICAgICB9CiAKICAgICAvLyBWaXNpYmxlU2VsZWN0aW9ucyBh
cmUgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxsIEFT
U0VSVApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggNGUzOWU5ZS4uNWQxMmYwNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0zMjIsNiArMzIyLDEwIEBAIFBvc2l0aW9uIHJhbmdlQ29t
cGxpYW50RXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIE5vZGUqIG5vZGUgPSBw
b3Mubm9kZSgpOwogCiAgICAgaWYgKHBvcy5vZmZzZXQoKSA8PSAwKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNlZW1zIHdyb25nIHRoYXQgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50IHNob3Vs
ZCBiZQorICAgICAgICAvLyBtb3ZpbmcgcG9zaXRpb25zIG91dHNpZGUgb2YgPHRhYmxlPiBlbGVt
ZW50cyEKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBwZXJmb3JtaW5n
IGNvbnZlcnNpb25zIGxpa2UKKyAgICAgICAgLy8gKGltZywgMSkgdG8gKGltZy0+cGFyZW50Tm9k
ZSgpLCBpbWctPmNoaWxkSW5kZXgoKSArIDEpCiAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2Rl
KCkgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSB8fCBpc1RhYmxlRWxlbWVudChub2Rl
KSkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpOwogICAgICAg
ICByZXR1cm4gUG9zaXRpb24obm9kZSwgMCk7CkBAIC05NDYsNyArOTUwLDcgQEAgaW50IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogICAg
IGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFBv
c2l0aW9uIHAodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHAubm9kZSgpLT5kb2N1bWVudCgpLCBQb3NpdGlv
bihwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgMCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChwKSk7
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3Vt
ZW50KCksIFBvc2l0aW9uKHAubm9kZSgpLT5kb2N1bWVudCgpLCAwKSwgcCk7CiAgICAgcmV0dXJu
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAgYi9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAKaW5kZXggNWJhOWM0YS4uMWM3ZDVhZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcApAQCAtNDEsNiArNDEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitzdGF0aWMgYm9vbCBjb250YWluc1NlY3Vy
ZVRleHQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAo
KnNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciAqLCB1bnNpZ25lZCkpCiB7CiAgICAgUG9zaXRp
b24gcG9zID0gYy5kZWVwRXF1aXZhbGVudCgpOwpAQCAtNTgsMjIgKzY1LDEyIEBAIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMs
IHVuc2lnbmVkICgqc2VhCiAgICAgd2hpbGUgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICE9IGRlICYm
IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgaXNDb250ZW50RWRpdGFibGUgPT0gYm91bmRhcnkt
PnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgYm91bmRhcnkgPSBi
b3VuZGFyeS0+cGFyZW50Tm9kZSgpOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQoUG9zaXRpb24oYm91bmRhcnksIDApKTsKLSAgICBQb3NpdGlvbiBlbmQg
PSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJj
aFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkKTsKLSAgICAKLSAgICBpbnQgZXhjZXB0aW9uID0gMDsK
LSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSwg
ZXhjZXB0aW9uKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5ub2RlKCksIGVuZC5vZmZz
ZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0gICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIFJlZlB0
cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGQsIFBvc2l0aW9uKGJvdW5kYXJ5
LCAwKSwgcG9zKTsKICAgICAgICAgCiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
ciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7
CiAgICAgdW5zaWduZWQgbmV4dCA9IDA7Ci0gICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBz
dGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOworICAgIGJvb2wg
aW5UZXh0U2VjdXJpdHlNb2RlID0gY29udGFpbnNTZWN1cmVUZXh0KHNlYXJjaFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpKTsKICAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKICAgICAgICAgLy8gaXRl
cmF0ZSB0byBnZXQgY2h1bmtzIHVudGlsIHRoZSBzZWFyY2hGdW5jdGlvbiByZXR1cm5zIGEgbm9u
LXplcm8gdmFsdWUuCiAgICAgICAgIGlmICghaW5UZXh0U2VjdXJpdHlNb2RlKSAKQEAgLTkxLDEw
ICs4OCwxMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYQogICAgICAgICBpdC5hZHZhbmNlKCk7
CiAgICAgfQogICAgIAotICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gMCkgeworICAgIGlm
IChpdC5hdEVuZCgpICYmIG5leHQgPT0gMCkKICAgICAgICAgcG9zID0gaXQucmFuZ2UoKS0+c3Rh
cnRQb3NpdGlvbigpOwotICAgIH0gZWxzZSBpZiAobmV4dCAhPSAwKSB7Ci0gICAgICAgIE5vZGUg
Km5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgIGVsc2Ug
aWYgKG5leHQgIT0gMCkgeworICAgICAgICBOb2RlKiBub2RlID0gaXQucmFuZ2UoKS0+c3RhcnRD
b250YWluZXIoKTsKICAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCAobm9kZS0+cmVu
ZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkpKQogICAgICAgICAgICAgLy8gVGhl
IG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQog
ICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9kZSwgbmV4dCk7CkBAIC0xMzUsNiArMTMyLDcg
QEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEYKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7CiAgICAgc2Vh
cmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCksIGVjKTsKKyAg
ICBBU1NFUlQoIWVjKTsgIC8vIEZJWE1FOiBFeGNlcHRpb25zIG1heSBiZSBPSyBoZXJlLCBidXQg
d2Ugc2hvdWxkIGhhbmRsZSB0aGVtCiAgICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdl
dCgpLCB0cnVlKTsKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25l
ZCBuZXh0ID0gMDsKQEAgLTE1NiwxMCArMTU0LDEwIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
bmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWduZWQgKCpzZWFyY2hG
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaXQuYWR2YW5jZSgpOwogICAgIH0KLSAgICAK
LSAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpIHsKKworICAgIGlm
IChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkKICAgICAgICAgcG9zID0gaXQu
cmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwotICAgIH0gZWxzZSBpZiAobmV4dCAhPSAwKSB7Cisg
ICAgZWxzZSBpZiAobmV4dCAhPSAwKSB7CiAgICAgICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0
ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgog
ICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRydWUp
OwogICAgICAgICBjaGFySXQuYWR2YW5jZShuZXh0IC0gMSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmlu
ZGV4IGRlYWJkOTUuLmJjMDVlN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC02Myw4ICs2Myw3
IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YW5jaG9yTm9kZSgpIGNvbnN0CiAKICAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCk7CiAgICAgUG9zaXRpb24gYW5jaG9yID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBz
ZWxlY3Rpb24uc3RhcnQoKSA6IHNlbGVjdGlvbi5lbmQoKTsKLSAgICBhbmNob3IgPSByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQoYW5jaG9yKTsKLSAgICByZXR1cm4gYW5jaG9yLm5vZGUoKTsKKyAg
ICByZXR1cm4gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcikubm9kZSgpOwogfQogCiBO
b2RlKiBET01TZWxlY3Rpb246OmJhc2VOb2RlKCkgY29uc3QKQEAgLTgxLDggKzgwLDcgQEAgaW50
IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKIAogICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsK
ICAgICBQb3NpdGlvbiBhbmNob3IgPSBzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlv
bi5zdGFydCgpIDogc2VsZWN0aW9uLmVuZCgpOwotICAgIGFuY2hvciA9IHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChhbmNob3IpOwotICAgIHJldHVybiBhbmNob3Iub2Zmc2V0KCk7CisgICAgcmV0
dXJuIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChhbmNob3IpLm9mZnNldCgpOwogfQogCiBpbnQg
RE9NU2VsZWN0aW9uOjpiYXNlT2Zmc2V0KCkgY29uc3QKQEAgLTk5LDggKzk3LDcgQEAgTm9kZSog
RE9NU2VsZWN0aW9uOjpmb2N1c05vZGUoKSBjb25zdAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAg
IFBvc2l0aW9uIGZvY3VzID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uZW5k
KCkgOiBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBmb2N1cyA9IHJhbmdlQ29tcGxpYW50RXF1aXZh
bGVudChmb2N1cyk7Ci0gICAgcmV0dXJuIGZvY3VzLm5vZGUoKTsKKyAgICByZXR1cm4gcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKS5ub2RlKCk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlv
bjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CkBAIC0xMTcsOCArMTE0LDcgQEAgaW50IERPTVNlbGVjdGlv
bjo6Zm9jdXNPZmZzZXQoKSBjb25zdAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9u
IGZvY3VzID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uZW5kKCkgOiBzZWxl
Y3Rpb24uc3RhcnQoKTsKLSAgICBmb2N1cyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChmb2N1
cyk7Ci0gICAgcmV0dXJuIGZvY3VzLm9mZnNldCgpOworICAgIHJldHVybiByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQoZm9jdXMpLm9mZnNldCgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjpleHRl
bnRPZmZzZXQoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28043</attachid>
            <date>2009-02-26 15:11:59 -0800</date>
            <delta_ts>2009-03-12 15:58:17 -0700</delta_ts>
            <desc>First pass renaming</desc>
            <filename>First-pass-renaming.patch</filename>
            <type>text/plain</type>
            <size>56233</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDA1MGQzNWIxNmRiNTcwZjZkYmYwMGNkYTdhYzhmMmVmNmVhMjMwZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc3YmFhZDku
LjgzNmNiMTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAwOS0wMi0yNiAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVuYW1lIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCB0byBwb3NpdGlvbkF2
b2lkaW5nSWdub3JlZENvbnRlbnQKKyAgICAgICAgQnJlYWsgb3V0IG1vc3Qgb2YgdGhlIG9sZCBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgbG9naWMgaW50byBhCisgICAgICAgIG5ldyBQb3NpdGlv
bjo6dG9SYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgY2FsbCB3aGljaCBvbmx5IGhhbmRsZXMKKyAg
ICAgICAgY29udmVyc3Rpb24gZnJvbSBpbnRlcm5hbCBlZGl0aW5nIHBvc2l0aW9ucyB0byBET00t
Y29tcGxpYW50IG9uZXMuCisgICAgICAgIAorICAgICAgICBJIGRpZCAqbm90KiB0cnkgdG8gcmVt
b3ZlIG1hbnkgb2YgdGhlIG5ldyAoYW5kIG9idmlvdXNseSB3cm9uZyBvcgorICAgICAgICB1bmVj
ZXNzYXJ5KSBjYWxscyB0byBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQuICBJIHRyaWVk
IHRvIGRvCisgICAgICAgIHNvIGluIHR3byBlYXJsaWVyIGF0dGVtcHRzIGF0IHRoaXMgcGF0Y2gg
YW5kIGZhaWxlZCBtaXNlcmFibHkuCisgICAgICAgIAorICAgICAgICBJIGFsc28gbWFkZSBSYW5n
ZTo6Y3JlYXRlKFBvc2l0aW9uLCBQb3NpdGlvbikgY2FsbAorICAgICAgICB0b1JhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCB3aGljaCBzb2x2ZXMgdGhlIEFTU0VSVCBtZW50aW9uZWQgaW46CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIyMQorICAgICAg
ICAKKyAgICAgICAgSSBhbHNvIGNsZWFuZWQgdXAgUG9zaXRpb24gYSBsaXR0bGUgYml0IHRvIG1h
a2UgaXQgYSByZWFsIGNsYXNzLgorICAgICAgICBSZW1vdmVkIFBvc2l0aW9uOjpjbGVhcigpIGFz
IGNsZWFyIG1ldGhvZHMgYXJlIGVycm9yLXByb25lIGFuZAorICAgICAgICBvdmVyLWtpbGwgZm9y
IFBPRC10eXBlcy4KKworICAgICAgICAqIGVkaXRpbmcvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9u
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9hc3NlcnQtb24tcmFuZ2Ut
Y3JlYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMDktMDItMjYgIERhdmlkIEh5YXR0ICA8aHlhdHRA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2VkaXRpbmcvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvYXNzZXJ0LW9uLXJhbmdlLWNyZWF0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTdhZTg3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9hc3NlcnQtb24tcmFuZ2UtY3JlYXRpb24t
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MgLS0gV2ViS2l0IGRpZCBub3QgY3Jhc2gg
ZHVyaW5nIHJhbmdlIGNyZWF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkyMjEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvYXNzZXJ0LW9uLXJh
bmdlLWNyZWF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2Fzc2VydC1vbi1yYW5nZS1j
cmVhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MWYzOWUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2Fzc2VydC1vbi1yYW5nZS1j
cmVhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxCT0RZPjxTQ1JJUFQ+Citkb2N1bWVudC5l
eGVjQ29tbWFuZCgic2VsZWN0YWxsIikKK2RvY3VtZW50LmRlc2lnbk1vZGUgPSAib24iCitkb2N1
bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0aW1hZ2UiLCBmYWxzZSwgInJlZCIpCitkb2N1bWVudC5l
eGVjQ29tbWFuZCgiY3JlYXRlTGluayIsIGZhbHNlLCB0cnVlKQorZG9jdW1lbnQuZXhlY0NvbW1h
bmQoInJlbW92ZWZvcm1hdCIpCisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitkb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCA9ICJQQVNTIC0tIFdlYktpdCBkaWQgbm90IGNyYXNoIGR1cmluZyByYW5nZSBjcmVh
dGlvbi4gIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIyMSI7Cis8
L1NDUklQVD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYTZhN2VkNy4uM2YyNjA5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDggQEAKKzIwMDktMDItMjYgIEVy
aWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgdG8g
cG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50CisgICAgICAgIEJyZWFrIG91dCBtb3N0IG9m
IHRoZSBvbGQgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50IGxvZ2ljIGludG8gYQorICAgICAgICBu
ZXcgUG9zaXRpb246OnRvUmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50IGNhbGwgd2hpY2ggb25seSBo
YW5kbGVzCisgICAgICAgIGNvbnZlcnN0aW9uIGZyb20gaW50ZXJuYWwgZWRpdGluZyBwb3NpdGlv
bnMgdG8gRE9NLWNvbXBsaWFudCBvbmVzLgorICAgICAgICAKKyAgICAgICAgSSBkaWQgKm5vdCog
dHJ5IHRvIHJlbW92ZSBtYW55IG9mIHRoZSBuZXcgKGFuZCBvYnZpb3VzbHkgd3Jvbmcgb3IKKyAg
ICAgICAgdW5lY2Vzc2FyeSkgY2FsbHMgdG8gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50
LiAgSSB0cmllZCB0byBkbworICAgICAgICBzbyBpbiB0d28gZWFybGllciBhdHRlbXB0cyBhdCB0
aGlzIHBhdGNoIGFuZCBmYWlsZWQgbWlzZXJhYmx5LgorICAgICAgICAKKyAgICAgICAgSSBhbHNv
IG1hZGUgUmFuZ2U6OmNyZWF0ZShQb3NpdGlvbiwgUG9zaXRpb24pIGNhbGwKKyAgICAgICAgdG9S
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgd2hpY2ggc29sdmVzIHRoZSBBU1NFUlQgbWVudGlvbmVk
IGluOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTky
MjEKKyAgICAgICAgCisgICAgICAgIEkgYWxzbyBjbGVhbmVkIHVwIFBvc2l0aW9uIGEgbGl0dGxl
IGJpdCB0byBtYWtlIGl0IGEgcmVhbCBjbGFzcy4KKyAgICAgICAgUmVtb3ZlZCBQb3NpdGlvbjo6
Y2xlYXIoKSBhcyBjbGVhciBtZXRob2RzIGFyZSBlcnJvci1wcm9uZSBhbmQKKyAgICAgICAgb3Zl
ci1raWxsIGZvciBQT0QtdHlwZXMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9hc3NlcnQtb24t
cmFuZ2UtY3JlYXRpb24uaHRtbAorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAg
ICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmlzUmFu
Z2VDb21wbGlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnRvUmFuZ2VDb21wbGlh
bnRFcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjplbGVtZW50KToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6c2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6b2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpzZXRPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6
aXNOb3ROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOgorICAgICAgICAqIGRvbS9S
YW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2lu
dDo6Y29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6cG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBvaW50OjpvZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBvaW50OjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZUJvdW5kYXJ5UG9pbnQ6OnNldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5k
YXJ5UG9pbnQ6OnNldFRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXRUb1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJl
Zm9yZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBvaW50
OjppbnZhbGlkYXRlT2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5
bGUpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAg
ICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplUG9zaXRpb25EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0
YXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnRleHREaXJlY3Rpb25Gb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtD
b21tYW5kOjpzaG91bGRVc2VCcmVha0VsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxl
U3BhbnNCZWZvcmVJbnNlcnRpb24pOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6aG9ub3JFZGl0YWJsZUJv
dW5kYXJ5QXRPckJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246Omhv
bm9yRWRpdGFibGVCb3VuZGFyeUF0T3JBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjptYWtlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6ZW5kVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9z
aXRpb25Jbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5O
b2RlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjbGVhcik6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmZpcnN0
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVk
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNlYXJjaFJhbmdlKToKKyAgICAgICAgKiBl
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uQXZvaWRp
bmdJZ25vcmVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjptYXhEZWVwT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
bmV4dEJvdW5kYXJ5KToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NU2VsZWN0aW9uOjpiYXNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OmFuY2hvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmJhc2VPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpmb2N1c05vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0
aW9uOjpleHRlbnRPZmZzZXQpOgorCiAyMDA5LTAyLTI2ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
IDxnbnNAZ25vbWUub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBidWls
ZGluZyB3aXRoIEdOT01FIEtleXJpbmcgZW5hYmxlZC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCAxNjMxMWU1Li5m
NTU4ZDA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC0yNjksOSArMjY5LDkgQEAgX19aTjdXZWJDb3JlMTJjcmVh
dGVNYXJrdXBFUEtOU180Tm9kZUVOU18xM0VDaGlsZHJlbk9ubHlFUE4zV1RGNlZlY3RvcklQUzBf
TG0wRUUKIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNVJhbmdlRVBOM1dURjZWZWN0
b3JJUE5TXzROb2RlRUxtMEVFRU5TXzIzRUFubm90YXRlRm9ySW50ZXJjaGFuZ2VFYgogX19aTjdX
ZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgorX19a
TjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQTlNfMTJSZW5kZXJPYmplY3RF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUyMWdBY2Nlc3NpYmlsaXR5RW5hYmxlZEUKIF9f
Wk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTQyZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRl
cmZhY2VFbmFibGVkRQotX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTFnZXRPckNyZWF0ZUVQ
TlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS1MwXwog
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0RDFFdgogX19aTjdXZWJDb3JlMTNLZXlib2FyZEV2
ZW50QzFFUktOU18xMkF0b21pY1N0cmluZ0ViYlBOU185RE9NV2luZG93RVJLTlNfNlN0cmluZ0Vq
YmJiYmIKQEAgLTQzMSw3ICs0MzEsNiBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJv
bU5vZGVzRVBOU184RG9jdW1lbnRFUktOM1dURjZWZWN0b3JJUE5TXzROb2RlRUxtMAogX19aTjdX
ZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUE5TXzhEb2N1bWVudEVSS05TXzZTdHJp
bmdFUzRfCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS05TXzZTdHJp
bmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKLV9fWk43V2ViQ29y
ZTI0cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50RVJLTlNfOFBvc2l0aW9uRQogX19aTjdXZWJDb3Jl
MjVQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyMTJzY2hlZHVsZUNhbGxFUDRfTlBQUEZ2UHZFUzNf
CiBfX1pON1dlYkNvcmUyNVBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIxNHJlZ2lzdGVyUGx1Z2lu
RVA0X05QUAogX19aTjdXZWJDb3JlMjVQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyMTZ1bnJlZ2lz
dGVyUGx1Z2luRVA0X05QUApAQCAtNDQxLDYgKzQ0MCw3IEBAIF9fWk43V2ViQ29yZTI2TmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5TXzMyTmV0c2NhcGVQbHVn
SW5TCiBfX1pON1dlYkNvcmUyNnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRXYKIF9fWk43V2Vi
Q29yZTI5aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHRFaWIKIF9fWk43V2ViQ29yZTI5c2V0
VXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3JFYgorX19aTjdXZWJDb3JlMzBwb3NpdGlvbkF2b2lk
aW5nSWdub3JlZENvbnRlbnRFUktOU184UG9zaXRpb25FCiBfX1pON1dlYkNvcmUzMnBsYWluVGV4
dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyRVBLTlNfNVJhbmdlRVJqYgogX19aTjdXZWJDb3JlMzNz
ZXREZWZhdWx0VGhyZWFkVmlvbGF0aW9uQmVoYXZpb3JFTlNfMjNUaHJlYWRWaW9sYXRpb25CZWhh
dmlvckUKIF9fWk43V2ViQ29yZTM2SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5
RXYKQEAgLTUwMSw2ICs1MDEsNyBAQCBfX1pON1dlYkNvcmU1RnJhbWVEMUV2CiBfX1pON1dlYkNv
cmU1SW1hZ2UxMnN1cHBvcnRzVHlwZUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU1SW1hZ2Uy
MGxvYWRQbGF0Zm9ybVJlc291cmNlRVBLYwogX19aTjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVOM1dU
RjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVOUzJfSU5TXzROb2RlRUVFaVM2X2kKK19fWk43
V2ViQ29yZTVSYW5nZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFUktO
U184UG9zaXRpb25FUzdfCiBfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzROb2RlRUVFaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBh
c3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9fWk43V2ViQ29yZTVSYW5nZUQxRXYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjMyNDRlNC4uYWE4ZGYyOSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyOTM4LDcg
KzEyOTM4LDcgQEAKIAkJQjI1NTk4OEYwRDAwRDhCODAwQkI4MjVDIC8qIGNnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCMjU1OTg5OTBEMDBEOEI4MDBC
QjgyNUMgLyogU1ZHUmVzb3VyY2VGaWx0ZXJDZy5tbSAqLworCQkJCUIyNTU5ODk5MEQwMEQ4Qjgw
MEJCODI1QyAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBj
ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggNmEzMDViOS4uNWNl
Y2FhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcApAQCAtNDIsNiArNDIsNDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2Jv
b2wgUG9zaXRpb246OmlzUmFuZ2VDb21wbGlhbnQoKSBjb25zdAoreworICAgIGlmICghbV9jb250
YWluZXIpCisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSAwOworICAgIGlmICghbV9vZmZzZXQp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX2NvbnRhaW5lci0+Y2hpbGROb2Rl
KG1fb2Zmc2V0KTsKK30KKworLy8gSW50ZXJuYWxseSBlZGl0aW5nIHVzZXMgImludmFsaWQiIHBv
c2l0aW9ucyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgRm9yCisvLyBleGFtcGxlLCBpbiA8ZGl2
PjxpbWcgLz48L2Rpdj4sIEVkaXRpbmcgbWlnaHQgdXNlIChpbWcsIDEpIGZvciB0aGUgcG9zaXRp
b24KKy8vIGFmdGVyIDxpbWc+LCBidXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoYXQgdG8gKGRpdiwg
MSkgYmVmb3JlIGhhbmRpbmcgdGhlCisvLyBwb3NpdGlvbiB0byBhIFJhbmdlIG9iamVjdC4gIElk
ZWFsbHkgYWxsIGludGVybmFsIHBvc2l0aW9ucyBzaG91bGQKKy8vIGJlICJyYW5nZSBjb21wbGlh
bnQiIGZvciBzaW1wbGljaXR5LgorUG9zaXRpb24gUG9zaXRpb246OnRvUmFuZ2VDb21wbGlhbnRF
cXVpdmFsZW50KCkgY29uc3QKK3sKKyAgICBpZiAoaXNSYW5nZUNvbXBsaWFudCgpKQorICAgICAg
ICByZXR1cm4gKnRoaXM7CisKKyAgICAvLyBQb3NpdGlvbnMgc3RpbGwgY2FuIGhhdmUgImludmFs
aWQiIG9mZnNldHMgKC0xKSBkdWUgdG8gUmFuZ2VCb3VuZGFyeVBvaW50CisgICAgLy8gYnV0IHdl
IHNob3VsZCBuZXZlciBiZSB0cnlpbmcgdG8gY29udmVydCB0aG9zZSB0byB2YWxpZCByYW5nZSBw
b3NpdGlvbnMKKyAgICBBU1NFUlQob2Zmc2V0KCkgPj0gMCk7CisKKyAgICAvLyBNYWtlIHN1cmUg
dGhlIHBvc2l0aW9uIGlzIG5vdCBvZmYgdGhlIGVuZCBvZiBhIHRleHQgbm9kZQorICAgIGlmIChu
b2RlKCktPm9mZnNldEluQ2hhcmFjdGVycygpKQorICAgICAgICByZXR1cm4gUG9zaXRpb24obm9k
ZSgpLCBtaW4obm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSwgb2Zmc2V0KCkpKTsKKworICAg
IC8vIE1ha2Ugc3VyZSB0aGUgcG9zaXRpb24gaXMgbm90IG9mZiB0aGUgZW5kIG9mIGEgY29udGFp
bmVyIG5vZGUKKyAgICBpbnQgb2Zmc2V0QWZ0ZXJMYXN0Q2hpbGQgPSBub2RlKCktPmNoaWxkTm9k
ZUNvdW50KCk7CisgICAgaWYgKG9mZnNldCgpID4gb2Zmc2V0QWZ0ZXJMYXN0Q2hpbGQpIHsKKyAg
ICAgICAgaWYgKG5vZGUoKS0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uQWZ0ZXJOb2RlKG5vZGUoKSk7CisKKyAgICAgICAgLy8gdGhlcmUgaXMgbm8gb3RoZXIgb3B0
aW9uIGF0IHRoaXMgcG9pbnQgdGhhbiB0bworICAgICAgICAvLyB1c2UgdGhlIGxhc3QgYWxsb3dl
ZCBwb3NpdGlvbiBpbiB0aGUgbm9kZQorICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSgpLCBv
ZmZzZXRBZnRlckxhc3RDaGlsZCk7CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCiAK
IHN0YXRpYyBOb2RlKiBuZXh0UmVuZGVyZWRFZGl0YWJsZShOb2RlKiBub2RlKQogewpAQCAtODEs
MTIgKzEyNCwxMyBAQCBFbGVtZW50KiBQb3NpdGlvbjo6ZG9jdW1lbnRFbGVtZW50KCkgY29uc3QK
ICAgICByZXR1cm4gMDsKIH0KIAotRWxlbWVudCAqUG9zaXRpb246OmVsZW1lbnQoKSBjb25zdAor
RWxlbWVudCogUG9zaXRpb246OmVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUgKm47Ci0gICAg
Zm9yIChuID0gbm9kZSgpOyBuICYmICFuLT5pc0VsZW1lbnROb2RlKCk7IG4gPSBuLT5wYXJlbnRO
b2RlKCkpCi0gICAgICAgIDsgLy8gZW1wdHkgbG9vcCBib2R5Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEVsZW1lbnQgKj4obik7CisgICAgTm9kZSogbiA9IG5vZGUoKTsKKyAgICB3aGlsZSAobiAm
JiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKIH0KIAogUGFzc1JlZlB0cjxDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IFBvc2l0aW9uOjpjb21wdXRlZFN0eWxlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmggYi9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCmluZGV4IDc3ZGU2NzguLjIyNDQ2ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmgKKysrIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uaApAQCAtNDYsMjggKzQ2LDM4IEBAIGVu
dW0gUG9zaXRpb25Nb3ZlVHlwZSB7CiAgICAgQmFja3dhcmREZWxldGlvbiAvLyBTdWJqZWN0IHRv
IHBsYXRmb3JtIGNvbnZlbnRpb25zLgogfTsKIAotLy8gRklYTUU6IFJlZHVjZSB0aGUgbnVtYmVy
IG9mIG9wZXJhdGlvbnMgd2UgaGF2ZSBvbiBhIFBvc2l0aW9uLgotLy8gVGhpcyBzaG91bGQgYmUg
bW9yZSBsaWtlIGEgaHVtYmxlIHN0cnVjdCwgd2l0aG91dCBzbyBtYW55IGRpZmZlcmVudAotLy8g
bWVtYmVyIGZ1bmN0aW9ucy4gV2Ugc2hvdWxkIGZpbmQgYmV0dGVyIGhvbWVzIGZvciB0aGVzZSBm
dW5jdGlvbnMuCi0KIGNsYXNzIFBvc2l0aW9uIHsKIHB1YmxpYzoKLSAgICBSZWZQdHI8Tm9kZT4g
Y29udGFpbmVyOwotICAgIGludCBwb3NPZmZzZXQ7IC8vIHRvIGJlIHJlbmFtZWQgdG8gb2Zmc2V0
IHdoZW4gd2UgZ2V0IHJpZCBvZiBvZmZzZXQoKQotCi0gICAgUG9zaXRpb24oKSA6IHBvc09mZnNl
dCgwKSB7IH0KLSAgICBQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IGMsIGludCBvKSA6IGNvbnRh
aW5lcihjKSwgcG9zT2Zmc2V0KG8pIHsgfQotCi0gICAgdm9pZCBjbGVhcigpIHsgY29udGFpbmVy
LmNsZWFyKCk7IHBvc09mZnNldCA9IDA7IH0KLQotICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiBjb250YWluZXIuZ2V0KCk7IH0KLSAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
cG9zT2Zmc2V0OyB9CisgICAgUG9zaXRpb24oKSA6IG1fb2Zmc2V0KDApIHsgfQorICAgIFBvc2l0
aW9uKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0KQorICAgICAgICA6IG1f
Y29udGFpbmVyKGNvbnRhaW5lcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpIHt9CisKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXIuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKSB7IG1fY29udGFpbmVyID0gbm9kZTsg
fQorCisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgdm9p
ZCBzZXRPZmZzZXQoaW50IG5ld09mZnNldCkKKyAgICB7CisgICAgICAgIC8vIFNhZGx5IHRoZSBS
YW5nZUJvdW5kYXJ5UG9pbnQgY29kZSBkZXBlbmRzIG9uIGJlaW5nIGFibGUgdG8gc2V0CisgICAg
ICAgIC8vICJpbnZhbGlkT2Zmc2V0IiAoLTEpIGFzIG91ciBvZmZzZXQsIHNvIHdlIGNhbid0IEFT
U0VSVChvZmZzZXQgPj0gMCkgaGVyZS4KKyAgICAgICAgbV9vZmZzZXQgPSBuZXdPZmZzZXQ7Cisg
ICAgICAgIC8vIFdlIGNvdWxkIEFTU0VSVCBoZXJlIHRoYXQgdGhlIG9mZnNldCBpcyB3aXRoaW4g
dGhlIG5vZGUuCisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHBvc3NpYmxl
IHRvIGNvbnN0cnVjdCBhIHZhbGlkIERPTSByYW5nZSB1c2luZyB0aGlzIHBvc2l0aW9uCisgICAg
Ly8gQ29uc3RydWN0aW5nIGEgUmFuZ2UgZnJvbSBhbiBpbnRlcm5hbCBlZGl0aW5nIChub24tcmFu
Z2UgY29tcGxpYW50KSBwb3NpdGlvbiB3aWxsIEFTU0VSVCEKKyAgICAvLyBGSVhNRTogRXZlbnR1
YWxseSBhbGwgdXNlcyBvZiBub24tcmFuZ2UgY29tcGxpYW50IHBvc2l0aW9ucyBzaG91bGQgYmUg
cmVtb3ZlZC4KKyAgICBib29sIGlzUmFuZ2VDb21wbGlhbnQoKSBjb25zdDsKKyAgICBQb3NpdGlv
biB0b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVudCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyBu
b2RlKCkgY2FzdCB0byBhbiBlbGVtZW50KCkgb3IgdGhlIGNsb3Nlc3QgZWxlbWVudCBhbmNlc3Rv
cgorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdDsKICAgICBFbGVtZW50KiBkb2N1bWVudEVs
ZW1lbnQoKSBjb25zdDsKIAotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIWNvbnRh
aW5lcjsgfQotICAgIGJvb2wgaXNOb3ROdWxsKCkgY29uc3QgeyByZXR1cm4gY29udGFpbmVyOyB9
CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9jb250YWluZXI7IH0KKyAgICBi
b29sIGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyOyB9CiAKLSAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24+IGNvbXB1dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIE1vdmUgdXAgb3IgZG93
biB0aGUgRE9NIGJ5IG9uZSBwb3NpdGlvbi4KQEAgLTkwLDcgKzEwMCw4IEBAIHB1YmxpYzoKICAg
ICAvLyBUaGVzZSByZXR1cm4gdXNlZnVsIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb25zLgog
ICAgIFBvc2l0aW9uIHVwc3RyZWFtKCkgY29uc3Q7CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbSgp
IGNvbnN0OwotICAgIAorCisgICAgLy8gRklYTUU6IGlzQ2FuZGlkYXRlIGZvciB3aGF0PyAgTmVl
ZHMgYSBiZXR0ZXIgbmFtZSBhbmQgcHJvYmFibHkgYmVsb25ncyBjbG9zZXIgdG8gVmlzaWJsZVBv
c2l0aW9uLmNwcCB0aGFuIGhlcmUKICAgICBib29sIGlzQ2FuZGlkYXRlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpblJlbmRlcmVkVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgaXNSZW5kZXJlZENoYXJhY3Rl
cigpIGNvbnN0OwpAQCAtMTE0LDExICsxMjUsMTQgQEAgcHJpdmF0ZToKIAogICAgIFBvc2l0aW9u
IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKICAgICBQb3NpdGlv
biBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKKworICAgIFJlZlB0cjxO
b2RlPiBtX2NvbnRhaW5lcjsKKyAgICBpbnQgbV9vZmZzZXQ7IC8vIEZJWE1FOiBjaGFuZ2UgdG8g
dW5zaWduZWQgb25jZSBSYW5nZUJvdW5kYXJ5UG9pbnQgc3RvcHMgdXNpbmcgLTEKIH07CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBi
KQogewotICAgIHJldHVybiBhLmNvbnRhaW5lciA9PSBiLmNvbnRhaW5lciAmJiBhLnBvc09mZnNl
dCA9PSBiLnBvc09mZnNldDsKKyAgICByZXR1cm4gYS5ub2RlKCkgPT0gYi5ub2RlKCkgJiYgYS5v
ZmZzZXQoKSA9PSBiLm9mZnNldCgpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcCBiL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA0ZmRlMDE5Li41Nzk2YWNk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCkBAIC04Nyw5ICs4NywxMSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBSYW5nZTo6Y3JlYXRl
KFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQsIFBhc3NSZWZQdHI8TgogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnRDb250YWluZXIsIHN0
YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCkpOwogfQogCi1QYXNzUmVmUHRyPFJh
bmdlPiBSYW5nZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQsIGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKK1Bhc3NSZWZQdHI8UmFu
Z2U+IFJhbmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgY29u
c3QgUG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFBvc2l0aW9uJiBlbmRQb3NpdGlvbikK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNv
bnRhaW5lci5nZXQoKSwgc3RhcnQucG9zT2Zmc2V0LCBlbmQuY29udGFpbmVyLmdldCgpLCBlbmQu
cG9zT2Zmc2V0KSk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydFBvc2l0aW9uLnRvUmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gZW5kID0gZW5kUG9zaXRpb24udG9S
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJhbmdl
KG93bmVyRG9jdW1lbnQsIHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCksIGVuZC5ub2RlKCks
IGVuZC5vZmZzZXQoKSkpOwogfQogCiBSYW5nZTo6flJhbmdlKCkKQEAgLTUyNCw3ICs1MjYsNyBA
QCBzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIGlu
dCBvZmZzZXRBLCBOb2RlKiBjb250YWluZQogCiBzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICByZXR1
cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGEuY29udGFpbmVyLmdldCgpLCBhLnBvc09mZnNldCwg
Yi5jb250YWluZXIuZ2V0KCksIGIucG9zT2Zmc2V0KTsKKyAgICByZXR1cm4gY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKGEubm9kZSgpLCBhLm9mZnNldCgpLCBiLm5vZGUoKSwgYi5vZmZzZXQoKSk7CiB9
CiAKIGJvb2wgUmFuZ2U6OmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9XZWJDb3JlL2RvbS9SYW5nZUJvdW5k
YXJ5UG9pbnQuaAppbmRleCA0Y2I3YmY1Li5kM2NiM2RlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAorKysgYi9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9p
bnQuaApAQCAtNzIsNyArNzIsNyBAQCBpbmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpSYW5nZUJv
dW5kYXJ5UG9pbnQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIpCiAKIGlubGluZSBOb2RlKiBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OmNvbnRhaW5lcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcG9z
aXRpb24uY29udGFpbmVyLmdldCgpOworICAgIHJldHVybiBtX3Bvc2l0aW9uLm5vZGUoKTsKIH0K
IAogaW5saW5lIE5vZGUqIFJhbmdlQm91bmRhcnlQb2ludDo6Y2hpbGRCZWZvcmUoKSBjb25zdApA
QCAtODIsMjEgKzgyLDIxIEBAIGlubGluZSBOb2RlKiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNoaWxk
QmVmb3JlKCkgY29uc3QKIAogaW5saW5lIGNvbnN0IFBvc2l0aW9uJiBSYW5nZUJvdW5kYXJ5UG9p
bnQ6OnBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9wb3NpdGlvbi5wb3NPZmZzZXQgPj0g
MCkKKyAgICBpZiAobV9wb3NpdGlvbi5vZmZzZXQoKSA+PSAwKQogICAgICAgICByZXR1cm4gbV9w
b3NpdGlvbjsKICAgICBBU1NFUlQobV9jaGlsZEJlZm9yZSk7Ci0gICAgbV9wb3NpdGlvbi5wb3NP
ZmZzZXQgPSBtX2NoaWxkQmVmb3JlLT5ub2RlSW5kZXgoKSArIDE7CisgICAgbV9wb3NpdGlvbi5z
ZXRPZmZzZXQobV9jaGlsZEJlZm9yZS0+bm9kZUluZGV4KCkgKyAxKTsKICAgICByZXR1cm4gbV9w
b3NpdGlvbjsKIH0KIAogaW5saW5lIGludCBSYW5nZUJvdW5kYXJ5UG9pbnQ6Om9mZnNldCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHBvc2l0aW9uKCkucG9zT2Zmc2V0OworICAgIHJldHVybiBwb3Np
dGlvbigpLm9mZnNldCgpOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OmNs
ZWFyKCkKIHsKLSAgICBtX3Bvc2l0aW9uLmNsZWFyKCk7CisgICAgbV9wb3NpdGlvbiA9IFBvc2l0
aW9uKCk7CiAgICAgbV9jaGlsZEJlZm9yZSA9IDA7CiB9CiAKQEAgLTEwNCw2MyArMTA0LDYxIEBA
IGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29u
dGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlCiB7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAg
ICBBU1NFUlQoY2hpbGRCZWZvcmUgPT0gKG9mZnNldCA/IGNvbnRhaW5lci0+Y2hpbGROb2RlKG9m
ZnNldCAtIDEpIDogMCkpOwotICAgIG1fcG9zaXRpb24uY29udGFpbmVyID0gY29udGFpbmVyOwot
ICAgIG1fcG9zaXRpb24ucG9zT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fcG9zaXRpb24gPSBQb3Np
dGlvbihjb250YWluZXIsIG9mZnNldCk7CiAgICAgbV9jaGlsZEJlZm9yZSA9IGNoaWxkQmVmb3Jl
OwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldE9mZnNldChpbnQgb2Zm
c2V0KQogewotICAgIEFTU0VSVChtX3Bvc2l0aW9uLmNvbnRhaW5lcik7Ci0gICAgQVNTRVJUKG1f
cG9zaXRpb24uY29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSk7Ci0gICAgQVNTRVJUKG1f
cG9zaXRpb24ucG9zT2Zmc2V0ID49IDApOworICAgIEFTU0VSVChtX3Bvc2l0aW9uLm5vZGUoKSk7
CisgICAgQVNTRVJUKG1fcG9zaXRpb24ubm9kZSgpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSk7Cisg
ICAgQVNTRVJUKG1fcG9zaXRpb24ub2Zmc2V0KCkgPj0gMCk7CiAgICAgQVNTRVJUKCFtX2NoaWxk
QmVmb3JlKTsKLSAgICBtX3Bvc2l0aW9uLnBvc09mZnNldCA9IG9mZnNldDsKKyAgICBtX3Bvc2l0
aW9uLnNldE9mZnNldChvZmZzZXQpOwogfQogCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9p
bnQ6OnNldFRvQ2hpbGQoTm9kZSogY2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkKTsKICAgICBB
U1NFUlQoY2hpbGQtPnBhcmVudE5vZGUoKSk7Ci0gICAgbV9wb3NpdGlvbi5jb250YWluZXIgPSBj
aGlsZC0+cGFyZW50Tm9kZSgpOworICAgIG1fcG9zaXRpb24uc2V0Tm9kZShjaGlsZC0+cGFyZW50
Tm9kZSgpKTsKICAgICBtX2NoaWxkQmVmb3JlID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOwot
ICAgIG1fcG9zaXRpb24ucG9zT2Zmc2V0ID0gbV9jaGlsZEJlZm9yZSA/IGludmFsaWRPZmZzZXQg
OiAwOworICAgIG1fcG9zaXRpb24uc2V0T2Zmc2V0KG1fY2hpbGRCZWZvcmUgPyBpbnZhbGlkT2Zm
c2V0IDogMCk7CiB9CiAKIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9TdGFy
dChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKIHsKICAgICBBU1NFUlQoY29udGFpbmVyKTsK
LSAgICBtX3Bvc2l0aW9uLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKLSAgICBtX3Bvc2l0aW9uLnBv
c09mZnNldCA9IDA7CisgICAgbV9wb3NpdGlvbiA9IFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CiAg
ICAgbV9jaGlsZEJlZm9yZSA9IDA7CiB9CiAKIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2lu
dDo6c2V0VG9FbmQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIpCiB7CiAgICAgQVNTRVJUKGNv
bnRhaW5lcik7Ci0gICAgbV9wb3NpdGlvbi5jb250YWluZXIgPSBjb250YWluZXI7Ci0gICAgaWYg
KG1fcG9zaXRpb24uY29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBt
X3Bvc2l0aW9uLnBvc09mZnNldCA9IG1fcG9zaXRpb24uY29udGFpbmVyLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKTsKKyAgICBtX3Bvc2l0aW9uLnNldE5vZGUoY29udGFpbmVyKTsKKyAgICBpZiAobV9w
b3NpdGlvbi5ub2RlKCktPm9mZnNldEluQ2hhcmFjdGVycygpKSB7CisgICAgICAgIG1fcG9zaXRp
b24uc2V0T2Zmc2V0KG1fcG9zaXRpb24ubm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CiAg
ICAgICAgIG1fY2hpbGRCZWZvcmUgPSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2hpbGRC
ZWZvcmUgPSBtX3Bvc2l0aW9uLmNvbnRhaW5lci0+bGFzdENoaWxkKCk7Ci0gICAgICAgIG1fcG9z
aXRpb24ucG9zT2Zmc2V0ID0gbV9jaGlsZEJlZm9yZSA/IGludmFsaWRPZmZzZXQgOiAwOworICAg
ICAgICBtX2NoaWxkQmVmb3JlID0gbV9wb3NpdGlvbi5ub2RlKCktPmxhc3RDaGlsZCgpOworICAg
ICAgICBtX3Bvc2l0aW9uLnNldE9mZnNldChtX2NoaWxkQmVmb3JlID8gaW52YWxpZE9mZnNldCA6
IDApOwogICAgIH0KIH0KIAogaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpjaGlsZEJl
Zm9yZVdpbGxCZVJlbW92ZWQoKQogewotICAgIEFTU0VSVChtX3Bvc2l0aW9uLnBvc09mZnNldCk7
CisgICAgQVNTRVJUKG1fcG9zaXRpb24ub2Zmc2V0KCkpOwogICAgIG1fY2hpbGRCZWZvcmUgPSBt
X2NoaWxkQmVmb3JlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBpZiAoIW1fY2hpbGRCZWZvcmUp
Ci0gICAgICAgIG1fcG9zaXRpb24ucG9zT2Zmc2V0ID0gMDsKLSAgICBlbHNlIGlmIChtX3Bvc2l0
aW9uLnBvc09mZnNldCA+IDApCi0gICAgICAgIC0tbV9wb3NpdGlvbi5wb3NPZmZzZXQ7CisgICAg
ICAgIG1fcG9zaXRpb24uc2V0T2Zmc2V0KDApOworICAgIGVsc2UgaWYgKG1fcG9zaXRpb24ub2Zm
c2V0KCkgPiAwKQorICAgICAgICBtX3Bvc2l0aW9uLnNldE9mZnNldChtX3Bvc2l0aW9uLm9mZnNl
dCgpIC0gMSk7CiB9CiAKIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6aW52YWxpZGF0
ZU9mZnNldCgpIGNvbnN0CiB7Ci0gICAgbV9wb3NpdGlvbi5wb3NPZmZzZXQgPSBpbnZhbGlkT2Zm
c2V0OworICAgIG1fcG9zaXRpb24uc2V0T2Zmc2V0KGludmFsaWRPZmZzZXQpOwogfQogCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYSwgY29uc3QgUmFu
Z2VCb3VuZGFyeVBvaW50JiBiKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5k
ZXggZDg4OGFlZC4uMjRkZDhhOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CkBAIC00MTYsOCArNDE2LDggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0
eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkKICAgICAvLyBDYWxjdWxhdGUg
c3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhl
eSdyZSBpbi4KICAgICBOb2RlKiBzY29wZSA9IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwogICAgIFBvc2l0aW9uIHJhbmdlU3RhcnQoc2NvcGUs
IDApOwotICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFydC5k
ZWVwRXF1aXZhbGVudCgpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZp
c2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcG9zaXRpb25Bdm9pZGlu
Z0lnbm9yZWRDb250ZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgUmVm
UHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFy
dCwgcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHZpc2libGVFbmQuZGVlcEVxdWl2YWxl
bnQoKSkpOwogICAgIGludCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChz
dGFydFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKGVuZFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDczZDFjNDEuLmYyMmE3ZTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGlu
c2VydENoaWxkLCBjb25zdCBQb3NpCiAgICAgQVNTRVJUKGlzRWRpdGFibGVQb3NpdGlvbihlZGl0
aW5nUG9zaXRpb24pKTsKICAgICAvLyBGb3IgZWRpdGluZyBwb3NpdGlvbnMgbGlrZSBbdGFibGUs
IDBdLCBpbnNlcnQgYmVmb3JlIHRoZSB0YWJsZSwKICAgICAvLyBsaWtld2lzZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMsIGJycywgZXRjLgotICAgIFBvc2l0aW9uIHAgPSByYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQoZWRpdGluZ1Bvc2l0aW9uKTsKKyAgICBQb3NpdGlvbiBwID0gcG9zaXRpb25Bdm9p
ZGluZ0lnbm9yZWRDb250ZW50KGVkaXRpbmdQb3NpdGlvbik7CiAgICAgTm9kZSogcmVmQ2hpbGQg
PSBwLm5vZGUoKTsKICAgICBpbnQgb2Zmc2V0ID0gcC5vZmZzZXQoKTsKICAgICAKQEAgLTc1NSwx
MyArNzU1LDEzIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJhZ3JhcGgp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJs
ZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHBvc2l0aW9uQXZvaWRpbmdJ
Z25vcmVkQ29udGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCBw
b3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkpKTsKICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChzdGFydFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBF
cXVpdmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQo
c3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcG9zaXRpb25Bdm9pZGlu
Z0lnbm9yZWRDb250ZW50KHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgICAgICAg
ICAgICAgIGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5nZXQo
KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc3Niw4ICs3NzYsOCBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKICAgICAKICAgICAvLyBzdGFydCBh
bmQgZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRlIGEgUmFuZ2U7IHRoZXkgYXJl
ICJlZGl0aW5nIHBvc2l0aW9ucyIKLSAgICBQb3NpdGlvbiBzdGFydFJhbmdlQ29tcGxpYW50ID0g
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0KTsKLSAgICBQb3NpdGlvbiBlbmRSYW5nZUNv
bXBsaWFudCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpOworICAgIFBvc2l0aW9uIHN0
YXJ0UmFuZ2VDb21wbGlhbnQgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoc3RhcnQp
OworICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9y
ZWRDb250ZW50KGVuZCk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5ub2RlKCksIHN0YXJ0UmFuZ2VDb21wbGlh
bnQub2Zmc2V0KCksIGVuZFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgZW5kUmFuZ2VDb21wbGlhbnQu
b2Zmc2V0KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZpY2llbnQgd2F5IHRv
IHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8gbW92ZS4gIEl0IApA
QCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIHVwZGF0
ZUxheW91dCgpOwogICAgIH0KICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFRvRGVz
dGluYXRpb25SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIFBvc2l0aW9uKGRvY3VtZW50
KCksIDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKSkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlKFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgUG9zaXRpb24oZG9jdW1lbnQoKSwgMCksIHBvc2l0aW9uQXZv
aWRpbmdJZ25vcmVkQ29udGVudChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkpOwogICAg
IGRlc3RpbmF0aW9uSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0VG9EZXN0
aW5hdGlvblJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZGVzdGluYXRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IGU4Yjc0OGIuLmY3N2M2ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTIzOCwxNCArMjM4LDE0IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6aW5pdGlhbGl6ZVBvc2l0aW9uRGF0YSgpCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgLy8gV2UgbXVzdCBwYXNzIHRoZSBwb3NpdGlvbnMgdGhyb3VnaCByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQsIHNpbmNlIHNvbWUgZWRpdGluZyBwb3NpdGlvbnMKKyAgICAvLyBXZSBtdXN0
IHBhc3MgdGhlIHBvc2l0aW9ucyB0aHJvdWdoIHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVu
dCwgc2luY2Ugc29tZSBlZGl0aW5nIHBvc2l0aW9ucwogICAgIC8vIHRoYXQgYXBwZWFyIGluc2lk
ZSB0aGVpciBub2RlcyBhcmVuJ3QgcmVhbGx5IGluc2lkZSB0aGVtLiAgW2hyLCAwXSBpcyBvbmUg
ZXhhbXBsZS4KICAgICAvLyBGSVhNRTogcmFuZ2VDb21wbGFpbnRFcXVpdmFsZW50IHNob3VsZCBl
dmVudHVhbGx5IGJlIG1vdmVkIGludG8gZW5jbG9zaW5nIGVsZW1lbnQgZ2V0dGVycwogICAgIC8v
IGxpa2UgdGhlIG9uZSBiZWxvdywgc2luY2UgZWRpdGluZyBmdW5jdGlvbnMgc2hvdWxkIG9idmlv
dXNseSBhY2NlcHQgZWRpdGluZyBwb3NpdGlvbnMuCiAgICAgLy8gRklYTUU6IFBhc3NpbmcgZmFs
c2UgdG8gZW5jbG9zaW5nTm9kZU9mVHlwZSB0ZWxscyBpdCB0aGF0IGl0J3MgT0sgdG8gcmV0dXJu
IGEgbm9uLWVkaXRhYmxlCiAgICAgLy8gbm9kZS4gIFRoaXMgd2FzIGRvbmUgdG8gbWF0Y2ggZXhp
c3RpbmcgYmVoYXZpb3IsIGJ1dCBpdCBzZWVtcyB3cm9uZy4KLSAgICBtX3N0YXJ0QmxvY2sgPSBl
bmNsb3NpbmdOb2RlT2ZUeXBlKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtX2Rvd25zdHJlYW1T
dGFydCksICZpc0Jsb2NrLCBmYWxzZSk7Ci0gICAgbV9lbmRCbG9jayA9IGVuY2xvc2luZ05vZGVP
ZlR5cGUocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fdXBzdHJlYW1FbmQpLCAmaXNCbG9jaywg
ZmFsc2UpOworICAgIG1fc3RhcnRCbG9jayA9IGVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25B
dm9pZGluZ0lnbm9yZWRDb250ZW50KG1fZG93bnN0cmVhbVN0YXJ0KSwgJmlzQmxvY2ssIGZhbHNl
KTsKKyAgICBtX2VuZEJsb2NrID0gZW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlvbkF2b2lkaW5n
SWdub3JlZENvbnRlbnQobV91cHN0cmVhbUVuZCksICZpc0Jsb2NrLCBmYWxzZSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNTk5LDggKzU5OSw4
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnRPZlBhcmFn
cmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVu
ZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHBvc2l0
aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVp
dmFsZW50KCkpLCBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoZW5kT2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVw
bGFjZWQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVk
Q29udGVudChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpLCBwb3NpdGlvbkF2b2lk
aW5nSWdub3JlZENvbnRlbnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSk7CiAg
ICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNob3VsZE1v
dmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLmdldCgpLCByYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTY5NywxMyArNjk3LDEzIEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpCiB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQogewogICAgIG1f
c2VsZWN0aW9uVG9EZWxldGUgPSBWaXNpYmxlU2VsZWN0aW9uKCk7Ci0gICAgbV91cHN0cmVhbVN0
YXJ0LmNsZWFyKCk7Ci0gICAgbV9kb3duc3RyZWFtU3RhcnQuY2xlYXIoKTsKLSAgICBtX3Vwc3Ry
ZWFtRW5kLmNsZWFyKCk7Ci0gICAgbV9kb3duc3RyZWFtRW5kLmNsZWFyKCk7Ci0gICAgbV9lbmRp
bmdQb3NpdGlvbi5jbGVhcigpOwotICAgIG1fbGVhZGluZ1doaXRlc3BhY2UuY2xlYXIoKTsKLSAg
ICBtX3RyYWlsaW5nV2hpdGVzcGFjZS5jbGVhcigpOworICAgIG1fdXBzdHJlYW1TdGFydCA9IFBv
c2l0aW9uKCk7CisgICAgbV9kb3duc3RyZWFtU3RhcnQgPSBQb3NpdGlvbigpOworICAgIG1fdXBz
dHJlYW1FbmQgPSBQb3NpdGlvbigpOworICAgIG1fZG93bnN0cmVhbUVuZCA9IFBvc2l0aW9uKCk7
CisgICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKCk7CisgICAgbV9sZWFkaW5nV2hpdGVz
cGFjZSA9IFBvc2l0aW9uKCk7CisgICAgbV90cmFpbGluZ1doaXRlc3BhY2UgPSBQb3NpdGlvbigp
OwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAppbmRleCAxZWRjZGM2Li42YWNhY2Y3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDYzLDcgKzQ2Myw3
IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJv
b2wmIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJlCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCkpIHsKICAgICAgICAgZW5kID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLmVuZCgpLnVwc3RyZWFtKCk7CiAKLSAgICAgICAgTm9kZSogcGFzdExhc3QgPSBSYW5n
ZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChw
b3MpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKSktPnBhc3RMYXN0Tm9kZSgpOworICAg
ICAgICBOb2RlKiBwYXN0TGFzdCA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
cG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHBvcyksIHBvc2l0aW9uQXZvaWRpbmdJZ25v
cmVkQ29udGVudChlbmQpKS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIGZvciAoTm9kZSogbiA9
IG5vZGU7IG4gJiYgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewog
ICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTE1ODYsNyArMTU4Niw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgUG9z
aXRpb24gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChw
b3NpdGlvbik7CisgICAgICAgIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50UG9zaXRpb24gPSBwb3Np
dGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQocG9zaXRpb24pOwogICAgICAgICBzcGVsbGluZ1Nl
YXJjaFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLm5vZGUoKSwgcmFuZ2VD
b21wbGlhbnRQb3NpdGlvbi5vZmZzZXQoKSwgZWMpOwogICAgICAgICBzdGFydGVkV2l0aFNlbGVj
dGlvbiA9IGZhbHNlOyAgIC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCAxODFhOTFiLi43YTM0NjY4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC04MSw3ICs4
MSw3IEBAIGJvb2wgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6c2hvdWxkVXNlQnJlYWtFbGVtZW50
KGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRpb25Qb3MpCiAgICAgLy8gQW4gZWRpdGluZyBwb3NpdGlv
biBsaWtlIFtpbnB1dCwgMF0gYWN0dWFsbHkgcmVmZXJzIHRvIHRoZSBwb3NpdGlvbiBiZWZvcmUK
ICAgICAvLyB0aGUgaW5wdXQgZWxlbWVudCwgYW5kIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNo
ZWNrIHRoZSBpbnB1dCBlbGVtZW50J3MKICAgICAvLyBwYXJlbnQncyByZW5kZXJlci4KLSAgICBQ
b3NpdGlvbiBwKHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChpbnNlcnRpb25Qb3MpKTsKKyAgICBQ
b3NpdGlvbiBwKHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChpbnNlcnRpb25Qb3MpKTsK
ICAgICByZXR1cm4gcC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgIXAubm9kZSgpLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IGI4MTQ4OWUuLmEw
YTA2YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5jcHAKQEAgLTExOCw4ICsxMTgsOCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBhZmZpbml0eSA9IGVuZGluZ1NlbGVj
dGlvbigpLmFmZmluaXR5KCk7CiAgICAgfQogICAgIAotICAgIC8vIEZJWE1FOiBUaGUgcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50IGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgbW92ZWQgaW50byBlbmNs
b3NpbmdCbG9jay4KLSAgICBOb2RlKiBzdGFydEJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKHJh
bmdlQ29tcGxpYW50RXF1aXZhbGVudChwb3MpLm5vZGUoKSk7CisgICAgLy8gRklYTUU6IFRoZSBw
b3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQgY29udmVyc2lvbiBuZWVkcyB0byBiZSBtb3Zl
ZCBpbnRvIGVuY2xvc2luZ0Jsb2NrLgorICAgIE5vZGUqIHN0YXJ0QmxvY2tOb2RlID0gZW5jbG9z
aW5nQmxvY2socG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHBvcykubm9kZSgpKTsKICAg
ICBQb3NpdGlvbiBjYW5vbmljYWxQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zKS5kZWVwRXF1aXZh
bGVudCgpOwogICAgIEVsZW1lbnQqIHN0YXJ0QmxvY2sgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
c3RhcnRCbG9ja05vZGUpOwogICAgIGlmICghc3RhcnRCbG9ja05vZGUKQEAgLTE1Miw3ICsxNTIs
NyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IC8vIFByZXBhcmUgZm9yIG1vcmUgZ2VuZXJhbCBjYXNlcy4KICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IHBlZWwgb2ZmIHRoZSBub2RlIGhlcmUgYmVjYXVzZSB0aGVuIHdlIGxvc2UgdHJhY2sg
b2YKICAgICAvLyB0aGUgZmFjdCB0aGF0IGl0J3MgdGhlIG5vZGUgdGhhdCBiZWxvbmdzIHRvIGFu
IGVkaXRpbmcgcG9zaXRpb24gYW5kCi0gICAgLy8gbm90IGEgcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50LgorICAgIC8vIG5vdCBhIHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudC4KICAgICBO
b2RlICpzdGFydE5vZGUgPSBwb3Mubm9kZSgpOwogCiAgICAgYm9vbCBpc0ZpcnN0SW5CbG9jayA9
IGlzU3RhcnRPZkJsb2NrKHZpc2libGVQb3MpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYTE2YzQ5YS4uMWFmYTlhYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MzksNyArNTM5LDcgQEAgc3Rh
dGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbihSZXBsYWNlbWVudEZyYWdt
ZW50JiBmcmFnbWVudCwgY29uc3QKICAgICBOb2RlKiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiA9
IHRvcE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IGNvcGllZFJhbmdlU3R5bGVTcGFuID0gc291cmNl
RG9jdW1lbnRTdHlsZVNwYW4tPmZpcnN0Q2hpbGQoKTsKICAgICAKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlQXRJbnNlcnRpb25Qb3MgPSByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQoaW5zZXJ0aW9uUG9zKS5jb21wdXRlZFN0eWxlKCktPmNvcHlJbmhlcml0YWJs
ZVByb3BlcnRpZXMoKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlQXRJbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoaW5zZXJ0
aW9uUG9zKS5jb21wdXRlZFN0eWxlKCktPmNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKICAg
ICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdEluc2VydGlvblBvcy0+Y3NzVGV4dCgpOwogICAg
IAogICAgIGlmIChzdHlsZVRleHQgPT0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNvdXJjZURvY3Vt
ZW50U3R5bGVTcGFuKS0+Z2V0QXR0cmlidXRlKHN0eWxlQXR0cikpIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKaW5kZXggNTc5OWZmNC4uNWNkZDdmNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAKQEAgLTM4Niw3ICszODYsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJs
ZVBvc2l0aW9uOjpyaWdodChib29sIHN0YXlJbkVkaXRhYmxlQ29udGVudCkgY29uc3QKICAgICBy
ZXR1cm4gaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKHJpZ2h0KTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckJlZm9y
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykgY29uc3QKK1Zpc2libGVQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246Omhvbm9yRWRpdGFibGVCb3VuZGFyeUF0T3JCZWZvcmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3MpIGNvbnN0CiB7CiAgICAgaWYgKHBvcy5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIHBvczsKQEAgLTQxMiw3ICs0MTIsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBv
c2l0aW9uOjpob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKGNvbnN0IFZpc2libGVQbwog
ICAgIHJldHVybiBsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KHBvcy5k
ZWVwRXF1aXZhbGVudCgpLCBoaWdoZXN0Um9vdCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246Omhvbm9yRWRpdGFibGVCb3VuZGFyeUF0T3JBZnRlcihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnBvcykgY29uc3QKK1Zpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhv
bm9yRWRpdGFibGVCb3VuZGFyeUF0T3JBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykg
Y29uc3QKIHsKICAgICBpZiAocG9zLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gcG9zOwpAQCAt
NTkxLDU3ICs1OTEsNTQgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246OnNob3dUcmVlRm9yVGhpcygp
IGNvbnN0CiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZlbmQpCitQYXNzUmVm
UHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlU3RhcnQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZUVuZCkKIHsKLSAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgIGlmICh2aXNpYmxlU3RhcnQuaXNOdWxsKCkgfHwg
dmlzaWJsZUVuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUG9zaXRp
b24gcyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydCk7Ci0gICAgUG9zaXRpb24gZSA9
IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRl
KHMubm9kZSgpLT5kb2N1bWVudCgpLCBzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUu
b2Zmc2V0KCkpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRD
b250ZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBQb3NpdGlvbiBlbmQg
PSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVu
dCgpKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRvY3VtZW50KCks
IHN0YXJ0LCBlbmQpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKK1Zpc2libGVQb3NpdGlvbiBzdGFy
dFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSogciwgRUFmZmluaXR5IGFmZmluaXR5KQogewot
ICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3Rh
cnRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5p
dHkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3RhcnRDb250YWluZXIoKSwgci0+
c3RhcnRPZmZzZXQoKSwgYWZmaW5pdHkpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCitWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiByLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiB7Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihyLT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGFm
ZmluaXR5KTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZENvbnRhaW5lcigpLCBy
LT5lbmRPZmZzZXQoKSwgYWZmaW5pdHkpOwogfQogCi1ib29sIHNldFN0YXJ0KFJhbmdlICpyLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKK2Jvb2wgc2V0U3RhcnQoUmFu
Z2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAg
ICBpZiAoIXIpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBv
c2l0aW9uIHAgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZVBvc2l0aW9uKTsKLSAg
ICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0U3RhcnQocC5ub2RlKCksIHAub2Zmc2V0KCksIGNv
ZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBwb3Np
dGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJhbmdlLT5zZXRTdGFydChwb3Np
dGlvbi5ub2RlKCksIHBvc2l0aW9uLm9mZnNldCgpLCBlYyk7CisgICAgcmV0dXJuIGVjID09IDA7
CiB9CiAKLWJvb2wgc2V0RW5kKFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2li
bGVQb3NpdGlvbikKK2Jvb2wgc2V0RW5kKFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBwID0gcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KHZpc2libGVQb3NpdGlvbik7Ci0gICAgaW50IGNvZGUgPSAwOwotICAgIHItPnNldEVu
ZChwLm5vZGUoKSwgcC5vZmZzZXQoKSwgY29kZSk7Ci0gICAgcmV0dXJuIGNvZGUgPT0gMDsKKyAg
ICBQb3NpdGlvbiBwb3NpdGlvbiA9IHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudCh2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5ub2RlKCksIHBvc2l0aW9uLm9mZnNldCgpLCBl
Yyk7CisgICAgcmV0dXJuIGVjID09IDA7CiB9CiAKLU5vZGUgKmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitOb2RlKiBlbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKIH0K
IAotYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBOb2RlICpub2RlKQorYm9vbCBpc0ZpcnN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBj
b25zdCBOb2RlKiBub2RlKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1Myw3ICs2NTAsNyBAQCBib29sIGlzRmlyc3RWaXNp
YmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24s
IGNvbnN0CiAgICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CiAKLWJvb2wgaXNMYXN0
VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0
aW9uLCBjb25zdCBOb2RlICpub2RlKQorYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGUqIG5vZGUp
CiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IDQwM2M4MTYuLmY2ZjhiNzYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTU1LDcgKzU1LDkgQEAgcHVibGljOgogICAg
IFZpc2libGVQb3NpdGlvbihOb2RlKiwgaW50IG9mZnNldCwgRUFmZmluaXR5KTsKICAgICBWaXNp
YmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkgPSBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fZGVlcFBvc2l0aW9uLmNsZWFyKCk7IH0KKyAg
ICAvLyBGSVhNRTogY2xlYXIoKSBmdW5jdGlvbnMgYXJlIGVycm9yLXByb25lIGFuZCBtYWtlIGxp
dHRsZSBzZW5zZSBmb3IgUE9EIHR5cGVzLgorICAgIC8vIEFsbCBjYWxsZXJzIHNob3VsZCBjaGFu
Z2UgdG8gdXNlIHZpc1Bvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgdm9pZCBjbGVh
cigpIHsgbV9kZWVwUG9zaXRpb24gPSBQb3NpdGlvbigpOyB9CiAKICAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc05v
dE51bGwoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKTsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IGI5OWY0MWMuLmUzZjAyMDIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTEyNyw4ICsxMjcsOCBAQCBQYXNzUmVm
UHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKIHsKICAgICBp
ZiAoaXNOb25lKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KG1fc3RhcnQpOwotICAgIFBvc2l0aW9uIGVuZCA9IHJhbmdl
Q29tcGxpYW50RXF1aXZhbGVudChtX2VuZCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBwb3NpdGlv
bkF2b2lkaW5nSWdub3JlZENvbnRlbnQobV9zdGFydCk7CisgICAgUG9zaXRpb24gZW5kID0gcG9z
aXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KG1fZW5kKTsKICAgICByZXR1cm4gUmFuZ2U6OmNy
ZWF0ZShzdGFydC5ub2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogfQogCkBAIC0xNTIs
NyArMTUyLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxp
emVkUmFuZ2UoKSBjb25zdAogICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQs
IG1vdmUgdGhlIHJhbmdlIHN0YXJ0IHVwc3RyZWFtLiBUaGlzIGhlbHBzIHVzIG1hdGNoCiAgICAg
ICAgIC8vIHRoZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBtYWtl
IHN0eWxlIGRldGVybWluYXRpb25zIGJhc2VkCiAgICAgICAgIC8vIG9uIHRoZSBjaGFyYWN0ZXIg
YmVmb3JlIHRoZSBjYXJldCwgaWYgYW55LiAKLSAgICAgICAgcyA9IHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChtX3N0YXJ0LnVwc3RyZWFtKCkpOworICAgICAgICBzID0gcG9zaXRpb25Bdm9pZGlu
Z0lnbm9yZWRDb250ZW50KG1fc3RhcnQudXBzdHJlYW0oKSk7CiAgICAgICAgIGUgPSBzOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgc2VsZWN0
IHRoZSBtaW5pbXVtIHJhbmdlIHRoYXQgZW5jb21wYXNzZXMgdGhlIHNlbGVjdGlvbi4KQEAgLTE3
Niw4ICsxNzYsOCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1h
bGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgICAgICBzID0gZTsKICAgICAgICAgICAgIGUgPSB0
bXA7CiAgICAgICAgIH0KLSAgICAgICAgcyA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzKTsK
LSAgICAgICAgZSA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlKTsKKyAgICAgICAgcyA9IHBv
c2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChzKTsKKyAgICAgICAgZSA9IHBvc2l0aW9uQXZv
aWRpbmdJZ25vcmVkQ29udGVudChlKTsKICAgICB9CiAKICAgICAvLyBWaXNpYmxlU2VsZWN0aW9u
cyBhcmUgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxs
IEFTU0VSVApAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBtYWtl
U2VhcmNoUmFuZ2UoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJj
aFJhbmdlKFJhbmdlOjpjcmVhdGUoZCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0g
ICAgUG9zaXRpb24gc3RhcnQocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHBvcykpOworICAgIFBv
c2l0aW9uIHN0YXJ0KHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChwb3MpKTsKICAgICBz
ZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7CiAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCksIGVjKTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAKaW5kZXggNTA3ZThjMC4uYWRiZjY1NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCkBAIC0zMDksNTkgKzMwOSw0NSBAQCBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2Rl
KiBub2RlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZU9m
VHlwZShQb3NpdGlvbihub2RlLCAwKSwgaXNCbG9jaykpOwogfQogCi0vLyBJbnRlcm5hbGx5IGVk
aXRpbmcgdXNlcyAiaW52YWxpZCIgcG9zaXRpb25zIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICBG
b3IKLS8vIGV4YW1wbGUsIGluIDxkaXY+PGltZyAvPjwvZGl2PiwgRWRpdGluZyBtaWdodCB1c2Ug
KGltZywgMSkgZm9yIHRoZSBwb3NpdGlvbgotLy8gYWZ0ZXIgPGltZz4sIGJ1dCB3ZSBoYXZlIHRv
IGNvbnZlcnQgdGhhdCB0byAoZGl2LCAxKSBiZWZvcmUgaGFuZGluZyB0aGUKLS8vIHBvc2l0aW9u
IHRvIGEgUmFuZ2Ugb2JqZWN0LiAgSWRlYWxseSBhbGwgaW50ZXJuYWwgcG9zaXRpb25zIHNob3Vs
ZAotLy8gYmUgInJhbmdlIGNvbXBsaWFudCIgZm9yIHNpbXBsaWNpdHkuCi1Qb3NpdGlvbiByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgUG9zaXRpb24mIHBvcykKLXsKLSAgICBpZiAocG9z
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKKy8vIENyZWF0ZSBhIGRvbS1j
b21wbGlhbnQgcG9zaXRpb24gd2hpY2ggaXMgb3V0c2lkZSBvZiBhbnkgaWdub3JlZCBjb250ZW50
CisvLyBBbHNvIHBvc2l0aW9ucyBqdXN0IGluc2lkZSBhIDx0YWJsZT4gYXJlIG1hcHBlZCB0byBv
dXRzaWRlIHRoZSB0YWJsZS4KKy8vIEZJWE1FOiBUaGlzIGNvbWJpbmVzIGJvdGggYXZvaWRpbmcg
dGFibGVzIGFuZCBhdm9pZGluZyBpZ25vcmVkIG5vZGVzLAorLy8gdGhvc2Ugc2hvdWxkIHByb2Jh
Ymx5IGJlIHNlcGFyYXRlIGZ1bmN0aW9ucy4KKy8vIEZJWE1FOiBTcGxpdCBvdXQgcGFydCBvZiB0
aGlzIGludG8gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlPworUG9zaXRpb24g
cG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KGNvbnN0IFBvc2l0aW9uJiBvcmlnaW5hbFBv
c2l0aW9uKQoreworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gb3JpZ2luYWxQb3NpdGlvbi50b1Jh
bmdlQ29tcGxpYW50RXF1aXZhbGVudCgpOworICAgIGludCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZz
ZXQoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIEFTU0VSVChvZmZz
ZXQgPj0gMCk7CiAKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKyAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKIAotICAgIGlmIChwb3Mub2Zm
c2V0KCkgPD0gMCkgeworICAgIGlmIChvZmZzZXQgPT0gMCkgewogICAgICAgICBpZiAobm9kZS0+
cGFyZW50Tm9kZSgpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgfHwgaXNUYWJsZUVs
ZW1lbnQobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2Rl
KTsKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIDApOworICAgICAgICByZXR1cm4gcG9z
aXRpb247CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKQotICAg
ICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbWluKG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgp
LCBwb3Mub2Zmc2V0KCkpKTsKLQotICAgIGludCBtYXhDb21wbGlhbnRPZmZzZXQgPSBub2RlLT5j
aGlsZE5vZGVDb3VudCgpOwotICAgIGlmIChwb3Mub2Zmc2V0KCkgPiBtYXhDb21wbGlhbnRPZmZz
ZXQpIHsKLSAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBwb3NpdGlvbkFmdGVyTm9kZShub2RlKTsKLQotICAgICAgICAvLyB0aGVyZSBpcyBubyBvdGhl
ciBvcHRpb24gYXQgdGhpcyBwb2ludCB0aGFuIHRvCi0gICAgICAgIC8vIHVzZSB0aGUgaGlnaGVz
dCBhbGxvd2VkIHBvc2l0aW9uIGluIHRoZSBub2RlCi0gICAgICAgIHJldHVybiBQb3NpdGlvbihu
b2RlLCBtYXhDb21wbGlhbnRPZmZzZXQpOwotICAgIH0gCi0KLSAgICAvLyBFZGl0aW5nIHNob3Vs
ZCBuZXZlciBnZW5lcmF0ZSBwb3NpdGlvbnMgbGlrZSB0aGlzLgotICAgIGlmICgocG9zLm9mZnNl
dCgpIDwgbWF4Q29tcGxpYW50T2Zmc2V0KSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkp
IHsKKyAgICAvLyBFZGl0aW5nIHNob3VsZCBuZXZlciBnZW5lcmF0ZSBwb3NpdGlvbnMgaW5zaWRl
IGlnbm9yZWQgbm9kZXMuCisgICAgaW50IG9mZnNldEFmdGVyTGFzdENoaWxkID0gbm9kZS0+Y2hp
bGROb2RlQ291bnQoKTsKKyAgICBpZiAoKG9mZnNldCA8IG9mZnNldEFmdGVyTGFzdENoaWxkKSAm
JiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiBub2RlLT5wYXJlbnROb2RlKCkgPyBwb3NpdGlvbkJlZm9y
ZU5vZGUobm9kZSkgOiBQb3NpdGlvbihub2RlLCAwKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHBv
cy5vZmZzZXQoKSA9PSBtYXhDb21wbGlhbnRPZmZzZXQgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVu
dChub2RlKSB8fCBpc1RhYmxlRWxlbWVudChub2RlKSkpCisKKyAgICBpZiAob2Zmc2V0ID09IG9m
ZnNldEFmdGVyTGFzdENoaWxkICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgfHwgaXNU
YWJsZUVsZW1lbnQobm9kZSkpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUobm9k
ZSk7Ci0gICAgCi0gICAgcmV0dXJuIFBvc2l0aW9uKHBvcyk7Ci19CiAKLVBvc2l0aW9uIHJhbmdl
Q29tcGxpYW50RXF1aXZhbGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwb3MpCi17Ci0gICAg
cmV0dXJuIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2cG9zLmRlZXBFcXVpdmFsZW50KCkpOwor
ICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVh
dGUgcG9zaXRpb25zIGluIHRoZSBET00uIEl0IHJldHVybnMgdGhlIG1heGltdW0gdmFsaWQgb2Zm
c2V0CiAvLyBpbiBhIG5vZGUuICBJdCByZXR1cm5zIDEgZm9yIHNvbWUgZWxlbWVudHMgZXZlbiB0
aG91Z2ggdGhleSBkbyBub3QgaGF2ZSBjaGlsZHJlbiwgd2hpY2gKLS8vIGNyZWF0ZXMgdGVjaG5p
Y2FsbHkgaW52YWxpZCBET00gUG9zaXRpb25zLiAgQmUgc3VyZSB0byBjYWxsIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudAorLy8gY3JlYXRlcyB0ZWNobmljYWxseSBpbnZhbGlkIERPTSBQb3NpdGlv
bnMuICBCZSBzdXJlIHRvIGNhbGwgdG9SYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQKIC8vIG9uIGEg
UG9zaXRpb24gYmVmb3JlIHVzaW5nIGl0IHRvIGNyZWF0ZSBhIERPTSBSYW5nZSwgb3IgYW4gZXhj
ZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotaW50IG1heERlZXBPZmZzZXQoY29uc3QgTm9kZSAqbm9k
ZSkKK2ludCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5v
ZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTk0NSw4ICs5MzEsOCBAQCBpbnQgaW5kZXhGb3JWaXNp
YmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYg
KHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUG9zaXRp
b24gcCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3VtZW50KCksIFBvc2l0aW9uKHAu
bm9kZSgpLT5kb2N1bWVudCgpLCAwKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHApKTsKKyAg
ICBQb3NpdGlvbiBwID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24ocC5ub2RlKCktPmRvY3VtZW50
KCksIDApLCBwKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5n
ZXQoKSwgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggM2E3NTIzZS4uMGQzZTRh
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTQxLDExICs0MSwxMCBAQCBjbGFzcyBWaXNpYmxl
U2VsZWN0aW9uOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCi1Qb3Np
dGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgUG9zaXRpb24mKTsKLVBvc2l0aW9u
IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIGludCBt
YXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNBdG9taWNOb2RlKGNvbnN0IE5vZGUq
KTsKIGJvb2wgZWRpdGluZ0lnbm9yZXNDb250ZW50KGNvbnN0IE5vZGUqKTsKK1Bvc2l0aW9uIHBv
c2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZGUqKTsKIE5vZGUqIGhpZ2hlc3RFZGl0YWJs
ZVJvb3QoY29uc3QgUG9zaXRpb24mKTsKIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9z
aXRpb25BZnRlclBvc2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0aW9uJiwgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDViYTljNGEuLjEwZDM1OTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAKQEAgLTQxLDM0ICs0MSwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNo
RnVuY3Rpb24pKGNvbnN0IFVDaGFyICosIHVuc2lnbmVkKSkKK3N0YXRpYyBWaXNpYmxlUG9zaXRp
b24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGNhbmRpZGF0ZVBvc2l0
aW9uLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkKSkK
IHsKLSAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbiA9
IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFuKQorICAgIFBvc2l0aW9uIHBvcyA9IGNhbmRpZGF0ZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgRG9j
dW1lbnQgKmQgPSBuLT5kb2N1bWVudCgpOwotICAgIE5vZGUgKmRlID0gZC0+ZG9jdW1lbnRFbGVt
ZW50KCk7Ci0gICAgaWYgKCFkZSkKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1
bWVudCgpOworICAgIE5vZGUqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbigpOwotICAgIE5vZGUgKmJvdW5kYXJ5ID0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOworICAgIE5vZGUqIGJvdW5kYXJ5ID0gbm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlID0gYm91bmRhcnktPmlzQ29udGVu
dEVkaXRhYmxlKCk7Ci0gICAgd2hpbGUgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICE9IGRlICYmIGJv
dW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgaXNDb250ZW50RWRpdGFibGUgPT0gYm91bmRhcnktPnBh
cmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICB3aGlsZSAoYm91bmRhcnkgJiYg
Ym91bmRhcnkgIT0gZG9jdW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYg
aXNDb250ZW50RWRpdGFibGUgPT0gYm91bmRhcnktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpOwogCi0g
ICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoUG9zaXRpb24oYm91
bmRhcnksIDApKTsKLSAgICBQb3NpdGlvbiBlbmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
cG9zKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkKTsK
LSAgICAKLSAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
c3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsKLSAgICBzZWFyY2hSYW5n
ZS0+c2V0RW5kKGVuZC5ub2RlKCksIGVuZC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAKLSAg
ICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb25Bdm9pZGlu
Z0lnbm9yZWRDb250ZW50KFBvc2l0aW9uKGJvdW5kYXJ5LCAwKSk7CisgICAgUG9zaXRpb24gZW5k
ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHBvcyk7CisgICAgUmVmUHRyPFJhbmdl
PiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHN0YXJ0LCBlbmQpOwogICAg
ICAgICAKICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdl
LmdldCgpKTsKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKQEAgLTkxLDEzICs4Mywx
MyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYQogICAgICAgICBpdC5hZHZhbmNlKCk7CiAgICAg
fQogICAgIAotICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gMCkgeworICAgIGlmIChpdC5h
dEVuZCgpICYmIG5leHQgPT0gMCkKICAgICAgICAgcG9zID0gaXQucmFuZ2UoKS0+c3RhcnRQb3Np
dGlvbigpOwotICAgIH0gZWxzZSBpZiAobmV4dCAhPSAwKSB7Ci0gICAgICAgIE5vZGUgKm5vZGUg
PSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOwotICAgICAgICBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCkt
PmlzQlIoKSkpCisgICAgZWxzZSBpZiAobmV4dCAhPSAwKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0
Q29udGFpbmVyID0gaXQucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKTsKKyAgICAgICAgaWYgKHN0
YXJ0Q29udGFpbmVyLT5pc1RleHROb2RlKCkgfHwgKHN0YXJ0Q29udGFpbmVyLT5yZW5kZXJlcigp
ICYmIHN0YXJ0Q29udGFpbmVyLT5yZW5kZXJlcigpLT5pc0JSKCkpKQogICAgICAgICAgICAgLy8g
VGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9k
ZQotICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9kZSwgbmV4dCk7CisgICAgICAgICAgICBw
b3MgPSBQb3NpdGlvbihzdGFydENvbnRhaW5lciwgbmV4dCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgLy8gVXNlIHRoZSBlbmQgb2YgdGhlIGZvdW5kIHJhbmdlLCB0aGUgc3RhcnQgaXMg
bm90IGd1YXJhbnRlZWQgdG8KICAgICAgICAgICAgIC8vIGJlIGNvcnJlY3QuCkBAIC0xMTMsMjUg
KzEwNSwyNSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYQogICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24ocG9zLCBET1dOU1RSRUFNKTsKIH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0
aW9uKShjb25zdCBVQ2hhciAqLCB1bnNpZ25lZCkpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5l
eHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGNhbmRpZGF0ZVBvc2l0aW9uLCB1bnNp
Z25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkKSkKIHsKLSAgICBQ
b3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbiA9IHBvcy5ub2Rl
KCk7Ci0gICAgaWYgKCFuKQorICAgIFBvc2l0aW9uIHBvcyA9IGNhbmRpZGF0ZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgRG9jdW1lbnQgKmQg
PSBuLT5kb2N1bWVudCgpOwotICAgIE5vZGUgKmRlID0gZC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0g
ICAgaWYgKCFkZSkKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwor
ICAgIE5vZGUqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwotICAgIE5vZGUgKmJvdW5kYXJ5ID0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OworICAgIE5vZGUqIGJvdW5kYXJ5ID0gbm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
ICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlID0gYm91bmRhcnktPmlzQ29udGVudEVkaXRhYmxl
KCk7Ci0gICAgd2hpbGUgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICE9IGRlICYmIGJvdW5kYXJ5LT5w
YXJlbnROb2RlKCkgJiYgaXNDb250ZW50RWRpdGFibGUgPT0gYm91bmRhcnktPnBhcmVudE5vZGUo
KS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICB3aGlsZSAoYm91bmRhcnkgJiYgYm91bmRhcnkg
IT0gZG9jdW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgJiYgaXNDb250ZW50
RWRpdGFibGUgPT0gYm91bmRhcnktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkK
ICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+cGFyZW50Tm9kZSgpOwogCi0gICAgUmVmUHRy
PFJhbmdlPiBzZWFyY2hSYW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKLSAgICBQb3NpdGlvbiBzdGFy
dChyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKSk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWFy
Y2hSYW5nZShkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKSk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBw
b3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQocG9zKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7
CiAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCks
IGVjKTsKQEAgLTE1Nyw5ICsxNDksOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3Vu
ZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNoRgogICAgICAg
ICBpdC5hZHZhbmNlKCk7CiAgICAgfQogICAgIAotICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQg
PT0gc3RyaW5nLnNpemUoKSkgeworICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5n
LnNpemUoKSkKICAgICAgICAgcG9zID0gaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwotICAg
IH0gZWxzZSBpZiAobmV4dCAhPSAwKSB7CisgICAgZWxzZSBpZiAobmV4dCAhPSAwKSB7CiAgICAg
ICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2
YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgogICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFy
SXQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgICAgICBjaGFySXQuYWR2YW5jZShuZXh0
IC0gMSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IGRlYWJkOTUuLmQwMTlhOTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01T
ZWxlY3Rpb24uY3BwCkBAIC02Myw3ICs2Myw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YW5jaG9y
Tm9kZSgpIGNvbnN0CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gYW5jaG9yID0g
c2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uc3RhcnQoKSA6IHNlbGVjdGlvbi5l
bmQoKTsKLSAgICBhbmNob3IgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoYW5jaG9yKTsKKyAg
ICBhbmNob3IgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoYW5jaG9yKTsKICAgICBy
ZXR1cm4gYW5jaG9yLm5vZGUoKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBOb2RlKiBET01TZWxl
Y3Rpb246OmJhc2VOb2RlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLmJhc2UoKSkubm9kZSgpOworICAgIHJldHVybiBwb3NpdGlv
bkF2b2lkaW5nSWdub3JlZENvbnRlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
LmJhc2UoKSkubm9kZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQoKSBj
b25zdApAQCAtODEsNyArODEsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQoKSBj
b25zdAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIGFuY2hvciA9IHNlbGVjdGlv
bi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5kKCk7Ci0g
ICAgYW5jaG9yID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcik7CisgICAgYW5jaG9y
ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KGFuY2hvcik7CiAgICAgcmV0dXJuIGFu
Y2hvci5vZmZzZXQoKTsKIH0KIApAQCAtODksNyArODksNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjpi
YXNlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLmJhc2UoKSkub2Zmc2V0KCk7CisgICAgcmV0dXJuIHBvc2l0aW9uQXZv
aWRpbmdJZ25vcmVkQ29udGVudChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuYmFz
ZSgpKS5vZmZzZXQoKTsKIH0KIAogTm9kZSogRE9NU2VsZWN0aW9uOjpmb2N1c05vZGUoKSBjb25z
dApAQCAtOTksNyArOTksNyBAQCBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0
CiAKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNC
YXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIGZv
Y3VzID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKKyAgICBmb2N1cyA9IHBvc2l0
aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChmb2N1cyk7CiAgICAgcmV0dXJuIGZvY3VzLm5vZGUo
KTsKIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9k
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKS5leHRlbnQoKSkubm9kZSgpOworICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nSWdu
b3JlZENvbnRlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmV4dGVudCgpKS5u
b2RlKCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KCkgY29uc3QKQEAgLTEx
Nyw3ICsxMTcsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjpmb2N1c09mZnNldCgpIGNvbnN0CiAKICAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNlRmly
c3QoKSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIGZvY3VzID0g
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKKyAgICBmb2N1cyA9IHBvc2l0aW9uQXZv
aWRpbmdJZ25vcmVkQ29udGVudChmb2N1cyk7CiAgICAgcmV0dXJuIGZvY3VzLm9mZnNldCgpOwog
fQogCkBAIC0xMjUsNyArMTI1LDcgQEAgaW50IERPTVNlbGVjdGlvbjo6ZXh0ZW50T2Zmc2V0KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLmV4dGVudCgpKS5vZmZzZXQoKTsKKyAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0lnbm9y
ZWRDb250ZW50KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5leHRlbnQoKSkub2Zm
c2V0KCk7CiB9CiAKIGJvb2wgRE9NU2VsZWN0aW9uOjppc0NvbGxhcHNlZCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4
IDIzZWJkM2MuLmRjMGQ0NmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDktMDItMjYgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgdG8gcG9z
aXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50CisgICAgICAgIEJyZWFrIG91dCBtb3N0IG9mIHRo
ZSBvbGQgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50IGxvZ2ljIGludG8gYQorICAgICAgICBuZXcg
UG9zaXRpb246OnRvUmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50IGNhbGwgd2hpY2ggb25seSBoYW5k
bGVzCisgICAgICAgIGNvbnZlcnN0aW9uIGZyb20gaW50ZXJuYWwgZWRpdGluZyBwb3NpdGlvbnMg
dG8gRE9NLWNvbXBsaWFudCBvbmVzLgorICAgICAgICAKKyAgICAgICAgSSBkaWQgKm5vdCogdHJ5
IHRvIHJlbW92ZSBtYW55IG9mIHRoZSBuZXcgKGFuZCBvYnZpb3VzbHkgd3Jvbmcgb3IKKyAgICAg
ICAgdW5lY2Vzc2FyeSkgY2FsbHMgdG8gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50LiAg
SSB0cmllZCB0byBkbworICAgICAgICBzbyBpbiB0d28gZWFybGllciBhdHRlbXB0cyBhdCB0aGlz
IHBhdGNoIGFuZCBmYWlsZWQgbWlzZXJhYmx5LgorICAgICAgICAKKyAgICAgICAgSSBhbHNvIG1h
ZGUgUmFuZ2U6OmNyZWF0ZShQb3NpdGlvbiwgUG9zaXRpb24pIGNhbGwKKyAgICAgICAgdG9SYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQgd2hpY2ggc29sdmVzIHRoZSBBU1NFUlQgbWVudGlvbmVkIGlu
OgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyMjEK
KyAgICAgICAgCisgICAgICAgIEkgYWxzbyBjbGVhbmVkIHVwIFBvc2l0aW9uIGEgbGl0dGxlIGJp
dCB0byBtYWtlIGl0IGEgcmVhbCBjbGFzcy4KKyAgICAgICAgUmVtb3ZlZCBQb3NpdGlvbjo6Y2xl
YXIoKSBhcyBjbGVhciBtZXRob2RzIGFyZSBlcnJvci1wcm9uZSBhbmQKKyAgICAgICAgb3Zlci1r
aWxsIGZvciBQT0QtdHlwZXMuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6CisK
IDIwMDktMDItMjUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
ZWYxMmJhYi4uNzVlMDk1NyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODE5LDEzICs4MTks
MTAgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCiAgICAgaWYgKG5ld0VuZC5pc051bGwoKSkKICAgICAgICAgbmV3RW5kID0g
ZW5kOwogCi0gICAgbmV3U3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobmV3U3RhcnQp
OwotICAgIG5ld0VuZCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChuZXdFbmQpOworICAgIG5l
d1N0YXJ0ID0gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KG5ld1N0YXJ0KTsKKyAgICBu
ZXdFbmQgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQobmV3RW5kKTsKIAotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOwotICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChu
ZXdTdGFydC5ub2RlKCksIG5ld1N0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwotICAgIHJhbmdl
LT5zZXRFbmQobmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5kb2N1bWVudCgpLCBuZXdTdGFydCwgbmV3RW5kKTsKICAgICByZXR1cm4gW0RPTVJhbmdl
IF93cmFwUmFuZ2U6cmFuZ2UuZ2V0KCldOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28057</attachid>
            <date>2009-02-26 17:52:13 -0800</date>
            <delta_ts>2009-03-12 16:06:46 -0700</delta_ts>
            <desc>Clean up DOMSelection some</desc>
            <filename>Clean-up-DOMSelection-some.patch</filename>
            <type>text/plain</type>
            <size>9371</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NGViY2NhZTUzOThlNzgyMDA3NGNlNzgwNTEyYzFkMTU2YTRhMjM4OQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgzNmNiMTgu
LjYxNGQxNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEFkZCBtb3JlIGxvZ2dpbmcgdG8gdGhpcyB0ZXN0IHRv
IG1ha2UgaXQKKyAgICAgICAgZWFzaWVyIHRvIGRlYnVnIHdoZW4gaXQgYnJlYWtzLgorCisgICAg
ICAgICogZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stYmVmb3JlLWFuZC1hZnRlci10YWJsZS5odG1s
OgorCisyMDA5LTAyLTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBSZW5hbWUgcmFuZ2VDb21w
bGlhbnRFcXVpdmFsZW50IHRvIHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudAogICAgICAg
ICBCcmVhayBvdXQgbW9zdCBvZiB0aGUgb2xkIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCBsb2dp
YyBpbnRvIGEKICAgICAgICAgbmV3IFBvc2l0aW9uOjp0b1JhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dCBjYWxsIHdoaWNoIG9ubHkgaGFuZGxlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zZWxlY3Rpb24vY2xpY2stYmVmb3JlLWFuZC1hZnRlci10YWJsZS5odG1sIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vY2xpY2stYmVmb3JlLWFuZC1hZnRlci10YWJsZS5odG1sCmlu
ZGV4IDNjMDU5YjcuLmZhNDEwNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2Vs
ZWN0aW9uL2NsaWNrLWJlZm9yZS1hbmQtYWZ0ZXItdGFibGUuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9jbGljay1iZWZvcmUtYW5kLWFmdGVyLXRhYmxlLmh0bWwKQEAg
LTE5LDkgKzE5LDEwIEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CiAgICAgY29uc29sZS5hcHBl
bmRDaGlsZChsaSk7CiAgICAgbGkuYXBwZW5kQ2hpbGQodGV4dCk7CiB9Ci1pZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKK2lmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CiAgICAgbG9nKCJUaGlzIHRlc3QgdXNlcyB0aGUgZXZlbnRTZW5kZXIgdG8gZG8gbW91c2UgY2xp
Y2tzLiAgVG8gcnVuIGl0IG1hbnVhbGx5LCBjbGljayBhZnRlciB0aGUgdGFibGUsIHRoZSBjYXJl
dCBzaG91bGQgYXBwZWFyIHRoZXJlIChhbmQgbm90IGluc2lkZSB0aGUgdGFibGUpLiAgVGhlbiBj
bGljayBpbnNpZGUgdGhlIHRhYmxlLiAgVGhlIGNhcmV0IHNob3VsZCBhcHBlYXIgaW5zaWRlIGl0
LiIpOwotZWxzZSB7CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IGZ1bmN0aW9uKCkgeyB2YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsgbG9nKCJjbGljayBA
ICIgKyBldmVudC5jbGllbnRYICsgIiwgIiArIGV2ZW50LmNsaWVudFkgKyAiIGNhcmV0IGF0OiAi
ICsgcy5hbmNob3JOb2RlICsgIiwgIiArIHMuYW5jaG9yT2Zmc2V0KTsgfSwgdHJ1ZSk7Cit9IGVs
c2UgewogICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAg
dmFyIHMsIHgsIHksIGUsIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodDsKICAgICB0YWJsZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZSIpOwpAQCAtMzgsNyArMzksNyBAQCBlbHNlIHsK
ICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CiAgICAgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24o
KTsKICAgICBpZiAoIShzLmFuY2hvck5vZGUgPT0gZG9jdW1lbnQuYm9keSAmJiBzLmFuY2hvck9m
ZnNldCA9PSAxKSkKLSAgICAgICAgbG9nKCJGYWlsdXJlOiBDbGlja2luZyBhZnRlciB0aGUgdGFi
bGUgZGlkbid0IHB1dCB0aGUgY2FyZXQgYWZ0ZXIgaXQuIik7CisgICAgICAgIGxvZygiRmFpbHVy
ZTogQ2xpY2tpbmcgQCAiICsgeCArICIsICIgKyB5ICsgIiBhZnRlciB0aGUgdGFibGUgZGlkbid0
IHB1dCB0aGUgY2FyZXQgYWZ0ZXIgaXQuICBJbnN0ZWFkOiAiICsgcy5hbmNob3JOb2RlICsgIiwg
IiArIHMuYW5jaG9yT2Zmc2V0KTsKICAgICAKICAgICB4ID0gcmlnaHQgLSA1OwogICAgIHkgPSAo
dG9wICsgYm90dG9tKSAvIDI7CkBAIC00OCw3ICs0OSw3IEBAIGVsc2UgewogICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKICAgICBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgIGlmIChz
LmFuY2hvck5vZGUgPT0gZG9jdW1lbnQuYm9keSkKLSAgICAgICAgbG9nKCJGYWlsdXJlOiBDbGlj
a2luZyBpbnNpZGUgdGhlIHRhYmxlIHB1dCB0aGUgY2FyZXQgYmVmb3JlIG9yIGFmdGVyIGl0LiIp
OworICAgICAgICBsb2coIkZhaWx1cmU6IENsaWNraW5nIEAgIiArIHggKyAiLCAiICsgeSArICIg
aW5zaWRlIHRoZSB0YWJsZSBwdXQgdGhlIGNhcmV0IGJlZm9yZSBvciBhZnRlciBpdC4gIEluc3Rl
YWQ6ICIgKyBzLmFuY2hvck5vZGUgKyAiLCAiICsgcy5hbmNob3JPZmZzZXQpOwogICAgICAgICAK
ICAgICB4ID0gbGVmdCAtIDU7CiAgICAgeSA9ICh0b3AgKyBib3R0b20pIC8gMjsKQEAgLTU5LDcg
KzYwLDcgQEAgZWxzZSB7CiAgICAgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICBpZiAo
cy5hbmNob3JOb2RlICE9IHRhYmxlIHx8IHMuYW5jaG9yT2Zmc2V0ICE9IDApCiAgICAgaWYgKCEo
cy5hbmNob3JOb2RlID09IGRvY3VtZW50LmJvZHkgJiYgcy5hbmNob3JPZmZzZXQgPT0gMCkpCi0g
ICAgICAgIGxvZygiRmFpbHVyZTogQ2xpY2tpbmcgYmVmb3JlIHRoZSB0YWJsZSBzaG91bGQgYmUg
dGhlIGNhcmV0IGJlZm9yZSBpdC4iKTsKKyAgICAgICAgbG9nKCJGYWlsdXJlOiBDbGlja2luZyBA
ICIgKyB4ICsgIiwgIiArIHkgKyAiIGJlZm9yZSB0aGUgdGFibGUgc2hvdWxkIGJlIHRoZSBjYXJl
dCBiZWZvcmUgaXQuICBJbnN0ZWFkOiAiICsgcy5hbmNob3JOb2RlICsgIiwgIiArIHMuYW5jaG9y
T2Zmc2V0KTsKICAgICAgICAgCiAgICAgeCA9IGxlZnQgKyA1OwogICAgIHkgPSAodG9wICsgYm90
dG9tKSAvIDI7CkBAIC02OSw3ICs3MCw3IEBAIGVsc2UgewogICAgIGV2ZW50U2VuZGVyLm1vdXNl
VXAoKTsKICAgICBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgIGlmIChzLmFuY2hvck5v
ZGUgPT0gZG9jdW1lbnQuYm9keSkKLSAgICAgICAgbG9nKCJGYWlsdXJlOiBDbGlja2luZyBpbnNp
ZGUgdGhlIHRhYmxlIHB1dCB0aGUgY2FyZXQgYmVmb3JlIG9yIGFmdGVyIGl0LiIpOworICAgICAg
ICBsb2coIkZhaWx1cmU6IENsaWNraW5nIEAgIiArIHggKyAiLCAiICsgeSArICIgaW5zaWRlIHRo
ZSB0YWJsZSBwdXQgdGhlIGNhcmV0IGJlZm9yZSBvciBhZnRlciBpdC4gIEluc3RlYWQ6ICIgKyBz
LmFuY2hvck5vZGUgKyAiLCAiICsgcy5hbmNob3JPZmZzZXQpOwogfQogPC9zY3JpcHQ+CiA8L2Jv
ZHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZjI2MDk0Li4yMGFmZWNmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw2ICsx
LDMzIEBACiAyMDA5LTAyLTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIENsZWFu
IHVwIERPTVNlbGVjdGlvbiB0byB1c2Ugc29tZSBoZWxwZXIgZnVuY3Rpb25zCisgICAgICAgIG1h
a2luZyB0aGUgY29kZSBzbWFsbGVyLCBhbmQgbGVzcyBlcnJvci1wcm9uZS4KKyAgICAgICAgCisg
ICAgICAgIEkgdHJpZWQgbW92aW5nIERPTVNlbGVjdGlvbiBvZmYgb2YgcG9zaXRpb25Bdm9pZGlu
Z0lnbm9yZWRDb250ZW50CisgICAgICAgIGJ1dCBmYWlsZWQuICBWaXNpYmxlU2VsZWN0aW9uIGhv
bGRzIHBvc2l0aW9ucyBsaWtlICh0YWJsZSwgMSkgdG8gbWVhbgorICAgICAgICAiYWZ0ZXIgdGhl
IHRhYmxlIi4KKworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6dmlzaWJsZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjphbmNob3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1Bvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJhc2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleHRlbnRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
U2VsZWN0aW9uOjpmb2N1c09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OmJhc2VOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YmFzZU9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVudE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQpOgorICAgICAgICAqIHBhZ2UvRE9N
U2VsZWN0aW9uLmg6CisKKzIwMDktMDItMjYgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCiAgICAgICAgIFJlbmFt
ZSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQgdG8gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250
ZW50CiAgICAgICAgIEJyZWFrIG91dCBtb3N0IG9mIHRoZSBvbGQgcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50IGxvZ2ljIGludG8gYQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBkMDE5YTkyLi4wZDE1
YjRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtNTYsNzYgKzU2LDg4IEBAIHZvaWQgRE9NU2Vs
ZWN0aW9uOjpkaXNjb25uZWN0RnJhbWUoKQogICAgIG1fZnJhbWUgPSAwOwogfQogCi1Ob2RlKiBE
T01TZWxlY3Rpb246OmFuY2hvck5vZGUoKSBjb25zdAorY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
RE9NU2VsZWN0aW9uOjp2aXNpYmxlU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICByZXR1cm4g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworfQogCi0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
Oworc3RhdGljIFBvc2l0aW9uIGFuY2hvclBvc2l0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikKK3sKICAgICBQb3NpdGlvbiBhbmNob3IgPSBzZWxlY3Rpb24uaXNCYXNlRmly
c3QoKSA/IHNlbGVjdGlvbi5zdGFydCgpIDogc2VsZWN0aW9uLmVuZCgpOwotICAgIGFuY2hvciA9
IHBvc2l0aW9uQXZvaWRpbmdJZ25vcmVkQ29udGVudChhbmNob3IpOwotICAgIHJldHVybiBhbmNo
b3Iubm9kZSgpOworICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoYW5j
aG9yKTsKIH0KIAotTm9kZSogRE9NU2VsZWN0aW9uOjpiYXNlTm9kZSgpIGNvbnN0CitzdGF0aWMg
UG9zaXRpb24gZm9jdXNQb3NpdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
Cit7CisgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IHNlbGVj
dGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOworICAgIHJldHVybiBwb3NpdGlvbkF2b2lk
aW5nSWdub3JlZENvbnRlbnQoZm9jdXMpOworfQorCitzdGF0aWMgUG9zaXRpb24gYmFzZVBvc2l0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICByZXR1cm4gcG9z
aXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KHNlbGVjdGlvbi5iYXNlKCkpOworfQorCitzdGF0
aWMgUG9zaXRpb24gZXh0ZW50UG9zaXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQoreworICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoc2VsZWN0
aW9uLmV4dGVudCgpKTsKK30KKworTm9kZSogRE9NU2VsZWN0aW9uOjphbmNob3JOb2RlKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBw
b3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLmJhc2UoKSkubm9kZSgpOworICAgIHJldHVybiBhbmNob3JQb3NpdGlvbih2aXNpYmxl
U2VsZWN0aW9uKCkpLm5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotCi0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwotICAgIFBvc2l0aW9uIGFuY2hvciA9IHNlbGVjdGlvbi5pc0Jhc2VGaXJz
dCgpID8gc2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgYW5jaG9yID0g
cG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRDb250ZW50KGFuY2hvcik7Ci0gICAgcmV0dXJuIGFuY2hv
ci5vZmZzZXQoKTsKKyAgICByZXR1cm4gYW5jaG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigp
KS5vZmZzZXQoKTsKIH0KIAotaW50IERPTVNlbGVjdGlvbjo6YmFzZU9mZnNldCgpIGNvbnN0CitO
b2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1l
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0lnbm9yZWRD
b250ZW50KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5iYXNlKCkpLm9mZnNldCgp
OworICAgIHJldHVybiBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkubm9kZSgpOwog
fQogCi1Ob2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0CitpbnQgRE9NU2VsZWN0
aW9uOjpmb2N1c09mZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKLSAgICBQb3NpdGlvbiBmb2N1cyA9IHNlbGVj
dGlvbi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLmVuZCgpIDogc2VsZWN0aW9uLnN0YXJ0KCk7
Ci0gICAgZm9jdXMgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoZm9jdXMpOwotICAg
IHJldHVybiBmb2N1cy5ub2RlKCk7CisgICAgcmV0dXJuIGZvY3VzUG9zaXRpb24odmlzaWJsZVNl
bGVjdGlvbigpKS5vZmZzZXQoKTsKIH0KIAotTm9kZSogRE9NU2VsZWN0aW9uOjpleHRlbnROb2Rl
KCkgY29uc3QKK05vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5vZGUoKSBjb25zdAogewogICAgIGlm
ICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRp
bmdJZ25vcmVkQ29udGVudChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZXh0ZW50
KCkpLm5vZGUoKTsKKyAgICByZXR1cm4gYmFzZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSku
bm9kZSgpOwogfQogCi1pbnQgRE9NU2VsZWN0aW9uOjpmb2N1c09mZnNldCgpIGNvbnN0CitpbnQg
RE9NU2VsZWN0aW9uOjpiYXNlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBiYXNlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlv
bigpKS5vZmZzZXQoKTsKK30KIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKLSAgICBQb3NpdGlvbiBmb2N1
cyA9IHNlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLmVuZCgpIDogc2VsZWN0aW9u
LnN0YXJ0KCk7Ci0gICAgZm9jdXMgPSBwb3NpdGlvbkF2b2lkaW5nSWdub3JlZENvbnRlbnQoZm9j
dXMpOwotICAgIHJldHVybiBmb2N1cy5vZmZzZXQoKTsKK05vZGUqIERPTVNlbGVjdGlvbjo6ZXh0
ZW50Tm9kZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7CiB9
CiAKIGludCBET01TZWxlY3Rpb246OmV4dGVudE9mZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ln
bm9yZWRDb250ZW50KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5leHRlbnQoKSku
b2Zmc2V0KCk7CisgICAgcmV0dXJuIGV4dGVudFBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSku
b2Zmc2V0KCk7CiB9CiAKIGJvb2wgRE9NU2VsZWN0aW9uOjppc0NvbGxhcHNlZCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmggYi9XZWJDb3JlL3BhZ2UvRE9N
U2VsZWN0aW9uLmgKaW5kZXggNDg0YzA2OC4uNmE5MTRkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaApAQCAt
NDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmFuZ2U7CiAgICAg
Y2xhc3MgTm9kZTsKICAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTkxLDcgKzkyLDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIERPTVNlbGVjdGlv
bihGcmFtZSopOwotICAgICAgICAKKworICAgICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9y
IGFjY2Vzc29ycywgZG9lcyBub3QgTlVMTCBjaGVjayBtX2ZyYW1lLgorICAgICAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiB2aXNpYmxlU2VsZWN0aW9uKCkgY29uc3Q7CisKICAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CiAgICAgfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>