<?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>80311</bug_id>
          
          <creation_ts>2012-03-05 12:07:55 -0800</creation_ts>
          <short_desc>Handle more Gesture* events by performing scrolls on the correct target ScrollableArea</short_desc>
          <delta_ts>2012-11-30 09:51:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79827</dependson>
    
    <dependson>80201</dependson>
          <blocked>67822</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Kroeger">rjkroege</reporter>
          <assigned_to name="Robert Kroeger">rjkroege</assigned_to>
          <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>570926</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-05 12:07:55 -0800</bug_when>
    <thetext>Currently, EventHandler::handleGestureEvent dispatches only GestureScrollUpdate events by converting them into wheel events but does not handle other scrolling-related GestureEvents. This patch corrects this by invoking fling-scroll on the same ScrollableArea as the target of the wheel event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570929</commentid>
    <comment_count>1</comment_count>
      <attachid>130176</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-05 12:11:24 -0800</bug_when>
    <thetext>Created attachment 130176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570933</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 12:15:15 -0800</bug_when>
    <thetext>Attachment 130176 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;S...&quot; exit_code: 1
Source/WebCore/page/EventHandler.h:340:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.h:341:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/page/EventHandler.h:341:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/ScrollTypes.h:109:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:250:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:254:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2383:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/page/EventHandler.cpp:2382:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2383:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2385:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2386:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2387:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2388:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2389:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2390:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2391:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2392:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2393:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2394:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2395:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2396:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2397:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2397:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/EventHandler.cpp:2398:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2398:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/EventHandler.cpp:2399:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2400:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2401:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2402:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2403:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2404:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2430:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2431:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/page/EventHandler.cpp:2437:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/rendering/RenderBox.cpp:677:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/ScrollableArea.cpp:77:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 36 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570949</commentid>
    <comment_count>3</comment_count>
      <attachid>130176</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-05 12:34:46 -0800</bug_when>
    <thetext>Comment on attachment 130176
Patch

Attachment 130176 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11817155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570956</commentid>
    <comment_count>4</comment_count>
      <attachid>130176</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-05 12:38:45 -0800</bug_when>
    <thetext>Comment on attachment 130176
Patch

Attachment 130176 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11819133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571060</commentid>
    <comment_count>5</comment_count>
      <attachid>130176</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-05 14:45:54 -0800</bug_when>
    <thetext>Comment on attachment 130176
Patch

Attachment 130176 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11808756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573452</commentid>
    <comment_count>6</comment_count>
      <attachid>130743</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-07 18:18:08 -0800</bug_when>
    <thetext>Created attachment 130743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573458</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-07 18:28:00 -0800</bug_when>
    <thetext>jamesr@: we&apos;ve discussed the previous rev of this CL. I think that this approach is more in keeping with what we discussed. Could you have a look and give me some comments on approach. I would like to think that this code is largely complete -- it works when combined with 79827 -- but I would not consider the patch committable until I add some additional tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573477</commentid>
    <comment_count>8</comment_count>
      <attachid>130743</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-07 18:56:16 -0800</bug_when>
    <thetext>Comment on attachment 130743
Patch

The additional statefulness in EventHandler feels a bit weird. I see you have a FIXME for it. Perhaps fixing it would be more effort/churn than it&apos;s worth at this point, but it&apos;s worth looking in to splitting the actual scrolling logic out of handleWheelEvent() so the rest of the world doesn&apos;t have to fake out event types and call into that function.

Otherwise at a high level this looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573834</commentid>
    <comment_count>9</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-08 07:58:41 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 130743 [details])
&gt; The additional statefulness in EventHandler feels a bit weird. I see you have a FIXME for it. Perhaps fixing it would be more effort/churn than it&apos;s worth at this point, but it&apos;s worth looking in to splitting the actual scrolling logic out of handleWheelEvent() so the rest of the world doesn&apos;t have to fake out event types and call into that function.

I think we are in agreement with there&apos;s something &quot;unclean&quot; with the existing code (even without this patch I think.)

I think the ScrollableArea::scroll() interface is too restrictive to support trackpad or touchscreen scrolling. And the historical solution to this would seem to be to have been to overload PlatformWheelEvent with extra state (e.g. m_phase) that tells the downstream recipient how to scroll. This could probably stand to be fixed: there could be a richer &quot;scroll&quot; interface that tells the ScrollableArea how to scroll. 

I don&apos;t really want to do this in this patch. I&apos;m not even sure how it should be done. I added https://bugs.webkit.org/show_bug.cgi?id=80596 to track this concept.


I think that overloading PlatformWheelEvent would make this patch cleaner and eliminate the additional state in EventHandler.


&gt; 
&gt; Otherwise at a high level this looks fine.

Excellent. I&apos;ll clean it up further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575177</commentid>
    <comment_count>10</comment_count>
      <attachid>131095</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-09 13:48:15 -0800</bug_when>
    <thetext>Created attachment 131095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575180</commentid>
    <comment_count>11</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-09 13:49:32 -0800</bug_when>
    <thetext>jamesr@: perhaps you could take a look please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575216</commentid>
    <comment_count>12</comment_count>
      <attachid>131095</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-09 14:20:58 -0800</bug_when>
    <thetext>Comment on attachment 131095
Patch

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

I think this&apos;ll work fine for now. Left a number of nits to deal with.

&gt; Source/WebCore/page/EventHandler.cpp:2370
&gt; +    TemporaryChange&lt;PlatformEvent::Type&gt; baseEventType(m_baseEventType, gestureEvent.type());

can you put a FIXME here linked to the ::scroll() bug, if that is what&apos;ll resolve this?

&gt; Source/WebCore/page/EventHandler.cpp:2417
&gt; +    PlatformWheelEvent syntheticWheelEvent(point, globalPoint, gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / tickDivisor, gestureEvent.deltaY() / tickDivisor, granularity, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey());

WebKit doesn&apos;t have a fixed line limit length but I&apos;m finding this one pretty crazy. Would you mind breaking it up into a few lines - maybe one for the point, one for all the deltas, one for granularity, and one for all the modifier keys?

&gt; Source/WebCore/platform/ScrollAnimator.cpp:102
&gt; +                scroll(VerticalScrollbar, ScrollByPixelVelocity, 0, -deltaY);

this is indented too far, should be 4 spaces

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:382
&gt; +    , m_firstVelocity(0.f)

this should just be 0 (see http://www.webkit.org/coding/coding-style.html#float-suffixes)

&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:393
&gt; +void ScrollAnimatorNone::fireUpAnAnimation(float x, float y)

this might get you an unused variable warning on some platforms (I forget which set the compile flags that generate this). The standard ways to avoid this are to either omit the parameter names, comment them out, or use the UNUSED_PARAM() macro in the function body

&gt; Source/WebCore/platform/ScrollAnimatorNone.h:142
&gt; +    virtual void fireUpAnAnimation(float, float);

should this take a FloatPoint? most things that take an x/y pair do

&gt; Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp:85
&gt; +    float m_f1;
&gt; +    float m_f2;

are these an X/Y pair? if so can they be a FloatPoint or FloatSize? That will also give you zero-initialization for free

&gt; Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp:145
&gt; +    scrollAnimatorNone.scroll(HorizontalScrollbar, ScrollByPixelVelocity, 111.f, -42.f);
&gt; +    scrollAnimatorNone.scroll(VerticalScrollbar, ScrollByPixelVelocity, 222.f, 42.f);

drop the .f&apos;s here and in the rest of the test files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575317</commentid>
    <comment_count>13</comment_count>
      <attachid>131095</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-09 16:09:53 -0800</bug_when>
    <thetext>Comment on attachment 131095
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2370
&gt;&gt; +    TemporaryChange&lt;PlatformEvent::Type&gt; baseEventType(m_baseEventType, gestureEvent.type());
&gt; 
&gt; can you put a FIXME here linked to the ::scroll() bug, if that is what&apos;ll resolve this?

yes.  done.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2417
&gt;&gt; +    PlatformWheelEvent syntheticWheelEvent(point, globalPoint, gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / tickDivisor, gestureEvent.deltaY() / tickDivisor, granularity, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey());
&gt; 
&gt; WebKit doesn&apos;t have a fixed line limit length but I&apos;m finding this one pretty crazy. Would you mind breaking it up into a few lines - maybe one for the point, one for all the deltas, one for granularity, and one for all the modifier keys?

thank you. I have suffered through this since the first time I got told in review to un-break it.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.cpp:102
&gt;&gt; +                scroll(VerticalScrollbar, ScrollByPixelVelocity, 0, -deltaY);
&gt; 
&gt; this is indented too far, should be 4 spaces

oops. done, next patch.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:382
&gt;&gt; +    , m_firstVelocity(0.f)
&gt; 
&gt; this should just be 0 (see http://www.webkit.org/coding/coding-style.html#float-suffixes)

done.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.cpp:393
&gt;&gt; +void ScrollAnimatorNone::fireUpAnAnimation(float x, float y)
&gt; 
&gt; this might get you an unused variable warning on some platforms (I forget which set the compile flags that generate this). The standard ways to avoid this are to either omit the parameter names, comment them out, or use the UNUSED_PARAM() macro in the function body

thanks. done next patch.

&gt;&gt; Source/WebCore/platform/ScrollAnimatorNone.h:142
&gt;&gt; +    virtual void fireUpAnAnimation(float, float);
&gt; 
&gt; should this take a FloatPoint? most things that take an x/y pair do

done, next patch.

&gt;&gt; Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp:85
&gt;&gt; +    float m_f2;
&gt; 
&gt; are these an X/Y pair? if so can they be a FloatPoint or FloatSize? That will also give you zero-initialization for free

cool. done.

&gt;&gt; Source/WebKit/chromium/tests/ScrollAnimatorNoneTest.cpp:145
&gt;&gt; +    scrollAnimatorNone.scroll(VerticalScrollbar, ScrollByPixelVelocity, 222.f, 42.f);
&gt; 
&gt; drop the .f&apos;s here and in the rest of the test files

done, next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575339</commentid>
    <comment_count>14</comment_count>
      <attachid>131134</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-09 16:37:59 -0800</bug_when>
    <thetext>Created attachment 131134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575440</commentid>
    <comment_count>15</comment_count>
      <attachid>131134</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 21:45:40 -0800</bug_when>
    <thetext>Comment on attachment 131134
Patch

Clearing flags on attachment: 131134

Committed r110371: &lt;http://trac.webkit.org/changeset/110371&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575441</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 21:45:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575681</commentid>
    <comment_count>17</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-11 03:48:46 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; All reviewed patches have been landed.  Closing bug.

Looks like this patch broke a GTK layout test: platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html

http://build.webkit.org/results/GTK%20Linux%2064-bit%20Release/r110371%20(19734)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576008</commentid>
    <comment_count>18</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-12 01:55:37 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; All reviewed patches have been landed.  Closing bug.
&gt; 
&gt; Looks like this patch broke a GTK layout test: platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html
&gt; 
&gt; http://build.webkit.org/results/GTK%20Linux%2064-bit%20Release/r110371%20(19734)/results.html

See bug 80825</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581249</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-16 21:23:01 -0700</bug_when>
    <thetext>Now that I know more about how this system works I&apos;m thinking this patch is wrong and at least some of it needs to be reverted:

*) For wheel interactions, we need to hit test + scroll on every intermediate point, not just the beginning of the interaction. Given that, there&apos;s no point in distinguishing a begin for a scroll type that&apos;s really a wheel.  That said, for gestures that really are touch interactions (like finger-dragging on a touchpad) you definitely do want to hit test only on the start of the event and retain knowledge of the hit target since that is the hit target 

*) Overriding GestureEnd to mean fling is an ugly ugly hack and not really compatible with what android does. We have a separate gesture type for fling start and fling cancel in the chromium WebKit API - GestureFlingStart / GestureFlingCancel.  We should use those.

I&apos;ll take a closer look tomorrow with a fresh set of eyes and see what should be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581491</commentid>
    <comment_count>20</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-18 14:38:25 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Now that I know more about how this system works I&apos;m thinking this patch is wrong and at least some of it needs to be reverted:
&gt; 
&gt; *) For wheel interactions, we need to hit test + scroll on every intermediate point, not just the beginning of the interaction. Given that, there&apos;s no point in distinguishing a begin for a scroll type that&apos;s really a wheel.  That said, for gestures that really are touch interactions (like finger-dragging on a touchpad) you definitely do want to hit test only on the start of the event and retain knowledge of the hit target since that is the hit target 
&gt; 
&gt; *) Overriding GestureEnd to mean fling is an ugly ugly hack and not really compatible with what android does. We have a separate gesture type for fling start and fling cancel in the chromium WebKit API - GestureFlingStart / GestureFlingCancel.  We should use those.
&gt; 
&gt; I&apos;ll take a closer look tomorrow with a fresh set of eyes and see what should be done.

I think we discussed. This bug is obsolete. I will clean up the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780182</commentid>
    <comment_count>21</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-11-30 09:51:10 -0800</bug_when>
    <thetext>Cleanup sufficient to close the bug is in http://trac.webkit.org/changeset/135638</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130176</attachid>
            <date>2012-03-05 12:11:24 -0800</date>
            <delta_ts>2012-03-07 18:18:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80311-20120305151122.patch</filename>
            <type>text/plain</type>
            <size>8414</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggZjEwZTRhYmUxZTJlMTVkNDdlM2UwOWJjODA2MGRkYWYyYTg3YTA1ZS4uZmRkMDVj
