<?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>143600</bug_id>
          
          <creation_ts>2015-04-10 01:37:12 -0700</creation_ts>
          <short_desc>Use modern for-loops in Document</short_desc>
          <delta_ts>2015-04-13 22:49:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joonghun Park">jh718.park</reporter>
          <assigned_to name="Joonghun Park">jh718.park</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1084243</commentid>
    <comment_count>0</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 01:37:12 -0700</bug_when>
    <thetext>Use modern for-loops in Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084251</commentid>
    <comment_count>1</comment_count>
      <attachid>250507</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 02:09:15 -0700</bug_when>
    <thetext>Created attachment 250507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084272</commentid>
    <comment_count>2</comment_count>
      <attachid>250507</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-10 04:45:10 -0700</bug_when>
    <thetext>Comment on attachment 250507
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Use modern for-loops in Document

This title is misleading, I can&apos;t see any range-based 
loop, but replacing explicit types with autos.

&gt; Source/WebCore/dom/Document.cpp:4441
&gt; -    HashSet&lt;Element*&gt;::iterator end = m_privateBrowsingStateChangedElements.end();
&gt; -    for (HashSet&lt;Element*&gt;::iterator it = m_privateBrowsingStateChangedElements.begin(); it != end; ++it)
&gt; +    for (HashSet&lt;Element*&gt;::iterator it = m_privateBrowsingStateChangedElements.begin(), end = m_privateBrowsingStateChangedElements.end(); it != end; ++it)

why don&apos;t you use auto here similar to other places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084292</commentid>
    <comment_count>3</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 06:37:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250507 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250507&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Use modern for-loops in Document
&gt; 
&gt; This title is misleading, I can&apos;t see any range-based 
&gt; loop, but replacing explicit types with autos.
&gt; 
Oh, I mis-used the term &apos;modern for-loops&apos;. I will change the title to &apos;Replace explicit types with auto in Document&apos;. :)
&gt; &gt; Source/WebCore/dom/Document.cpp:4441
&gt; &gt; -    HashSet&lt;Element*&gt;::iterator end = m_privateBrowsingStateChangedElements.end();
&gt; &gt; -    for (HashSet&lt;Element*&gt;::iterator it = m_privateBrowsingStateChangedElements.begin(); it != end; ++it)
&gt; &gt; +    for (HashSet&lt;Element*&gt;::iterator it = m_privateBrowsingStateChangedElements.begin(), end = m_privateBrowsingStateChangedElements.end(); it != end; ++it)
&gt; 
&gt; why don&apos;t you use auto here similar to other places?
I will apply your comment :) Thank you~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084296</commentid>
    <comment_count>4</comment_count>
      <attachid>250517</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 07:02:45 -0700</bug_when>
    <thetext>Created attachment 250517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084320</commentid>
    <comment_count>5</comment_count>
      <attachid>250517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-10 09:24:42 -0700</bug_when>
    <thetext>Comment on attachment 250517
Patch

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

All of these *could* use modern for loops. And should.

&gt; Source/WebCore/dom/Document.cpp:3771
&gt;      HashSet&lt;NodeIterator*&gt; nodeIteratorsList = m_nodeIterators;

Really strange to call this “list” when it’s a set, not a list.