ZDY0MmMxYjZkOTNkYTlmNWZiNmM5OTAwMzg2YTA1MGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMjMyLDI5ICsyMzIsMzcgQEAgcHVibGljOgogfTsKICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgV2hlZWxFdmVudDo6
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiog
c3RvcE5vZGUpCitzdGF0aWMgaW5saW5lIFNjcm9sbEdyYW51bGFyaXR5IHdoZWVsR3JhbnVsYXJp
dHlUb1Njcm9sbEdyYW51bGFyaXR5KFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogewotICAgIGlmICghZGVsdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICBz
d2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBXaGVlbEV2ZW50OjpQYWdlOgorICAgICAg
ICByZXR1cm4gU2Nyb2xsQnlQYWdlOworICAgIGNhc2UgV2hlZWxFdmVudDo6TGluZToKKyAgICAg
ICAgcmV0dXJuIFNjcm9sbEJ5TGluZTsKKyAgICBjYXNlIFdoZWVsRXZlbnQ6OlBpeGVsOgorICAg
ICAgICByZXR1cm4gU2Nyb2xsQnlQaXhlbDsKKyAgICB9CisgICAgcmV0dXJuIFNjcm9sbEJ5UGl4
ZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0
aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUq
KiBzdG9wTm9kZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgInNjcm9sbE5vZGUgJWRcbiIsIGdyYW51
bGFyaXR5KTsKICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICAvLyBGaW5kIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBib3guCisJZnByaW50
ZihzdGRlcnIsICJzY3JvbGxOb2RlIGNvbnRpbnVlZCBvbndhcmRzLCBoYWQgYSByZW5kZXJlciVk
XG4iLCBncmFudWxhcml0eSk7CiAgICAgUmVuZGVyQm94KiBlbmNsb3NpbmdCb3ggPSBub2RlLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdCb3goKTsKLQogICAgIGZsb2F0IGFic0RlbHRhID0gZGVsdGEg
PiAwID8gZGVsdGEgOiAtZGVsdGE7CisgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRl
bHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBhYnNEZWx0YSwgc3RvcE5vZGUpOworfQogICAgIAotICAgIGlmIChncmFudWxhcml0eSA9
PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwo
ZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xs
QnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotCi0gICAgaWYgKGdyYW51bGFyaXR5ID09IFdo
ZWVsRXZlbnQ6OkxpbmUpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0
YSA8IDAgPyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeUxp
bmUsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0KLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxF
dmVudDo6UGl4ZWwpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8
IDAgPyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVs
LCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotICAgICAgICAKLSAgICByZXR1cm4gZmFsc2U7CitzdGF0
aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgV2hlZWxFdmVudDo6R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Ny
b2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiogc3RvcE5v
ZGUpCit7CisgICAgaWYgKCFkZWx0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBzY3JvbGxOb2RlKGRlbHRhLCB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxh
cml0eShncmFudWxhcml0eSksIHBvc2l0aXZlRGlyZWN0aW9uLCBuZWdhdGl2ZURpcmVjdGlvbiwg
bm9kZSwgc3RvcE5vZGUpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKQEAgLTIzNjIsMTEgKzIz
NzAsNiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUq
IHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCogd2hlZWxFdgogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
aGl0IHRlc3QgYW5kIGdvIHRvIHRoZSBjb3JyZWN0IHN1YmZyYW1lIHJhdGhlciB0aGFuIAotICAg
IC8vIGFsd2F5cyBzZW5kaW5nIGdlc3R1cmVzIHRvIHRoZSBtYWluIGZyYW1lIG9ubHkuIFdlIHNo
b3VsZCBhbHNvIGVuc3VyZQotICAgIC8vIHRoYXQgaWYgYSBmcmFtZSBnZXRzIGEgZ2VzdHVyZSBi
ZWdpbiBnZXN0dXJlLCBpdCBnZXRzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gZW5kIGdlc3R1
cmUgYXMgd2VsbC4KLQogICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgewogICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CiAgICAgICAgIGJyZWFrOwpAQCAtMjM3
Niw4ICsyMzc5LDMxIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICAgICAgcmV0dXJuIGhh
bmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoZ2VzdHVyZUV2ZW50KTsKICAgICBjYXNlIFBsYXRmb3Jt
RXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
U2Nyb2xsQmVnaW46Ci0gICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgor
CQkvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLiBQb3NzaWJseSBkb2Vzbid0IG5lZWQgdG8gYmUu
CisJCWJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDogewor
CQkvLyBQcmVzdW1wdGlvbjogVGhlIGNhbGxlciBiYWNrIGluIENocm9tZSBpcyBzdXBwcmVzc2lu
ZyB0aGUgZXZlbnQgaWYgdGhlIHZlbG9jaXR5IGlzIGJlbG93IHRoZSB0aHJlc2hvbGQuCisgICAg
CQlOb2RlKiBub2RlID0gbV9sYXRjaGVkV2hlZWxFdmVudE5vZGUuZ2V0KCk7CisJCU5vZGUqIHN0
b3BOb2RlID0gbV9wcmV2aW91c1doZWVsU2Nyb2xsZWROb2RlLmdldCgpOworCQlpZiAobm9kZSkg
eworCQkJZnByaW50ZihzdGRlcnIsICJvbiB0aGUgbm9kZSBicmFuY2hcbiIpOworCQkJLy8gRklY
TUU6IGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHdpZGdldHMuCisJCQkvLyBTdGVwIDIuCisJCQkv
LyBJIG1pZ2h0IGhhdmUgdGhlIGZsaW5nIGJhY2t3YXJkcy4KKwkJCXNjcm9sbE5vZGUoZ2VzdHVy
ZUV2ZW50LmRlbHRhWCgpLCBTY3JvbGxCeVZlbG9jaXR5LCBTY3JvbGxMZWZ0LCBTY3JvbGxSaWdo
dCwgbm9kZSwgJnN0b3BOb2RlKTsKKwkJCXNjcm9sbE5vZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWSgp
LCBTY3JvbGxCeVZlbG9jaXR5LCBTY3JvbGxVcCwgU2Nyb2xsRG93biwgbm9kZSwgJnN0b3BOb2Rl
KTsKKwkJfSBlbHNlIHsKKwkJCS8vIFNjcm9sbCB0aGUgdmlldworICAgCQkJRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS0+dmlldygpOworIAkJCSBpZiAoIXZpZXcpCisJCQkJcmV0dXJuIGZhbHNl
OworCQkJLy8gRklYTUU6IHRoaXMgc3VnZ2VzdHMgdGhhdCBJJ20gZG9pbmcgc29tZXRoaW5nIHdy
b25nLi4uCisJCQlTY3JvbGxhYmxlQXJlYSogYXJlYSA9IHN0YXRpY19jYXN0PFNjcm9sbGFibGVB
cmVhKj4odmlldyk7CisJCQlhcmVhLT5zY3JvbGwoU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5VmVsb2Np
dHksIGdlc3R1cmVFdmVudC5kZWx0YVgoKSk7CisJCQlhcmVhLT5zY3JvbGwoU2Nyb2xsRG93biwg
U2Nyb2xsQnlWZWxvY2l0eSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpKTsKKwkJfQogICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtMjQwMSwxMiArMjQyNywxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
R2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKICAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNv
ciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVsdGlwbGllcjsKLSAgICAvLyBGSVhNRTogUmVw
bGFjZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0aGUgYWJvdmUgZml4bWUgaW4g
aGFuZGxlR2VzdHVyZUV2ZW50KCkgaGFzIGJlZW4gYWRkcmVzc2VkLgorCWNvbnN0IGJvb2wgb3Jp
Z2luYWxVc2VMYXRjaGVkV2hlZWxFdmVudE5vZGUgPSBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9k
ZTsKKwltX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSA9IHRydWU7CiAgICAgYm9vbCBkZWZhdWx0
UHJldmVudGVkID0gZmFsc2U7CiAgICAgSW50UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQucG9zaXRpb24oKS55KCkpOwogICAgIEludFBvaW50IGds
b2JhbFBvaW50KGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGlj
V2hlZWxFdmVudChwb2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2Vz
dHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwg
Z2VzdHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2
ZW50LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKICAgICBkZWZhdWx0
UHJldmVudGVkIHw9IGhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7CisJbV91
c2VMYXRjaGVkV2hlZWxFdmVudE5vZGUgPSBvcmlnaW5hbFVzZUxhdGNoZWRXaGVlbEV2ZW50Tm9k
ZTsKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKaW5kZXggMDk4MWU0MTcxMTgxYTEyNTJhNzRhMDBlNzE3MGI5MjllYTgw
MDQ2Mi4uMTQwYWY3YjRiMzI2YmEwMjMyMjRjZDBkOTljYmY0OWNmZWVjMmFmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0zMzcsNiArMzM3LDEwIEBAIHByaXZhdGU6CiAKICAg
ICBib29sIGNhcHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVzRHJhZ2dp
bmc7IH0KIAorCWJvb2wgY2hlY2tGb3JEb2N1bWVudEFuZFJlbmRlcmVyKCk7CisJTm9kZSogbm9k
ZUF0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUsIGJvb2wqKTsKKworCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQogICAgIE5TVmlldyAqbW91c2VE
b3duVmlld0lmU3RpbGxHb29kKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5o
CmluZGV4IGEwMjE5OGQwYjFhMDg4ZTFjNzBlM2Y0OWNjMWEzZWU0ZTQwYjEyOTEuLmJkMzliNWQx
YWZhMWQwMWMwOTM5Mjc5ODkwMGNjODI5MGY1ZDExNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVHlwZXMuaApAQCAtMTA1LDcgKzEwNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgU2Nyb2xsQnlMaW5lLAogICAgICAgICBTY3JvbGxCeVBhZ2UsCiAgICAgICAgIFNjcm9s
bEJ5RG9jdW1lbnQsCi0gICAgICAgIFNjcm9sbEJ5UGl4ZWwKKyAgICAgICAgU2Nyb2xsQnlQaXhl
bCwKKwlTY3JvbGxCeVZlbG9jaXR5LAogICAgIH07CiAKICAgICBlbnVtIFNjcm9sbEVsYXN0aWNp
dHkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDY2
ZjcyOTJiMmYyMWQzOGUwY2I4MWVlMDE1MzkyZjEyOGVlNDdiOTEuLmYwOGU1OWM3ZGFjZWIyZGUx
NDRlMzIxMTE1ZThkMWFmZjQ0NzNmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAKQEAgLTc0LDYgKzc0LDggQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0
U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4pCiAKIGJvb2wgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyAgZnByaW50ZihzdGRlcnIsICJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsIGlkICVsbHggZ2FudWw6ICVkXG4iLCAobG9uZyBsb25nKXRoaXMs
IGdyYW51bGFyaXR5KTsKKwogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwog
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyOwogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAg
fHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKQEAgLTEwMSw2ICsxMDMsOCBAQCBib29sIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYQogICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKICAgICAgICAgc3RlcCA9
IHNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xs
QnlWZWxvY2l0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKGRpcmVjdGlvbiA9
PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKaW5kZXggNTQxMjhmOTdkOTA5OGQwY2NkZDg5ZDQzOTM2MTRiOTky
YTk2OGI3Ny4uYWNjN2U2MzZkY2RlN2Y0Y2EwMjdjMWFiODc1MjU5ZGJlY2E5OTcxZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTY3Myw2ICs2NzMsNyBAQCBpbnQg
UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIAogYm9vbCBSZW5k
ZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQogeworCWZw
cmludGYoc3RkZXJyLCAiYm94PiAlbGx4IGVudGVyZWQgUmVuZGVyQm94OjpzY3JvbGwgJWRcbiIs
IChsb25nIGxvbmcpdGhpcywgZ3JhbnVsYXJpdHkpOwogICAgIFJlbmRlckxheWVyKiBsID0gbGF5
ZXIoKTsKICAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcikpIHsKICAgICAgICAgaWYgKHN0b3BOb2RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130743</attachid>
            <date>2012-03-07 18:18:08 -0800</date>
            <delta_ts>2012-03-09 13:48:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80311-20120307211807.patch</filename>
            <type>text/plain</type>
            <size>19293</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkN2U1NjU4ZTIyYWZj
NmUxMjc1ZjlkNzk2ZTUxNTk0NjcyNGMwNy4uNmRkMzAxMDljOWMyMTlmNWZhYmM5ODY2YmY2OWZj
MmJjZGQ2MTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTA3ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBIYW5kbGUgbW9y
ZSBHZXN0dXJlKiBldmVudHMgYnkgcGVyZm9ybWluZyBzY3JvbGxzIG9uIHRoZSBjb3JyZWN0IHRh
cmdldCBTY3JvbGxhYmxlQXJlYSBbbm90IGZvciByZXZpZXcgeWV0XQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAzMTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMjAxICsgbW9yZSB0byBjb21lLgorCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2hlZWxHcmFudWxhcml0
eVRvU2Nyb2xsR3JhbnVsYXJpdHkpOiBSZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsTm9kZSk6IFJlZmFjdG9yaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRs
ZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0V2hl
ZWxFdmVudEhhbmRsZXIpOiBBZGRlZCBkaXNwYXRjaGluZworICAgICAgICB3aGVlbCBldmVudHMg
Y29ycmVzcG9uZGluZyB0byBHZXN0dXJlU2Nyb2xsRW5kIGV2ZW50cy4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KTogQWRkZWQgZGlzcGF0Y2hpbmcg
b2Ygd2hlZWwKKyAgICAgICAgZXZlbnRzIGZvciBHZXN0dXJlU2Nyb2xsQmVnaW4gYW5kIEdlc3R1
cmVTY3JvbGxFbmQgZXZlbnRzLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVHZXN0dXJlVGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZVNjcm9sbFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRs
ZUdlc3R1cmVTY3JvbGxDb3JlKTogUmVmYWN0b3JpbmcuCisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0vUGxh
dGZvcm1XaGVlbEV2ZW50Lmg6IEFkZGVkIG9uZSBhZGRpdGlvbmFsIGVudW0uCisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQpOiBBZGRlZCBkaXNwYXRjaGluZyBvZiBhZGRpdGlvbmFs
CisgICAgICAgIHdoZWVsIGV2ZW50IHR5cGUuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yTm9uZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmZp
cmVVcEFuQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGwpOiBEaXNwYXRjaGVzIGFuaW1hdGlvbnMgYXMgbmVj
ZXNzYXJ5LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOgorICAgICAg
ICAoU2Nyb2xsQW5pbWF0b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5o
OiBBZGRlZCBlbnVtIGZvciBhZGRpdGlvbmFsIHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpzY3JvbGwpOgorCiAyMDEyLTAzLTA3ICBBcnVuIFBhdG9sZSAgPGJtZjgzNEBtb3Rvcm9sYS5j
b20+CiAKICAgICAgICAgSFRNTFRyYWNrRWxlbWVudC5pZGwgZG9lc24ndCBoYXZlIGRlZmF1bHQg
YXR0cmlidXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGYxMGU0YWJl
MWUyZTE1ZDQ3ZTNlMDliYzgwNjBkZGFmMmE4N2EwNWUuLmUxNjlkOWI0ZTg0MTUwN2JiMWRhMjll
OTQwOGY1ZWI4ZGRmMGVjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTIzMiwyOSArMjMyLDI4IEBAIHB1YmxpYzoKIH07CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBi
b29sIHNjcm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBTY3JvbGxEaXJlY3Rpb24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlv
biBuZWdhdGl2ZURpcmVjdGlvbiwgTm9kZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQorc3RhdGlj
IGlubGluZSBTY3JvbGxHcmFudWxhcml0eSB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxh
cml0eShXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBzd2l0Y2gg
KGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBXaGVlbEV2ZW50OjpQYWdlOgorICAgICAgICByZXR1
cm4gU2Nyb2xsQnlQYWdlOworICAgIGNhc2UgV2hlZWxFdmVudDo6TGluZToKKyAgICAgICAgcmV0
dXJuIFNjcm9sbEJ5TGluZTsKKyAgICBjYXNlIFdoZWVsRXZlbnQ6OlBpeGVsOgorICAgICAgICBy
ZXR1cm4gU2Nyb2xsQnlQaXhlbDsKKyAgICB9CisgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBT
Y3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9w
Tm9kZSkKIHsKICAgICBpZiAoIWRlbHRhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAg
ICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgLy8gRmluZCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYm94LgogICAgIFJlbmRlckJveCogZW5j
bG9zaW5nQm94ID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nQm94KCk7Ci0KICAgICBmbG9h
dCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwotICAgIAotICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotCi0gICAgaWYgKGdyYW51
bGFyaXR5ID09IFdoZWVsRXZlbnQ6OkxpbmUpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gt
PnNjcm9sbChkZWx0YSA8IDAgPyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9u
LCBTY3JvbGxCeUxpbmUsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0KLSAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gV2hlZWxFdmVudDo6UGl4ZWwpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNj
cm9sbChkZWx0YSA8IDAgPyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBT
Y3JvbGxCeVBpeGVsLCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotICAgICAgICAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0
aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBhYnNEZWx0YSwg
c3RvcE5vZGUpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKQEAgLTMxMiw2ICszMTEsOSBAQCBF
dmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3RvdWNoUHJl
c3NlZChmYWxzZSkKICNlbmRpZgogICAgICwgbV9tYXhNb3VzZU1vdmVkRHVyYXRpb24oMCkKKyNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgLCBtX2N1cnJlbnRHZXN0dXJlRXZlbnRTdWJU
eXBlKFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSkKKyNlbmRpZgogewogfQogCkBAIC0zNTksNiArMzYx
LDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKICAgICBtX29yaWdpbmF0aW5nVG91Y2hQ
b2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgogICAgIG1fbWF4TW91c2VNb3ZlZER1cmF0aW9u
ID0gMDsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgbV9jdXJyZW50R2VzdHVyZUV2
ZW50U3ViVHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZTsKKyNlbmRpZgogfQogCiB2b2lkIEV2
ZW50SGFuZGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSogbm9kZVRvQmVSZW1vdmVkKQpAQCAt
MjMxMyw3ICsyMzE4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogICAgIC8vIEluc3RlYWQsIHRoZSBoYW5kbGVycyBz
aG91bGQga25vdyBjb252ZXJ0IHZlcnRpY2FsIHNjcm9sbHMKICAgICAvLyBhcHByb3ByaWF0ZWx5
LgogICAgIFBsYXRmb3JtV2hlZWxFdmVudCBldmVudCA9IGU7Ci0gICAgaWYgKHNob3VsZFR1cm5W
ZXJ0aWNhbFRpY2tzSW50b0hvcml6b250YWwocmVzdWx0KSkKKyAgICBpZiAoIW1fY3VycmVudEdl
c3R1cmVFdmVudFN1YlR5cGUgJiYgc2hvdWxkVHVyblZlcnRpY2FsVGlja3NJbnRvSG9yaXpvbnRh
bChyZXN1bHQpKQogICAgICAgICBldmVudCA9IGV2ZW50LmNvcHlUdXJuaW5nVmVydGljYWxUaWNr
c0ludG9Ib3Jpem9udGFsVGlja3MoKTsKIAogICAgIGlmIChub2RlKSB7CkBAIC0yMzQ2LDEzICsy
MzUxLDE0IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9k
ZSogc3RhcnROb2RlLCBXaGVlbEV2ZW50KiB3aGVlbEV2CiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBOb2RlKiBzdG9wTm9kZSA9IG1fcHJldmlvdXNXaGVlbFNjcm9sbGVkTm9kZS5nZXQoKTsK
KyAgICBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSA9IG1fY3VycmVudEdlc3R1cmVFdmVu
dFN1YlR5cGUgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCA/IFNjcm9sbEJ5UGl4
ZWxWZWxvY2l0eSA6IHdoZWVsR3JhbnVsYXJpdHlUb1Njcm9sbEdyYW51bGFyaXR5KHdoZWVsRXZl
bnQtPmdyYW51bGFyaXR5KCkpOwogICAgIAogICAgIC8vIEJyZWFrIHVwIGludG8gdHdvIHNjcm9s
bHMgaWYgd2UgbmVlZCB0by4gIERpYWdvbmFsIG1vdmVtZW50IG9uIAogICAgIC8vIGEgTWFjQm9v
ayBwcm8gaXMgYW4gZXhhbXBsZSBvZiBhIDItZGltZW5zaW9uYWwgbW91c2Ugd2hlZWwgZXZlbnQg
KHdoZXJlIGJvdGggZGVsdGFYIGFuZCBkZWx0YVkgY2FuIGJlIHNldCkuCi0gICAgaWYgKHNjcm9s
bE5vZGUod2hlZWxFdmVudC0+cmF3RGVsdGFYKCksIHdoZWVsRXZlbnQtPmdyYW51bGFyaXR5KCks
IFNjcm9sbExlZnQsIFNjcm9sbFJpZ2h0LCBzdGFydE5vZGUsICZzdG9wTm9kZSkpCisgICAgaWYg
KHNjcm9sbE5vZGUod2hlZWxFdmVudC0+cmF3RGVsdGFYKCksIGdyYW51bGFyaXR5LCBTY3JvbGxM
ZWZ0LCBTY3JvbGxSaWdodCwgc3RhcnROb2RlLCAmc3RvcE5vZGUpKQogICAgICAgICB3aGVlbEV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIAotICAgIGlmIChzY3JvbGxOb2RlKHdoZWVs
RXZlbnQtPnJhd0RlbHRhWSgpLCB3aGVlbEV2ZW50LT5ncmFudWxhcml0eSgpLCBTY3JvbGxVcCwg
U2Nyb2xsRG93biwgc3RhcnROb2RlLCAmc3RvcE5vZGUpKQorICAgIGlmIChzY3JvbGxOb2RlKHdo
ZWVsRXZlbnQtPnJhd0RlbHRhWSgpLCBncmFudWxhcml0eSwgU2Nyb2xsVXAsIFNjcm9sbERvd24s
IHN0YXJ0Tm9kZSwgJnN0b3BOb2RlKSkKICAgICAgICAgd2hlZWxFdmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKICAgICAKICAgICBpZiAoIW1fdXNlTGF0Y2hlZFdoZWVsRXZlbnROb2RlKQpAQCAt
MjM2MiwzMiArMjM2OCw0NSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRI
YW5kbGVyKE5vZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCogd2hlZWxFdgogI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgaGl0IHRlc3QgYW5kIGdvIHRvIHRoZSBjb3JyZWN0IHN1YmZyYW1lIHJhdGhl
ciB0aGFuIAotICAgIC8vIGFsd2F5cyBzZW5kaW5nIGdlc3R1cmVzIHRvIHRoZSBtYWluIGZyYW1l
IG9ubHkuIFdlIHNob3VsZCBhbHNvIGVuc3VyZQotICAgIC8vIHRoYXQgaWYgYSBmcmFtZSBnZXRz
IGEgZ2VzdHVyZSBiZWdpbiBnZXN0dXJlLCBpdCBnZXRzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAg
Ly8gZW5kIGdlc3R1cmUgYXMgd2VsbC4KKyAgICBmcHJpbnRmKHN0ZGVyciwgImhhbmRsZUdlc3R1
cmVFdmVudCAlZCwgZGVsdGFYICVmLCBkZWx0YVkgJWZcbiIsIGdlc3R1cmVFdmVudC50eXBlKCks
IGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpKTsKKyAgICBtX2N1
cnJlbnRHZXN0dXJlRXZlbnRTdWJUeXBlID0gZ2VzdHVyZUV2ZW50LnR5cGUoKTsKKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwogCiAgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgpKSB7CiAg
ICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKKyAgICAgICAgLy8gRklYTUU6
IFN0b3AgYW5pbWF0aW9uIGhlcmUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6R2VzdHVyZVRhcDoKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVUYXAoZ2VzdHVy
ZUV2ZW50KTsKKyAgICAgICAgcmVzdWx0ID0gaGFuZGxlR2VzdHVyZVRhcChnZXN0dXJlRXZlbnQp
OwogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZToKLSAgICAgICAg
cmV0dXJuIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoZ2VzdHVyZUV2ZW50KTsKKyAgICAgICAg
cmVzdWx0ID0gIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoZ2VzdHVyZUV2ZW50KTsKICAgICBj
YXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6Ci0gICAgY2FzZSBQbGF0Zm9ybUV2
ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46Ci0gICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
U2Nyb2xsRW5kOgogICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1
cmVTY3JvbGxCZWdpbjogeworICAgICAgICBjb25zdCBib29sIG9yaWdpbmFsVXNlTGF0Y2hlZFdo
ZWVsRXZlbnROb2RlID0gbV91c2VMYXRjaGVkV2hlZWxFdmVudE5vZGU7CisgICAgICAgIG1fdXNl
TGF0Y2hlZFdoZWVsRXZlbnROb2RlID0gZmFsc2U7CisgICAgICAgIGJvb2wgZGVmYXVsdFByZXZl
bnRlZCA9IGhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGdlc3R1cmVFdmVudCwgU2Nyb2xsQnlQaXhl
bFdoZWVsRXZlbnQpOworICAgICAgICBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSA9IG9yaWdp
bmFsVXNlTGF0Y2hlZFdoZWVsRXZlbnROb2RlOworICAgICAgICByZXN1bHQgPSAgZGVmYXVsdFBy
ZXZlbnRlZDsKKyAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5k
OiB7CisgICAgICAgIGNvbnN0IGJvb2wgb3JpZ2luYWxVc2VMYXRjaGVkV2hlZWxFdmVudE5vZGUg
PSBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZTsKKyAgICAgICAgbV91c2VMYXRjaGVkV2hlZWxF
dmVudE5vZGUgPSB0cnVlOworICAgICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBoYW5kbGVH
ZXN0dXJlU2Nyb2xsQ29yZShnZXN0dXJlRXZlbnQsIFNjcm9sbEJ5UGl4ZWxWZWxvY2l0eVdoZWVs
RXZlbnQpOworICAgICAgICBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSA9IG9yaWdpbmFsVXNl
TGF0Y2hlZFdoZWVsRXZlbnROb2RlOworICAgICAgICByZXN1bHQgPSAgZGVmYXVsdFByZXZlbnRl
ZDsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgbV9jdXJyZW50R2VzdHVyZUV2ZW50U3ViVHlw
ZSA9IFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8g
bm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0IHRlc3RpbmcKLSAgICAvLyBoYXMg
YmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlIGluIGhhbmRsZUdlc3R1cmVFdmVudCgp
LgorICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0ZXN0IG11bHRp
cGxlIHRpbWVzLgogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwogICAgIFBsYXRm
b3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0
dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1
cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1l
dGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCwg
LyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50
LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgp
LCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjQwMCwxNCArMjQxOSwyMSBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZUV2ZW50KQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9s
bFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogeworICAg
IC8vIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSBnZW5lcmFsIHNjcm9sbCBjb21tYW5kIHRoYXQg
aXMgc2VwYXJhdGUgZnJvbSBhbnkgZXZlbnQgc3RydWN0dXJlLgorICAgIGNvbnN0IGJvb2wgb3Jp
Z2luYWxVc2VMYXRjaGVkV2hlZWxFdmVudE5vZGUgPSBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9k
ZTsKKyAgICBtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSA9IHRydWU7CisgICAgYm9vbCBkZWZh
dWx0UHJldmVudGVkID0gaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoZ2VzdHVyZUV2ZW50LCBTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCk7CisgICAgbV91c2VMYXRjaGVkV2hlZWxFdmVudE5vZGUgPSBv
cmlnaW5hbFVzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZTsKKyAgICByZXR1cm4gZGVmYXVsdFByZXZl
bnRlZDsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFBsYXRmb3JtV2hlZWxFdmVu
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorewogICAgIGNvbnN0IGZsb2F0IHRpY2tEaXZpc29y
ID0gKGZsb2F0KVdoZWVsRXZlbnQ6OnRpY2tNdWx0aXBsaWVyOwotICAgIC8vIEZJWE1FOiBSZXBs
YWNlIHRoaXMgaW50ZXJpbSBpbXBsZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBpbiBo
YW5kbGVHZXN0dXJlRXZlbnQoKSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAgYm9vbCBkZWZhdWx0
UHJldmVudGVkID0gZmFsc2U7CiAgICAgSW50UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQucG9zaXRpb24oKS55KCkpOwogICAgIEludFBvaW50IGds
b2JhbFBvaW50KGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGlj
V2hlZWxFdmVudChwb2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2Vz
dHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwg
Z2VzdHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2
ZW50LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICBkZWZhdWx0
UHJldmVudGVkIHw9IGhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7Ci0gICAg
cmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRp
Y1doZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBnZXN0dXJlRXZlbnQuZGVsdGFYKCksIGdl
c3R1cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpIC8gdGlja0Rpdmlzb3Is
IGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLCBncmFudWxhcml0eSwgZ2VzdHVy
ZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5h
bHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSk7CisgICAgcmV0dXJuIGhhbmRsZVdoZWVs
RXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmgKaW5kZXggMDk4MWU0MTcxMTgxYTEyNTJhNzRhMDBlNzE3MGI5MjllYTgwMDQ2
Mi4uMDRiOTZjNTg1ZWExMDYyMWJjYWVmZjJlMWNkYjM2MWYxNWVlOGU4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRm9jdXNEaXJl
Y3Rpb24uaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUg
IlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAjaW5jbHVk
ZSAiVGV4dEdyYW51bGFyaXR5LmgiCkBAIC0zNDcsNiArMzQ4LDEwIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc0tleUV2ZW50QWxsb3dlZEluRnVsbFNjcmVlbihjb25zdCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQmKSBjb25zdDsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAg
IGJvb2wgaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQm
LCBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFudWxhcml0eSk7CisjZW5kaWYKKwogICAgIEZyYW1lKiBt
X2ZyYW1lOwogCiAgICAgYm9vbCBtX21vdXNlUHJlc3NlZDsKQEAgLTQzMiw2ICs0MzcsOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV90b3VjaFByZXNzZWQ7CiAjZW5kaWYKICAgICBkb3VibGUgbV9t
YXhNb3VzZU1vdmVkRHVyYXRpb247CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgbV9jdXJyZW50R2VzdHVyZUV2ZW50U3ViVHlwZTsKKyNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCA2NGUwZjI0NjMyYzRhODE2ZjQ0N2RjNzU3NmZiZGFj
NjEyOWJhOGYwLi4wODRiNDU1NTM1ZjcwMWZkZGIxOGU0MTRkOWE1OWU5YzM5ZmRmZTk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApAQCAtNjQsNyAr
NjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gdXAgYW5kIGRvd24gKHlvdSBnZXQg
dGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgdGhlIHVzZXIgd2FzIGNsaWNraW5nIGluIGEgc2Nyb2xs
YmFyIHRyYWNrIHRvIHBhZ2UgdXAgb3IgcGFnZSBkb3duKS4KICAgICBlbnVtIFBsYXRmb3JtV2hl
ZWxFdmVudEdyYW51bGFyaXR5IHsKICAgICAgICAgU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCwKLSAg
ICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQKKyAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVs
RXZlbnQsCisgICAgICAgIFNjcm9sbEJ5UGl4ZWxWZWxvY2l0eVdoZWVsRXZlbnQKICAgICB9Owog
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggMjMwMDBj
M2U0Zjg3ZWQ2MGViZDQ2NWYxMGNmOGM5MzIxZGRjN2JjMC4uY2NiM2Q5ODBkNjNkYWNiNTQwMzcz
Yjc2MGE3MWM3NjI5YzZjYzcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcApAQCAtOTgsNiArOTgsMTIgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgICAgIHx8IChkZWx0
YVkgPCAwICYmIG1heEZvcndhcmRTY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApCiAgICAgICAgIHx8
IChkZWx0YVkgPiAwICYmIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSkgewog
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBT
Y3JvbGxCeVBpeGVsVmVsb2NpdHlXaGVlbEV2ZW50KSB7CisgICAgICAgICAgICAgICAgc2Nyb2xs
KFZlcnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxCeVBpeGVsVmVsb2NpdHksIDAsIC1kZWx0YVkpOwor
ICAgICAgICAgICAgICAgIHNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3JvbGxCeVBpeGVs
VmVsb2NpdHksIDAsIC1kZWx0YVgpOworICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVkOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKGRlbHRhWSkgewogICAgICAgICAgICAgaWYgKGUuZ3Jh
bnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSB7CiAgICAgICAgICAgICAgICAg
Ym9vbCBuZWdhdGl2ZSA9IGRlbHRhWSA8IDA7CkBAIC0xMTgsNyArMTI0LDYgQEAgYm9vbCBTY3Jv
bGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUp
CiAgICAgICAgICAgICBzY3JvbGwoSG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsQnlQaXhlbCwg
aG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCksIC1kZWx0YVgpOwogICAgICAgICB9CiAg
ICAgfQotCiAgICAgcmV0dXJuIGhhbmRsZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCmluZGV4IDkxNDEzZTg1ODgxYmJjMGQxZTQ3YTEzYWUxNDBhOGY4MWUx
MTNiZGIuLjcxMTA1NjlkMTVkOTQyYWY0OWY5NTNmZjE2NGY5YTEzOGY0ZDdlMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtNDEsMTAgKzQxLDYgQEAgY2xh
c3MgRmxvYXRQb2ludDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwog
Ci0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7
Ci0jZW5kaWYKLQogY2xhc3MgU2Nyb2xsQW5pbWF0b3IgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDRhYzdm
OTcyNTcxZWU3MDIyNmU5YjA5YzY4NjQwY2JiZTQ0YTMwNWQuLmNkNTA3ZTNlYzg3MWQ2NjBmYzYy
NWMwMTFhYTYzZDdiMzZlNzliNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yTm9uZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9u
LmgiCisjaW5jbHVkZSAiVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
T3duQXJyYXlQdHIuaCIKQEAgLTM4Niw2ICszODcsMTcgQEAgU2Nyb2xsQW5pbWF0b3JOb25lOjp+
U2Nyb2xsQW5pbWF0b3JOb25lKCkKICAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgpOwog
fQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24oZmxvYXQgeCwg
ZmxvYXQgeSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZsaW5nIHN0YXJydGluZyBub3cuLi4l
ZiwgJWZcbiIsIHgsIHkpOworICAgIEZsb2F0UG9pbnQgZnAoeCwgeSk7CisgICAgaWYgKCEhbV9n
ZXN0dXJlQW5pbWF0aW9uKQorICAgICAgICBtX2dlc3R1cmVBbmltYXRpb24uY2xlYXIoKTsKKyAg
ICBtX2dlc3R1cmVBbmltYXRpb24gPSBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNy
ZWF0ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgVG91Y2hGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlOjpjcmVhdGUoZnApLCB0aGlzKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKIGJvb2wgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBm
bG9hdCBtdWx0aXBsaWVyKQogewogICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5p
bWF0b3JFbmFibGVkKCkpCkBAIC00MTEsOCArNDIzLDIwIEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JO
b25lOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyCiAgICAgY2FzZSBTY3JvbGxCeVBpeGVsOgogICAgICAgICBwYXJhbWV0ZXJzID0gUGFyYW1l
dGVycyh0cnVlLCAxMSAqIGtUaWNrVGltZSwgMiAqIGtUaWNrVGltZSwgQ3ViaWMsIDMgKiBrVGlj
a1RpbWUsIEN1YmljLCAzICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDEuMjUpOwogICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGl4
ZWxWZWxvY2l0eToKKyAgICAgICAgLy8gRklYTUU6IEdlbmVyYWxpemUgdGhlIHNjcm9sbCBpbnRl
cmZhY2UgdG8gc3VwcG9ydCBhIHJpY2hlciBzZXQgb2YgcGFyYW1ldGVycy4KKyAgICAgICAgaWYg
KG1fZmlyc3RWZWxvY2l0eVNldCkgeworICAgICAgICAgICAgZmxvYXQgeCA9IG1fZmlyc3RWZWxv
Y2l0eUlzVmVydGljYWwgPyBtdWx0aXBsaWVyIDogbV9maXJzdFZlbG9jaXR5OworICAgICAgICAg
ICAgZmxvYXQgeSA9IG1fZmlyc3RWZWxvY2l0eUlzVmVydGljYWwgPyBtX2ZpcnN0VmVsb2NpdHkg
OiBtdWx0aXBsaWVyOworICAgICAgICAgICAgZmlyZVVwQW5BbmltYXRpb24oeCwgeSk7CisgICAg
ICAgICAgICBtX2ZpcnN0VmVsb2NpdHlTZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fZmlyc3RW
ZWxvY2l0eUlzVmVydGljYWwgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fZmlyc3RWZWxvY2l0eVNldCA9IHRydWU7CisgICAgICAgICAgICBtX2ZpcnN0VmVsb2NpdHlJ
c1ZlcnRpY2FsID0gb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXI7CisgICAgICAgICAg
ICBtX2ZpcnN0VmVsb2NpdHkgPSBtdWx0aXBsaWVyOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBpbmRpdmlkdWFsIGlucHV0IHNldHRpbmcg
aXMgZGlzYWJsZWQsIGJhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5oCmluZGV4IDRjOGNjMzg4YzFjMTg0NDFkYjllOTlhZDE2Y2Q5YzYyNjgxZDVhNDIu
LjFkMzk2NDU5MjUyNDA4MTVhZjllOTYxOWVjYzBjMmYzMTcyNjdhZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCkBAIC0xMzcsNiArMTM3LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmlt
YXRvck5vbmU+Kik7CiAgICAgdm9pZCBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICB2b2lkIGZpcmVVcEFuQW5pbWF0aW9u
KGZsb2F0LCBmbG9hdCk7CiAKICAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxEYXRhOwogICAg
IFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOwpAQCAtMTQ1LDYgKzE0NiwxMCBAQCBwcm90ZWN0
ZWQ6CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiBtX2FuaW1hdGlvblRpbWVyOwogCiAg
ICAgT3duUHRyPEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbj4gbV9nZXN0dXJlQW5pbWF0
aW9uOworCisgICAgZmxvYXQgbV9maXJzdFZlbG9jaXR5OworICAgIGJvb2wgbV9maXJzdFZlbG9j
aXR5U2V0OworICAgIGJvb2wgbV9maXJzdFZlbG9jaXR5SXNWZXJ0aWNhbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCmluZGV4
IGEwMjE5OGQwYjFhMDg4ZTFjNzBlM2Y0OWNjMWEzZWU0ZTQwYjEyOTEuLjA4N2I1MGQxZTBjZTFm
MzZiNmYwOWY3OTBkMTU1MDU5ODMwMzQ4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaApAQCAtMTA1LDcgKzEwNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
U2Nyb2xsQnlMaW5lLAogICAgICAgICBTY3JvbGxCeVBhZ2UsCiAgICAgICAgIFNjcm9sbEJ5RG9j
dW1lbnQsCi0gICAgICAgIFNjcm9sbEJ5UGl4ZWwKKyAgICAgICAgU2Nyb2xsQnlQaXhlbCwKKyAg
ICAgICAgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5CiAgICAgfTsKIAogICAgIGVudW0gU2Nyb2xsRWxh
c3RpY2l0eSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5k
ZXggNjZmNzI5MmIyZjIxZDM4ZTBjYjgxZWUwMTUzOTJmMTI4ZWU0N2I5MS4uODYzY2FlYzZlNDZj
YzU0ODUyNjk2NjY1M2FkNjZlY2E5ZWFiYTk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMTAxLDkgKzEwMSwxMSBAQCBib29sIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYQogICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKICAgICAgICAgc3RlcCA9IHNjcm9sbGJh
ci0+cGl4ZWxTdGVwKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbFZl
bG9jaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAoZGlyZWN0aW9uID09IFNj
cm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0KQorICAgIGlmIChncmFudWxhcml0eSAh
PSBTY3JvbGxCeVBpeGVsVmVsb2NpdHkgJiYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJl
Y3Rpb24gPT0gU2Nyb2xsTGVmdCkpCiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsK
IAogICAgIHJldHVybiBzY3JvbGxBbmltYXRvcigpLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51
bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131095</attachid>
            <date>2012-03-09 13:48:15 -0800</date>
            <delta_ts>2012-03-09 16:37:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80311-20120309164814.patch</filename>
            <type>text/plain</type>
            <size>23819</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJhYTY0NzgxZGZiNTky