&gt; Source/WebCore/dom/Document.cpp:3772
&gt; +    for (auto it = nodeIteratorsList.begin(), nodeIteratorsEnd = nodeIteratorsList.end(); it != nodeIteratorsEnd; ++it) {

This could be converted to a modern for loop:

    for (auto&amp; iterator : nodeIteratorsList) {
        if (iterator-&gt;root() == node) {
            detachNodeIterator(iterator);

etc. Unless I am missing something.

&gt; Source/WebCore/dom/Document.cpp:3816
&gt; +    for (auto it = m_nodeIterators.begin(), nodeIteratorsEnd = m_nodeIterators.end(); it != nodeIteratorsEnd; ++it)

Same here.

&gt; Source/WebCore/dom/Document.cpp:3820
&gt; +        for (auto it = m_ranges.begin(), rangesEnd = m_ranges.end(); it != rangesEnd; ++it)

Same here.

&gt; Source/WebCore/dom/Document.cpp:3871
&gt; +        for (auto it = m_ranges.begin(), end = m_ranges.end(); it != end; ++it)

Same here.

&gt; Source/WebCore/dom/Document.cpp:4375
&gt; +    for (auto i = m_documentSuspensionCallbackElements.begin(), end = m_documentSuspensionCallbackElements.end(); i != end; ++i)

Same here.

&gt; Source/WebCore/dom/Document.cpp:4394
&gt; +    for (auto i = elements.begin(), end = elements.end(); i != end; ++i)

Same here.

&gt; Source/WebCore/dom/Document.cpp:4441
&gt; +    for (auto it = m_privateBrowsingStateChangedElements.begin(), end = m_privateBrowsingStateChangedElements.end(); it != end; ++it)

Same here.

&gt; Source/WebCore/dom/Document.cpp:4471
&gt; +    for (auto it = m_captionPreferencesChangedElements.begin(), end = m_captionPreferencesChangedElements.end(); it != end; ++it)

Same here.

&gt; Source/WebCore/dom/Document.cpp:5451
&gt; +    for (auto i = descendants.begin(); i != descendants.end(); ++i) {

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084436</commentid>
    <comment_count>6</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 18:30:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 250517 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250517&amp;action=review
&gt; 
&gt; All of these *could* use modern for loops. And should.
&gt; 
You&apos;re right. I revised all of the things in the previous patches and more than that.
 
&gt; &gt; Source/WebCore/dom/Document.cpp:3771
&gt; &gt;      HashSet&lt;NodeIterator*&gt; nodeIteratorsList = m_nodeIterators;
&gt; 
&gt; Really strange to call this “list” when it’s a set, not a list.
&gt; 
I changed list to set.
&gt; &gt; Source/WebCore/dom/Document.cpp:3772
&gt; &gt; +    for (auto it = nodeIteratorsList.begin(), nodeIteratorsEnd = nodeIteratorsList.end(); it != nodeIteratorsEnd; ++it) {
&gt; 
&gt; This could be converted to a modern for loop:
&gt; 
&gt;     for (auto&amp; iterator : nodeIteratorsList) {
&gt;         if (iterator-&gt;root() == node) {
&gt;             detachNodeIterator(iterator);
&gt; 
&gt; etc. Unless I am missing something.
&gt; 
Yepp, you&apos;re right. In addition I use auto* because its type is NodeInterator*.

&gt; &gt; Source/WebCore/dom/Document.cpp:3816
&gt; &gt; +    for (auto it = m_nodeIterators.begin(), nodeIteratorsEnd = m_nodeIterators.end(); it != nodeIteratorsEnd; ++it)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:3820
&gt; &gt; +        for (auto it = m_ranges.begin(), rangesEnd = m_ranges.end(); it != rangesEnd; ++it)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:3871
&gt; &gt; +        for (auto it = m_ranges.begin(), end = m_ranges.end(); it != end; ++it)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4375
&gt; &gt; +    for (auto i = m_documentSuspensionCallbackElements.begin(), end = m_documentSuspensionCallbackElements.end(); i != end; ++i)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4394
&gt; &gt; +    for (auto i = elements.begin(), end = elements.end(); i != end; ++i)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4441
&gt; &gt; +    for (auto it = m_privateBrowsingStateChangedElements.begin(), end = m_privateBrowsingStateChangedElements.end(); it != end; ++it)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4471
&gt; &gt; +    for (auto it = m_captionPreferencesChangedElements.begin(), end = m_captionPreferencesChangedElements.end(); it != end; ++it)
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:5451
&gt; &gt; +    for (auto i = descendants.begin(); i != descendants.end(); ++i) {
&gt; 
&gt; Same here.

Thank you for your kind review and teaching, Darin :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084438</commentid>
    <comment_count>7</comment_count>
      <attachid>250549</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 18:31:23 -0700</bug_when>
    <thetext>Created attachment 250549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084446</commentid>
    <comment_count>8</comment_count>
      <attachid>250553</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 18:46:15 -0700</bug_when>
    <thetext>Created attachment 250553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084449</commentid>
    <comment_count>9</comment_count>
      <attachid>250555</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 18:54:59 -0700</bug_when>
    <thetext>Created attachment 250555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084453</commentid>
    <comment_count>10</comment_count>
      <attachid>250555</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-10 19:04:25 -0700</bug_when>
    <thetext>Comment on attachment 250555
Patch

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

review- because of the mistake below where we do return instead of break; other comments are all just ways to slightly improve

&gt; Source/WebCore/dom/Document.cpp:2819
&gt; +            return;

This needs to be &quot;break&quot;, not &quot;return&quot;!

Also, I suggest putting it at the end of the loop body rather than the start; either is OK but I think it makes better logical sense at the end.

Or we could change it to only check after setting href or target like this:

    ... {
        href = &amp;value;
        if (target)
            break;
    }

    ... {
        target = &amp;value
        if (href)
            break;
    }

&gt; Source/WebCore/dom/Document.cpp:3773
&gt; +    HashSet&lt;NodeIterator*&gt; nodeIteratorsSet = m_nodeIterators;

Could use auto here; not sure it would be better. Could also change this to use copyToVector instead of copying into another set. I believe that would be more efficient than copying the set, although the code would read as less elegant.

&gt; Source/WebCore/dom/Document.cpp:3784
&gt;      if (!m_ranges.isEmpty()) {

This if statement should be removed. The loop in the body will already efficiently do nothing if m_ranges is empty.

&gt; Source/WebCore/dom/Document.cpp:3792
&gt;      if (!m_ranges.isEmpty()) {

This if statement should be removed. The loop in the body will already efficiently do nothing if m_ranges is empty.

&gt; Source/WebCore/dom/Document.cpp:3821
&gt;      if (!m_ranges.isEmpty()) {

This if statement should be removed. The loop in the body will already efficiently do nothing if m_ranges is empty.

&gt; Source/WebCore/dom/Document.cpp:3872
&gt;      if (!m_ranges.isEmpty()) {

This if statement should be removed. The loop in the body will already efficiently do nothing if m_ranges is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084466</commentid>
    <comment_count>11</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 20:22:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 250555 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250555&amp;action=review
&gt; 
&gt; review- because of the mistake below where we do return instead of break;
&gt; other comments are all just ways to slightly improve
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:2819
&gt; &gt; +            return;
&gt; 
&gt; This needs to be &quot;break&quot;, not &quot;return&quot;!
&gt; 
&gt; Also, I suggest putting it at the end of the loop body rather than the
&gt; start; either is OK but I think it makes better logical sense at the end.
&gt; 
&gt; Or we could change it to only check after setting href or target like this:
&gt; 
&gt;     ... {
&gt;         href = &amp;value;
&gt;         if (target)
&gt;             break;
&gt;     }
&gt; 
&gt;     ... {
&gt;         target = &amp;value
&gt;         if (href)
&gt;             break;
&gt;     }
&gt; 
Ouch, I corrected the mistake I made. And your suggestion is really cool :)
I applied your idea.
&gt; &gt; Source/WebCore/dom/Document.cpp:3773
&gt; &gt; +    HashSet&lt;NodeIterator*&gt; nodeIteratorsSet = m_nodeIterators;
&gt; 
&gt; Could use auto here; not sure it would be better. Could also change this to
&gt; use copyToVector instead of copying into another set. I believe that would
&gt; be more efficient than copying the set, although the code would read as less
&gt; elegant.
&gt; 
I revised it to use vector instead of HashSet. I agree with you that it will be more efficient than to use HashSet.
&gt; &gt; Source/WebCore/dom/Document.cpp:3784
&gt; &gt;      if (!m_ranges.isEmpty()) {
&gt; 
&gt; This if statement should be removed. The loop in the body will already
&gt; efficiently do nothing if m_ranges is empty.
&gt; 
I applied this change.
&gt; &gt; Source/WebCore/dom/Document.cpp:3792
&gt; &gt;      if (!m_ranges.isEmpty()) {
&gt; 
&gt; This if statement should be removed. The loop in the body will already
&gt; efficiently do nothing if m_ranges is empty.
&gt; 
I applied this change.
&gt; &gt; Source/WebCore/dom/Document.cpp:3821
&gt; &gt;      if (!m_ranges.isEmpty()) {
&gt; 
&gt; This if statement should be removed. The loop in the body will already
&gt; efficiently do nothing if m_ranges is empty.
&gt; 
I applied this change.
&gt; &gt; Source/WebCore/dom/Document.cpp:3872
&gt; &gt;      if (!m_ranges.isEmpty()) {
&gt; 
&gt; This if statement should be removed. The loop in the body will already
&gt; efficiently do nothing if m_ranges is empty.
I applied this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084468</commentid>
    <comment_count>12</comment_count>
      <attachid>250559</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 20:27:55 -0700</bug_when>
    <thetext>Created attachment 250559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084475</commentid>
    <comment_count>13</comment_count>
      <attachid>250561</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-10 21:24:44 -0700</bug_when>
    <thetext>Created attachment 250561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084516</commentid>
    <comment_count>14</comment_count>
      <attachid>250561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-11 08:19:38 -0700</bug_when>
    <thetext>Comment on attachment 250561
Patch

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

&gt; Source/WebCore/dom/Document.cpp:5017
&gt; +    for (auto it : m_textAutoSizedNodes) {

It would be more efficient to use auto&amp; here; using auto means we copy both the key and value each time. It’s not great to name the loop variable “it” because it’s not an iterator.

&gt; Source/WebCore/dom/Document.cpp:5018
&gt; +        RefPtr&lt;TextAutoSizingValue&gt; value = it.value;

I wonder why we use a RefPtr here instead of a raw pointer. Seems like it might be unneeded reference count churn. The only reason to use a RefPtr would be if there is some risk that adjustNodeSizes might cause the value to be released, but if it does, then we have a bigger problem because if m_textAutoSizedNodes is modified while we are iterating it we have a problem.

&gt; Source/WebCore/dom/Document.cpp:5029
&gt;      unsigned count = nodesForRemoval.size();
&gt;      for (unsigned i = 0; i &lt; count; i++)

This should use a modern for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084652</commentid>
    <comment_count>15</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-12 09:52:31 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 250561 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250561&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:5017
&gt; &gt; +    for (auto it : m_textAutoSizedNodes) {
&gt; 
&gt; It would be more efficient to use auto&amp; here; using auto means we copy both
&gt; the key and value each time. It’s not great to name the loop variable “it”
&gt; because it’s not an iterator.
&gt; 
I revised the name to keyValuePair instead of it.
&gt; &gt; Source/WebCore/dom/Document.cpp:5018
&gt; &gt; +        RefPtr&lt;TextAutoSizingValue&gt; value = it.value;
&gt; 
&gt; I wonder why we use a RefPtr here instead of a raw pointer. Seems like it
&gt; might be unneeded reference count churn. The only reason to use a RefPtr
&gt; would be if there is some risk that adjustNodeSizes might cause the value to
&gt; be released, but if it does, then we have a bigger problem because if
&gt; m_textAutoSizedNodes is modified while we are iterating it we have a problem.
&gt; 
When I see in the adjustNodeSizes(), it seems that there is no such place in which releases the value itself, so I think RefPtr was used because it&apos;s simply the type of the HashMap&apos;s value. I changed it to raw pointer to avoid refCount churn as you pointed out.
&gt; &gt; Source/WebCore/dom/Document.cpp:5029
&gt; &gt;      unsigned count = nodesForRemoval.size();
&gt; &gt;      for (unsigned i = 0; i &lt; count; i++)
&gt; 
&gt; This should use a modern for loop.
I changed this to use modern for loop.

Thank you for your review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084657</commentid>
    <comment_count>16</comment_count>
      <attachid>250610</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-12 10:12:07 -0700</bug_when>
    <thetext>Created attachment 250610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084673</commentid>
    <comment_count>17</comment_count>
      <attachid>250610</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-12 12:44:26 -0700</bug_when>
    <thetext>Comment on attachment 250610
Patch

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

&gt; Source/WebCore/dom/Document.cpp:6100
&gt; +    for (auto&amp; keyValuePair : *targets) {

I noticed that this loop’s body only accesses the keys, so it could be:

    for (auto&amp; key : targets-&gt;keys()) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084705</commentid>
    <comment_count>18</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-04-12 17:36:24 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 250610 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250610&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:6100
&gt; &gt; +    for (auto&amp; keyValuePair : *targets) {
&gt; 
&gt; I noticed that this loop’s body only accesses the keys, so it could be:
&gt; 
&gt;     for (auto&amp; key : targets-&gt;keys()) {

The type of EventTargetSet is HashCountedSet&lt;Node*&gt;, so keys() is not a member of HashCountedSet.
If we have a function which return the member HashMap like 
hashMap() { return m_impl; } in HashCountedSet, 
then it would be possible to write as following,
    for (auto* key : targets-&gt;hashMap().keys())
but currently there is no function in HashCountedSet.
IMHO, I couldn&apos;t find a way to apply your comment. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084807</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-13 08:40:20 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Comment on attachment 250610 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=250610&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Document.cpp:6100
&gt; &gt; &gt; +    for (auto&amp; keyValuePair : *targets) {
&gt; &gt; 
&gt; &gt; I noticed that this loop’s body only accesses the keys, so it could be:
&gt; &gt; 
&gt; &gt;     for (auto&amp; key : targets-&gt;keys()) {
&gt; 
&gt; The type of EventTargetSet is HashCountedSet&lt;Node*&gt;, so keys() is not a
&gt; member of HashCountedSet.
&gt; If we have a function which return the member HashMap like 
&gt; hashMap() { return m_impl; } in HashCountedSet, 
&gt; then it would be possible to write as following,
&gt;     for (auto* key : targets-&gt;hashMap().keys())
&gt; but currently there is no function in HashCountedSet.
&gt; IMHO, I couldn&apos;t find a way to apply your comment. :)

Makes sense. Some day we could add adapters to HashCountedSet like the ones we have for HashMap, but for now I understand that this can’t be done. We should not expose the HashMap, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085064</commentid>
    <comment_count>20</comment_count>
      <attachid>250610</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-13 22:49:24 -0700</bug_when>
    <thetext>Comment on attachment 250610
Patch

Clearing flags on attachment: 250610

Committed r182782: &lt;http://trac.webkit.org/changeset/182782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085065</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-13 22:49:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250507</attachid>
            <date>2015-04-10 02:09:15 -0700</date>
            <delta_ts>2015-04-10 07:02:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150410180821.patch</filename>
            <type>text/plain</type>
            <size>6378</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNlZjJkYjFiMzk5NmE3
Mjc5NjBjZDJjYWZlNjBjYTVkOWNiYjFhYy4uNmU2NWIzOGRmNDc3Yzk0MzM4NTI4NzBmMzQ5OTI0
ZTMxMDkyNjkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojptb3Zl
Tm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
Om5vZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9k
ZVNwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5k
Rm9yUGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJl
c3VtZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9s
dW1lRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0RXhp
dEZ1bGxzY3JlZW4pOgorCiAyMDE1LTA0LTA5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFNvbWUgQ1NTMyBmaWx0ZXJzIHRlc3RzIGNyYXNoIHVuZGVy
IGlPUyB0ZXN0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzNjU3MWU0ZGU5MTU2ZmY3
NTIyNmZiN2E3M2ZkYWE2YjNkZDJjMTQ4Li4wODU0NGUzYTc3Y2ZjZTdjMjZiODA4MjFkNDM0Yjgz
ZGIwOWE5Yjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTM3NjksOCArMzc2OSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQogdm9p
ZCBEb2N1bWVudDo6bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUqIG5vZGUsIERv
Y3VtZW50KiBuZXdEb2N1bWVudCkKIHsKICAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+IG5vZGVJ
dGVyYXRvcnNMaXN0ID0gbV9ub2RlSXRlcmF0b3JzOwotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9y
Kj46OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVyYXRvcnNFbmQgPSBub2RlSXRlcmF0b3JzTGlzdC5l
bmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbm9kZUl0ZXJhdG9yc0xpc3QuYmVnaW4oKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytp
dCkgeworICAgIGZvciAoYXV0byBpdCA9IG5vZGVJdGVyYXRvcnNMaXN0LmJlZ2luKCksIG5vZGVJ
dGVyYXRvcnNFbmQgPSBub2RlSXRlcmF0b3JzTGlzdC5lbmQoKTsgaXQgIT0gbm9kZUl0ZXJhdG9y
c0VuZDsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPnJvb3QoKSA9PSBub2RlKSB7CiAgICAg
ICAgICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoKml0KTsKICAgICAgICAgICAgIG5ld0RvY3VtZW50
LT5hdHRhY2hOb2RlSXRlcmF0b3IoKml0KTsKQEAgLTM4MTQsMTMgKzM4MTMsMTEgQEAgdm9pZCBE
b2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJiBjb250YWlu
ZXIpCiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG4pCiB7Ci0gICAg
SGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9
IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCk7IGl0ICE9IG5vZGVJ
dGVyYXRvcnNFbmQ7ICsraXQpCisgICAgZm9yIChhdXRvIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJl
Z2luKCksIG5vZGVJdGVyYXRvcnNFbmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7IGl0ICE9IG5v
ZGVJdGVyYXRvcnNFbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKIAogICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFu
Z2UqPjo6Y29uc3RfaXRlcmF0b3IgcmFuZ2VzRW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgICAg
IGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2lu
KCk7IGl0ICE9IHJhbmdlc0VuZDsgKytpdCkKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKSwgcmFuZ2VzRW5kID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IHJhbmdlc0VuZDsg
KytpdCkKICAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKICAgICB9CiAK
QEAgLTM4NzEsOCArMzg2OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0
KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0
KFRleHQqIG9sZE5vZGUpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsK
LSAgICAgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Jh
bmdlcy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAg
ICAgICAgICAgKCppdCktPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CiAgICAgfQogCkBAIC00Mzc2
LDggKzQzNzIsNyBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNh
Y2hlKCkKIHsKICAgICBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwogCi0gICAgSGFzaFNl
dDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tF
bGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpID0g
bV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmJlZ2luKCk7IGkgIT0gZW5kOyAr
K2kpCisgICAgZm9yIChhdXRvIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVu
dHMuYmVnaW4oKSwgZW5kID0gbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVu
ZCgpOyBpICE9IGVuZDsgKytpKQogICAgICAgICAoKmkpLT5kb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKCk7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00Mzk2LDggKzQzOTEsNyBAQCB2b2lk
IERvY3VtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3Rv
cjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAgY29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cywgZWxlbWVudHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0
ZXJhdG9yIGVuZCA9IGVsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6
aXRlcmF0b3IgaSA9IGVsZW1lbnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgZm9yIChh
dXRvIGkgPSBlbGVtZW50cy5iZWdpbigpLCBlbmQgPSBlbGVtZW50cy5lbmQoKTsgaSAhPSBlbmQ7
ICsraSkKICAgICAgICAgKCppKS0+ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCk7CiAK
ICAgICBpZiAocmVuZGVyVmlldygpKQpAQCAtNDQyMiw4ICs0NDE2LDcgQEAgdm9pZCBEb2N1bWVu
dDo6dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCogZSkK
IAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKIHsKLSAgICBIYXNoU2V0
PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMu
ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IG1fbWVkaWFW
b2x1bWVDYWxsYmFja0VsZW1lbnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgZm9yIChh
dXRvICBpID0gbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYmVnaW4oKSwgZW5kID0gbV9t
ZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7IGkgIT0gZW5kOyArK2kpCiAgICAgICAg
ICgqaSktPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiB9CiAKQEAgLTQ0NDUsOCArNDQzOCw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCkKIAogdm9pZCBE
b2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKSAKIHsKLSAgICBIYXNoU2V0
PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRF
bGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9
IG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgIGZvciAoSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9wcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cy5iZWdpbigpLCBlbmQgPSBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgICgqaXQpLT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQogCkBAIC00NDc2
LDggKzQ0NjgsNyBAQCB2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQogCiB2b2lkIERvY3VtZW50OjpjYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2NhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWRFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgZm9yIChhdXRvIGl0
ID0gbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYmVnaW4oKSwgZW5kID0gbV9j
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgKCppdCktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KICNlbmRpZgpA
QCAtNTQ1Nyw3ICs1NDQ4LDcgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4o
KQogICAgICAgICAKICAgICAvLyA0LiBGb3IgZWFjaCBkZXNjZW5kYW50IGluIGRlc2NlbmRhbnRz
LCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNrLCBhbmQgcXVldWUg
YQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdp
dGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9uIGRlc2NlbmRhbnQuCi0gICAg
Zm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6aXRlcmF0b3IgaSA9IGRlc2NlbmRhbnRzLmJl
Z2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7ICsraSkgeworICAgIGZvciAoYXV0byBpID0g
ZGVzY2VuZGFudHMuYmVnaW4oKTsgaSAhPSBkZXNjZW5kYW50cy5lbmQoKTsgKytpKSB7CiAgICAg
ICAgICgqaSktPmNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwogICAgICAgICBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoaS0+Z2V0KCkpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250517</attachid>
            <date>2015-04-10 07:02:45 -0700</date>
            <delta_ts>2015-04-10 18:31:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150410230152.patch</filename>
            <type>text/plain</type>
            <size>6371</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uNjMwYjhhYmRlZWQ2NjcyYTJiYjJjYWU2ZmRmYWJh
YmUwNmRhNTA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXBsYWNlIGV4
cGxpY2l0IHR5cGVzIHdpdGggYXV0byBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFu
Z2VzLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp0ZXh0Tm9kZVNwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVu
dFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
b2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4pOgorCiAyMDE1LTA0LTA5ICBTZXJnaW8gVmlsbGFyIFNl
bmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEZp
eCByYXcgZnVuY3Rpb24gcG9pbnRlciB1c2FnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDM2NTcxZTRkZTkxNTZmZjc1MjI2ZmI3YTczZmRhYTZiM2RkMmMxNDguLjM1MDU4NTZiM2IzMTZj
Yjc2ODk4MDI3NWZjZDg2N2JkMDViOTJmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
Mzc2OSw4ICszNzY5LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJ
dGVyYXRvciogbmkpCiB2b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1l
bnQoTm9kZSogbm9kZSwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQogewogICAgIEhhc2hTZXQ8Tm9k
ZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yc0xpc3QgPSBtX25vZGVJdGVyYXRvcnM7Ci0gICAgSGFz
aFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9IG5v
ZGVJdGVyYXRvcnNMaXN0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlSXRlcmF0b3JzTGlzdC5iZWdpbigpOyBpdCAhPSBub2Rl
SXRlcmF0b3JzRW5kOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gbm9kZUl0ZXJhdG9yc0xp
c3QuYmVnaW4oKSwgbm9kZUl0ZXJhdG9yc0VuZCA9IG5vZGVJdGVyYXRvcnNMaXN0LmVuZCgpOyBp
dCAhPSBub2RlSXRlcmF0b3JzRW5kOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS0+cm9vdCgp
ID09IG5vZGUpIHsKICAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcigqaXQpOwogICAgICAg
ICAgICAgbmV3RG9jdW1lbnQtPmF0dGFjaE5vZGVJdGVyYXRvcigqaXQpOwpAQCAtMzgxNCwxMyAr
MzgxMywxMSBAQCB2b2lkIERvY3VtZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRh
aW5lck5vZGUmIGNvbnRhaW5lcikKIAogdm9pZCBEb2N1bWVudDo6bm9kZVdpbGxCZVJlbW92ZWQo
Tm9kZSYgbikKIHsKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBu
b2RlSXRlcmF0b3JzRW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25vZGVJdGVyYXRvcnMuYmVn
aW4oKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytpdCkKKyAgICBmb3IgKGF1dG8gaXQgPSBt
X25vZGVJdGVyYXRvcnMuYmVnaW4oKSwgbm9kZUl0ZXJhdG9yc0VuZCA9IG1fbm9kZUl0ZXJhdG9y
cy5lbmQoKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytpdCkKICAgICAgICAgKCppdCktPm5v
ZGVXaWxsQmVSZW1vdmVkKG4pOwogCiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciByYW5nZXNFbmQgPSBtX3Jhbmdl
cy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gcmFuZ2VzRW5kOyArK2l0KQorICAgICAgICBmb3Ig
KGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpLCByYW5nZXNFbmQgPSBtX3Jhbmdlcy5lbmQoKTsg
aXQgIT0gcmFuZ2VzRW5kOyArK2l0KQogICAgICAgICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1v
dmVkKG4pOwogICAgIH0KIApAQCAtMzg3MSw4ICszODY4LDcgQEAgdm9pZCBEb2N1bWVudDo6dGV4
dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHZvaWQgRG9jdW1l
bnQ6OnRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlz
RW1wdHkoKSkgewotICAgICAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGZv
ciAoYXV0byBpdCA9IG1fcmFuZ2VzLmJlZ2luKCksIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAoKml0KS0+dGV4dE5vZGVTcGxpdChvbGROb2RlKTsK
ICAgICB9CiAKQEAgLTQzNzYsOCArNDM3Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50V2ls
bFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZl
KCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50
Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICBmb3IgKGF1dG8gaSA9IG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpLCBlbmQgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrRWxlbWVudHMuZW5kKCk7IGkgIT0gZW5kOyArK2kpCiAgICAgICAgICgqaSktPmRvY3Vt
ZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUoKTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTQzOTYs
OCArNDM5MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNo
ZSgpCiB7CiAgICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtZW50czsKICAgICBjb3B5VG9WZWN0b3Io
bV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLCBlbGVtZW50cyk7Ci0gICAgVmVj
dG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gZWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8RWxlbWVudCo+OjppdGVyYXRvciBpID0gZWxlbWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkKKyAgICBmb3IgKGF1dG8gaSA9IGVsZW1lbnRzLmJlZ2luKCksIGVuZCA9IGVsZW1lbnRz
LmVuZCgpOyBpICE9IGVuZDsgKytpKQogICAgICAgICAoKmkpLT5kb2N1bWVudERpZFJlc3VtZUZy
b21QYWdlQ2FjaGUoKTsKIAogICAgIGlmIChyZW5kZXJWaWV3KCkpCkBAIC00NDIyLDggKzQ0MTYs
NyBAQCB2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxi
YWNrcyhFbGVtZW50KiBlKQogCiB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgp
IAogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBtX21lZGlhVm9sdW1l
Q2FsbGJhY2tFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8RWxlbWVudCo+OjppdGVy
YXRvciBpID0gbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7
ICsraSkKKyAgICBmb3IgKGF1dG8gaSA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmJl
Z2luKCksIGVuZCA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOyBpICE9IGVu
ZDsgKytpKQogICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCkBAIC00
NDQ1LDggKzQ0MzgsNyBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENo
YW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCkg
CiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQq
Pjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmJlZ2luKCksIGVuZCA9IG1fcHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCpp
dCktPnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiB9CiAKQEAgLTQ0NzYsOCArNDQ2
OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2Nh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5iZWdpbigpLCBlbmQgPSBtX2NhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAg
ICAoKml0KS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCkBAIC01NDU3
LDcgKzU0NDgsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbigpCiAgICAg
ICAgIAogICAgIC8vIDQuIEZvciBlYWNoIGRlc2NlbmRhbnQgaW4gZGVzY2VuZGFudHMsIGVtcHR5
IGRlc2NlbmRhbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQgc3RhY2ssIGFuZCBxdWV1ZSBhCiAgICAg
Ly8gdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMg
YnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUgb24gZGVzY2VuZGFudC4KLSAgICBmb3IgKERl
cXVlPFJlZlB0cjxEb2N1bWVudD4+OjppdGVyYXRvciBpID0gZGVzY2VuZGFudHMuYmVnaW4oKTsg
aSAhPSBkZXNjZW5kYW50cy5lbmQoKTsgKytpKSB7CisgICAgZm9yIChhdXRvIGkgPSBkZXNjZW5k
YW50cy5iZWdpbigpOyBpICE9IGRlc2NlbmRhbnRzLmVuZCgpOyArK2kpIHsKICAgICAgICAgKCpp
KS0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7CiAgICAgICAgIGFkZERvY3VtZW50VG9G
dWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShpLT5nZXQoKSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250549</attachid>
            <date>2015-04-10 18:31:23 -0700</date>
            <delta_ts>2015-04-10 18:46:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150411103029.patch</filename>
            <type>text/plain</type>
            <size>10755</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMDM1YTNjNTNmNDE1NjNkYzc3Y2EzMGNhYmUyNmU1
YjlkYzcyODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNz
QmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0
b3JzVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFu
Z2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNw
bGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1l
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmFsaWRhdGVBdXRv
U2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QXV0b1Npemlu
Z05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVl
bik6CisKIDIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gRml4IHJhdyBmdW5jdGlvbiBwb2ludGVy
IHVzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzY1NzFlNGRlOTE1NmZmNzUyMjZm
YjdhNzNmZGFhNmIzZGQyYzE0OC4uODFiNGFiYzA4YzgxYjM4YWZlMjE5NzQ4ZDc0YTQ2M2FmNDA5
OGM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNTczLDggKzE1NzMsOCBAQCB2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlbGVtZW50KQogdm9pZCBEb2N1bWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS52aXNpYmls
aXR5Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fdmlz
aWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT52aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIFBhZ2VWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnBhZ2VWaXNpYmls
aXR5U3RhdGUoKSBjb25zdApAQCAtMjgxNCwxNCArMjgxNCwxNiBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IG51bGxw
dHI7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSBudWxscHRyOwogICAgIGF1dG8g
YmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVtZW50PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGJhc2UgPSBiYXNlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
YmFzZURlc2NlbmRhbnRzLmVuZCgpOyBiYXNlICE9IGVuZCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
ICsrYmFzZSkgeworICAgIGZvciAoYXV0byYgYmFzZSA6IGJhc2VEZXNjZW5kYW50cykgeworICAg
ICAgICBpZiAoaHJlZiAmJiB0YXJnZXQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
ICghaHJlZikgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2Ut
PmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGhyZWYgPSAmdmFsdWU7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBiYXNlLT5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gJnZhbHVlOwogICAgICAgICB9CkBAIC0zNzY4LDEyICszNzcwLDEx
IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQog
CiB2b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSogbm9k
ZSwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQogewotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4g
bm9kZUl0ZXJhdG9yc0xpc3QgPSBtX25vZGVJdGVyYXRvcnM7Ci0gICAgSGFzaFNldDxOb2RlSXRl
cmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9IG5vZGVJdGVyYXRvcnNM
aXN0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBub2RlSXRlcmF0b3JzTGlzdC5iZWdpbigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+cm9vdCgpID09IG5vZGUpIHsKLSAgICAgICAg
ICAgIGRldGFjaE5vZGVJdGVyYXRvcigqaXQpOwotICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcigqaXQpOworICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0
ZXJhdG9yc1NldCA9IG1fbm9kZUl0ZXJhdG9yczsKKyAgICBmb3IgKGF1dG8qIGl0IDogbm9kZUl0
ZXJhdG9yc1NldCkgeworICAgICAgICBpZiAoaXQtPnJvb3QoKSA9PSBub2RlKSB7CisgICAgICAg
ICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcihpdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzgxLDIxICsz
NzgyLDIxIEBAIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChO
b2RlKiBub2RlLCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVS
YW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAg
ICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKSwgZW5kID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICgqaXQpLT5ub2RlQ2hpbGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CisgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlQ2hp
bGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CiAgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojpub2Rl
Q2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAgICBp
ZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdl
cy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgKCppdCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKKyAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICAgICAgcmFuZ2UtPm5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8g
aXQgPSBtX25vZGVJdGVyYXRvcnMuYmVnaW4oKSwgZW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3Jz
KSB7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVk
KCpuKTsKKyAgICAgICAgICAgIGl0LT5ub2RlV2lsbEJlUmVtb3ZlZCgqbik7CiAgICAgfQogCiAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKQEAgLTM4MTQsMTQgKzM4MTUs
MTIgQEAgdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJO
b2RlJiBjb250YWluZXIpCiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUm
IG4pCiB7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0
ZXJhdG9yc0VuZCA9IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9k
ZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCk7
IGl0ICE9IG5vZGVJdGVyYXRvcnNFbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub2RlV2lsbEJl
UmVtb3ZlZChuKTsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3JzKQorICAgICAg
ICBpdC0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHko
KSkgewotICAgICAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIHJhbmdlc0VuZCA9
IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSByYW5nZXNFbmQ7ICsraXQpCi0gICAg
ICAgICAgICAoKml0KS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisgICAgICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewpAQCAt
Mzg3MSw5ICszODcwLDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3BsaXQoVGV4
dCogb2xkTm9kZSkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBI
YXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAg
ICAgICAgcmFuZ2UtPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBj
aGVja2luZy4KQEAgLTQzNzYsOSArNDM3NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50V2ls
bFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZl
KCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50
Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnRXaWxsU3VzcGVuZEZv
clBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnRXaWxsU3VzcGVu
ZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENsZWFyIHRoZSB1cGRh
dGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9ydCBhcmd1bWVudHMgdXBk
YXRlCkBAIC00Mzk2LDkgKzQzOTMsOCBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAg
Y29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cywgZWxlbWVu
dHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGVsZW1lbnRzLmVuZCgp
OwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1lbnRzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBh
Z2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICBl
bGVtZW50LT5kb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXcoKS0+c2V0SXNJbldpbmRvdyh0cnVlKTsKQEAg
LTQ0MjIsOSArNDQxOCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlQ2FjaGVT
dXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6Om1lZGlhVm9s
dW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxF
bGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURpZENoYW5nZSgp
OworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRz
KQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCiB2b2lkIERv
Y3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCkBAIC00
NDQ1LDkgKzQ0NDAsOCBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENo
YW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCkg
CiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQq
Pjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnByaXZhdGVCcm93c2luZ1N0
YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cHJpdmF0ZUJyb3dzaW5n
U3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0NzYsOSArNDQ3
MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX2NhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUwMjQsOCArNTAxNyw3IEBAIHZvaWQg
RG9jdW1lbnQ6OmFkZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNhbmRpZGF0ZVNp
emUpCiB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiB7CiAgICAgVmVj
dG9yPFRleHRBdXRvU2l6aW5nS2V5PiBub2Rlc0ZvclJlbW92YWw7Ci0gICAgZm9yIChhdXRvIGl0
ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0b1NpemVkTm9k
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4dEF1dG9TaXpp
bmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA9IG1fdGV4
dEF1dG9TaXplZE5vZGVzLnZhbHVlKCkpIHsKICAgICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgbm9k
ZXMgaW4gdGhlIGNvbGxlY3Rpb24gdG8gcmVmbGVjdCB0aGUgbmV3CiAgICAgICAgIC8vIGNhbmRp
ZGF0ZSBzaXplLgogICAgICAgICBpZiAoIXZhbHVlKQpAQCAtNTA0Miw4ICs1MDM0LDcgQEAgdm9p
ZCBEb2N1bWVudDo6dmFsaWRhdGVBdXRvU2l6aW5nTm9kZXMoKQogICAgIAogdm9pZCBEb2N1bWVu
dDo6cmVzZXRBdXRvU2l6aW5nTm9kZXMoKQogewotICAgIGZvciAoYXV0byBpdCA9IG1fdGV4dEF1
dG9TaXplZE5vZGVzLmJlZ2luKCksIGVuZCA9IG1fdGV4dEF1dG9TaXplZE5vZGVzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFRleHRBdXRvU2l6aW5nVmFsdWU+IHZh
bHVlID0gaXQtPnZhbHVlOworICAgIGZvciAoYXV0byYgdmFsdWUgPSBtX3RleHRBdXRvU2l6ZWRO
b2Rlcy52YWx1ZSgpKSB7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHZhbHVlLT5y
ZXNldCgpOwogICAgIH0KQEAgLTU0NTcsOSArNTQ0OCw5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dEV4aXRGdWxsc2NyZWVuKCkKICAgICAgICAgCiAgICAgLy8gNC4gRm9yIGVhY2ggZGVzY2VuZGFu
dCBpbiBkZXNjZW5kYW50cywgZW1wdHkgZGVzY2VuZGFudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBz
dGFjaywgYW5kIHF1ZXVlIGEKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVs
bHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBk
ZXNjZW5kYW50LgotICAgIGZvciAoRGVxdWU8UmVmUHRyPERvY3VtZW50Pj46Oml0ZXJhdG9yIGkg
PSBkZXNjZW5kYW50cy5iZWdpbigpOyBpICE9IGRlc2NlbmRhbnRzLmVuZCgpOyArK2kpIHsKLSAg
ICAgICAgKCppKS0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERv
Y3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShpLT5nZXQoKSk7CisgICAgZm9yIChh
dXRvJiBkb2N1bWVudCA6IGRlc2NlbmRhbnRzKSB7CisgICAgICAgIGRvY3VtZW50LT5jbGVhckZ1
bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKKyAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKGRvY3VtZW50LmdldCgpKTsKICAgICB9CiAKICAgICAvLyA1LiBXaGls
ZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250553</attachid>
            <date>2015-04-10 18:46:15 -0700</date>
            <delta_ts>2015-04-10 18:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150411104521.patch</filename>
            <type>text/plain</type>
            <size>10755</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMDM1YTNjNTNmNDE1NjNkYzc3Y2EzMGNhYmUyNmU1
YjlkYzcyODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNz
QmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0
b3JzVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFu
Z2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNw
bGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1l
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmFsaWRhdGVBdXRv
U2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QXV0b1Npemlu
Z05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVl
bik6CisKIDIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gRml4IHJhdyBmdW5jdGlvbiBwb2ludGVy
IHVzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzY1NzFlNGRlOTE1NmZmNzUyMjZm
YjdhNzNmZGFhNmIzZGQyYzE0OC4uZmJhMjExNWE2OWJiOTExNWIwYWQxZDY5OGI4ZjgzZmI2Y2Mz
NTNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNTczLDggKzE1NzMsOCBAQCB2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlbGVtZW50KQogdm9pZCBEb2N1bWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS52aXNpYmls
aXR5Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fdmlz
aWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT52aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIFBhZ2VWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnBhZ2VWaXNpYmls
aXR5U3RhdGUoKSBjb25zdApAQCAtMjgxNCwxNCArMjgxNCwxNiBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IG51bGxw
dHI7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSBudWxscHRyOwogICAgIGF1dG8g
YmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVtZW50PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGJhc2UgPSBiYXNlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
YmFzZURlc2NlbmRhbnRzLmVuZCgpOyBiYXNlICE9IGVuZCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
ICsrYmFzZSkgeworICAgIGZvciAoYXV0byYgYmFzZSA6IGJhc2VEZXNjZW5kYW50cykgeworICAg
ICAgICBpZiAoaHJlZiAmJiB0YXJnZXQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
ICghaHJlZikgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2Ut
PmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGhyZWYgPSAmdmFsdWU7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBiYXNlLT5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gJnZhbHVlOwogICAgICAgICB9CkBAIC0zNzY4LDEyICszNzcwLDEx
IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQog
CiB2b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSogbm9k
ZSwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQogewotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4g
bm9kZUl0ZXJhdG9yc0xpc3QgPSBtX25vZGVJdGVyYXRvcnM7Ci0gICAgSGFzaFNldDxOb2RlSXRl
cmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9IG5vZGVJdGVyYXRvcnNM
aXN0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBub2RlSXRlcmF0b3JzTGlzdC5iZWdpbigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+cm9vdCgpID09IG5vZGUpIHsKLSAgICAgICAg
ICAgIGRldGFjaE5vZGVJdGVyYXRvcigqaXQpOwotICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcigqaXQpOworICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0
ZXJhdG9yc1NldCA9IG1fbm9kZUl0ZXJhdG9yczsKKyAgICBmb3IgKGF1dG8qIGl0IDogbm9kZUl0
ZXJhdG9yc1NldCkgeworICAgICAgICBpZiAoaXQtPnJvb3QoKSA9PSBub2RlKSB7CisgICAgICAg
ICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcihpdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzgxLDIxICsz
NzgyLDIxIEBAIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChO
b2RlKiBub2RlLCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVS
YW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAg
ICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKSwgZW5kID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICgqaXQpLT5ub2RlQ2hpbGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CisgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlQ2hp
bGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CiAgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojpub2Rl
Q2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAgICBp
ZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdl
cy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgKCppdCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKKyAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICAgICAgcmFuZ2UtPm5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8g
aXQgPSBtX25vZGVJdGVyYXRvcnMuYmVnaW4oKSwgZW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3Jz
KSB7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVk
KCpuKTsKKyAgICAgICAgICAgIGl0LT5ub2RlV2lsbEJlUmVtb3ZlZCgqbik7CiAgICAgfQogCiAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKQEAgLTM4MTQsMTQgKzM4MTUs
MTIgQEAgdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJO
b2RlJiBjb250YWluZXIpCiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUm
IG4pCiB7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0
ZXJhdG9yc0VuZCA9IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9k
ZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCk7
IGl0ICE9IG5vZGVJdGVyYXRvcnNFbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub2RlV2lsbEJl
UmVtb3ZlZChuKTsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3JzKQorICAgICAg
ICBpdC0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHko
KSkgewotICAgICAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIHJhbmdlc0VuZCA9
IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSByYW5nZXNFbmQ7ICsraXQpCi0gICAg
ICAgICAgICAoKml0KS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisgICAgICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewpAQCAt
Mzg3MSw5ICszODcwLDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3BsaXQoVGV4
dCogb2xkTm9kZSkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBI
YXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAg
ICAgICAgcmFuZ2UtPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBj
aGVja2luZy4KQEAgLTQzNzYsOSArNDM3NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50V2ls
bFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZl
KCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50
Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnRXaWxsU3VzcGVuZEZv
clBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnRXaWxsU3VzcGVu
ZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENsZWFyIHRoZSB1cGRh
dGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9ydCBhcmd1bWVudHMgdXBk
YXRlCkBAIC00Mzk2LDkgKzQzOTMsOCBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAg
Y29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cywgZWxlbWVu
dHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGVsZW1lbnRzLmVuZCgp
OwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1lbnRzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBh
Z2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICBl
bGVtZW50LT5kb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXcoKS0+c2V0SXNJbldpbmRvdyh0cnVlKTsKQEAg
LTQ0MjIsOSArNDQxOCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlQ2FjaGVT
dXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6Om1lZGlhVm9s
dW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxF
bGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURpZENoYW5nZSgp
OworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRz
KQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCiB2b2lkIERv
Y3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCkBAIC00
NDQ1LDkgKzQ0NDAsOCBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENo
YW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCkg
CiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQq
Pjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnByaXZhdGVCcm93c2luZ1N0
YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cHJpdmF0ZUJyb3dzaW5n
U3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0NzYsOSArNDQ3
MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX2NhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUwMjQsOCArNTAxNyw3IEBAIHZvaWQg
RG9jdW1lbnQ6OmFkZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNhbmRpZGF0ZVNp
emUpCiB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiB7CiAgICAgVmVj
dG9yPFRleHRBdXRvU2l6aW5nS2V5PiBub2Rlc0ZvclJlbW92YWw7Ci0gICAgZm9yIChhdXRvIGl0
ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0b1NpemVkTm9k
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4dEF1dG9TaXpp
bmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA9IG1fdGV4
dEF1dG9TaXplZE5vZGVzLnZhbHVlKCkpIHsKICAgICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgbm9k
ZXMgaW4gdGhlIGNvbGxlY3Rpb24gdG8gcmVmbGVjdCB0aGUgbmV3CiAgICAgICAgIC8vIGNhbmRp
ZGF0ZSBzaXplLgogICAgICAgICBpZiAoIXZhbHVlKQpAQCAtNTA0Miw4ICs1MDM0LDcgQEAgdm9p
ZCBEb2N1bWVudDo6dmFsaWRhdGVBdXRvU2l6aW5nTm9kZXMoKQogICAgIAogdm9pZCBEb2N1bWVu
dDo6cmVzZXRBdXRvU2l6aW5nTm9kZXMoKQogewotICAgIGZvciAoYXV0byBpdCA9IG1fdGV4dEF1
dG9TaXplZE5vZGVzLmJlZ2luKCksIGVuZCA9IG1fdGV4dEF1dG9TaXplZE5vZGVzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFRleHRBdXRvU2l6aW5nVmFsdWU+IHZh
bHVlID0gaXQtPnZhbHVlOworICAgIGZvciAoYXV0byYgdmFsdWUgPSBtX3RleHRBdXRvU2l6ZWRO
b2Rlcy52YWx1ZSgpKSB7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHZhbHVlLT5y
ZXNldCgpOwogICAgIH0KQEAgLTU0NTcsOSArNTQ0OCw5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dEV4aXRGdWxsc2NyZWVuKCkKICAgICAgICAgCiAgICAgLy8gNC4gRm9yIGVhY2ggZGVzY2VuZGFu
dCBpbiBkZXNjZW5kYW50cywgZW1wdHkgZGVzY2VuZGFudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBz
dGFjaywgYW5kIHF1ZXVlIGEKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVs
bHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBk
ZXNjZW5kYW50LgotICAgIGZvciAoRGVxdWU8UmVmUHRyPERvY3VtZW50Pj46Oml0ZXJhdG9yIGkg
PSBkZXNjZW5kYW50cy5iZWdpbigpOyBpICE9IGRlc2NlbmRhbnRzLmVuZCgpOyArK2kpIHsKLSAg
ICAgICAgKCppKS0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERv
Y3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShpLT5nZXQoKSk7CisgICAgZm9yIChh
dXRvJiBkb2N1bWVudCA6IGRlc2NlbmRhbnRzKSB7CisgICAgICAgIGRvY3VtZW50LT5jbGVhckZ1
bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKKyAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKGRvY3VtZW50LmdldCgpKTsKICAgICB9CiAKICAgICAvLyA1LiBXaGls
ZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250555</attachid>
            <date>2015-04-10 18:54:59 -0700</date>
            <delta_ts>2015-04-10 20:27:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150411105405.patch</filename>
            <type>text/plain</type>
            <size>10757</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMDM1YTNjNTNmNDE1NjNkYzc3Y2EzMGNhYmUyNmU1
YjlkYzcyODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNz
QmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0
b3JzVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFu
Z2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNw
bGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1l
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmFsaWRhdGVBdXRv
U2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QXV0b1Npemlu
Z05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVl
bik6CisKIDIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gRml4IHJhdyBmdW5jdGlvbiBwb2ludGVy
IHVzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzY1NzFlNGRlOTE1NmZmNzUyMjZm
YjdhNzNmZGFhNmIzZGQyYzE0OC4uOWVjYWZmMjZkZmFlYzhjMzU4ODM1OWE0NDE0YmZmOTMxYmU4
MjRlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNTczLDggKzE1NzMsOCBAQCB2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlbGVtZW50KQogdm9pZCBEb2N1bWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS52aXNpYmls
aXR5Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fdmlz
aWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT52aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIFBhZ2VWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnBhZ2VWaXNpYmls
aXR5U3RhdGUoKSBjb25zdApAQCAtMjgxNCwxNCArMjgxNCwxNiBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IG51bGxw
dHI7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSBudWxscHRyOwogICAgIGF1dG8g
YmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVtZW50PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGJhc2UgPSBiYXNlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
YmFzZURlc2NlbmRhbnRzLmVuZCgpOyBiYXNlICE9IGVuZCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
ICsrYmFzZSkgeworICAgIGZvciAoYXV0byYgYmFzZSA6IGJhc2VEZXNjZW5kYW50cykgeworICAg
ICAgICBpZiAoaHJlZiAmJiB0YXJnZXQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
ICghaHJlZikgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2Ut
PmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGhyZWYgPSAmdmFsdWU7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBiYXNlLT5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gJnZhbHVlOwogICAgICAgICB9CkBAIC0zNzY4LDEyICszNzcwLDEx
IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQog
CiB2b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSogbm9k
ZSwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQogewotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4g
bm9kZUl0ZXJhdG9yc0xpc3QgPSBtX25vZGVJdGVyYXRvcnM7Ci0gICAgSGFzaFNldDxOb2RlSXRl
cmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yc0VuZCA9IG5vZGVJdGVyYXRvcnNM
aXN0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBub2RlSXRlcmF0b3JzTGlzdC5iZWdpbigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+cm9vdCgpID09IG5vZGUpIHsKLSAgICAgICAg
ICAgIGRldGFjaE5vZGVJdGVyYXRvcigqaXQpOwotICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcigqaXQpOworICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0
ZXJhdG9yc1NldCA9IG1fbm9kZUl0ZXJhdG9yczsKKyAgICBmb3IgKGF1dG8qIGl0IDogbm9kZUl0
ZXJhdG9yc1NldCkgeworICAgICAgICBpZiAoaXQtPnJvb3QoKSA9PSBub2RlKSB7CisgICAgICAg
ICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgICAgICAgICAgbmV3RG9jdW1lbnQtPmF0
dGFjaE5vZGVJdGVyYXRvcihpdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzgxLDIxICsz
NzgyLDIxIEBAIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChO
b2RlKiBub2RlLCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVS
YW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAg
ICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9y
YW5nZXMuYmVnaW4oKSwgZW5kID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICgqaXQpLT5ub2RlQ2hpbGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CisgICAgICAg
IGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlQ2hp
bGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7CiAgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojpub2Rl
Q2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAgICBp
ZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdl
cy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgKCppdCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKKyAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICAgICAgcmFuZ2UtPm5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFpbmVyKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8g
aXQgPSBtX25vZGVJdGVyYXRvcnMuYmVnaW4oKSwgZW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3Jz
KSB7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVk
KCpuKTsKKyAgICAgICAgICAgIGl0LT5ub2RlV2lsbEJlUmVtb3ZlZCgqbik7CiAgICAgfQogCiAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKQEAgLTM4MTQsMTQgKzM4MTUs
MTIgQEAgdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJO
b2RlJiBjb250YWluZXIpCiAKIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUm
IG4pCiB7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3Igbm9kZUl0
ZXJhdG9yc0VuZCA9IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Tm9k
ZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCk7
IGl0ICE9IG5vZGVJdGVyYXRvcnNFbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub2RlV2lsbEJl
UmVtb3ZlZChuKTsKKyAgICBmb3IgKGF1dG8qIGl0IDogbV9ub2RlSXRlcmF0b3JzKQorICAgICAg
ICBpdC0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHko
KSkgewotICAgICAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIHJhbmdlc0VuZCA9
IG1fcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSByYW5nZXNFbmQ7ICsraXQpCi0gICAg
ICAgICAgICAoKml0KS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisgICAgICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgICAgIHJhbmdlLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewpAQCAt
Mzg3MSw5ICszODcwLDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3BsaXQoVGV4
dCogb2xkTm9kZSkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBI
YXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAg
ICAgICAgcmFuZ2UtPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBj
aGVja2luZy4KQEAgLTQzNzYsOSArNDM3NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50V2ls
bFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZl
KCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxFbGVtZW50
Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnRXaWxsU3VzcGVuZEZv
clBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnRXaWxsU3VzcGVu
ZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENsZWFyIHRoZSB1cGRh
dGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9ydCBhcmd1bWVudHMgdXBk
YXRlCkBAIC00Mzk2LDkgKzQzOTMsOCBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAg
Y29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cywgZWxlbWVu
dHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGVsZW1lbnRzLmVuZCgp
OwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1lbnRzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBh
Z2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICBl
bGVtZW50LT5kb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXcoKS0+c2V0SXNJbldpbmRvdyh0cnVlKTsKQEAg
LTQ0MjIsOSArNDQxOCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlQ2FjaGVT
dXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6Om1lZGlhVm9s
dW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxF
bGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURpZENoYW5nZSgp
OworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRz
KQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCiB2b2lkIERv
Y3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCkBAIC00
NDQ1LDkgKzQ0NDAsOCBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENo
YW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCkg
CiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQq
Pjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnByaXZhdGVCcm93c2luZ1N0
YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cHJpdmF0ZUJyb3dzaW5n
U3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0NzYsOSArNDQ3
MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX2NhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUwMjQsOCArNTAxNyw3IEBAIHZvaWQg
RG9jdW1lbnQ6OmFkZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNhbmRpZGF0ZVNp
emUpCiB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiB7CiAgICAgVmVj
dG9yPFRleHRBdXRvU2l6aW5nS2V5PiBub2Rlc0ZvclJlbW92YWw7Ci0gICAgZm9yIChhdXRvIGl0
ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0b1NpemVkTm9k
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4dEF1dG9TaXpp
bmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fdGV4
dEF1dG9TaXplZE5vZGVzLnZhbHVlcygpKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIG5v
ZGVzIGluIHRoZSBjb2xsZWN0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldwogICAgICAgICAvLyBjYW5k
aWRhdGUgc2l6ZS4KICAgICAgICAgaWYgKCF2YWx1ZSkKQEAgLTUwNDIsOCArNTAzNCw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKICAgICAKIHZvaWQgRG9jdW1l
bnQ6OnJlc2V0QXV0b1NpemluZ05vZGVzKCkKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3RleHRB
dXRvU2l6ZWROb2Rlcy5iZWdpbigpLCBlbmQgPSBtX3RleHRBdXRvU2l6ZWROb2Rlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0QXV0b1NpemluZ1ZhbHVlPiB2
YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV90ZXh0QXV0b1NpemVk
Tm9kZXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgdmFsdWUt
PnJlc2V0KCk7CiAgICAgfQpAQCAtNTQ1Nyw5ICs1NDQ4LDkgQEAgdm9pZCBEb2N1bWVudDo6d2Vi
a2l0RXhpdEZ1bGxzY3JlZW4oKQogICAgICAgICAKICAgICAvLyA0LiBGb3IgZWFjaCBkZXNjZW5k
YW50IGluIGRlc2NlbmRhbnRzLCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
IHN0YWNrLCBhbmQgcXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBm
dWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9u
IGRlc2NlbmRhbnQuCi0gICAgZm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6aXRlcmF0b3Ig
aSA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7ICsraSkgewot
ICAgICAgICAoKmkpLT5jbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKLSAgICAgICAgYWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGktPmdldCgpKTsKKyAgICBmb3Ig
KGF1dG8mIGRvY3VtZW50IDogZGVzY2VuZGFudHMpIHsKKyAgICAgICAgZG9jdW1lbnQtPmNsZWFy
RnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOworICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVl
bkNoYW5nZUV2ZW50UXVldWUoZG9jdW1lbnQuZ2V0KCkpOwogICAgIH0KIAogICAgIC8vIDUuIFdo
aWxlIGRvYyBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250559</attachid>
            <date>2015-04-10 20:27:55 -0700</date>
            <delta_ts>2015-04-10 21:24:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150411122701.patch</filename>
            <type>text/plain</type>
            <size>10880</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMDM1YTNjNTNmNDE1NjNkYzc3Y2EzMGNhYmUyNmU1
YjlkYzcyODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNz
QmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0
b3JzVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFu
Z2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNw
bGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1l
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmFsaWRhdGVBdXRv
U2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QXV0b1Npemlu
Z05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVl
bik6CisKIDIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gRml4IHJhdyBmdW5jdGlvbiBwb2ludGVy
IHVzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzY1NzFlNGRlOTE1NmZmNzUyMjZm
YjdhNzNmZGFhNmIzZGQyYzE0OC4uNGI1YzdjZWNmZjgzZWI0ODY5ODJhYmE5MDE3NWY1ODcwYjUx
YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNTczLDggKzE1NzMsOCBAQCB2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlbGVtZW50KQogdm9pZCBEb2N1bWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS52aXNpYmls
aXR5Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fdmlz
aWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT52aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIFBhZ2VWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnBhZ2VWaXNpYmls
aXR5U3RhdGUoKSBjb25zdApAQCAtMjgxNCwxNiArMjgxNCwyMiBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IG51bGxw
dHI7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSBudWxscHRyOwogICAgIGF1dG8g
YmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVtZW50PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGJhc2UgPSBiYXNlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
YmFzZURlc2NlbmRhbnRzLmVuZCgpOyBiYXNlICE9IGVuZCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
ICsrYmFzZSkgeworICAgIGZvciAoYXV0byYgYmFzZSA6IGJhc2VEZXNjZW5kYW50cykgewogICAg
ICAgICBpZiAoIWhyZWYpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBiYXNlLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKLSAgICAgICAgICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYmFz
ZS5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgICAgICBocmVmID0gJnZhbHVlOworICAgICAgICAgICAgICAg
IGlmICh0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gYmFzZS0+ZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYmFzZS5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIHRhcmdldCA9ICZ2
YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaHJlZikKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3NjgsMzQgKzM3NzQs
MzAgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkp
CiAKIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChOb2RlKiBu
b2RlLCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0b3Iq
PiBub2RlSXRlcmF0b3JzTGlzdCA9IG1fbm9kZUl0ZXJhdG9yczsKLSAgICBIYXNoU2V0PE5vZGVJ
dGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3JzRW5kID0gbm9kZUl0ZXJhdG9y
c0xpc3QuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5vZGVJdGVyYXRvcnNMaXN0LmJlZ2luKCk7IGl0ICE9IG5vZGVJdGVyYXRvcnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5yb290KCkgPT0gbm9kZSkgewotICAgICAg
ICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdCk7Ci0gICAgICAgICAgICBuZXdEb2N1bWVudC0+
YXR0YWNoTm9kZUl0ZXJhdG9yKCppdCk7CisgICAgVmVjdG9yPE5vZGVJdGVyYXRvcio+IG5vZGVJ
dGVyYXRvcnM7CisgICAgY29weVRvVmVjdG9yKG1fbm9kZUl0ZXJhdG9ycywgbm9kZUl0ZXJhdG9y
cyk7CisgICAgZm9yIChhdXRvKiBpdCA6IG5vZGVJdGVyYXRvcnMpIHsKKyAgICAgICAgaWYgKGl0
LT5yb290KCkgPT0gbm9kZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKGl0KTsK
KyAgICAgICAgICAgIG5ld0RvY3VtZW50LT5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOwogICAgICAg
ICB9CiAgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVSYW5nZXNBZnRlckNoaWxkcmVu
Q2hhbmdlZChDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7Ci0gICAgaWYgKCFtX3Jhbmdlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKSwgZW5k
ID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5u
b2RlQ2hpbGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7Ci0gICAgfQorICAgIGZvciAoYXV0byYgcmFu
Z2UgOiBtX3JhbmdlcykKKyAgICAgICAgcmFuZ2UtPm5vZGVDaGlsZHJlbkNoYW5nZWQoY29udGFp
bmVyKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBjb250YWluZXIpCiB7Ci0gICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKSwgZW5kID0gbV9yYW5nZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlQ2hpbGRyZW5X
aWxsQmVSZW1vdmVkKGNvbnRhaW5lcik7Ci0gICAgfQorICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykKKyAgICAgICAgcmFuZ2UtPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFp
bmVyKTsKIAotICAgIGZvciAoYXV0byBpdCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpLCBlbmQg
PSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGZvciAoYXV0
byogaXQgOiBtX25vZGVJdGVyYXRvcnMpIHsKICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAo
Kml0KS0+bm9kZVdpbGxCZVJlbW92ZWQoKm4pOworICAgICAgICAgICAgaXQtPm5vZGVXaWxsQmVS
ZW1vdmVkKCpuKTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KSkgewpAQCAtMzgxNCwxNSArMzgxNiwxMSBAQCB2b2lkIERvY3VtZW50Ojpub2RlQ2hpbGRyZW5X
aWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIAogdm9pZCBEb2N1bWVudDo6
bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbikKIHsKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+
Ojpjb25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3JzRW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X25vZGVJdGVyYXRvcnMuYmVnaW4oKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytpdCkKLSAg
ICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVkKG4pOworICAgIGZvciAoYXV0byogaXQgOiBt
X25vZGVJdGVyYXRvcnMpCisgICAgICAgIGl0LT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKIAotICAg
IGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgcmFuZ2VzRW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9
IHJhbmdlc0VuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKLSAgICB9CisgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICByYW5n
ZS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKSkgewogICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubm9kZVdpbGxCZVJlbW92
ZWQobik7CkBAIC0zODcwLDExICszODY4LDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVy
Z2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIAogdm9pZCBEb2N1bWVudDo6dGV4
dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQogewotICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5n
ZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQp
LT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHJhbmdlIDog
bV9yYW5nZXMpCisgICAgICAgIHJhbmdlLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3Jh
bW1hciBjaGVja2luZy4KIH0KQEAgLTQzNzYsOSArNDM3MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRv
Y3VtZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29t
ZUluYWN0aXZlKCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9k
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxl
bWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnRXaWxs
U3VzcGVuZEZvclBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fZG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnRX
aWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENsZWFy
IHRoZSB1cGRhdGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9ydCBhcmd1
bWVudHMgdXBkYXRlCkBAIC00Mzk2LDkgKzQzOTAsOCBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVu
dERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVu
dHM7CiAgICAgY29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cywgZWxlbWVudHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGVsZW1l
bnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1l
bnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmRvY3VtZW50RGlkUmVz
dW1lRnJvbVBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IGVsZW1lbnRzKQor
ICAgICAgICBlbGVtZW50LT5kb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAg
IGlmIChyZW5kZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXcoKS0+c2V0SXNJbldpbmRvdyh0
cnVlKTsKQEAgLTQ0MjIsOSArNDQxNSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQ
YWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6
Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJh
dG9yIGVuZCA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVt
ZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURp
ZENoYW5nZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fbWVkaWFWb2x1bWVDYWxsYmFj
a0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQog
CiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQq
IGUpCkBAIC00NDQ1LDkgKzQ0MzcsOCBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdT
dGF0ZURpZENoYW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlk
Q2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnByaXZhdGVC
cm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cHJpdmF0
ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJG
b3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0
NzYsOSArNDQ2Nyw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRv
ciBlbmQgPSBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZEVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+Y2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUwMjQsOCArNTAxNCw3
IEBAIHZvaWQgRG9jdW1lbnQ6OmFkZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNh
bmRpZGF0ZVNpemUpCiB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiB7
CiAgICAgVmVjdG9yPFRleHRBdXRvU2l6aW5nS2V5PiBub2Rlc0ZvclJlbW92YWw7Ci0gICAgZm9y
IChhdXRvIGl0ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0
b1NpemVkTm9kZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4
dEF1dG9TaXppbmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IG1fdGV4dEF1dG9TaXplZE5vZGVzLnZhbHVlcygpKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBh
bGwgdGhlIG5vZGVzIGluIHRoZSBjb2xsZWN0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldwogICAgICAg
ICAvLyBjYW5kaWRhdGUgc2l6ZS4KICAgICAgICAgaWYgKCF2YWx1ZSkKQEAgLTUwNDIsOCArNTAz
MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKICAgICAKIHZv
aWQgRG9jdW1lbnQ6OnJlc2V0QXV0b1NpemluZ05vZGVzKCkKIHsKLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3RleHRBdXRvU2l6ZWROb2Rlcy5iZWdpbigpLCBlbmQgPSBtX3RleHRBdXRvU2l6ZWROb2Rl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0QXV0b1Npemlu
Z1ZhbHVlPiB2YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV90ZXh0
QXV0b1NpemVkTm9kZXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAg
ICAgdmFsdWUtPnJlc2V0KCk7CiAgICAgfQpAQCAtNTQ1Nyw5ICs1NDQ1LDkgQEAgdm9pZCBEb2N1
bWVudDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogICAgICAgICAKICAgICAvLyA0LiBGb3IgZWFj
aCBkZXNjZW5kYW50IGluIGRlc2NlbmRhbnRzLCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVl
biBlbGVtZW50IHN0YWNrLCBhbmQgcXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVu
dCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0
byB0cnVlIG9uIGRlc2NlbmRhbnQuCi0gICAgZm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6
aXRlcmF0b3IgaSA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7
ICsraSkgewotICAgICAgICAoKmkpLT5jbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKLSAg
ICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGktPmdldCgpKTsK
KyAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogZGVzY2VuZGFudHMpIHsKKyAgICAgICAgZG9jdW1l
bnQtPmNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOworICAgICAgICBhZGREb2N1bWVudFRv
RnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoZG9jdW1lbnQuZ2V0KCkpOwogICAgIH0KIAogICAg
IC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250561</attachid>
            <date>2015-04-10 21:24:44 -0700</date>
            <delta_ts>2015-04-12 10:12:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150411132351.patch</filename>
            <type>text/plain</type>
            <size>11241</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMDM1YTNjNTNmNDE1NjNkYzc3Y2EzMGNhYmUyNmU1
YjlkYzcyODdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA0LTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNz
QmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0
b3JzVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFu
Z2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNw
bGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1l
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmFsaWRhdGVBdXRv
U2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QXV0b1Npemlu
Z05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVl
bik6CisKIDIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gRml4IHJhdyBmdW5jdGlvbiBwb2ludGVy
IHVzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzY1NzFlNGRlOTE1NmZmNzUyMjZm
YjdhNzNmZGFhNmIzZGQyYzE0OC4uYzFjMDZmOTg4MTE2MjZmODVmZWIyZGViN2FjYmRlNDZiNjEw
ZGJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNTczLDggKzE1NzMsOCBAQCB2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlbGVtZW50KQogdm9pZCBEb2N1bWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS52aXNpYmls
aXR5Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGZvciAoYXV0byBpdCA9IG1fdmlz
aWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT52aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIFBhZ2VWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnBhZ2VWaXNpYmls
aXR5U3RhdGUoKSBjb25zdApAQCAtMjgxNCwxNiArMjgxNCwyMiBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IG51bGxw
dHI7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSBudWxscHRyOwogICAgIGF1dG8g
YmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVtZW50PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGJhc2UgPSBiYXNlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
YmFzZURlc2NlbmRhbnRzLmVuZCgpOyBiYXNlICE9IGVuZCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
ICsrYmFzZSkgeworICAgIGZvciAoYXV0byYgYmFzZSA6IGJhc2VEZXNjZW5kYW50cykgewogICAg
ICAgICBpZiAoIWhyZWYpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBiYXNlLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKLSAgICAgICAgICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYmFz
ZS5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgICAgICBocmVmID0gJnZhbHVlOworICAgICAgICAgICAgICAg
IGlmICh0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gYmFzZS0+ZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYmFzZS5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIHRhcmdldCA9ICZ2
YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaHJlZikKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3NjgsMzQgKzM3NzQs
MzAgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkp
CiAKIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChOb2RlKiBu
b2RlLCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB7Ci0gICAgSGFzaFNldDxOb2RlSXRlcmF0b3Iq
PiBub2RlSXRlcmF0b3JzTGlzdCA9IG1fbm9kZUl0ZXJhdG9yczsKLSAgICBIYXNoU2V0PE5vZGVJ
dGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3JzRW5kID0gbm9kZUl0ZXJhdG9y
c0xpc3QuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5vZGVJdGVyYXRvcnNMaXN0LmJlZ2luKCk7IGl0ICE9IG5vZGVJdGVyYXRvcnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5yb290KCkgPT0gbm9kZSkgewotICAgICAg
ICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdCk7Ci0gICAgICAgICAgICBuZXdEb2N1bWVudC0+
YXR0YWNoTm9kZUl0ZXJhdG9yKCppdCk7CisgICAgVmVjdG9yPE5vZGVJdGVyYXRvcio+IG5vZGVJ
dGVyYXRvcnM7CisgICAgY29weVRvVmVjdG9yKG1fbm9kZUl0ZXJhdG9ycywgbm9kZUl0ZXJhdG9y
cyk7CisgICAgZm9yIChhdXRvKiBpdCA6IG5vZGVJdGVyYXRvcnMpIHsKKyAgICAgICAgaWYgKGl0
LT5yb290KCkgPT0gbm9kZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKGl0KTsK
KyAgICAgICAgICAgIG5ld0RvY3VtZW50LT5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOwogICAgICAg
ICB9CiAgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVSYW5nZXNBZnRlckNoaWxkcmVu
Q2hhbmdlZChDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7Ci0gICAgaWYgKCFtX3Jhbmdlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKSwgZW5k
ID0gbV9yYW5nZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5u
b2RlQ2hpbGRyZW5DaGFuZ2VkKGNvbnRhaW5lcik7Ci0gICAgfQorICAgIGZvciAoYXV0byYgcmFu
Z2UgOiBtX3JhbmdlcykKKyAgICAgICAgcmFuZ2UtPm5vZGVDaGlsZHJlbkNoYW5nZWQoY29udGFp
bmVyKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBjb250YWluZXIpCiB7Ci0gICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yYW5nZXMuYmVnaW4oKSwgZW5kID0gbV9yYW5nZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlQ2hpbGRyZW5X
aWxsQmVSZW1vdmVkKGNvbnRhaW5lcik7Ci0gICAgfQorICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykKKyAgICAgICAgcmFuZ2UtPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFp
bmVyKTsKIAotICAgIGZvciAoYXV0byBpdCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpLCBlbmQg
PSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIGZvciAoYXV0
byogaXQgOiBtX25vZGVJdGVyYXRvcnMpIHsKICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAo
Kml0KS0+bm9kZVdpbGxCZVJlbW92ZWQoKm4pOworICAgICAgICAgICAgaXQtPm5vZGVXaWxsQmVS
ZW1vdmVkKCpuKTsKICAgICB9CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KSkgewpAQCAtMzgxNCwxNSArMzgxNiwxMSBAQCB2b2lkIERvY3VtZW50Ojpub2RlQ2hpbGRyZW5X
aWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIAogdm9pZCBEb2N1bWVudDo6
bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbikKIHsKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+
Ojpjb25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3JzRW5kID0gbV9ub2RlSXRlcmF0b3JzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxOb2RlSXRlcmF0b3IqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X25vZGVJdGVyYXRvcnMuYmVnaW4oKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytpdCkKLSAg
ICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVkKG4pOworICAgIGZvciAoYXV0byogaXQgOiBt
X25vZGVJdGVyYXRvcnMpCisgICAgICAgIGl0LT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKIAotICAg
IGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgcmFuZ2VzRW5kID0gbV9yYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9
IHJhbmdlc0VuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKLSAgICB9CisgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICByYW5n
ZS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKSkgewogICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubm9kZVdpbGxCZVJlbW92
ZWQobik7CkBAIC0zODcwLDExICszODY4LDggQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVy
Z2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIAogdm9pZCBEb2N1bWVudDo6dGV4
dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQogewotICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5n
ZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQp
LT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHJhbmdlIDog
bV9yYW5nZXMpCisgICAgICAgIHJhbmdlLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3Jh
bW1hciBjaGVja2luZy4KIH0KQEAgLTQzNzYsOSArNDM3MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRv
Y3VtZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUoKQogewogICAgIGRvY3VtZW50V2lsbEJlY29t
ZUluYWN0aXZlKCk7CiAKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9k
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxl
bWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnRXaWxs
U3VzcGVuZEZvclBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fZG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnRX
aWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIENsZWFy
IHRoZSB1cGRhdGUgZmxhZyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIHRoZSB2aWV3cG9ydCBhcmd1
bWVudHMgdXBkYXRlCkBAIC00Mzk2LDkgKzQzOTAsOCBAQCB2b2lkIERvY3VtZW50Ojpkb2N1bWVu
dERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKQogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVu
dHM7CiAgICAgY29weVRvVmVjdG9yKG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cywgZWxlbWVudHMpOwotICAgIFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGVsZW1l
bnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1l
bnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPmRvY3VtZW50RGlkUmVz
dW1lRnJvbVBhZ2VDYWNoZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IGVsZW1lbnRzKQor
ICAgICAgICBlbGVtZW50LT5kb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAg
IGlmIChyZW5kZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXcoKS0+c2V0SXNJbldpbmRvdyh0
cnVlKTsKQEAgLTQ0MjIsOSArNDQxNSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQ
YWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6
Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJh
dG9yIGVuZCA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGkgPSBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVt
ZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5tZWRpYVZvbHVtZURp
ZENoYW5nZSgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fbWVkaWFWb2x1bWVDYWxsYmFj
a0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQog
CiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQq
IGUpCkBAIC00NDQ1LDkgKzQ0MzcsOCBAQCB2b2lkIERvY3VtZW50OjpzdG9yYWdlQmxvY2tpbmdT
dGF0ZURpZENoYW5nZSgpCiAKIHZvaWQgRG9jdW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlk
Q2hhbmdlKCkgCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVs
ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnByaXZhdGVC
cm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cHJpdmF0
ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJG
b3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0
NzYsOSArNDQ2Nyw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRv
ciBlbmQgPSBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZEVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBt
X2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+Y2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogI2VuZGlmCiAKQEAgLTUwMjQsOCArNTAxNCw4
IEBAIHZvaWQgRG9jdW1lbnQ6OmFkZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNh
bmRpZGF0ZVNpemUpCiB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpCiB7
CiAgICAgVmVjdG9yPFRleHRBdXRvU2l6aW5nS2V5PiBub2Rlc0ZvclJlbW92YWw7Ci0gICAgZm9y
IChhdXRvIGl0ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0
b1NpemVkTm9kZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4
dEF1dG9TaXppbmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvIGl0IDog
bV90ZXh0QXV0b1NpemVkTm9kZXMpIHsKKyAgICAgICAgUmVmUHRyPFRleHRBdXRvU2l6aW5nVmFs
dWU+IHZhbHVlID0gaXQudmFsdWU7CiAgICAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIG5vZGVzIGlu
IHRoZSBjb2xsZWN0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldwogICAgICAgICAvLyBjYW5kaWRhdGUg
c2l6ZS4KICAgICAgICAgaWYgKCF2YWx1ZSkKQEAgLTUwMzMsNyArNTAyMyw3IEBAIHZvaWQgRG9j
dW1lbnQ6OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKIAogICAgICAgICB2YWx1ZS0+YWRqdXN0
Tm9kZVNpemVzKCk7CiAgICAgICAgIGlmICghdmFsdWUtPm51bU5vZGVzKCkpCi0gICAgICAgICAg
ICBub2Rlc0ZvclJlbW92YWwuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgbm9kZXNGb3JS
ZW1vdmFsLmFwcGVuZChpdC5rZXkpOwogICAgIH0KICAgICB1bnNpZ25lZCBjb3VudCA9IG5vZGVz
Rm9yUmVtb3ZhbC5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCkBAIC01MDQyLDggKzUwMzIsNyBAQCB2b2lkIERvY3VtZW50Ojp2YWxpZGF0ZUF1dG9TaXpp
bmdOb2RlcygpCiAgICAgCiB2b2lkIERvY3VtZW50OjpyZXNldEF1dG9TaXppbmdOb2RlcygpCiB7
Ci0gICAgZm9yIChhdXRvIGl0ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0g
bV90ZXh0QXV0b1NpemVkTm9kZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBS
ZWZQdHI8VGV4dEF1dG9TaXppbmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IG1fdGV4dEF1dG9TaXplZE5vZGVzLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
ICh2YWx1ZSkKICAgICAgICAgICAgIHZhbHVlLT5yZXNldCgpOwogICAgIH0KQEAgLTU0NTcsOSAr
NTQ0Niw5IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAgICAg
CiAgICAgLy8gNC4gRm9yIGVhY2ggZGVzY2VuZGFudCBpbiBkZXNjZW5kYW50cywgZW1wdHkgZGVz
Y2VuZGFudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBzdGFjaywgYW5kIHF1ZXVlIGEKICAgICAvLyB0
YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJi
bGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgotICAgIGZvciAoRGVxdWU8
UmVmUHRyPERvY3VtZW50Pj46Oml0ZXJhdG9yIGkgPSBkZXNjZW5kYW50cy5iZWdpbigpOyBpICE9
IGRlc2NlbmRhbnRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgKCppKS0+Y2xlYXJGdWxsc2NyZWVu
RWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZl
bnRRdWV1ZShpLT5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRlc2NlbmRhbnRz
KSB7CisgICAgICAgIGRvY3VtZW50LT5jbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKKyAg
ICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGRvY3VtZW50Lmdl
dCgpKTsKICAgICB9CiAKICAgICAvLyA1LiBXaGlsZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVz
ZSBzdWJzdGVwczoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250610</attachid>
            <date>2015-04-12 10:12:07 -0700</date>
            <delta_ts>2015-04-13 22:49:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143600-20150413021112.patch</filename>
            <type>text/plain</type>
            <size>13669</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2JjMTNmNTdmZDZkMTYz
YTk5ZWQ1N2I2ZDgxOTg4YWVjYmMwNmJlZC4uOGI5MjQ4ODFjZmQyYjE2NDM3MzE1NWIzYzBmYTAx
YjU2NzA1MWE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE1LTA0LTEyICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp2aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNzQmFz
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3Jz
VG9OZXdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUmFuZ2Vz
QWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVX
aWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRSZW1vdmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHROb2RlU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3Vt
ZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp2YWxpZGF0ZUF1dG9TaXppbmdOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVzZXRBdXRvU2l6aW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondl
YmtpdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphYnNvbHV0
ZVJlZ2lvbkZvckV2ZW50VGFyZ2V0cyk6CisKIDIwMTUtMDQtMTEgIE1hdHQgQmFrZXIgIDxtYXR0
YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNyZWF0ZSBjb250ZW50
IHZpZXcgYW5kIGRldGFpbHMgc2lkZWJhciBmb3IgRnJhbWVzIHRpbWVsaW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAppbmRleCAzNzgwMGY2NjkxNTE0NDJkMWIyMTg0OWE3ODA3NTlkY2RjNWE2Y2Zl
Li5hZTkwYmRjM2VkMmRlN2ZhZWU0MmU0OWMwNTIyM2U2ZmViZmM2M2JhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKQEAgLTE1NzMsOCArMTU3Myw4IEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0
ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGVsZW1lbnQpCiB2
b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkKIHsKICAgICBkaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnZpc2liaWxpdHljaGFuZ2VFdmVudCwgZmFs
c2UsIGZhbHNlKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFj
a0VsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fdmlzaWJpbGl0eVN0YXRlQ2FsbGJhY2tFbGVtZW50
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKTsK
KyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrRWxlbWVu
dHMpCisgICAgICAgIGVsZW1lbnQtPnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKTsKIH0KIAogUGFn
ZVZpc2liaWxpdHlTdGF0ZSBEb2N1bWVudDo6cGFnZVZpc2liaWxpdHlTdGF0ZSgpIGNvbnN0CkBA
IC0yODE0LDE2ICsyODE0LDIyIEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NCYXNlRWxlbWVudCgp
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBocmVmID0gbnVsbHB0cjsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcqIHRhcmdldCA9IG51bGxwdHI7CiAgICAgYXV0byBiYXNlRGVzY2VuZGFudHMgPSBk
ZXNjZW5kYW50c09mVHlwZTxIVE1MQmFzZUVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8g
YmFzZSA9IGJhc2VEZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBiYXNlRGVzY2VuZGFudHMuZW5k
KCk7IGJhc2UgIT0gZW5kICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgKytiYXNlKSB7CisgICAgZm9y
IChhdXRvJiBiYXNlIDogYmFzZURlc2NlbmRhbnRzKSB7CiAgICAgICAgIGlmICghaHJlZikgewot
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UtPmZhc3RHZXRBdHRy
aWJ1dGUoaHJlZkF0dHIpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBiYXNlLmZhc3RHZXRBdHRyaWJ1dGUo
aHJlZkF0dHIpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAg
ICAgICAgIGhyZWYgPSAmdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBi
YXNlLT5mYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bGwoKSkKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBiYXNl
LmZhc3RHZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlz
TnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gJnZhbHVlOworICAgICAgICAgICAg
ICAgIGlmIChocmVmKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzc2OCwzNCArMzc3NCwzMCBAQCB2b2lkIERvY3VtZW50
OjpkZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKiBuaSkKIAogdm9pZCBEb2N1bWVudDo6
bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUqIG5vZGUsIERvY3VtZW50KiBuZXdE
b2N1bWVudCkKIHsKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+IG5vZGVJdGVyYXRvcnNMaXN0
ID0gbV9ub2RlSXRlcmF0b3JzOwotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46OmNvbnN0X2l0
ZXJhdG9yIG5vZGVJdGVyYXRvcnNFbmQgPSBub2RlSXRlcmF0b3JzTGlzdC5lbmQoKTsKLSAgICBm
b3IgKEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm9kZUl0ZXJh
dG9yc0xpc3QuYmVnaW4oKTsgaXQgIT0gbm9kZUl0ZXJhdG9yc0VuZDsgKytpdCkgewotICAgICAg
ICBpZiAoKCppdCktPnJvb3QoKSA9PSBub2RlKSB7Ci0gICAgICAgICAgICBkZXRhY2hOb2RlSXRl
cmF0b3IoKml0KTsKLSAgICAgICAgICAgIG5ld0RvY3VtZW50LT5hdHRhY2hOb2RlSXRlcmF0b3Io
Kml0KTsKKyAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKKyAgICBjb3B5
VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKKyAgICBmb3IgKGF1dG8q
IGl0IDogbm9kZUl0ZXJhdG9ycykgeworICAgICAgICBpZiAoaXQtPnJvb3QoKSA9PSBub2RlKSB7
CisgICAgICAgICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgICAgICAgICAgbmV3RG9j
dW1lbnQtPmF0dGFjaE5vZGVJdGVyYXRvcihpdCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVJhbmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5v
ZGUmIGNvbnRhaW5lcikKIHsKLSAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBtX3Jhbmdlcy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPm5vZGVDaGlsZHJlbkNoYW5nZWQo
Y29udGFpbmVyKTsKLSAgICB9CisgICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQorICAg
ICAgICByYW5nZS0+bm9kZUNoaWxkcmVuQ2hhbmdlZChjb250YWluZXIpOwogfQogCiB2b2lkIERv
Y3VtZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5l
cikKIHsKLSAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8g
aXQgPSBtX3Jhbmdlcy5iZWdpbigpLCBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgKCppdCktPm5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoY29udGFp
bmVyKTsKLSAgICB9CisgICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICBy
YW5nZS0+bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChjb250YWluZXIpOwogCi0gICAgZm9yIChh
dXRvIGl0ID0gbV9ub2RlSXRlcmF0b3JzLmJlZ2luKCksIGVuZCA9IG1fbm9kZUl0ZXJhdG9ycy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgZm9yIChhdXRvKiBpdCA6IG1fbm9kZUl0ZXJh
dG9ycykgewogICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVt
b3ZlZCgqbik7CisgICAgICAgICAgICBpdC0+bm9kZVdpbGxCZVJlbW92ZWQoKm4pOwogICAgIH0K
IAogICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CkBAIC0zODE0LDE1ICsz
ODE2LDExIEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFp
bmVyTm9kZSYgY29udGFpbmVyKQogCiB2b2lkIERvY3VtZW50Ojpub2RlV2lsbEJlUmVtb3ZlZChO
b2RlJiBuKQogewotICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIG5v
ZGVJdGVyYXRvcnNFbmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdp
bigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5kOyArK2l0KQotICAgICAgICAoKml0KS0+bm9kZVdp
bGxCZVJlbW92ZWQobik7CisgICAgZm9yIChhdXRvKiBpdCA6IG1fbm9kZUl0ZXJhdG9ycykKKyAg
ICAgICAgaXQtPm5vZGVXaWxsQmVSZW1vdmVkKG4pOwogCi0gICAgaWYgKCFtX3Jhbmdlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciByYW5nZXNF
bmQgPSBtX3Jhbmdlcy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gcmFuZ2VzRW5kOyArK2l0KQot
ICAgICAgICAgICAgKCppdCktPm5vZGVXaWxsQmVSZW1vdmVkKG4pOwotICAgIH0KKyAgICBmb3Ig
KGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCisgICAgICAgIHJhbmdlLT5ub2RlV2lsbEJlUmVtb3Zl
ZChuKTsKIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CiAgICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKQEAgLTM4MzcsNyAr
MzgzNSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG4pCiB2b2lk
IERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKQorICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDog
bV9yYW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dEluc2VydGVkKHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKICAgICB9CiAKQEAgLTM4NDgsNyArMzg0Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRl
eHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykKKyAgICAgICAgZm9yIChhdXRvKiByYW5n
ZSA6IG1fcmFuZ2VzKQogICAgICAgICAgICAgcmFuZ2UtPnRleHRSZW1vdmVkKHRleHQsIG9mZnNl
dCwgbGVuZ3RoKTsKICAgICB9CiAKQEAgLTM4NjEsNyArMzg1OSw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnRleHROb2Rlc01lcmdlZChUZXh0KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAg
aWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgTm9kZVdpdGhJbmRleCBvbGROb2Rl
V2l0aEluZGV4KG9sZE5vZGUpOwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9yYW5nZXMp
CisgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKICAgICAgICAgICAgIHJhbmdl
LT50ZXh0Tm9kZXNNZXJnZWQob2xkTm9kZVdpdGhJbmRleCwgb2Zmc2V0KTsKICAgICB9CiAKQEAg
LTM4NzAsMTEgKzM4NjgsOCBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQoVGV4dCog
b2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogCiB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0
KFRleHQqIG9sZE5vZGUpCiB7Ci0gICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsK
LSAgICAgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5n
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPnRleHROb2Rl
U3BsaXQob2xkTm9kZSk7Ci0gICAgfQorICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykK
KyAgICAgICAgcmFuZ2UtPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNr
aW5nLgogfQpAQCAtNDM3Niw5ICs0MzcxLDggQEAgdm9pZCBEb2N1bWVudDo6ZG9jdW1lbnRXaWxs
U3VzcGVuZEZvclBhZ2VDYWNoZSgpCiB7CiAgICAgZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUo
KTsKIAotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVsZW1lbnQq
Pjo6aXRlcmF0b3IgaSA9IG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5kb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9kb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja0VsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudFdpbGxTdXNwZW5k
Rm9yUGFnZUNhY2hlKCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gQ2xlYXIgdGhlIHVwZGF0
ZSBmbGFnIHRvIGJlIGFibGUgdG8gY2hlY2sgaWYgdGhlIHZpZXdwb3J0IGFyZ3VtZW50cyB1cGRh
dGUKQEAgLTQzOTYsOSArNDM5MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1l
RnJvbVBhZ2VDYWNoZSgpCiB7CiAgICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtZW50czsKICAgICBj
b3B5VG9WZWN0b3IobV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLCBlbGVtZW50
cyk7Ci0gICAgVmVjdG9yPEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gZWxlbWVudHMuZW5kKCk7
Ci0gICAgZm9yIChWZWN0b3I8RWxlbWVudCo+OjppdGVyYXRvciBpID0gZWxlbWVudHMuYmVnaW4o
KTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgKCppKS0+ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFn
ZUNhY2hlKCk7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogZWxlbWVudHMpCisgICAgICAgIGVs
ZW1lbnQtPmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpOwogCiAgICAgaWYgKHJlbmRl
clZpZXcoKSkKICAgICAgICAgcmVuZGVyVmlldygpLT5zZXRJc0luV2luZG93KHRydWUpOwpAQCAt
NDQyMiw5ICs0NDE1LDggQEAgdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1
c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCogZSkKIAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1
bWVEaWRDaGFuZ2UoKSAKIHsKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0g
bV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEVs
ZW1lbnQqPjo6aXRlcmF0b3IgaSA9IG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgICgqaSktPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7
CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMp
CisgICAgICAgIGVsZW1lbnQtPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCogZSkKQEAgLTQ0
NDUsOSArNDQzNyw4IEBAIHZvaWQgRG9jdW1lbnQ6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hh
bmdlKCkKIAogdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKSAK
IHsKLSAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9wcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8RWxlbWVudCo+
OjppdGVyYXRvciBpdCA9IG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+cHJpdmF0ZUJyb3dzaW5nU3Rh
dGVEaWRDaGFuZ2UoKTsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX3ByaXZhdGVCcm93c2lu
Z1N0YXRlQ2hhbmdlZEVsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZSgpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQpAQCAtNDQ3Niw5ICs0NDY3
LDggQEAgdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCogZSkKIAogdm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZCgpCiB7Ci0gICAgSGFzaFNldDxFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1f
Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxl
bWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Y2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5jYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkKCk7CiB9CiAjZW5kaWYKIApAQCAtNTAyNCw4ICs1MDE0LDggQEAgdm9pZCBE
b2N1bWVudDo6YWRkQXV0b1NpemluZ05vZGUoTm9kZSogbm9kZSwgZmxvYXQgY2FuZGlkYXRlU2l6
ZSkKIHZvaWQgRG9jdW1lbnQ6OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKIHsKICAgICBWZWN0
b3I8VGV4dEF1dG9TaXppbmdLZXk+IG5vZGVzRm9yUmVtb3ZhbDsKLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3RleHRBdXRvU2l6ZWROb2Rlcy5iZWdpbigpLCBlbmQgPSBtX3RleHRBdXRvU2l6ZWROb2Rl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0QXV0b1Npemlu
Z1ZhbHVlPiB2YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6
IG1fdGV4dEF1dG9TaXplZE5vZGVzKSB7CisgICAgICAgIFRleHRBdXRvU2l6aW5nVmFsdWUqIHZh
bHVlID0ga2V5VmFsdWVQYWlyLnZhbHVlLmdldCgpOwogICAgICAgICAvLyBVcGRhdGUgYWxsIHRo
ZSBub2RlcyBpbiB0aGUgY29sbGVjdGlvbiB0byByZWZsZWN0IHRoZSBuZXcKICAgICAgICAgLy8g
Y2FuZGlkYXRlIHNpemUuCiAgICAgICAgIGlmICghdmFsdWUpCkBAIC01MDMzLDE3ICs1MDIzLDE1
IEBAIHZvaWQgRG9jdW1lbnQ6OnZhbGlkYXRlQXV0b1NpemluZ05vZGVzKCkKIAogICAgICAgICB2
YWx1ZS0+YWRqdXN0Tm9kZVNpemVzKCk7CiAgICAgICAgIGlmICghdmFsdWUtPm51bU5vZGVzKCkp
Ci0gICAgICAgICAgICBub2Rlc0ZvclJlbW92YWwuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAg
ICAgbm9kZXNGb3JSZW1vdmFsLmFwcGVuZChrZXlWYWx1ZVBhaXIua2V5KTsKICAgICB9Ci0gICAg
dW5zaWduZWQgY291bnQgPSBub2Rlc0ZvclJlbW92YWwuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBtX3RleHRBdXRvU2l6ZWROb2Rlcy5y
ZW1vdmUobm9kZXNGb3JSZW1vdmFsW2ldKTsKKyAgICBmb3IgKGF1dG8mIGtleSA6IG5vZGVzRm9y
UmVtb3ZhbCkKKyAgICAgICAgbV90ZXh0QXV0b1NpemVkTm9kZXMucmVtb3ZlKGtleSk7CiB9CiAg
ICAgCiB2b2lkIERvY3VtZW50OjpyZXNldEF1dG9TaXppbmdOb2RlcygpCiB7Ci0gICAgZm9yIChh
dXRvIGl0ID0gbV90ZXh0QXV0b1NpemVkTm9kZXMuYmVnaW4oKSwgZW5kID0gbV90ZXh0QXV0b1Np
emVkTm9kZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGV4dEF1
dG9TaXppbmdWYWx1ZT4gdmFsdWUgPSBpdC0+dmFsdWU7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IG1fdGV4dEF1dG9TaXplZE5vZGVzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmICh2YWx1ZSkKICAg
ICAgICAgICAgIHZhbHVlLT5yZXNldCgpOwogICAgIH0KQEAgLTU0NTcsOSArNTQ0NSw5IEBAIHZv
aWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAgICAgCiAgICAgLy8gNC4g
Rm9yIGVhY2ggZGVzY2VuZGFudCBpbiBkZXNjZW5kYW50cywgZW1wdHkgZGVzY2VuZGFudCdzIGZ1
bGxzY3JlZW4gZWxlbWVudCBzdGFjaywgYW5kIHF1ZXVlIGEKICAgICAvLyB0YXNrIHRvIGZpcmUg
YW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0
ZSBzZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgotICAgIGZvciAoRGVxdWU8UmVmUHRyPERvY3Vt
ZW50Pj46Oml0ZXJhdG9yIGkgPSBkZXNjZW5kYW50cy5iZWdpbigpOyBpICE9IGRlc2NlbmRhbnRz
LmVuZCgpOyArK2kpIHsKLSAgICAgICAgKCppKS0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNr
KCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShpLT5n
ZXQoKSk7CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRlc2NlbmRhbnRzKSB7CisgICAgICAg
IGRvY3VtZW50LT5jbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKKyAgICAgICAgYWRkRG9j
dW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGRvY3VtZW50LmdldCgpKTsKICAgICB9
CiAKICAgICAvLyA1LiBXaGlsZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczoK
QEAgLTYxMDksMTcgKzYwOTcsMTcgQEAgRG9jdW1lbnQ6OlJlZ2lvbkZpeGVkUGFpciBEb2N1bWVu
dDo6YWJzb2x1dGVSZWdpb25Gb3JFdmVudFRhcmdldHMoY29uc3QgRXZlbnRUYXIKICAgICBSZWdp
b24gdGFyZ2V0UmVnaW9uOwogICAgIGJvb2wgaW5zaWRlRml4ZWRQb3NpdGlvbiA9IGZhbHNlOwog
Ci0gICAgZm9yIChhdXRvIGl0IDogKnRhcmdldHMpIHsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVl
UGFpciA6ICp0YXJnZXRzKSB7CiAgICAgICAgIExheW91dFJlY3Qgcm9vdFJlbGF0aXZlQm91bmRz
OwogCi0gICAgICAgIGlmIChpczxEb2N1bWVudD4oaXQua2V5KSkgewotICAgICAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGl0LmtleSk7CisgICAgICAgIGlm
IChpczxEb2N1bWVudD4oa2V5VmFsdWVQYWlyLmtleSkpIHsKKyAgICAgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihrZXlWYWx1ZVBhaXIua2V5KTsKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudCA9PSB0aGlzKQogICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2
ZUJvdW5kcyA9IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGluc2lkZUZpeGVkUG9zaXRpb24p
OwogICAgICAgICAgICAgZWxzZSBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5vd25l
ckVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBlbGVtZW50
LT5hYnNvbHV0ZUV2ZW50SGFuZGxlckJvdW5kcyhpbnNpZGVGaXhlZFBvc2l0aW9uKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChpczxFbGVtZW50PihpdC5rZXkpKSB7Ci0gICAgICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oaXQua2V5KTsKKyAgICAgICAgfSBlbHNlIGlm
IChpczxFbGVtZW50PihrZXlWYWx1ZVBhaXIua2V5KSkgeworICAgICAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGtleVZhbHVlUGFpci5rZXkpOwogICAgICAgICAg
ICAgcm9vdFJlbGF0aXZlQm91bmRzID0gZWxlbWVudC0+YWJzb2x1dGVFdmVudEhhbmRsZXJCb3Vu
ZHMoaW5zaWRlRml4ZWRQb3NpdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>