NjFmZjBjM2NkM2JmODg0ODk4YzVjMGM4Yi4uMDg1MjViNzc2OGVmYzk3MjU2NmNhODY3OWE1YTlh
ZTY2YzQ2YjhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAzLTA5ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBIYW5kbGUgbW9y
ZSBHZXN0dXJlKiBldmVudHMgYnkgcGVyZm9ybWluZyBzY3JvbGxzIG9uIHRoZSBjb3JyZWN0IHRh
cmdldCBTY3JvbGxhYmxlQXJlYSAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgwMzExCisKKyAgICAgICAgSW1wbGVtZW50IEdlc3R1cmVTY3JvbGwqIGV2
ZW50cyB2aWEgcmUtdXNlIG9mIFdoZWVsRXZlbnQgZGlzcGF0Y2guCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzIHByZXZpb3VzbHkg
c3VibWl0ZWQgYXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMjAx
IGFuZCB1bml0CisgICAgICAgIHRlc3QgYWRkZWQgYXMgcGFydCBvZiB0aGlzIHBhdGNoLgorCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2hlZWxH
cmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkpOiBSZWZhY3RvcmluZy4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hl
ZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVFdmVudCk6IEFkZGVkIEdlc3R1cmVTY3JvbGxCZWdpbiAmIEVuZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlU2Nyb2xsQ29yZSk6IFJlZmFjdG9yaW5nLgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOiBBZGRlZCBhZGRpdGlvbmFs
IHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KTogRm9yd2Fy
ZCBhZGRpdGlvbmFsIHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpTY3Jv
bGxBbmltYXRvck5vbmUpOiBIYW5kbGUgYWRkaXRpb25hbCBzY3JvbGwgdHlwZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOiAKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpzY3Jv
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOgorICAgICAgICAo
U2Nyb2xsQW5pbWF0b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOiBB
ZGRlZCBhbiBhZGRpdGlvbmFsIHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGwp
OgorCiAyMDEyLTAzLTA5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2FjaGVkUmF3UmVzb3VyY2UgYnJlYWtzIHdoZW4gdHJ5aW5nIHRvIGxvYWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYWI3YTU5ZDRjNTUzMTg2MWRmODUyOWNmY2I5YjczMWRj
MGQ0YTEzMy4uYzUxYzRhZDA5NmQzZDFmNTk0MWFkYjMzMjA0MDI4YzhmNzU0MmQzNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMy0wOSAgUm9iZXJ0
IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSGFuZGxlIG1vcmUg
R2VzdHVyZSogZXZlbnRzIGJ5IHBlcmZvcm1pbmcgc2Nyb2xscyBvbiB0aGUgY29ycmVjdCB0YXJn
ZXQgU2Nyb2xsYWJsZUFyZWEgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MDMxMQorCisgICAgICAgIEFkZGVkIGEgdW5pdCB0ZXN0IGZvciB0aGUgY2hh
bmdlcyB0byBTY3JvbGxBbmltYXRvck5vbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHR3by1jYWxs
CisgICAgICAgIHRyYW5zcG9ydCBvZiBmbGluZyBwYXJhbWV0ZXJzIGlzIGNvcnJlY3RseSBkZWxp
dmVyZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcDoKKyAgICAgICAgKE1vY2tTY3JvbGxB
bmltYXRvck5vbmUpOgorICAgICAgICAoTW9ja1Njcm9sbEFuaW1hdG9yTm9uZTo6cmVzZXQpOgor
ICAgICAgICAoTW9ja1Njcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTItMDMtMDkgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBFbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IHRp
bWUgd2hlbiBub3RpZnlpbmcgYW5pbWF0aW9uIHN0YXJ0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCAxYzExNDdiNzM2NmM2NWZmMDhkMGRkZDQ1ZjQ3YjliMjBhYjA2NzQz
Li4xOTcwZjdhY2ZjZWZmYTFkMWEzYTE5MTFkY2Q3Zjc0MDIyOTI0YWQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50Lmgi
CkBAIC0yMzIsMjkgKzIzMywyOCBAQCBwdWJsaWM6CiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJl
Y3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0
YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkgd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3Jh
bnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dp
dGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgV2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAg
cmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNlIFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAg
IHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2FzZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAg
ICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVs
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiog
c3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBSZW5kZXJCb3gq
IGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgpOwotCiAgICAg
ZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAgICAKLSAgICBp
ZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVE
aXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKLQotICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotCi0gICAgaWYgKGdyYW51
bGFyaXR5ID09IFdoZWVsRXZlbnQ6OlBpeGVsKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94
LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsQnlQaXhlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKLSAgICAgICAgCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAgPyBu
ZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWJzRGVs
dGEsIHN0b3BOb2RlKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMpCkBAIC0zMTIsNiArMzEyLDcg
QEAgRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQogICAgICwgbV90b3Vj
aFByZXNzZWQoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKDAp
CisgICAgLCBtX2Jhc2VFdmVudFR5cGUoUGxhdGZvcm1FdmVudDo6Tm9UeXBlKQogewogfQogCkBA
IC0zNTksNiArMzYwLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKICAgICBtX29yaWdp
bmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgogICAgIG1fbWF4TW91c2VN
b3ZlZER1cmF0aW9uID0gMDsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgbV9iYXNl
RXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6Tm9UeXBlOworI2VuZGlmCiB9CiAKIHZvaWQgRXZl
bnRIYW5kbGVyOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlKiBub2RlVG9CZVJlbW92ZWQpCkBAIC0y
MzEzLDcgKzIzMTcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgLy8gSW5zdGVhZCwgdGhlIGhhbmRsZXJzIHNo
b3VsZCBrbm93IGNvbnZlcnQgdmVydGljYWwgc2Nyb2xscwogICAgIC8vIGFwcHJvcHJpYXRlbHku
CiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50ID0gZTsKLSAgICBpZiAoc2hvdWxkVHVyblZl
cnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbChyZXN1bHQpKQorICAgIGlmIChtX2Jhc2VFdmVudFR5
cGUgIT0gUGxhdGZvcm1FdmVudDo6Tm9UeXBlICYmIHNob3VsZFR1cm5WZXJ0aWNhbFRpY2tzSW50
b0hvcml6b250YWwocmVzdWx0KSkKICAgICAgICAgZXZlbnQgPSBldmVudC5jb3B5VHVybmluZ1Zl
cnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbFRpY2tzKCk7CiAKICAgICBpZiAobm9kZSkgewpAQCAt
MjMzOSwyMCArMjM0MywyMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgCiAgICAgcmV0dXJuIHZpZXctPndoZWVs
RXZlbnQoZXZlbnQpOwogfQotICAgIAorCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVs
RXZlbnRIYW5kbGVyKE5vZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCogd2hlZWxFdmVudCkKIHsK
ICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhd2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIE5vZGUqIHN0b3BOb2RlID0gbV9wcmV2aW91c1doZWVsU2Nyb2xsZWROb2RlLmdldCgp
OworICAgIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gbV9iYXNlRXZlbnRUeXBlID09
IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgPyBTY3JvbGxCeVBpeGVsVmVsb2NpdHkg
OiB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0eSh3aGVlbEV2ZW50LT5ncmFudWxh
cml0eSgpKTsKICAgICAKICAgICAvLyBCcmVhayB1cCBpbnRvIHR3byBzY3JvbGxzIGlmIHdlIG5l
ZWQgdG8uICBEaWFnb25hbCBtb3ZlbWVudCBvbiAKICAgICAvLyBhIE1hY0Jvb2sgcHJvIGlzIGFu
IGV4YW1wbGUgb2YgYSAyLWRpbWVuc2lvbmFsIG1vdXNlIHdoZWVsIGV2ZW50ICh3aGVyZSBib3Ro
IGRlbHRhWCBhbmQgZGVsdGFZIGNhbiBiZSBzZXQpLgotICAgIGlmIChzY3JvbGxOb2RlKHdoZWVs
RXZlbnQtPnJhd0RlbHRhWCgpLCB3aGVlbEV2ZW50LT5ncmFudWxhcml0eSgpLCBTY3JvbGxMZWZ0
LCBTY3JvbGxSaWdodCwgc3RhcnROb2RlLCAmc3RvcE5vZGUpKQorICAgIGlmIChzY3JvbGxOb2Rl
KHdoZWVsRXZlbnQtPnJhd0RlbHRhWCgpLCBncmFudWxhcml0eSwgU2Nyb2xsTGVmdCwgU2Nyb2xs
UmlnaHQsIHN0YXJ0Tm9kZSwgJnN0b3BOb2RlKSkKICAgICAgICAgd2hlZWxFdmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAKLSAgICBpZiAoc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5yYXdE
ZWx0YVkoKSwgd2hlZWxFdmVudC0+Z3JhbnVsYXJpdHkoKSwgU2Nyb2xsVXAsIFNjcm9sbERvd24s
IHN0YXJ0Tm9kZSwgJnN0b3BOb2RlKSkKKyAgICBpZiAoc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5y
YXdEZWx0YVkoKSwgZ3JhbnVsYXJpdHksIFNjcm9sbFVwLCBTY3JvbGxEb3duLCBzdGFydE5vZGUs
ICZzdG9wTm9kZSkpCiAgICAgICAgIHdoZWVsRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgCiAgICAgaWYgKCFtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSkKQEAgLTIzNjIsMzIgKzIz
NjcsMzIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2Rl
KiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdoZWVsRXYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFtZSByYXRoZXIgdGhhbiAKLSAg
ICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFpbiBmcmFtZSBvbmx5LiBXZSBz
aG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJhbWUgZ2V0cyBhIGdlc3R1cmUg
YmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGluZwotICAgIC8vIGVuZCBnZXN0
dXJlIGFzIHdlbGwuCisgICAgVGVtcG9yYXJ5Q2hhbmdlPFBsYXRmb3JtRXZlbnQ6OlR5cGU+IGJh
c2VFdmVudFR5cGUobV9iYXNlRXZlbnRUeXBlLCBnZXN0dXJlRXZlbnQudHlwZSgpKTsKIAogICAg
IHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgewogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6
R2VzdHVyZVRhcERvd246CisgICAgICAgIC8vIEZJWE1FOiBTdG9wIGFuaW1hdGlvbiBoZXJlLgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CiAgICAg
ICAgIHJldHVybiBoYW5kbGVHZXN0dXJlVGFwKGdlc3R1cmVFdmVudCk7CiAgICAgY2FzZSBQbGF0
Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOgogICAgICAgICByZXR1cm4gaGFuZGxlR2Vz
dHVyZVNjcm9sbFVwZGF0ZShnZXN0dXJlRXZlbnQpOwogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6
R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50
OjpHZXN0dXJlU2Nyb2xsQmVnaW46CisgICAgICAgIHJldHVybiBoYW5kbGVHZXN0dXJlU2Nyb2xs
Q29yZShnZXN0dXJlRXZlbnQsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBmYWxzZSk7CiAgICAg
Y2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGdlc3R1cmVFdmVudCwgU2Nyb2xs
QnlQaXhlbFZlbG9jaXR5V2hlZWxFdmVudCwgdHJ1ZSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEZJWE1FOiBS
ZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0
IHRlc3RpbmcKLSAgICAvLyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlIGlu
IGhhbmRsZUdlc3R1cmVFdmVudCgpLgorICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUg
dG8gbm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzLgogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRl
ZCA9IGZhbHNlOwogICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVF
dmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24s
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2
ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRL
ZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsK
ICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRp
b24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlUHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hp
ZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBn
ZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjQw
MCwxNCArMjQwNSwxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogCiBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYg
Z2VzdHVyZUV2ZW50KQogeworICAgIHJldHVybiBoYW5kbGVHZXN0dXJlU2Nyb2xsQ29yZShnZXN0
dXJlRXZlbnQsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCB0cnVlKTsKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQsIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBib29sIGxhdGNoZWRXaGVlbCkKK3sKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gbGF0
Y2hlZChtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSwgbGF0Y2hlZFdoZWVsKTsKICAgICBjb25z
dCBmbG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVsdGlwbGllcjsK
LSAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0
aGUgYWJvdmUgZml4bWUgaW4gaGFuZGxlR2VzdHVyZUV2ZW50KCkgaGFzIGJlZW4gYWRkcmVzc2Vk
LgotICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwogICAgIEludFBvaW50IHBvaW50
KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgp
KTsKICAgICBJbnRQb2ludCBnbG9iYWxQb2ludChnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24o
KS54KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLnkoKSk7Ci0gICAgUGxhdGZvcm1X
aGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBnZXN0dXJl
RXZlbnQuZGVsdGFYKCksIGdlc3R1cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRh
WCgpIC8gdGlja0Rpdmlzb3IsIGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLCBT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVF
dmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFL
ZXkoKSk7Ci0gICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRp
Y1doZWVsRXZlbnQpOwotICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOworICAgIFBsYXRmb3Jt
V2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2ZW50KHBvaW50LCBnbG9iYWxQb2ludCwgZ2VzdHVy
ZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCksIGdlc3R1cmVFdmVudC5kZWx0
YVgoKSAvIHRpY2tEaXZpc29yLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCkgLyB0aWNrRGl2aXNvciwg
Z3JhbnVsYXJpdHksIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtl
eSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCkpOworICAg
IHJldHVybiBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1doZWVsRXZlbnQpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDA5ODFlNDE3MTE4MWExMjUyYTc0
YTAwZTcxNzBiOTI5ZWE4MDA0NjIuLjJlZGJhOTBhYmZlNTIxMjg4NzI0MTNhMjBkY2NiZjgxMDVm
YjcxYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRleHRFdmVudElu
cHV0VHlwZS5oIgogI2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgpAQCAtMzQ3LDYgKzM0OCwx
MCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNLZXlFdmVudEFsbG93ZWRJbkZ1bGxTY3JlZW4oY29u
c3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JikgY29uc3Q7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKKyAgICBib29sIGhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiwgUGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHksIGJvb2wg
bGF0Y2hlZFdoZWVsKTsKKyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBib29s
IG1fbW91c2VQcmVzc2VkOwpAQCAtNDMyLDYgKzQzNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3RvdWNoUHJlc3NlZDsKICNlbmRpZgogICAgIGRvdWJsZSBtX21heE1vdXNlTW92ZWREdXJhdGlv
bjsKKyAgICBQbGF0Zm9ybUV2ZW50OjpUeXBlIG1fYmFzZUV2ZW50VHlwZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmgKaW5kZXggNjRlMGYyNDYzMmM0YTgxNmY0NDdkYzc1NzZmYmRhYzYxMjliYThmMC4u
MDg0YjQ1NTUzNWY3MDFmZGRiMThlNDE0ZDlhNTllOWMzOWZkZmU5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTY0LDcgKzY0LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIHVwIGFuZCBkb3duICh5b3UgZ2V0IHRoZSBzYW1lIGJl
aGF2aW9yIGFzIGlmIHRoZSB1c2VyIHdhcyBjbGlja2luZyBpbiBhIHNjcm9sbGJhciB0cmFjayB0
byBwYWdlIHVwIG9yIHBhZ2UgZG93bikuCiAgICAgZW51bSBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFu
dWxhcml0eSB7CiAgICAgICAgIFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQsCi0gICAgICAgIFNjcm9s
bEJ5UGl4ZWxXaGVlbEV2ZW50CisgICAgICAgIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAorICAg
ICAgICBTY3JvbGxCeVBpeGVsVmVsb2NpdHlXaGVlbEV2ZW50CiAgICAgfTsKIAogI2lmIFBMQVRG
T1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDIzMDAwYzNlNGY4N2VkNjBl
YmQ0NjVmMTBjZjhjOTMyMWRkYzdiYzAuLmNjYjNkOTgwZDYzZGFjYjU0MDM3M2I3NjBhNzFjNzYy
OWM2Y2M3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAK
QEAgLTk4LDYgKzk4LDEyIEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogICAgICAgICB8fCAoZGVsdGFZIDwgMCAmJiBt
YXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKQogICAgICAgICB8fCAoZGVsdGFZID4g
MCAmJiBtYXhCYWNrd2FyZFNjcm9sbERlbHRhLmhlaWdodCgpID4gMCkpIHsKICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQaXhl
bFZlbG9jaXR5V2hlZWxFdmVudCkgeworICAgICAgICAgICAgICAgIHNjcm9sbChWZXJ0aWNhbFNj
cm9sbGJhciwgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAwLCAtZGVsdGFZKTsKKyAgICAgICAgICAg
ICAgICBzY3JvbGwoSG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAw
LCAtZGVsdGFYKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlZDsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChkZWx0YVkpIHsKICAgICAgICAgICAgIGlmIChlLmdyYW51bGFyaXR5KCkg
PT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRp
dmUgPSBkZWx0YVkgPCAwOwpAQCAtMTE4LDcgKzEyNCw2IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogICAgICAgICAg
ICAgc2Nyb2xsKEhvcml6b250YWxTY3JvbGxiYXIsIFNjcm9sbEJ5UGl4ZWwsIGhvcml6b250YWxT
Y3JvbGxiYXItPnBpeGVsU3RlcCgpLCAtZGVsdGFYKTsKICAgICAgICAgfQogICAgIH0KLQogICAg
IHJldHVybiBoYW5kbGVkOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAppbmRleCAwOTk4MTBjZWY1NzFiNWY0MDAwYTFjZjQxNzQ4OWJhOWJiNzQxOWU5Li5hM2M0
Y2E3ZTAyYjYzNjBjYzM2ZGI2MTdkOTRiMDNiZGZmNDcyNTg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTQxLDEwICs0MSw2IEBAIGNsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIAotI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKLWNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwotI2VuZGlmCi0K
IGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxT
Y3JvbGxBbmltYXRvcj4gY3JlYXRlKFNjcm9sbGFibGVBcmVhKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAppbmRleCA3M2MzODg4ZDY1YThkNDNk
ZmU1MDYyNmQwNmY1ZjZiM2ExNTBmOGJjLi44YzMyZTU2ZmYzMmU5ODdlMDdmZjc4NDBiNDM0Y2E3
YTVhMTQwODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5jcHAKQEAgLTM3OSw2ICszNzksOSBAQCBTY3JvbGxBbmltYXRvck5vbmU6OlNjcm9sbEFu
aW1hdG9yTm9uZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2hvcml6
b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYLCBzY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdp
ZHRoKCkpCiAgICAgLCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSwgc2Nyb2xs
YWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSkKICAgICAsIG1fYW5pbWF0aW9uQWN0aXZlKGZhbHNl
KQorICAgICwgbV9maXJzdFZlbG9jaXR5KDAuZikKKyAgICAsIG1fZmlyc3RWZWxvY2l0eVNldChm
YWxzZSkKKyAgICAsIG1fZmlyc3RWZWxvY2l0eUlzVmVydGljYWwoZmFsc2UpCiB7CiB9CiAKQEAg
LTM4Nyw2ICszOTAsMTAgQEAgU2Nyb2xsQW5pbWF0b3JOb25lOjp+U2Nyb2xsQW5pbWF0b3JOb25l
KCkKICAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgpOwogfQogCit2b2lkIFNjcm9sbEFu
aW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24oZmxvYXQgeCwgZmxvYXQgeSkKK3sKK30KKwog
Ym9vbCBTY3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0
IG11bHRpcGxpZXIpCiB7CiAgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRv
ckVuYWJsZWQoKSkKQEAgLTQxMiw4ICs0MTksMjAgQEAgYm9vbCBTY3JvbGxBbmltYXRvck5vbmU6
OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXIK
ICAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6CiAgICAgICAgIHBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJz
KHRydWUsIDExICoga1RpY2tUaW1lLCAyICoga1RpY2tUaW1lLCBDdWJpYywgMyAqIGtUaWNrVGlt
ZSwgQ3ViaWMsIDMgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgMS4yNSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbFZl
bG9jaXR5OgorICAgICAgICAvLyBGSVhNRTogR2VuZXJhbGl6ZSB0aGUgc2Nyb2xsIGludGVyZmFj
ZSB0byBzdXBwb3J0IGEgcmljaGVyIHNldCBvZiBwYXJhbWV0ZXJzLgorICAgICAgICBpZiAobV9m
aXJzdFZlbG9jaXR5U2V0KSB7CisgICAgICAgICAgICBmbG9hdCB4ID0gbV9maXJzdFZlbG9jaXR5
SXNWZXJ0aWNhbCA/IG11bHRpcGxpZXIgOiBtX2ZpcnN0VmVsb2NpdHk7CisgICAgICAgICAgICBm
bG9hdCB5ID0gbV9maXJzdFZlbG9jaXR5SXNWZXJ0aWNhbCA/IG1fZmlyc3RWZWxvY2l0eSA6IG11
bHRpcGxpZXI7CisgICAgICAgICAgICBmaXJlVXBBbkFuaW1hdGlvbih4LCB5KTsKKyAgICAgICAg
ICAgIG1fZmlyc3RWZWxvY2l0eVNldCA9IGZhbHNlOworICAgICAgICAgICAgbV9maXJzdFZlbG9j
aXR5SXNWZXJ0aWNhbCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9m
aXJzdFZlbG9jaXR5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZmlyc3RWZWxvY2l0eUlzVmVy
dGljYWwgPSBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAgICAgIG1f
Zmlyc3RWZWxvY2l0eSA9IG11bHRpcGxpZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGluZGl2aWR1YWwgaW5wdXQgc2V0dGluZyBpcyBk
aXNhYmxlZCwgYmFpbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yTm9uZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmgKaW5kZXggOTE4ZjhkMjFjNjZhZmI0MWNiN2Q4MDAyMTZjM2Q1Y2FiOWNmY2JlZi4uMDlm
MzNjOTQ2MGRlNjVmMjRiOGNkMTM1MDdhZDI0N2VhNzQwYjFiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKQEAgLTEzOSwxMiArMTM5LDE3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCk7CiAgICAgYm9v
bCBhbmltYXRpb25UaW1lckFjdGl2ZSgpOwogICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZVVwQW5BbmltYXRpb24oZmxvYXQsIGZsb2F0KTsKIAog
ICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CiAgICAgUGVyQXhpc0RhdGEgbV92ZXJ0
aWNhbERhdGE7CiAKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgYm9vbCBtX2FuaW1hdGlv
bkFjdGl2ZTsKKworICAgIGZsb2F0IG1fZmlyc3RWZWxvY2l0eTsKKyAgICBib29sIG1fZmlyc3RW
ZWxvY2l0eVNldDsKKyAgICBib29sIG1fZmlyc3RWZWxvY2l0eUlzVmVydGljYWw7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaApp
bmRleCBhMDIxOThkMGIxYTA4OGUxYzcwZTNmNDljYzFhM2VlNGU0MGIxMjkxLi4wODdiNTBkMWUw
Y2UxZjM2YjZmMDlmNzkwZDE1NTA1OTgzMDM0OGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFR5cGVzLmgKQEAgLTEwNSw3ICsxMDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFNjcm9sbEJ5TGluZSwKICAgICAgICAgU2Nyb2xsQnlQYWdlLAogICAgICAgICBTY3JvbGxC
eURvY3VtZW50LAotICAgICAgICBTY3JvbGxCeVBpeGVsCisgICAgICAgIFNjcm9sbEJ5UGl4ZWws
CisgICAgICAgIFNjcm9sbEJ5UGl4ZWxWZWxvY2l0eQogICAgIH07CiAKICAgICBlbnVtIFNjcm9s
bEVsYXN0aWNpdHkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3Bw
CmluZGV4IGE2ZDY5OWUwMzNkN2VhNzY0MmNlYTgyYTBkMGE1MjhkZjRiMjk2YTEuLjY2N2FmZGNm
ZTE0ZWUxOTMwNTRkZjc1MWI5NDM4ZTkxOGM0MTE0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTEwMSw5ICsxMDEsMTEgQEAgYm9vbCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGEKICAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6CiAgICAgICAgIHN0ZXAgPSBzY3Jv
bGxiYXItPnBpeGVsU3RlcCgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGl4
ZWxWZWxvY2l0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKGRpcmVjdGlvbiA9
PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICBpZiAoZ3JhbnVsYXJp
dHkgIT0gU2Nyb2xsQnlQaXhlbFZlbG9jaXR5ICYmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwg
ZGlyZWN0aW9uID09IFNjcm9sbExlZnQpKQogICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxp
ZXI7CiAKICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+c2Nyb2xsKG9yaWVudGF0aW9uLCBn
cmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcAppbmRleCAwZTM2ODdl
YTQ5OTUzOWY5MTVmNTM4Zjc4ZDEwOWU4OTQ0ZDI2MzlmLi40ODk4YzU0N2MwMjUzMjQ5YWU0YzBi
MDMxZjczZTIxYTViYzMzNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAKQEAgLTgxLDYgKzgxLDEwIEBAIHB1
YmxpYzoKICAgICBmbG9hdCBjdXJyZW50WCgpIHsgcmV0dXJuIG1fY3VycmVudFBvc1g7IH0KICAg
ICBmbG9hdCBjdXJyZW50WSgpIHsgcmV0dXJuIG1fY3VycmVudFBvc1k7IH0KIAorICAgIGZsb2F0
IG1fZjE7CisgICAgZmxvYXQgbV9mMjsKKyAgICBpbnQgY291bnQ7CisKICAgICB2b2lkIHJlc2V0
KCkKICAgICB7CiAgICAgICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCk7CkBAIC04OCw2
ICs5MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudFBvc1kgPSAwOwogICAgICAgICBt
X2hvcml6b250YWxEYXRhLnJlc2V0KCk7CiAgICAgICAgIG1fdmVydGljYWxEYXRhLnJlc2V0KCk7
CisgICAgICAgIG1fZjEgPSAwOworICAgICAgICBtX2YyID0gMDsKKyAgICAgICAgY291bnQgPSAw
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmaXJlVXBBbkFuaW1hdGlvbihmbG9hdCBmMSwg
ZmxvYXQgZjIpCisgICAgeworICAgICAgICBtX2YxID0gZjE7CisgICAgICAgIG1fZjIgPSBmMjsK
KyAgICAgICAgY291bnQrKzsKICAgICB9CiAKICAgICBNT0NLX01FVEhPRDEoc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uLCB2b2lkKGNvbnN0IEZsb2F0UG9pbnQmKSk7CkBAIC0xMjAsNiAr
MTM0LDMwIEBAIFRFU1QoU2Nyb2xsQW5pbWF0b3JFbmFibGVkLCBFbmFibGVkKQogICAgIHNjcm9s
bEFuaW1hdG9yTm9uZS5yZXNldCgpOwogfQogCitURVNUKFNjcm9sbEFuaW1hdG9yRW5hYmxlZCwg
ZmxpbmdTY3JvbGxFbmNvZGluZykKK3sKKyAgICBNb2NrU2Nyb2xsYWJsZUFyZWEgc2Nyb2xsYWJs
ZUFyZWEodHJ1ZSk7CisgICAgTW9ja1Njcm9sbEFuaW1hdG9yTm9uZSBzY3JvbGxBbmltYXRvck5v
bmUoJnNjcm9sbGFibGVBcmVhKTsKKworICAgIHNjcm9sbEFuaW1hdG9yTm9uZS5yZXNldCgpOwor
CisgICAgc2Nyb2xsQW5pbWF0b3JOb25lLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3Jv
bGxCeVBpeGVsVmVsb2NpdHksIDExMS5mLCAtNDIuZik7CisgICAgc2Nyb2xsQW5pbWF0b3JOb25l
LnNjcm9sbChWZXJ0aWNhbFNjcm9sbGJhciwgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAyMjIuZiwg
NDIuZik7CisgICAgRVhQRUNUX0VRKC00Miwgc2Nyb2xsQW5pbWF0b3JOb25lLm1fZjEpOworICAg
IEVYUEVDVF9FUSg0Miwgc2Nyb2xsQW5pbWF0b3JOb25lLm1fZjIpOworICAgIEVYUEVDVF9FUSgx
LCBzY3JvbGxBbmltYXRvck5vbmUuY291bnQpOworICAgIHNjcm9sbEFuaW1hdG9yTm9uZS5yZXNl
dCgpOworCisgICAgc2Nyb2xsQW5pbWF0b3JOb25lLnNjcm9sbChWZXJ0aWNhbFNjcm9sbGJhciwg
U2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAyMjIuZiwgNDIuZik7CisgICAgc2Nyb2xsQW5pbWF0b3JO
b25lLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3JvbGxCeVBpeGVsVmVsb2NpdHksIDEx
MS5mLCAtNDIuZik7CisgICAgRVhQRUNUX0VRKC00Miwgc2Nyb2xsQW5pbWF0b3JOb25lLm1fZjEp
OworICAgIEVYUEVDVF9FUSg0Miwgc2Nyb2xsQW5pbWF0b3JOb25lLm1fZjIpOworICAgIEVYUEVD
VF9FUSgxLCBzY3JvbGxBbmltYXRvck5vbmUuY291bnQpOworICAgIHNjcm9sbEFuaW1hdG9yTm9u
ZS5yZXNldCgpOworfQorCisKKwogVEVTVChTY3JvbGxBbmltYXRvckVuYWJsZWQsIERpc2FibGVk
KQogewogICAgIE1vY2tTY3JvbGxhYmxlQXJlYSBzY3JvbGxhYmxlQXJlYShmYWxzZSk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggOGVhYTU1NTFkOWYwZmIzNjBlMTMwM2I5YjQ5MGYwNTE0ODUzNGM3NS4uMTRjMTFiMDAyZDIz
OTQwNWMyOTFkMTYyYTFlYjczZTA5NTliYTEwNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEy
LTAzLTA5ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBIYW5kbGUgbW9yZSBHZXN0dXJlKiBldmVudHMgYnkgcGVyZm9ybWluZyBzY3JvbGxzIG9uIHRo
ZSBjb3JyZWN0IHRhcmdldCBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAzMTEKKworICAgICAgICBSZWJhc2VsaW5lZCB0byBy
ZWZsZWN0IGNvcnJlY3RlZCBiZWhhdmlvdXIgb2YgZ2VzdHVyZSBldmVudHMgdGFyZ2V0aW5nIGEg
ZGl2IHJlbW92ZWQKKyAgICAgICAgZnJvbSB0aGUgRE9NIGR1cmluZyBkaXNwYXRjaC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQ6CisKIDIwMTItMDMtMDkgIE5h
dGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZXN0IGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA1NTEKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
c2h5LXRhcmdldC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90
b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKaW5kZXggZDU2NzRiN2ZlZDk3ZjMy
ZDZkNGVlNDYxOGY5MTI0YWYyMjkzNDMwYi4uYzQxOGI1NTFhYTI0NTVjMDQ2YzdlNzdlNDM4Mjc4
NjFkNGY5Y2U3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2Vz
dHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFy
Z2V0Lmh0bWwKQEAgLTc2LDcgKzc2LDcgQEAgdmFyIGdlc3R1cmVzT2NjdXJyZWQgPSAwOwogdmFy
IHNjcm9sbEFtb3VudFggPSBbJzYzJywgJzAnXTsKIHZhciBzY3JvbGxBbW91bnRZID0gWyc2Mics
ICcwJ107CiB2YXIgd2hlZWxFdmVudHNPY2N1cnJlZCA9IDA7Ci12YXIgZXhwZWN0ZWRXaGVlbEV2
ZW50c09jY3VycmVkID0gWyczJywgJzMnXTsKK3ZhciBleHBlY3RlZFdoZWVsRXZlbnRzT2NjdXJy
ZWQgPSBbJzMnLCAnMiddOwogdmFyIHNjcm9sbEV2ZW50c09jY3VycmVkID0gMDsKIHZhciBleHBl
Y3RlZFNjcm9sbEV2ZW50c09jY3VycmVkID0gJzEnOwogdmFyIHNjcm9sbGVkRWxlbWVudCA9ICdt
b3ZpbmdkaXYnCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0LWV4cGVjdGVkLnR4dApp
bmRleCBhNjliYzllZTI4Y2UzZTNiNjY1Njc0NTYyODc0ZjZjYTJkNWY1NDU0Li5mODVkYTU2N2Fl
YzFjZGQ4MmYwYWQ4ZGRiNjRiNjQzN2NjYzZhZGQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
c2h5LXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTE0LDEwICsxNCw5IEBAIHNlY29uZCBnZXN0dXJl
CiB3aGVlbCBldmVudCAwKz4gW29iamVjdCBIVE1MRGl2RWxlbWVudF0KIHdoZWVsIGV2ZW50IDEr
PiBbb2JqZWN0IEhUTUxEaXZFbGVtZW50XQogcmVjZWl2ZWQgZWxlbWVudCByZW1vdmluZyBrZXlw
cmVzcwotd2hlZWwgZXZlbnQgMis+IFtvYmplY3QgSFRNTERpdkVsZW1lbnRdCiBQQVNTIG1vdmlu
Z2Rpdi5zY3JvbGxUb3AgaXMgMAogUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyAwCi1QQVNT
IHdoZWVsRXZlbnRzT2NjdXJyZWQgaXMgMworUEFTUyB3aGVlbEV2ZW50c09jY3VycmVkIGlzIDIK
IHNjcm9sbCBldmVudCAwKz4gW29iamVjdCBIVE1MRGl2RWxlbWVudF0KIFBBU1Mgc2Nyb2xsRXZl
bnRzT2NjdXJyZWQgaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131134</attachid>
            <date>2012-03-09 16:37:59 -0800</date>
            <delta_ts>2012-03-09 21:45:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80311-20120309193757.patch</filename>
            <type>text/plain</type>
            <size>24165</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJhYTY0NzgxZGZiNTky
NjFmZjBjM2NkM2JmODg0ODk4YzVjMGM4Yi4uY2M2YTE2ZWRkYWIyZmQ2OGYwZjY5ZDVhNTI0NzJh
NzcyNjQ4YmI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAzLTA5ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBIYW5kbGUgbW9y
ZSBHZXN0dXJlKiBldmVudHMgYnkgcGVyZm9ybWluZyBzY3JvbGxzIG9uIHRoZSBjb3JyZWN0IHRh
cmdldCBTY3JvbGxhYmxlQXJlYSAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgwMzExCisKKyAgICAgICAgSW1wbGVtZW50IEdlc3R1cmVTY3JvbGwqIGV2
ZW50cyB2aWEgcmUtdXNlIG9mIFdoZWVsRXZlbnQgZGlzcGF0Y2guCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgTGF5b3V0IHRlc3RzIHByZXZpb3VzbHkg
c3VibWl0ZWQgYXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMjAx
IGFuZCB1bml0CisgICAgICAgIHRlc3QgYWRkZWQgYXMgcGFydCBvZiB0aGlzIHBhdGNoLgorCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2hlZWxH
cmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkpOiBSZWZhY3RvcmluZy4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hl
ZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVFdmVudCk6IEFkZGVkIEdlc3R1cmVTY3JvbGxCZWdpbiAmIEVuZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlU2Nyb2xsQ29yZSk6IFJlZmFjdG9yaW5nLgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOiBBZGRlZCBhZGRpdGlvbmFs
IHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KTogRm9yd2Fy
ZCBhZGRpdGlvbmFsIHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpTY3Jv
bGxBbmltYXRvck5vbmUpOiBIYW5kbGUgYWRkaXRpb25hbCBzY3JvbGwgdHlwZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOiAKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpzY3Jv
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOgorICAgICAgICAo
U2Nyb2xsQW5pbWF0b3JOb25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOiBB
ZGRlZCBhbiBhZGRpdGlvbmFsIHNjcm9sbCB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGwp
OgorCiAyMDEyLTAzLTA5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2FjaGVkUmF3UmVzb3VyY2UgYnJlYWtzIHdoZW4gdHJ5aW5nIHRvIGxvYWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYWI3YTU5ZDRjNTUzMTg2MWRmODUyOWNmY2I5YjczMWRj
MGQ0YTEzMy4uZDU3N2M1MjIyNzc1MDYxMDM0MjE2MGZjYTExYTZjYmIxMDk1MzNmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMy0wOSAgUm9iZXJ0
IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSGFuZGxlIG1vcmUg
R2VzdHVyZSogZXZlbnRzIGJ5IHBlcmZvcm1pbmcgc2Nyb2xscyBvbiB0aGUgY29ycmVjdCB0YXJn
ZXQgU2Nyb2xsYWJsZUFyZWEgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MDMxMQorCisgICAgICAgIEFkZGVkIGEgdW5pdCB0ZXN0IGZvciB0aGUgY2hh
bmdlcyB0byBTY3JvbGxBbmltYXRvck5vbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHR3by1jYWxs
CisgICAgICAgIHRyYW5zcG9ydCBvZiBmbGluZyBwYXJhbWV0ZXJzIGlzIGNvcnJlY3RseSBkZWxp
dmVyZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAg
KiB0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcDoKKyAgICAgICAgKE1vY2tTY3JvbGxB
bmltYXRvck5vbmUpOgorICAgICAgICAoTW9ja1Njcm9sbEFuaW1hdG9yTm9uZTo6cmVzZXQpOgor
ICAgICAgICAoTW9ja1Njcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTItMDMtMDkgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBFbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IHRp
bWUgd2hlbiBub3RpZnlpbmcgYW5pbWF0aW9uIHN0YXJ0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCAxYzExNDdiNzM2NmM2NWZmMDhkMGRkZDQ1ZjQ3YjliMjBhYjA2NzQz
Li4xNzM4ZGI4OTYzYTg2MzYxNDUzMTFkYmQxNmIyZjZkOGFiYzQyN2I5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50Lmgi
CkBAIC0yMzIsMjkgKzIzMywyOCBAQCBwdWJsaWM6CiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJl
Y3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0
YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkgd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3Jh
bnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dp
dGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgV2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAg
cmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNlIFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAg
IHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2FzZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAg
ICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAgfQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVs
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiog
c3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBSZW5kZXJCb3gq
IGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgpOwotCiAgICAg
ZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAgICAKLSAgICBp
ZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVE
aXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKLQotICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOwotCi0gICAgaWYgKGdyYW51
bGFyaXR5ID09IFdoZWVsRXZlbnQ6OlBpeGVsKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94
LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsQnlQaXhlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKLSAgICAgICAgCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAgPyBu
ZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWJzRGVs
dGEsIHN0b3BOb2RlKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMpCkBAIC0zMTIsNiArMzEyLDcg
QEAgRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQogICAgICwgbV90b3Vj
aFByZXNzZWQoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKDAp
CisgICAgLCBtX2Jhc2VFdmVudFR5cGUoUGxhdGZvcm1FdmVudDo6Tm9UeXBlKQogewogfQogCkBA
IC0zNTksNiArMzYwLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKICAgICBtX29yaWdp
bmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgogICAgIG1fbWF4TW91c2VN
b3ZlZER1cmF0aW9uID0gMDsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgbV9iYXNl
RXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6Tm9UeXBlOworI2VuZGlmCiB9CiAKIHZvaWQgRXZl
bnRIYW5kbGVyOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlKiBub2RlVG9CZVJlbW92ZWQpCkBAIC0y
MzEzLDcgKzIzMTcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgLy8gSW5zdGVhZCwgdGhlIGhhbmRsZXJzIHNo
b3VsZCBrbm93IGNvbnZlcnQgdmVydGljYWwgc2Nyb2xscwogICAgIC8vIGFwcHJvcHJpYXRlbHku
CiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50ID0gZTsKLSAgICBpZiAoc2hvdWxkVHVyblZl
cnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbChyZXN1bHQpKQorICAgIGlmIChtX2Jhc2VFdmVudFR5
cGUgIT0gUGxhdGZvcm1FdmVudDo6Tm9UeXBlICYmIHNob3VsZFR1cm5WZXJ0aWNhbFRpY2tzSW50
b0hvcml6b250YWwocmVzdWx0KSkKICAgICAgICAgZXZlbnQgPSBldmVudC5jb3B5VHVybmluZ1Zl
cnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbFRpY2tzKCk7CiAKICAgICBpZiAobm9kZSkgewpAQCAt
MjMzOSwyMCArMjM0MywyMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgCiAgICAgcmV0dXJuIHZpZXctPndoZWVs
RXZlbnQoZXZlbnQpOwogfQotICAgIAorCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVs
RXZlbnRIYW5kbGVyKE5vZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCogd2hlZWxFdmVudCkKIHsK
ICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhd2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIE5vZGUqIHN0b3BOb2RlID0gbV9wcmV2aW91c1doZWVsU2Nyb2xsZWROb2RlLmdldCgp
OworICAgIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gbV9iYXNlRXZlbnRUeXBlID09
IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgPyBTY3JvbGxCeVBpeGVsVmVsb2NpdHkg
OiB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0eSh3aGVlbEV2ZW50LT5ncmFudWxh
cml0eSgpKTsKICAgICAKICAgICAvLyBCcmVhayB1cCBpbnRvIHR3byBzY3JvbGxzIGlmIHdlIG5l
ZWQgdG8uICBEaWFnb25hbCBtb3ZlbWVudCBvbiAKICAgICAvLyBhIE1hY0Jvb2sgcHJvIGlzIGFu
IGV4YW1wbGUgb2YgYSAyLWRpbWVuc2lvbmFsIG1vdXNlIHdoZWVsIGV2ZW50ICh3aGVyZSBib3Ro
IGRlbHRhWCBhbmQgZGVsdGFZIGNhbiBiZSBzZXQpLgotICAgIGlmIChzY3JvbGxOb2RlKHdoZWVs
RXZlbnQtPnJhd0RlbHRhWCgpLCB3aGVlbEV2ZW50LT5ncmFudWxhcml0eSgpLCBTY3JvbGxMZWZ0
LCBTY3JvbGxSaWdodCwgc3RhcnROb2RlLCAmc3RvcE5vZGUpKQorICAgIGlmIChzY3JvbGxOb2Rl
KHdoZWVsRXZlbnQtPnJhd0RlbHRhWCgpLCBncmFudWxhcml0eSwgU2Nyb2xsTGVmdCwgU2Nyb2xs
UmlnaHQsIHN0YXJ0Tm9kZSwgJnN0b3BOb2RlKSkKICAgICAgICAgd2hlZWxFdmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAKLSAgICBpZiAoc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5yYXdE
ZWx0YVkoKSwgd2hlZWxFdmVudC0+Z3JhbnVsYXJpdHkoKSwgU2Nyb2xsVXAsIFNjcm9sbERvd24s
IHN0YXJ0Tm9kZSwgJnN0b3BOb2RlKSkKKyAgICBpZiAoc2Nyb2xsTm9kZSh3aGVlbEV2ZW50LT5y
YXdEZWx0YVkoKSwgZ3JhbnVsYXJpdHksIFNjcm9sbFVwLCBTY3JvbGxEb3duLCBzdGFydE5vZGUs
ICZzdG9wTm9kZSkpCiAgICAgICAgIHdoZWVsRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgCiAgICAgaWYgKCFtX3VzZUxhdGNoZWRXaGVlbEV2ZW50Tm9kZSkKQEAgLTIzNjIsMzIgKzIz
NjcsMzQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2Rl
KiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdoZWVsRXYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFtZSByYXRoZXIgdGhhbiAKLSAg
ICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFpbiBmcmFtZSBvbmx5LiBXZSBz
aG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJhbWUgZ2V0cyBhIGdlc3R1cmUg
YmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGluZwotICAgIC8vIGVuZCBnZXN0
dXJlIGFzIHdlbGwuCisgICAgLy8gRklYTUU6IEEgbW9yZSBnZW5lcmFsIHNjcm9sbCBzeXN0ZW0g
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDU5Nikgd2lsbAorICAg
IC8vIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgdGhpcy4KKyAgICBUZW1wb3JhcnlDaGFuZ2U8UGxh
dGZvcm1FdmVudDo6VHlwZT4gYmFzZUV2ZW50VHlwZShtX2Jhc2VFdmVudFR5cGUsIGdlc3R1cmVF
dmVudC50eXBlKCkpOwogCiAgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgpKSB7CiAgICAg
Y2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKKyAgICAgICAgLy8gRklYTUU6IFN0
b3AgYW5pbWF0aW9uIGhlcmUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcDoKICAgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVUYXAoZ2VzdHVyZUV2
ZW50KTsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6CiAgICAg
ICAgIHJldHVybiBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGdlc3R1cmVFdmVudCk7CiAgICAg
Y2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgorICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjoKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGdlc3R1cmVFdmVudCwgU2Nyb2xsQnlQaXhlbFdoZWVs
RXZlbnQsIGZhbHNlKTsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUo
Z2VzdHVyZUV2ZW50LCBTY3JvbGxCeVBpeGVsVmVsb2NpdHlXaGVlbEV2ZW50LCB0cnVlKTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVHZXN0dXJlVGFwKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQp
CiB7Ci0gICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVs
dGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZwotICAgIC8vIGhhcyBiZWVuIGNvcnJlY3RlZCBh
cyBzdWdnZXN0ZWQgYWJvdmUgaW4gaGFuZGxlR2VzdHVyZUV2ZW50KCkuCisgICAgLy8gRklYTUU6
IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMuCiAgICAg
Ym9vbCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7CiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZh
a2VNb3VzZU1vdmUoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQ
b3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgLyogY2xpY2tD
b3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXko
KSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJl
RXZlbnQudGltZXN0YW1wKCkpOwogICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3du
KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwg
TGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICov
IDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0
dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50
aW1lc3RhbXAoKSk7CkBAIC0yNDAwLDE0ICsyNDA3LDIwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVHZXN0dXJlVGFwKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQp
CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7CisgICAgcmV0dXJuIGhhbmRsZUdl
c3R1cmVTY3JvbGxDb3JlKGdlc3R1cmVFdmVudCwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIHRy
dWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgUGxhdGZvcm1XaGVlbEV2ZW50
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgbGF0Y2hlZFdoZWVsKQoreworICAgIFRlbXBv
cmFyeUNoYW5nZTxib29sPiBsYXRjaGVkKG1fdXNlTGF0Y2hlZFdoZWVsRXZlbnROb2RlLCBsYXRj
aGVkV2hlZWwpOwogICAgIGNvbnN0IGZsb2F0IHRpY2tEaXZpc29yID0gKGZsb2F0KVdoZWVsRXZl
bnQ6OnRpY2tNdWx0aXBsaWVyOwotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBp
bXBsZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBpbiBoYW5kbGVHZXN0dXJlRXZlbnQo
KSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7
CiAgICAgSW50UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueCgpLCBnZXN0dXJl
RXZlbnQucG9zaXRpb24oKS55KCkpOwogICAgIEludFBvaW50IGdsb2JhbFBvaW50KGdlc3R1cmVF
dmVudC5nbG9iYWxQb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCku
eSgpKTsKLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChwb2ludCwg
Z2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgp
LCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50LmRlbHRh
WSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJlRXZlbnQu
c2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgp
LCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRs
ZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7Ci0gICAgcmV0dXJuIGRlZmF1bHRQcmV2
ZW50ZWQ7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQocG9pbnQs
IGdsb2JhbFBvaW50LAorICAgICAgICBnZXN0dXJlRXZlbnQuZGVsdGFYKCksIGdlc3R1cmVFdmVu
dC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpIC8gdGlja0Rpdmlzb3IsIGdlc3R1cmVF
dmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLAorICAgICAgICBncmFudWxhcml0eSwKKyAgICAg
ICAgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1
cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSk7CisgICAgcmV0dXJuIGhh
bmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMDk4MWU0MTcxMTgxYTEyNTJhNzRhMDBlNzE3MGI5
MjllYTgwMDQ2Mi4uMmVkYmE5MGFiZmU1MjEyODg3MjQxM2EyMGRjY2JmODEwNWZiNzFjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
Rm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgog
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgi
CiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5LmgiCkBAIC0zNDcsNiArMzQ4LDEwIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0tleUV2ZW50QWxsb3dlZEluRnVsbFNjcmVlbihjb25zdCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQmKSBjb25zdDsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQorICAgIGJvb2wgaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmLCBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFudWxhcml0eSwgYm9vbCBsYXRjaGVkV2hl
ZWwpOworI2VuZGlmCisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIGJvb2wgbV9tb3VzZVBy
ZXNzZWQ7CkBAIC00MzIsNiArNDM3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdG91Y2hQcmVz
c2VkOwogI2VuZGlmCiAgICAgZG91YmxlIG1fbWF4TW91c2VNb3ZlZER1cmF0aW9uOworICAgIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgbV9iYXNlRXZlbnRUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApp
bmRleCA2NGUwZjI0NjMyYzRhODE2ZjQ0N2RjNzU3NmZiZGFjNjEyOWJhOGYwLi4wODRiNDU1NTM1
ZjcwMWZkZGIxOGU0MTRkOWE1OWU5YzM5ZmRmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApAQCAtNjQsNyArNjQsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gdXAgYW5kIGRvd24gKHlvdSBnZXQgdGhlIHNhbWUgYmVoYXZpb3IgYXMg
aWYgdGhlIHVzZXIgd2FzIGNsaWNraW5nIGluIGEgc2Nyb2xsYmFyIHRyYWNrIHRvIHBhZ2UgdXAg
b3IgcGFnZSBkb3duKS4KICAgICBlbnVtIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IHsK
ICAgICAgICAgU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCwKLSAgICAgICAgU2Nyb2xsQnlQaXhlbFdo
ZWVsRXZlbnQKKyAgICAgICAgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsCisgICAgICAgIFNjcm9s
bEJ5UGl4ZWxWZWxvY2l0eVdoZWVsRXZlbnQKICAgICB9OwogCiAjaWYgUExBVEZPUk0oTUFDKSB8
fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggMjMwMDBjM2U0Zjg3ZWQ2MGViZDQ2NWYxMGNm
OGM5MzIxZGRjN2JjMC4uMWNkNGZmMWU5Yjg0YTg4OTEzODRhNzVkN2NjYThjNGVhMjU0YWIyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtOTgsNiAr
OTgsMTIgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgICAgIHx8IChkZWx0YVkgPCAwICYmIG1heEZvcndhcmRT
Y3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApCiAgICAgICAgIHx8IChkZWx0YVkgPiAwICYmIG1heEJh
Y2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSkgewogICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBpeGVsVmVsb2NpdHlX
aGVlbEV2ZW50KSB7CisgICAgICAgICAgICBzY3JvbGwoVmVydGljYWxTY3JvbGxiYXIsIFNjcm9s
bEJ5UGl4ZWxWZWxvY2l0eSwgMCwgLWRlbHRhWSk7CisgICAgICAgICAgICBzY3JvbGwoSG9yaXpv
bnRhbFNjcm9sbGJhciwgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAwLCAtZGVsdGFYKTsKKyAgICAg
ICAgICAgIHJldHVybiBoYW5kbGVkOworICAgICAgICB9CisKICAgICAgICAgaWYgKGRlbHRhWSkg
ewogICAgICAgICAgICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2
ZW50KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhWSA8IDA7CkBAIC0x
MTgsNyArMTI0LDYgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgICAgICAgICBzY3JvbGwoSG9yaXpvbnRhbFNj
cm9sbGJhciwgU2Nyb2xsQnlQaXhlbCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCks
IC1kZWx0YVgpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIGhhbmRsZWQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDA5OTgxMGNlZjU3
MWI1ZjQwMDBhMWNmNDE3NDg5YmE5YmI3NDE5ZTkuLmEzYzRjYTdlMDJiNjM2MGNjMzZkYjYxN2Q5
NGIwM2JkZmY0NzI1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aApAQCAtNDEsMTAgKzQxLDYgQEAgY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIFNjcm9sbGFibGVB
cmVhOwogY2xhc3MgU2Nyb2xsYmFyOwogCi0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotY2xh
c3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7Ci0jZW5kaWYKLQogY2xhc3MgU2Nyb2xsQW5pbWF0b3Ig
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUo
U2Nyb2xsYWJsZUFyZWEqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwCmluZGV4IDczYzM4ODhkNjVhOGQ0M2RmZTUwNjI2ZDA2ZjVmNmIzYTE1MGY4
YmMuLjk2ODQ0ZjdlYjNjOTIzNzI0YzZkY2ExYjkxZGQzOGU5Mjc5NzhhOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMzc5LDYgKzM3
OSw5IEBAIFNjcm9sbEFuaW1hdG9yTm9uZTo6U2Nyb2xsQW5pbWF0b3JOb25lKFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3Vy
cmVudFBvc1gsIHNjcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSkKICAgICAsIG1fdmVydGlj
YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZLCBzY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdo
dCgpKQogICAgICwgbV9hbmltYXRpb25BY3RpdmUoZmFsc2UpCisgICAgLCBtX2ZpcnN0VmVsb2Np
dHkoMCkKKyAgICAsIG1fZmlyc3RWZWxvY2l0eVNldChmYWxzZSkKKyAgICAsIG1fZmlyc3RWZWxv
Y2l0eUlzVmVydGljYWwoZmFsc2UpCiB7CiB9CiAKQEAgLTM4Nyw2ICszOTAsMTEgQEAgU2Nyb2xs
QW5pbWF0b3JOb25lOjp+U2Nyb2xsQW5pbWF0b3JOb25lKCkKICAgICBzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZCgpOwogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6ZmlyZVVwQW5Bbmlt
YXRpb24oRmxvYXRQb2ludCBmcCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZnApOworfQorCiBib29s
IFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllcikKIHsKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpKQpAQCAtNDEyLDggKzQyMCwyMSBAQCBib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcgogICAg
IGNhc2UgU2Nyb2xsQnlQaXhlbDoKICAgICAgICAgcGFyYW1ldGVycyA9IFBhcmFtZXRlcnModHJ1
ZSwgMTEgKiBrVGlja1RpbWUsIDIgKiBrVGlja1RpbWUsIEN1YmljLCAzICoga1RpY2tUaW1lLCBD
dWJpYywgMyAqIGtUaWNrVGltZSwgUXVhZHJhdGljLCAxLjI1KTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeVBpeGVsVmVsb2Np
dHk6CisgICAgICAgIC8vIEZJWE1FOiBHZW5lcmFsaXplIHRoZSBzY3JvbGwgaW50ZXJmYWNlIHRv
IHN1cHBvcnQgYSByaWNoZXIgc2V0IG9mIHBhcmFtZXRlcnMuCisgICAgICAgIGlmIChtX2ZpcnN0
VmVsb2NpdHlTZXQpIHsKKyAgICAgICAgICAgIGZsb2F0IHggPSBtX2ZpcnN0VmVsb2NpdHlJc1Zl
cnRpY2FsID8gbXVsdGlwbGllciA6IG1fZmlyc3RWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0
IHkgPSBtX2ZpcnN0VmVsb2NpdHlJc1ZlcnRpY2FsID8gbV9maXJzdFZlbG9jaXR5IDogbXVsdGlw
bGllcjsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgZnAoeCwgeSk7CisgICAgICAgICAgICBmaXJl
VXBBbkFuaW1hdGlvbihmcCk7CisgICAgICAgICAgICBtX2ZpcnN0VmVsb2NpdHlTZXQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIG1fZmlyc3RWZWxvY2l0eUlzVmVydGljYWwgPSBmYWxzZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZmlyc3RWZWxvY2l0eVNldCA9IHRydWU7CisgICAg
ICAgICAgICBtX2ZpcnN0VmVsb2NpdHlJc1ZlcnRpY2FsID0gb3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXI7CisgICAgICAgICAgICBtX2ZpcnN0VmVsb2NpdHkgPSBtdWx0aXBsaWVyOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBp
bmRpdmlkdWFsIGlucHV0IHNldHRpbmcgaXMgZGlzYWJsZWQsIGJhaWwuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmluZGV4IDkxOGY4ZDIxYzY2YWZiNDFj
YjdkODAwMjE2YzNkNWNhYjljZmNiZWYuLjQ5NWUwY2RkYWRjNmM3ZWFmMDgxZjQzNjE0NTAyZGRk
ZjI1NGJjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5oCkBAIC0zNyw2ICszNyw3IEBACiAjZXJyb3IgIlNNT09USF9TQ1JPTExJTkcgcmVxdWlyZXMg
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUgdG8gYmUgZW5hYmxlZC4iCiAjZW5kaWYKIAorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAKQEAgLTEzOSwxMiArMTQwLDE3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCk7CiAgICAgYm9vbCBhbmltYXRpb25UaW1lckFjdGl2
ZSgpOwogICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZVVwQW5BbmltYXRpb24oRmxvYXRQb2ludCk7CiAKICAgICBQZXJBeGlzRGF0YSBtX2hvcml6
b250YWxEYXRhOwogICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOwogCiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGJvb2wgbV9hbmltYXRpb25BY3RpdmU7CisKKyAgICBmbG9hdCBt
X2ZpcnN0VmVsb2NpdHk7CisgICAgYm9vbCBtX2ZpcnN0VmVsb2NpdHlTZXQ7CisgICAgYm9vbCBt
X2ZpcnN0VmVsb2NpdHlJc1ZlcnRpY2FsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKaW5kZXggYTAyMTk4ZDBiMWEwODhlMWM3
MGUzZjQ5Y2MxYTNlZTRlNDBiMTI5MS4uMDg3YjUwZDFlMGNlMWYzNmI2ZjA5Zjc5MGQxNTUwNTk4
MzAzNDhjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCkBAIC0xMDUsNyAr
MTA1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JvbGxCeUxpbmUsCiAgICAg
ICAgIFNjcm9sbEJ5UGFnZSwKICAgICAgICAgU2Nyb2xsQnlEb2N1bWVudCwKLSAgICAgICAgU2Ny
b2xsQnlQaXhlbAorICAgICAgICBTY3JvbGxCeVBpeGVsLAorICAgICAgICBTY3JvbGxCeVBpeGVs
VmVsb2NpdHkKICAgICB9OwogCiAgICAgZW51bSBTY3JvbGxFbGFzdGljaXR5IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCBhNmQ2OTllMDMzZDdlYTc2
NDJjZWE4MmEwZDBhNTI4ZGY0YjI5NmExLi42NjdhZmRjZmUxNGVlMTkzMDU0ZGY3NTFiOTQzOGU5
MThjNDExNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3Bw
CkBAIC0xMDEsOSArMTAxLDExIEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhCiAgICAgY2FzZSBT
Y3JvbGxCeVBpeGVsOgogICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5waXhlbFN0ZXAoKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeVBpeGVsVmVsb2NpdHk6CisgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9u
ID09IFNjcm9sbExlZnQpCisgICAgaWYgKGdyYW51bGFyaXR5ICE9IFNjcm9sbEJ5UGl4ZWxWZWxv
Y2l0eSAmJiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0
KSkKICAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOwogCiAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yKCktPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRp
cGxpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxB
bmltYXRvck5vbmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdC5jcHAKaW5kZXggMGUzNjg3ZWE0OTk1MzlmOTE1ZjUzOGY3OGQxMDll
ODk0NGQyNjM5Zi4uOWQyMWI4YTllM2EwYmJkM2E3MTkxNDM1OGM0N2M2ODAyZWJmYWU4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9y
Tm9uZVRlc3QuY3BwCkBAIC04MSw2ICs4MSw5IEBAIHB1YmxpYzoKICAgICBmbG9hdCBjdXJyZW50
WCgpIHsgcmV0dXJuIG1fY3VycmVudFBvc1g7IH0KICAgICBmbG9hdCBjdXJyZW50WSgpIHsgcmV0
dXJuIG1fY3VycmVudFBvc1k7IH0KIAorICAgIEZsb2F0UG9pbnQgbV9mcDsKKyAgICBpbnQgbV9j
b3VudDsKKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKICAgICAgICAgc3RvcEFuaW1hdGlvblRp
bWVySWZOZWVkZWQoKTsKQEAgLTg4LDYgKzkxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJy
ZW50UG9zWSA9IDA7CiAgICAgICAgIG1faG9yaXpvbnRhbERhdGEucmVzZXQoKTsKICAgICAgICAg
bV92ZXJ0aWNhbERhdGEucmVzZXQoKTsKKyAgICAgICAgbV9mcCA9IEZsb2F0UG9pbnQ6Onplcm8o
KTsKKyAgICAgICAgbV9jb3VudCA9IDA7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZpcmVV
cEFuQW5pbWF0aW9uKEZsb2F0UG9pbnQgZnApCisgICAgeworICAgICAgICBtX2ZwID0gZnA7Cisg
ICAgICAgIG1fY291bnQrKzsKICAgICB9CiAKICAgICBNT0NLX01FVEhPRDEoc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uLCB2b2lkKGNvbnN0IEZsb2F0UG9pbnQmKSk7CkBAIC0xMjAsNiAr
MTMxLDMwIEBAIFRFU1QoU2Nyb2xsQW5pbWF0b3JFbmFibGVkLCBFbmFibGVkKQogICAgIHNjcm9s
bEFuaW1hdG9yTm9uZS5yZXNldCgpOwogfQogCitURVNUKFNjcm9sbEFuaW1hdG9yRW5hYmxlZCwg
ZmxpbmdTY3JvbGxFbmNvZGluZykKK3sKKyAgICBNb2NrU2Nyb2xsYWJsZUFyZWEgc2Nyb2xsYWJs
ZUFyZWEodHJ1ZSk7CisgICAgTW9ja1Njcm9sbEFuaW1hdG9yTm9uZSBzY3JvbGxBbmltYXRvck5v
bmUoJnNjcm9sbGFibGVBcmVhKTsKKworICAgIHNjcm9sbEFuaW1hdG9yTm9uZS5yZXNldCgpOwor
CisgICAgc2Nyb2xsQW5pbWF0b3JOb25lLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3Jv
bGxCeVBpeGVsVmVsb2NpdHksIDExMSwgLTQyKTsKKyAgICBzY3JvbGxBbmltYXRvck5vbmUuc2Ny
b2xsKFZlcnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxCeVBpeGVsVmVsb2NpdHksIDIyMiwgNDIpOwor
ICAgIEVYUEVDVF9FUSgtNDIsIHNjcm9sbEFuaW1hdG9yTm9uZS5tX2ZwLngoKSk7CisgICAgRVhQ
RUNUX0VRKDQyLCBzY3JvbGxBbmltYXRvck5vbmUubV9mcC55KCkpOworICAgIEVYUEVDVF9FUSgx
LCBzY3JvbGxBbmltYXRvck5vbmUubV9jb3VudCk7CisgICAgc2Nyb2xsQW5pbWF0b3JOb25lLnJl
c2V0KCk7CisKKyAgICBzY3JvbGxBbmltYXRvck5vbmUuc2Nyb2xsKFZlcnRpY2FsU2Nyb2xsYmFy
LCBTY3JvbGxCeVBpeGVsVmVsb2NpdHksIDIyMiwgNDIpOworICAgIHNjcm9sbEFuaW1hdG9yTm9u
ZS5zY3JvbGwoSG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xsQnlQaXhlbFZlbG9jaXR5LCAxMTEs
IC00Mik7CisgICAgRVhQRUNUX0VRKC00Miwgc2Nyb2xsQW5pbWF0b3JOb25lLm1fZnAueCgpKTsK
KyAgICBFWFBFQ1RfRVEoNDIsIHNjcm9sbEFuaW1hdG9yTm9uZS5tX2ZwLnkoKSk7CisgICAgRVhQ
RUNUX0VRKDEsIHNjcm9sbEFuaW1hdG9yTm9uZS5tX2NvdW50KTsKKyAgICBzY3JvbGxBbmltYXRv
ck5vbmUucmVzZXQoKTsKK30KKworCisKIFRFU1QoU2Nyb2xsQW5pbWF0b3JFbmFibGVkLCBEaXNh
YmxlZCkKIHsKICAgICBNb2NrU2Nyb2xsYWJsZUFyZWEgc2Nyb2xsYWJsZUFyZWEoZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDhlYWE1NTUxZDlmMGZiMzYwZTEzMDNiOWI0OTBmMDUxNDg1MzRjNzUuLmIwNTUyMmNm
YTY3Mjk0ZGViYTg3OGJkN2YxY2RlYWEwMzg0ZWFhNDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxMi0wMy0wOSAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSGFuZGxlIG1vcmUgR2VzdHVyZSogZXZlbnRzIGJ5IHBlcmZvcm1pbmcgc2Nyb2xscyBv
biB0aGUgY29ycmVjdCB0YXJnZXQgU2Nyb2xsYWJsZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMzExCisKKyAgICAgICAgUmViYXNlbGluZWQg
dG8gcmVmbGVjdCBjb3JyZWN0ZWQgYmVoYXZpb3VyIG9mIGdlc3R1cmUgZXZlbnRzIHRhcmdldGlu
ZyBhIGRpdiByZW1vdmVkCisgICAgICAgIGZyb20gdGhlIERPTSBkdXJpbmcgZGlzcGF0Y2guCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgKiBmYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OgorCiAyMDEyLTAzLTA5
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGVzdCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNTUxCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Ny
b2xsLXNoeS10YXJnZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCmluZGV4IGQ1Njc0YjdmZWQ5
N2YzMmQ2ZDRlZTQ2MThmOTEyNGFmMjI5MzQzMGIuLmM0MThiNTUxYWEyNDU1YzA0NmM3ZTc3ZTQz
ODI3ODYxZDRmOWNlN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5
LXRhcmdldC5odG1sCkBAIC03Niw3ICs3Niw3IEBAIHZhciBnZXN0dXJlc09jY3VycmVkID0gMDsK
IHZhciBzY3JvbGxBbW91bnRYID0gWyc2MycsICcwJ107CiB2YXIgc2Nyb2xsQW1vdW50WSA9IFsn
NjInLCAnMCddOwogdmFyIHdoZWVsRXZlbnRzT2NjdXJyZWQgPSAwOwotdmFyIGV4cGVjdGVkV2hl
ZWxFdmVudHNPY2N1cnJlZCA9IFsnMycsICczJ107Cit2YXIgZXhwZWN0ZWRXaGVlbEV2ZW50c09j
Y3VycmVkID0gWyczJywgJzInXTsKIHZhciBzY3JvbGxFdmVudHNPY2N1cnJlZCA9IDA7CiB2YXIg
ZXhwZWN0ZWRTY3JvbGxFdmVudHNPY2N1cnJlZCA9ICcxJzsKIHZhciBzY3JvbGxlZEVsZW1lbnQg
PSAnbW92aW5nZGl2JwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50
eHQKaW5kZXggYTY5YmM5ZWUyOGNlM2UzYjY2NTY3NDU2Mjg3NGY2Y2EyZDVmNTQ1NC4uZjg1ZGE1
NjdhZWMxY2RkODJmMGFkOGRkYjY0YjY0MzdjY2M2YWRkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0
dXJlLXNjcm9sbC1zaHktdGFyZ2V0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Ny
b2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0CkBAIC0xNCwxMCArMTQsOSBAQCBzZWNvbmQgZ2Vz
dHVyZQogd2hlZWwgZXZlbnQgMCs+IFtvYmplY3QgSFRNTERpdkVsZW1lbnRdCiB3aGVlbCBldmVu
dCAxKz4gW29iamVjdCBIVE1MRGl2RWxlbWVudF0KIHJlY2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcg
a2V5cHJlc3MKLXdoZWVsIGV2ZW50IDIrPiBbb2JqZWN0IEhUTUxEaXZFbGVtZW50XQogUEFTUyBt
b3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDAKIFBBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMgMAot
UEFTUyB3aGVlbEV2ZW50c09jY3VycmVkIGlzIDMKK1BBU1Mgd2hlZWxFdmVudHNPY2N1cnJlZCBp
cyAyCiBzY3JvbGwgZXZlbnQgMCs+IFtvYmplY3QgSFRNTERpdkVsZW1lbnRdCiBQQVNTIHNjcm9s
bEV2ZW50c09jY3VycmVkIGlzIDEKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
</data>

          </attachment>
      

    </bug>

</bugzilla>