<?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>135769</bug_id>
          
          <creation_ts>2014-08-08 14:41:35 -0700</creation_ts>
          <short_desc>Implement snapping behavior for iOS</short_desc>
          <delta_ts>2017-05-19 01:04:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134283</blocked>
    
    <blocked>172349</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027952</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-08 14:41:35 -0700</bug_when>
    <thetext>Implement snapping for both mainframe and overflow scrolling on iOS. This will involve moving snap position data via XPC, and then retargeting the scroll offset in overflow/mainframe scrolling to that of the appropriate snap point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028951</commentid>
    <comment_count>1</comment_count>
      <attachid>236563</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-13 16:45:58 -0700</bug_when>
    <thetext>Created attachment 236563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028957</commentid>
    <comment_count>2</comment_count>
      <attachid>236563</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-08-13 16:52:37 -0700</bug_when>
    <thetext>Comment on attachment 236563
Patch

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

Looks good other than the encoding/decoding.

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h:62
&gt; +    Vector&lt;LayoutUnit&gt; horizontalSnapOffsets() const { return m_horizontalSnapOffsets; }
&gt; +    Vector&lt;LayoutUnit&gt; verticalSnapOffsets() const { return m_verticalSnapOffsets; }

Please return a const reference.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3041
&gt; +    

Whitespace.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3316
&gt; +#if ENABLE(CSS_SCROLL_SNAP)
&gt; +    // FIXME: Ensure that offsets are also updated in case of programmatic style changes.
&gt; +    updateSnapOffsets();
&gt; +#endif

Shouldn&apos;t this be in an earlier patch?

&gt; Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:135
&gt; +        encoder &lt;&lt; static_cast&lt;uint64_t&gt;(node.horizontalSnapOffsets().size());
&gt; +        for (LayoutUnit position : node.horizontalSnapOffsets())
&gt; +            encoder &lt;&lt; position.toDouble();

Can&apos;t you just encode the Vector directly?

&gt; Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:222
&gt; +    if (node.hasChangedProperty(ScrollingStateScrollingNode::HorizontalSnapOffsets)) {
&gt; +        if (!decoder.decode(size))
&gt; +            return false;
&gt; +
&gt; +        Vector&lt;LayoutUnit&gt; horizontalSnapOffsets;
&gt; +        for (size_t i = 0; i &lt; size; i++) {
&gt; +            double position = 0;
&gt; +            if (!decoder.decode(position))
&gt; +                return false;
&gt; +
&gt; +            horizontalSnapOffsets.append(position);
&gt; +        }
&gt; +        node.setHorizontalSnapOffsets(horizontalSnapOffsets);

Similarly, I think the vector should just be decodable directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029025</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-13 21:35:21 -0700</bug_when>
    <thetext>Zalan is noting that you should avoid encoding LayoutUnits and instead encode pixel-snapped floats, and avoid LayoutUnits in the UI process at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029096</commentid>
    <comment_count>4</comment_count>
      <attachid>236591</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:03:42 -0700</bug_when>
    <thetext>Created attachment 236591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029097</commentid>
    <comment_count>5</comment_count>
      <attachid>236591</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:06:34 -0700</bug_when>
    <thetext>Comment on attachment 236591
Patch

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

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:46
&gt; +T closestSnapOffset(const Vector&lt;T&gt;&amp; snapOffsets, T scrollDestination, float velocity)

This function is an updated version of the one found in the Mac animations patch.

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:112
&gt; +bool RemoteScrollingCoordinatorProxy::shouldHorizontalSnapForMainframeScrolling() const

To prevent requiring ScrollTypes, I split these methods into horizontal and vertical versions. Otherwise, I could pass in a WebCore::ScrollEventAxis</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029125</commentid>
    <comment_count>6</comment_count>
      <attachid>236591</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-08-14 10:18:24 -0700</bug_when>
    <thetext>Comment on attachment 236591
Patch

This looks ok to me. Let&apos;s see what Tim says.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029149</commentid>
    <comment_count>7</comment_count>
      <attachid>236591</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-14 11:23:43 -0700</bug_when>
    <thetext>Comment on attachment 236591
Patch

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

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:106
&gt; +        // FIXME: Make sure we snap these pixel values.

Why not do this now? I&apos;m sure Zalan can tell you how, and I think it&apos;s not too hard.

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:108
&gt; +            snapOffsetsAsFloat.append(frameView-&gt;horizontalSnapOffsets()-&gt;at(i).round());

you&apos;re .at()ing again

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:112
&gt; +    if (frameView-&gt;verticalSnapOffsets()) {

perhaps a reusable static snapOffsetsAsFloats or something? this code is here four times

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:86
&gt; +#if ENABLE(CSS_SCROLL_SNAP)

This doesn&apos;t belong in the middle of the big block if it has #if, but I don&apos;t think it needs the #if, either.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1306
&gt; +    if (_page-&gt;mainFrame() &amp;&amp; _page-&gt;mainFrame()-&gt;page() &amp;&amp; _page-&gt;mainFrame()-&gt;page()-&gt;scrollingCoordinatorProxy()) {

I wonder if this code can go somewhere more scrollingy (RemoteScrollingCoordinatorProxy?) and we can just call something-&gt;adjustTargetContentOffsetForSnapping(targetContentOffset) or something.

&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:33
&gt; +#if ENABLE(CSS_SCROLL_SNAP)

no #if blocks inside the big block of #imports!

&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:206
&gt; +        // FIXME: In only one axis snaps in 2D scrolling, the other axis will decelerate fast as well. Is this what we want?

there&apos;s some mixup at the beginning of this sentence

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:40
&gt; +#include &lt;WebCore/ScrollingTreeFrameScrollingNode.h&gt;

this is not sorted right

&gt;&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:112
&gt;&gt; +bool RemoteScrollingCoordinatorProxy::shouldHorizontalSnapForMainframeScrolling() const
&gt; 
&gt; To prevent requiring ScrollTypes, I split these methods into horizontal and vertical versions. Otherwise, I could pass in a WebCore::ScrollEventAxis

Deduplicate!

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:143
&gt; +float RemoteScrollingCoordinatorProxy::closestVerticalSnapOffsetForMainframeScrolling(float scrollDestination, float velocity) const

deduplicate!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029191</commentid>
    <comment_count>8</comment_count>
      <attachid>236615</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 13:31:39 -0700</bug_when>
    <thetext>Created attachment 236615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029192</commentid>
    <comment_count>9</comment_count>
      <attachid>236591</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 13:33:18 -0700</bug_when>
    <thetext>Comment on attachment 236591
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:106
&gt;&gt; +        // FIXME: Make sure we snap these pixel values.
&gt; 
&gt; Why not do this now? I&apos;m sure Zalan can tell you how, and I think it&apos;s not too hard.

Fixed.

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:108
&gt;&gt; +            snapOffsetsAsFloat.append(frameView-&gt;horizontalSnapOffsets()-&gt;at(i).round());
&gt; 
&gt; you&apos;re .at()ing again

Good catch. Fixed.

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:112
&gt;&gt; +    if (frameView-&gt;verticalSnapOffsets()) {
&gt; 
&gt; perhaps a reusable static snapOffsetsAsFloats or something? this code is here four times

So much cleaner :)

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:86
&gt;&gt; +#if ENABLE(CSS_SCROLL_SNAP)
&gt; 
&gt; This doesn&apos;t belong in the middle of the big block if it has #if, but I don&apos;t think it needs the #if, either.

Got it. Removed #if.

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1306
&gt;&gt; +    if (_page-&gt;mainFrame() &amp;&amp; _page-&gt;mainFrame()-&gt;page() &amp;&amp; _page-&gt;mainFrame()-&gt;page()-&gt;scrollingCoordinatorProxy()) {
&gt; 
&gt; I wonder if this code can go somewhere more scrollingy (RemoteScrollingCoordinatorProxy?) and we can just call something-&gt;adjustTargetContentOffsetForSnapping(targetContentOffset) or something.

Added adjustTargetContentOffsetForSnapping to RemoteScrollingCoordinatorProxy.

&gt;&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:33
&gt;&gt; +#if ENABLE(CSS_SCROLL_SNAP)
&gt; 
&gt; no #if blocks inside the big block of #imports!

Got it -- fixed.

&gt;&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:206
&gt;&gt; +        // FIXME: In only one axis snaps in 2D scrolling, the other axis will decelerate fast as well. Is this what we want?
&gt; 
&gt; there&apos;s some mixup at the beginning of this sentence

Oops, good catch! (it&apos;s supposed to be &quot;if&quot;)

&gt;&gt;&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:112
&gt;&gt;&gt; +bool RemoteScrollingCoordinatorProxy::shouldHorizontalSnapForMainframeScrolling() const
&gt;&gt; 
&gt;&gt; To prevent requiring ScrollTypes, I split these methods into horizontal and vertical versions. Otherwise, I could pass in a WebCore::ScrollEventAxis
&gt; 
&gt; Deduplicate!

Re-merged into 1 method.

&gt;&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:143
&gt;&gt; +float RemoteScrollingCoordinatorProxy::closestVerticalSnapOffsetForMainframeScrolling(float scrollDestination, float velocity) const
&gt; 
&gt; deduplicate!

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029209</commentid>
    <comment_count>10</comment_count>
      <attachid>236615</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-14 14:18:06 -0700</bug_when>
    <thetext>Comment on attachment 236615
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:3314
&gt; +    // FIXME: Ensure that offsets are also updated in case of programmatic style changes.

Is there a bugzilla bug for this? If so, put the number here.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:3774
&gt; +            if (layer.horizontalSnapOffsets())

if (auto&amp; offsets = layer.horizontalSnapOffsets())
    scrollingGeometry.horizontalSnapOffsets = offsets;

maybe?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1304
&gt; +    if (_page-&gt;mainFrame() &amp;&amp; _page-&gt;mainFrame()-&gt;page() &amp;&amp; _page-&gt;mainFrame()-&gt;page()-&gt;scrollingCoordinatorProxy()) {

All of this incrementally grabbing optional things is an unusual style for us. Usually assignment to a local and then early returning if null is more common, I think.

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:41
&gt; +#include &lt;WebCore/AxisScrollSnapOffsets.h&gt;

these should all be #import :| including the ones above :|

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:119
&gt; +        float potentialSnapPosition = closestSnapOffsetForMainframeScrolling(WebCore::ScrollEventAxis::Horizontal, targetContentOffset-&gt;x, velocity.x);

the f in Mainframe should be capitalized</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029263</commentid>
    <comment_count>11</comment_count>
      <attachid>236637</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 16:36:15 -0700</bug_when>
    <thetext>Created attachment 236637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029277</commentid>
    <comment_count>12</comment_count>
      <attachid>236637</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-14 17:33:12 -0700</bug_when>
    <thetext>Comment on attachment 236637
Patch

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

Some minor comments. I haven&apos;t looked into correctness at all yet.

&gt; Source/WebCore/WebCore.exp.in:3014
&gt; +#if ENABLE(CSS_SCROLL_SNAP)

That&apos;s not a great flag name :(

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:64
&gt; +static inline void setStateScrollingNodeSnapOffsetsAsFloat(ScrollEventAxis axis, ScrollingStateScrollingNode* node, const Vector&lt;LayoutUnit&gt;&amp; snapOffsets, float deviceScaleFactor)
&gt; +{
&gt; +    ASSERT(node);

Node should be passed as a reference instead of asserting the Node is non null.

It is odd the output parameter is the second one, shouldn&apos;t it be the first?

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:66
&gt; +    snapOffsetsAsFloat.reserveCapacity(snapOffsets.size());

reserveCapacity -&gt; reserveInitialCapacity

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:68
&gt; +    for (size_t i = 0; i &lt; snapOffsets.size(); i++)
&gt; +        snapOffsetsAsFloat.append(roundToDevicePixel(snapOffsets[i], deviceScaleFactor, false));

i++ -&gt; ++i

This does not seem right. How can you round to device pixel without the current page scale factor?
Shouldn&apos;t you convert to float and let the UIProces do the rounding?

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:117
&gt; +    if (frameView-&gt;horizontalSnapOffsets())
&gt; +        setStateScrollingNodeSnapOffsetsAsFloat(ScrollEventAxis::Horizontal, node, *frameView-&gt;horizontalSnapOffsets(), frameView-&gt;frame().document()-&gt;deviceScaleFactor());

if (const Vector&lt;LayoutUnit&gt;* horizontalSnapOffsets = frameView-&gt;horizontalSnapOffsets())
   setXXX(..., horizontalSnapOffsets, ...)

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:46
&gt; +T closestSnapOffset(const Vector&lt;T&gt;&amp; snapOffsets, T scrollDestination, float velocity)

This code is used with floats and doubles for the velocity. You should templatize &quot;velocity&quot; (can be implicit).

The value of scrollDestination can also be a CGFloat.

I don&apos;t get the template here really.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:3776
&gt; +            if (auto* offsets = layer.horizontalSnapOffsets())
&gt; +                scrollingGeometry.horizontalSnapOffsets = *offsets;
&gt; +            if (auto* offsets = layer.verticalSnapOffsets())

I disagree with auto here, the type is not obvious.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1305
&gt; +        CGSize maxScrollDimensions = CGSizeMake(scrollView.contentSize.width - scrollView.bounds.size.width, scrollView.contentSize.height - scrollView.bounds.size.height);

This looks very weird, can you explain what you are trying to do?

Don&apos;t forget WKWebView has two additional kind of insets.

&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:83
&gt; +    if (_scrollingTreeNode-&gt;horizontalSnapOffsets().size() &gt; 0)

size() &gt; 0 -&gt; isEmpty().

&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:85
&gt; +    if (_scrollingTreeNode-&gt;verticalSnapOffsets().size() &gt; 0)

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029343</commentid>
    <comment_count>13</comment_count>
      <attachid>236637</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-15 09:30:28 -0700</bug_when>
    <thetext>Comment on attachment 236637
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:64
&gt;&gt; +    ASSERT(node);
&gt; 
&gt; Node should be passed as a reference instead of asserting the Node is non null.
&gt; 
&gt; It is odd the output parameter is the second one, shouldn&apos;t it be the first?

Fixed. Thanks!

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:66
&gt;&gt; +    snapOffsetsAsFloat.reserveCapacity(snapOffsets.size());
&gt; 
&gt; reserveCapacity -&gt; reserveInitialCapacity

Fixed.

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:117
&gt;&gt; +        setStateScrollingNodeSnapOffsetsAsFloat(ScrollEventAxis::Horizontal, node, *frameView-&gt;horizontalSnapOffsets(), frameView-&gt;frame().document()-&gt;deviceScaleFactor());
&gt; 
&gt; if (const Vector&lt;LayoutUnit&gt;* horizontalSnapOffsets = frameView-&gt;horizontalSnapOffsets())
&gt;    setXXX(..., horizontalSnapOffsets, ...)

Fixed. Looks much cleaner!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:46
&gt;&gt; +T closestSnapOffset(const Vector&lt;T&gt;&amp; snapOffsets, T scrollDestination, float velocity)
&gt; 
&gt; This code is used with floats and doubles for the velocity. You should templatize &quot;velocity&quot; (can be implicit).
&gt; 
&gt; The value of scrollDestination can also be a CGFloat.
&gt; 
&gt; I don&apos;t get the template here really.

Added comments explaining the template, as well as distinguished LayoutType from VelocityType.

&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:3776
&gt;&gt; +            if (auto* offsets = layer.verticalSnapOffsets())
&gt; 
&gt; I disagree with auto here, the type is not obvious.

Changed back to Vector&lt;LayoutUnit&gt;

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:1305
&gt;&gt; +        CGSize maxScrollDimensions = CGSizeMake(scrollView.contentSize.width - scrollView.bounds.size.width, scrollView.contentSize.height - scrollView.bounds.size.height);
&gt; 
&gt; This looks very weird, can you explain what you are trying to do?
&gt; 
&gt; Don&apos;t forget WKWebView has two additional kind of insets.

Added a comment describing the role of maxScrollDimensions. We&apos;ll probably have to change it to account for the insets.

&gt;&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:83
&gt;&gt; +    if (_scrollingTreeNode-&gt;horizontalSnapOffsets().size() &gt; 0)
&gt; 
&gt; size() &gt; 0 -&gt; isEmpty().

Changed. Thanks!

&gt;&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:85
&gt;&gt; +    if (_scrollingTreeNode-&gt;verticalSnapOffsets().size() &gt; 0)
&gt; 
&gt; ditto.

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029347</commentid>
    <comment_count>14</comment_count>
      <attachid>236651</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-15 09:36:04 -0700</bug_when>
    <thetext>Created attachment 236651
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029350</commentid>
    <comment_count>15</comment_count>
      <attachid>236651</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-15 09:41:16 -0700</bug_when>
    <thetext>Comment on attachment 236651
Patch

This patch is covering a lot of different areas, and I think it&apos;s a good idea to break it down into several small patches. I&apos;ll be leaving comments to what parts should be separated out into individual patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029357</commentid>
    <comment_count>16</comment_count>
      <attachid>236651</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-15 09:50:16 -0700</bug_when>
    <thetext>Comment on attachment 236651
Patch

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

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:-49
&gt; -                LayoutUnit lastPotentialSnapPositionX = LayoutUnit(position.x()) + valueForLength(coordinate.first, viewWidth);

This should be in a separate patch. It seems localToContainerPoint was giving me strange offsets for child elements, so I resorted to using offset(Top|Left) on the child element instead, with a FIXME indicating that using offset(Left|Top) wouldn&apos;t take into account transforms.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:44
&gt; +// closestSnapOffset is a templated function that takes in a Vector representing snap offsets as LayoutTypes (e.g. LayoutUnit or float) and

These fixes to closestSnapOffset add a template for velocity as well as snapOffset.

&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:209
&gt; +            scrollView.decelerationRate = horizontalSnapOffsets().size() || verticalSnapOffsets().size() ? UIScrollViewDecelerationRateFast : UIScrollViewDecelerationRateNormal;

(oops, I meant to change size() here to !isEmpty() as well)

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:-26
&gt; -#include &quot;config.h&quot;

As Tim mentioned, these should have been using #import all along instead of #include.

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:-32
&gt; -#include &quot;LayerRepresentation.h&quot;

(and these too: we should just have a patch that changes these to use #import)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029459</commentid>
    <comment_count>17</comment_count>
      <attachid>236651</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-08-15 13:51:27 -0700</bug_when>
    <thetext>Comment on attachment 236651
Patch

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

r=me. Please file a bug to implement layout tests for this (as we discussed in person).

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:64
&gt; +    // FIXME: Incorporate current page scale factor in snapping to device pixel. Perhaps we should just convert to float here and let UI process do the pixel snapping?

Pet peeve: FIXME should have a bug # in it so we don&apos;t forget to fix!

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:67
&gt; +    for (size_t i = 0; i &lt; snapOffsets.size(); ++i)

How about a C++11 iterator here?

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:47
&gt; +            // FIXME: Investigate why using localToContainerPoint gives the wrong offsets for iOS mainframe. Also, these offsets won&apos;t take transforms into account (make sure to test this!)

Bug # please

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:51
&gt; +            // FIXME: Check that localToContainerPoint works with CSS rotations.

Ditto.

&gt;&gt; Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:209
&gt;&gt; +            scrollView.decelerationRate = horizontalSnapOffsets().size() || verticalSnapOffsets().size() ? UIScrollViewDecelerationRateFast : UIScrollViewDecelerationRateNormal;
&gt; 
&gt; (oops, I meant to change size() here to !isEmpty() as well)

Please fix!

&gt; Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:123
&gt; +    // FIXME: We need to account for how the top navigation bar changes in size.

This seems like an important bug to file so we don&apos;t forget!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029463</commentid>
    <comment_count>18</comment_count>
      <attachid>236651</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-15 14:09:29 -0700</bug_when>
    <thetext>Comment on attachment 236651
Patch

Clearing flags on attachment: 236651

Committed r172649: &lt;http://trac.webkit.org/changeset/172649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029464</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-15 14:09:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236563</attachid>
            <date>2014-08-13 16:45:58 -0700</date>
            <delta_ts>2014-08-14 09:03:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135769-20140813164548.patch</filename>
            <type>text/plain</type>
            <size>20586</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXgg
ODE0MjNjODcxZThmNzRkOGMxY2VkYWQ4ZGMyZDhiNDMzYmJkMGJmMi4uODlmOTJmODc0MWY1ZTJj
YzhmYzJhNTJiOTIyZGU0NDNiNGY3ODUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAt
MTgwLDYgKzE4MCw4IEBAIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZID0gOwogRU5BQkxF
X1NIQVJFRF9XT1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJTOwogRU5BQkxFX0NTU19TQ1JP
TExfU05BUCA9ICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUF8kKFBMQVRGT1JNX05BTUUpKTsKIEVO
QUJMRV9DU1NfU0NST0xMX1NOQVBfbWFjb3N4ID0gRU5BQkxFX0NTU19TQ1JPTExfU05BUDsKK0VO
QUJMRV9DU1NfU0NST0xMX1NOQVBfaXBob25lb3MgPSBFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQOwor
RU5BQkxFX0NTU19TQ1JPTExfU05BUF9pcGhvbmVzaW11bGF0b3IgPSAkKEVOQUJMRV9DU1NfU0NS
T0xMX1NOQVBfaXBob25lb3MpOwogRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgPSAkKEVOQUJMRV9T
UEVFQ0hfU1lOVEhFU0lTXyQoUExBVEZPUk1fTkFNRSkpOwogRU5BQkxFX1NQRUVDSF9TWU5USEVT
SVMgPSBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUzsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFC
TEVfU1FMX0RBVEFCQVNFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCA4MTQyM2M4NzFlOGY3NGQ4YzFjZWRhZDhk
YzJkOGI0MzNiYmQwYmYyLi44OWY5MmY4NzQxZjVlMmNjOGZjMmE1MmI5MjJkZTQ0M2I0Zjc4NTM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwpAQCAtMTgwLDYgKzE4MCw4IEBAIEVOQUJMRV9SRVNPTFVUSU9OX01FRElB
X1FVRVJZID0gOwogRU5BQkxFX1NIQVJFRF9XT1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJT
OwogRU5BQkxFX0NTU19TQ1JPTExfU05BUCA9ICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUF8kKFBM
QVRGT1JNX05BTUUpKTsKIEVOQUJMRV9DU1NfU0NST0xMX1NOQVBfbWFjb3N4ID0gRU5BQkxFX0NT
U19TQ1JPTExfU05BUDsKK0VOQUJMRV9DU1NfU0NST0xMX1NOQVBfaXBob25lb3MgPSBFTkFCTEVf
Q1NTX1NDUk9MTF9TTkFQOworRU5BQkxFX0NTU19TQ1JPTExfU05BUF9pcGhvbmVzaW11bGF0b3Ig
PSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVBfaXBob25lb3MpOwogRU5BQkxFX1NQRUVDSF9TWU5U
SEVTSVMgPSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTXyQoUExBVEZPUk1fTkFNRSkpOwogRU5B
QkxFX1NQRUVDSF9TWU5USEVTSVMgPSBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUzsKIEVOQUJMRV9T
UUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRl
eCAzN2VkMzdlMjU4YmRkMGY4NzEzMTM0MzU0M2FmODQ0NzFlZTEzZjM0Li43NzFkOGU3NTFhMmVk
NTRlZDUyMjUxZWNkNGVhNzY3NmY5Y2FkYjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMzAx
MSw2ICszMDExLDEyIEBAIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFUE5TXzEyRE9NV2luZG93Q1NTRQogX19aTjdXZWJDb3JlMTZGaWx0
ZXJPcGVyYXRpb25zYVNFUktTMF8KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK19fWk43V2ViQ29yZTE3Y2xvc2VzdFNuYXBPZmZzZXRFUktOM1dURjZWZWN0b3JJTlNfMTBM
YXlvdXRVbml0RUxtMEVOUzBfMTVDcmFzaE9uT3ZlcmZsb3dFRUVTMl9mCitfX1pON1dlYkNvcmUy
N1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTIyc2V0VmVydGljYWxTbmFwT2Zmc2V0c0VSS04z
V1RGNlZlY3RvcklOU18xMExheW91dFVuaXRFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQor
X19aTjdXZWJDb3JlMjdTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUyNHNldEhvcml6b250YWxT
bmFwT2Zmc2V0c0VSS04zV1RGNlZlY3RvcklOU18xMExheW91dFVuaXRFTG0wRU5TMV8xNUNyYXNo
T25PdmVyZmxvd0VFRQorI2VuZGlmCisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiBf
X1pOSzdXZWJDb3JlOERvY3VtZW50MTZhbm5vdGF0ZWRSZWdpb25zRXYKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcAppbmRleCBhZmFiMmY2ZDVlZDhkOWE0ODA1ZjIxODUxNWI1OTE5ZWFkZTA1
OThkLi5jM2RjMTkyOWQzMjZkYTE0ODQwMGFhMWNkMGQzYzUxNTNjZGVjODkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcApAQCAtMzk5LDYgKzM5OSwxMCBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnVwZGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQgbm9k
ZQogICAgICAgICBub2RlLT5zZXRUb3RhbENvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS0+
Y29udGVudFNpemUpOwogICAgICAgICBub2RlLT5zZXRSZWFjaGFibGVDb250ZW50c1NpemUoc2Ny
b2xsaW5nR2VvbWV0cnktPnJlYWNoYWJsZUNvbnRlbnRTaXplKTsKICAgICAgICAgbm9kZS0+c2V0
U2Nyb2xsYWJsZUFyZWFTaXplKHNjcm9sbGluZ0dlb21ldHJ5LT5zY3JvbGxhYmxlQXJlYVNpemUp
OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIG5vZGUtPnNldEhvcml6b250
YWxTbmFwT2Zmc2V0cyhzY3JvbGxpbmdHZW9tZXRyeS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsK
KyAgICAgICAgbm9kZS0+c2V0VmVydGljYWxTbmFwT2Zmc2V0cyhzY3JvbGxpbmdHZW9tZXRyeS0+
dmVydGljYWxTbmFwT2Zmc2V0cyk7CisjZW5kaWYKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmluZGV4IGU1
NWIxZWI3Y2Q2NGVmN2Y0M2E0NWRjZjcxZDdiNTczZGYzZjkxZmIuLmMwZDhlNzNiZTMwODE1ZmEw
Mjg2ZjJiYzUyZjhiMmM3MWUzNjA0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAtNDMsNiArNDMsMTAgQEAKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisjaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVuc2lnbmVkIFN5bmNocm9ub3VzU2Nyb2xsaW5n
UmVhc29uczsKQEAgLTE2NCw2ICsxNjgsMTAgQEAgcHVibGljOgogICAgICAgICBGbG9hdFNpemUg
cmVhY2hhYmxlQ29udGVudFNpemU7IC8vIFNtYWxsZXIgdGhhbiBjb250ZW50U2l6ZSB3aGVuIG92
ZXJmbG93IGlzIGhpZGRlbiBvbiBvbmUgYXhpcy4KICAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxQ
b3NpdGlvbjsKICAgICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOworI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCisgICAgICAgIFZlY3RvcjxMYXlvdXRVbml0PiBob3Jpem9udGFsU25hcE9m
ZnNldHM7CisgICAgICAgIFZlY3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOwor
I2VuZGlmCiAgICAgfTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcmFtZVNjcm9sbGluZ05v
ZGUoU2Nyb2xsaW5nTm9kZUlELCBHcmFwaGljc0xheWVyKiAvKnNjcm9sbExheWVyKi8sIEdyYXBo
aWNzTGF5ZXIqIC8qc2Nyb2xsZWRDb250ZW50c0xheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8qY291
bnRlclNjcm9sbGluZ0xheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8qaW5zZXRDbGlwTGF5ZXIqLywg
Y29uc3QgU2Nyb2xsaW5nR2VvbWV0cnkqID0gbnVsbHB0cikgeyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmNwcAppbmRleCBkOTMzNzRlOGM3MzgyZWIxYTAyNDRkYWEyZGU0ZDNhZTA5YTE4MDZjLi4x
NWM0N2IyOTBiODg5ZDVkZjMzNTViYmJhZjA0ODc2MTc5ZWEzYTcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5jcHAKQEAgLTQ4LDYgKzQ4LDEwIEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2NyCiAg
ICAgLCBtX3Njcm9sbFBvc2l0aW9uKHN0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpKQogICAgICwg
bV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24oKSkKICAgICAsIG1fc2Nyb2xsT3JpZ2luKHN0YXRlTm9kZS5zY3JvbGxPcmlnaW4oKSkKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICwgbV9ob3Jpem9udGFsU25hcE9mZnNldHMo
c3RhdGVOb2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAgICwgbV92ZXJ0aWNhbFNuYXBP
ZmZzZXRzKHN0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisjZW5kaWYKICAgICAsIG1f
c2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKHN0YXRlTm9kZS5zY3JvbGxhYmxlQXJlYVBhcmFtZXRl
cnMoKSkKICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1h
dGljU2Nyb2xsKHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9n
cmFtbWF0aWNTY3JvbGwoKSkKIHsKQEAgLTEwMiw2ICsxMDYsMjYgQEAgdm9pZCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xs
T3JpZ2luKQogICAgIHNldFByb3BlcnR5Q2hhbmdlZChTY3JvbGxPcmlnaW4pOwogfQogCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFw
T2Zmc2V0cykKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU25hcE9mZnNldHMgPT0gc25hcE9mZnNl
dHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc25h
cE9mZnNldHM7CisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKEhvcml6b250YWxTbmFwT2Zmc2V0cyk7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRWZXJ0aWNhbFNuYXBP
ZmZzZXRzKGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMpCit7CisgICAgaWYg
KG1fdmVydGljYWxTbmFwT2Zmc2V0cyA9PSBzbmFwT2Zmc2V0cykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0gc25hcE9mZnNldHM7CisgICAgc2V0UHJvcGVy
dHlDaGFuZ2VkKFZlcnRpY2FsU25hcE9mZnNldHMpOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoY29uc3Qg
U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhUGFyYW1ldGVycyA9PSBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaApp
bmRleCA5ZjJkMGE5Y2Y5OWMxZWY5YmZmMTA3MDAyZTNlYTczYzA4ZWYwNzA1Li5jN2Y5NGY3ZDRi
MGMzODJlYWQ2YTgwNDM3MzljMjQ4ZTVmM2EyNjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaApA
QCAtNDgsNiArNDgsMTAgQEAgcHVibGljOgogICAgICAgICBTY3JvbGxhYmxlQXJlYVBhcmFtcywK
ICAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sCiAgICAgICAgIE51bVNjcm9sbGluZ1N0
YXRlTm9kZUJpdHMsCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgSG9yaXpv
bnRhbFNuYXBPZmZzZXRzLAorICAgICAgICBWZXJ0aWNhbFNuYXBPZmZzZXRzLAorI2VuZGlmCiAg
ICAgfTsKIAogICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsYWJsZUFyZWFTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVNpemU7IH0KQEAgLTY1LDYgKzY5LDE0IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxPcmlnaW47IH0KICAgICB2b2lkIHNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYp
OwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBjb25zdCBWZWN0b3I8TGF5b3V0
VW5pdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bFNuYXBPZmZzZXRzOyB9CisgICAgdm9pZCBzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29uc3Qg
VmVjdG9yPExheW91dFVuaXQ+Jik7CisKKyAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHZl
cnRpY2FsU25hcE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7
IH0KKyAgICB2b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPExheW91dFVu
aXQ+Jik7CisjZW5kaWYKKwogICAgIGNvbnN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyYgc2Ny
b2xsYWJsZUFyZWFQYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBh
cmFtZXRlcnM7IH0KICAgICB2b2lkIHNldFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyhjb25zdCBT
Y3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMmIHBhcmFtcyk7CiAKQEAgLTg1LDYgKzk3LDEwIEBAIHBy
aXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQg
bV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdpbjsK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtX2hv
cml6b250YWxTbmFwT2Zmc2V0czsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV92ZXJ0aWNhbFNu
YXBPZmZzZXRzOworI2VuZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIG1fc2Nyb2xs
YWJsZUFyZWFQYXJhbWV0ZXJzOwogICAgIGJvb2wgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJl
cHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGw7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCmlu
ZGV4IDEyYzMwYTUwZmNjMGFjNmFiOWI1MDQ0ZTk4NjQwNTNkNjVlY2ZkNzMuLjI5NjIzNzNmZmQ1
NmJmZmM2ZDI2Y2E2NDFiMWMxN2IyMDk3NDEyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAK
QEAgLTY3LDYgKzY3LDE0IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0
ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYKICAgICBpZiAoc3RhdGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3Jp
Z2luKSkKICAgICAgICAgbV9zY3JvbGxPcmlnaW4gPSBzdGF0ZS5zY3JvbGxPcmlnaW4oKTsKIAor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykp
CisgICAgICAgIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc3RhdGUuaG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKCk7CisKKyAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisgICAgICAgIG1fdmVydGlj
YWxTbmFwT2Zmc2V0cyA9IHN0YXRlLnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKyNlbmRpZgorCiAg
ICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zKSkKICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhcmFt
ZXRlcnMgPSBzdGF0ZS5zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oCmluZGV4IGQ1YmU5YTA0ZjBlYWUwZDgyZGMwNzA4MWU2OWFkYTUyNjdiMjY2NmQuLjIz
YTMxOGQ3MWJkYWIxNGMyZmY4MjAyM2U5ZGI2MWEzZDEyZDllZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUuaApAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBGbG9hdFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7IH0KKyAgICBWZWN0b3I8TGF5b3V0VW5p
dD4gdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTbmFwT2Zm
c2V0czsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCk7
CiAKQEAgLTkyLDcgKzk3LDEwIEBAIHByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fcmVhY2hhYmxl
Q29udGVudHNTaXplOwogICAgIEZsb2F0UG9pbnQgbV9sYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRp
b247CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47Ci0gICAgCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9ob3Jpem9udGFsU25hcE9mZnNl
dHM7CisgICAgVmVjdG9yPExheW91dFVuaXQ+IG1fdmVydGljYWxTbmFwT2Zmc2V0czsKKyNlbmRp
ZgogICAgIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVy
czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ2
NmRhMTNjOGJjMWMxZmYxNjY1MDA4MzNjMzFlNDBhZTA4NDE5ODAuLjRkY2MyZThkZTZkODM3OThl
Y2NhY2EzZDE1Mjg3NTViNDI4ZDJhYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMzAzOCw3ICszMDM4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U25hcE9mZnNldHMoKQogICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVs
ZW1lbnRzLgogICAgIGlmICghZW5jbG9zaW5nRWxlbWVudCgpIHx8ICFlbmNsb3NpbmdFbGVtZW50
KCktPnJlbmRlckJveCgpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdF
bGVtZW50KCktPnJlbmRlckJveCgpOwogICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMsICp0b0hUTUxFbGVtZW50KGVuY2xvc2luZ0VsZW1lbnQoKSksICpib3gsIGJv
eC0+c3R5bGUoKSk7CiB9CkBAIC0zMzA5LDYgKzMzMDksMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGlu
ZyBtYXkgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGlmIHRoZSBhbW91bnQgb2Ygb3Zl
cmZsb3cgY2hhbmdlZC4KICAgICBpZiAoY29tcG9zaXRvcigpLnVwZGF0ZUxheWVyQ29tcG9zaXRp
bmdTdGF0ZSgqdGhpcykpCiAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRDb21wb3NpdGluZ0xheWVy
c05lZWRSZWJ1aWxkKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJ
WE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9n
cmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlm
CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYWUxNzUxYjFkNGZlNzI0MTgw
ZjZhOWM3ODZiOTM4NTAzNjViMzY4My4uYWY3YjQyMGU1YTI0NWQ0MTEwMmRiMDU4OTAzZTYwMzY2
Y2NmMzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKQEAgLTM3NzAsNiArMzc3MCwxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIs
IFNjcgogICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuc2Nyb2xsYWJsZUFyZWFTaXplID0g
bGF5ZXIudmlzaWJsZVNpemUoKTsKICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LmNvbnRl
bnRTaXplID0gbGF5ZXIuY29udGVudHNTaXplKCk7CiAgICAgICAgICAgICBzY3JvbGxpbmdHZW9t
ZXRyeS5yZWFjaGFibGVDb250ZW50U2l6ZSA9IGxheWVyLnNjcm9sbGFibGVDb250ZW50c1NpemUo
KTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAgICAgaWYgKGxheWVyLmF4
aXNTY3JvbGxTbmFwT2Zmc2V0cyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKQorICAgICAg
ICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5Lmhvcml6b250YWxTbmFwT2Zmc2V0cyA9ICpsYXll
ci5heGlzU2Nyb2xsU25hcE9mZnNldHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAg
ICAgICAgICAgIGlmIChsYXllci5heGlzU2Nyb2xsU25hcE9mZnNldHMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkudmVydGljYWxT
bmFwT2Zmc2V0cyA9ICpsYXllci5heGlzU2Nyb2xsU25hcE9mZnNldHMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCk7CisjZW5kaWYKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT51
cGRhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUobm9kZUlELCBiYWNraW5nLT5zY3JvbGxpbmdMYXll
cigpLCBiYWNraW5nLT5zY3JvbGxpbmdDb250ZW50c0xheWVyKCksICZzY3JvbGxpbmdHZW9tZXRy
eSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0Nv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDgxNDIzYzg3MWU4Zjc0
ZDhjMWNlZGFkOGRjMmQ4YjQzM2JiZDBiZjIuLjg5ZjkyZjg3NDFmNWUyY2M4ZmMyYTUyYjkyMmRl
NDQzYjRmNzg1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xODAsNiArMTgwLDggQEAgRU5BQkxF
X1JFU09MVVRJT05fTUVESUFfUVVFUlkgPSA7CiBFTkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFC
TEVfU0hBUkVEX1dPUktFUlM7CiBFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQID0gJChFTkFCTEVfQ1NT
X1NDUk9MTF9TTkFQXyQoUExBVEZPUk1fTkFNRSkpOwogRU5BQkxFX0NTU19TQ1JPTExfU05BUF9t
YWNvc3ggPSBFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQOworRU5BQkxFX0NTU19TQ1JPTExfU05BUF9p
cGhvbmVvcyA9IEVOQUJMRV9DU1NfU0NST0xMX1NOQVA7CitFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQ
X2lwaG9uZXNpbXVsYXRvciA9ICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUF9pcGhvbmVvcyk7CiBF
TkFCTEVfU1BFRUNIX1NZTlRIRVNJUyA9ICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVNfJChQTEFU
Rk9STV9OQU1FKSk7CiBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUyA9IEVOQUJMRV9TUEVFQ0hfU1lO
VEhFU0lTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9TUUxfREFUQUJBU0U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCmluZGV4IDgxNDIzYzg3MWU4Zjc0ZDhjMWNlZGFkOGRjMmQ4YjQzM2JiZDBiZjIuLjg5Zjky
Zjg3NDFmNWUyY2M4ZmMyYTUyYjkyMmRlNDQzYjRmNzg1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xODAs
NiArMTgwLDggQEAgRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgPSA7CiBFTkFCTEVfU0hB
UkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM7CiBFTkFCTEVfQ1NTX1NDUk9MTF9T
TkFQID0gJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQXyQoUExBVEZPUk1fTkFNRSkpOwogRU5BQkxF
X0NTU19TQ1JPTExfU05BUF9tYWNvc3ggPSBFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQOworRU5BQkxF
X0NTU19TQ1JPTExfU05BUF9pcGhvbmVvcyA9IEVOQUJMRV9DU1NfU0NST0xMX1NOQVA7CitFTkFC
TEVfQ1NTX1NDUk9MTF9TTkFQX2lwaG9uZXNpbXVsYXRvciA9ICQoRU5BQkxFX0NTU19TQ1JPTExf
U05BUF9pcGhvbmVvcyk7CiBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUyA9ICQoRU5BQkxFX1NQRUVD
SF9TWU5USEVTSVNfJChQTEFURk9STV9OQU1FKSk7CiBFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUyA9
IEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9T
UUxfREFUQUJBU0U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Nyb2xsaW5n
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
LmNwcAppbmRleCBmNjJiYjljYzU4MDg5ZmE3Yjk4M2ZkMTJiMDA3NGYxMDA2MWM3ZTJmLi45OTUx
MzdiYTk2MjM3ZTg5Y2E5Yzc0N2JhZjljNGQ3NTIwYzE2OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKQEAgLTEyOCw2ICsxMjgsMTggQEAgdm9p
ZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUsIHJlYWNoYWJsZUNvbnRl
bnRzU2l6ZSkKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24pCiAgICAgU0NST0xMSU5HX05P
REVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luLCBzY3Jv
bGxPcmlnaW4pCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAobm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25h
cE9mZnNldHMpKSB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG5v
ZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChMYXlvdXRV
bml0IHBvc2l0aW9uIDogbm9kZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgcG9zaXRpb24udG9Eb3VibGUoKTsKKyAgICB9CisgICAgaWYgKG5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0cykpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obm9k
ZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChMYXlvdXRVbml0
IHBvc2l0aW9uIDogbm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHBvc2l0aW9uLnRvRG91YmxlKCk7CisgICAgfQorI2VuZGlmCiAgICAgU0NST0xMSU5H
X05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQ
YXJhbXMsIHNjcm9sbGFibGVBcmVhUGFyYW1ldGVycykKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNP
REUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiwg
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCkKQEAgLTE5Myw2ICsy
MDUsMzggQEAgYm9vbCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNP
REUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUsIEZs
b2F0U2l6ZSwgc2V0UmVhY2hhYmxlQ29udGVudHNTaXplKTsKICAgICBTQ1JPTExJTkdfTk9ERV9E
RUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwgRmxvYXRQ
b2ludCwgc2V0U2Nyb2xsUG9zaXRpb24pOwogICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwgSW50UG9pbnQsIHNldFNjcm9s
bE9yaWdpbik7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB1aW50NjRfdCBzaXpl
OworICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8
TGF5b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uID0gMDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9zaXRpb24pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmFw
cGVuZChwb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRIb3Jpem9udGFsU25h
cE9mZnNldHMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKKyAgICB9CisgICAgaWYgKG5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0cykpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gdmVydGljYWxT
bmFwT2Zmc2V0czsKKyAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0cy5jbGVhcigpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9zaXRpb24p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgdmVydGljYWxT
bmFwT2Zmc2V0cy5hcHBlbmQocG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIG5vZGUuc2V0
VmVydGljYWxTbmFwT2Zmc2V0cyh2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKKyAgICB9CisjZW5kaWYK
ICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxhYmxlQXJlYVBhcmFtcywgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLCBzZXRTY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMpOwogICAgIAogICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1MubW0KaW5kZXggZWIwYWNjYTk0OWU3YTYyYjg2NjdhMDg1Nzk2YjNjNmQzZWQxOGUxNy4uYjU4
Y2Q5YjQ2ODllNzg4NTE2ZDQ5YzI3OGUxZjNkNDVkY2RhOWQ2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5n
L2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0zMCw2ICsz
MCw5IEBACiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAogI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBvcnQgPFdl
YkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjZW5kaWYKICNpbXBvcnQgPFdlYkNvcmUv
QmxvY2tFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4KQEAg
LTczLDYgKzc2LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIF9zY3JvbGxpbmdU
cmVlTm9kZS0+b3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnQoKTsKIH0KIAorI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCistICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xs
VmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENv
bnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0Cit7CisgICAg
aWYgKF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID4g
MCkKKyAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9z
Y3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRP
ZmZzZXQtPngsIHZlbG9jaXR5LngpOworICAgIGlmIChfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRp
Y2FsU25hcE9mZnNldHMoKS5zaXplKCkgPiAwKQorICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0
LT55ID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOworfQorI2VuZGlm
CisKIC0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3Jv
bGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09MKXdpbGxEZWNlbGVyYXRlCiB7CiAgICAgaWYgKF9p
blVzZXJJbnRlcmFjdGlvbiAmJiAhd2lsbERlY2VsZXJhdGUpIHsKQEAgLTE4OCw3ICsyMDEsMTIg
QEAgdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVBZnRl
ckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1MKIAogICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250
ZW50SW5zZXQgPSBpbnNldHM7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhNRTogSW4gb25seSBvbmUg
YXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0
ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNl
dHMpKQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXplKCkgPyBV
SVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlv
blJhdGVOb3JtYWw7CisjZW5kaWYKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236591</attachid>
            <date>2014-08-14 09:03:42 -0700</date>
            <delta_ts>2014-08-14 13:33:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135769-20140814090331.patch</filename>
            <type>text/plain</type>
            <size>30444</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYThkY2NmYmEzOThhNDI4
NzExZDgzNjlhNzM0ZDkwOWU0Y2NkODg5Zi4uNzA3ZWRkMmUxNzgwZjM0NTA3ZWQyNjkyZDBlMzUw
ODA1MjgwNDU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
bmFwcGluZyBiZWhhdmlvciBmb3IgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzU3NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzbmFwIHBvaW50cyBvbiBpT1MuIFRo
aXMgZW50YWlscyBzZW5kaW5nIHNuYXAgcG9pbnRzIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRo
ZSBVSSBwcm9jZXNzCisgICAgICAgIGJ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBzbmFwIHBvaW50
cyBhbmQgdXBkYXRpbmcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQg
V0tXZWJWaWV3IHRvIHN1cHBvcnQKKyAgICAgICAgYW5pbWF0aW9uIHRvIHNuYXAgcG9pbnRzIGlu
IHRoZSBjYXNlcyBvZiBtYWluZnJhbWUgYW5kIG92ZXJmbG93IHNjcm9sbGluZywgcmVzcGVjdGl2
ZWx5LgorCisgICAgICAgIFRoZXJlIGFyZSBubyBuZXcgdGVzdHMgeWV0IC0tIHdlJ2xsIG5lZWQg
dG8gZmluZCBhIHdheSB0byB0ZXN0IHRoaXMhCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xh
eW91dFVwZGF0ZWQpOiBVcGRhdGUgc25hcCBvZmZzZXRzIGZvciBtYWluZnJhbWUgc2Nyb2xsaW5n
LCBhcyB3ZWxsIGFzIHRoZSBzdGF0ZSBub2RlLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcjo6dXBkYXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlKTogQWRkZWQgc25h
cCBvZmZzZXRzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBDb21wdXRlcyB0aGUg
Y2xvc2VzdCBzbmFwIG9mZnNldCBnaXZlbiBhIHNvcnRlZCB2ZWN0b3Igb2YgY29tcGFyYWJsZSB0
eXBlcyAoZS5nLiBmbG9hdCwgTGF5b3V0VW5pdCkuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU25hcE9m
ZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6dmVydGljYWxTbmFwT2Zmc2V0cyk6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJlZm9yZUNo
aWxkcmVuKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6Omhv
cml6b250YWxTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZTo6dmVydGljYWxTbmFwT2Zmc2V0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQpOiBVcGRhdGUgc25hcCBvZmZzZXRzIGZvciBvdmVyZmxvdyBzY3Jv
bGxpbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3Jk
aW5hdGVkTGF5ZXIpOiBVcGRhdGVzIHRoZSBzdGF0ZSBub2RlJ3Mgc25hcCBvZmZzZXRzIGZvciBv
dmVyZmxvdyBzY3JvbGxpbmcuCisKIDIwMTQtMDgtMTMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIENTU19TQ1JPTExfU05BUCBmb3IgaU9T
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggOTBjMzkwYjYwMjEwNmU0ODJkYTU0YzQyMWUzZGI0NTU4YTI0YmZlYy4u
MmEzNGE4ZDkzMGE2NWU4ODZjMDJkZTM2ZWE0Zjc2YjM5Y2Q2NWMxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI1IEBACisyMDE0LTA4LTE0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzbmFwcGluZyBiZWhhdmlvciBmb3IgaU9TCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3NjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHA6CisgICAg
ICAgIChBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmVuY29kZSk6
IEFkZGVkIHNuYXAgb2Zmc2V0IGVuY29kaW5nLgorICAgICAgICAoQXJndW1lbnRDb2RlcjxTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNvZGUpOiBBZGRlZCBzbmFwIG9mZnNldCBkZWNv
ZGluZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRh
cmdldENvbnRlbnRPZmZzZXQ6XSk6IEZvciBtYWluZnJhbWUgc2Nyb2xsaW5nLCByZXRhcmdldHMg
dGhlIHNjcm9sbCBkZXN0aW5hdGlvbiB0byB0aGUgYXBwcm9wcmlhdGUgc25hcCBwb2ludC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJv
eHkuaDogQWRkZWQgbWV0aG9kcyB0byBleHRyYWN0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBX
S1dlYlZpZXcgZnJvbSBzbmFwIG9mZnNldHMgaW4gbWFpbmZyYW1lIHNjcm9sbGluZy4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TLm1tOgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIHNj
cm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6
XSk6IEZvciBvdmVyZmxvdyBzY3JvbGxpbmcsIHJldGFyZ2V0cyB0aGUgc2Nyb2xsIGRlc3RpbmF0
aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBzbmFwIHBvaW50LgorICAgICAgICAoV2ViS2l0OjpTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVBZnRlckNoaWxkcmVuKTog
U2V0cyB0aGUgZGVjZWxlcmF0aW9uIGZhY3RvciB0byBGQVNUIGlmIHNuYXAgcG9pbnRzIGFyZSBh
Y3RpdmUuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5OjpzaG91bGRIb3Jpem9udGFsU25hcEZvck1haW5mcmFtZVNjcm9sbGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNob3VsZFZlcnRp
Y2FsU25hcEZvck1haW5mcmFtZVNjcm9sbGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RIb3Jpem9udGFsU25hcE9mZnNldEZvck1h
aW5mcmFtZVNjcm9sbGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OmNsb3Nlc3RWZXJ0aWNhbFNuYXBPZmZzZXRGb3JNYWluZnJhbWVTY3JvbGxp
bmcpOgorCiAyMDE0LTA4LTEzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEVuYWJsZSBDU1NfU0NST0xMX1NOQVAgZm9yIGlPUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgppbmRleCAzN2VkMzdlMjU4YmRkMGY4NzEzMTM0MzU0M2FmODQ0NzFlZTEzZjM0Li41MjVl
MzU0YjAzZjJkNmZkNmU4ZTUyZTRkNjVhYTA1YjU5MWNmNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgpAQCAtMzAxMSw2ICszMDExLDExIEBAIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3Rh
dGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEyRE9NV2luZG93Q1NTRQogX19aTjdXZWJD
b3JlMTZGaWx0ZXJPcGVyYXRpb25zYVNFUktTMF8KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK19fWk43V2ViQ29yZTI3U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlMjJz
ZXRWZXJ0aWNhbFNuYXBPZmZzZXRzRVJLTjNXVEY2VmVjdG9ySWZMbTBFTlMxXzE1Q3Jhc2hPbk92
ZXJmbG93RUVFCitfX1pON1dlYkNvcmUyN1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTI0c2V0
SG9yaXpvbnRhbFNuYXBPZmZzZXRzRVJLTjNXVEY2VmVjdG9ySWZMbTBFTlMxXzE1Q3Jhc2hPbk92
ZXJmbG93RUVFCisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKIF9fWk5L
N1dlYkNvcmU4RG9jdW1lbnQxNmFubm90YXRlZFJlZ2lvbnNFdgogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCmluZGV4IGFmYWIyZjZkNWVkOGQ5YTQ4MDVmMjE4NTE1YjU5MTllYWRlMDU5OGQu
Ljk4MjdmMDk1Mzk5MTFjZjhjZWMxMWE0M2U0NzkzNDMzZWFhNDhhNWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCkBAIC05Nyw2ICs5NywyOSBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgbm9k
ZS0+c2V0VG90YWxDb250ZW50c1NpemUoZnJhbWVWaWV3LT50b3RhbENvbnRlbnRzU2l6ZSgpKTsK
ICAgICBub2RlLT5zZXRSZWFjaGFibGVDb250ZW50c1NpemUoZnJhbWVWaWV3LT50b3RhbENvbnRl
bnRzU2l6ZSgpKTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgZnJhbWVWaWV3
LT51cGRhdGVTbmFwT2Zmc2V0cygpOworICAgIGlmIChmcmFtZVZpZXctPmhvcml6b250YWxTbmFw
T2Zmc2V0cygpKSB7CisgICAgICAgIHNpemVfdCBudW1TbmFwT2Zmc2V0cyA9IGZyYW1lVmlldy0+
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCktPnNpemUoKTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBz
bmFwT2Zmc2V0c0FzRmxvYXQ7CisgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlQ2Fw
YWNpdHkobnVtU25hcE9mZnNldHMpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHdlIHNu
YXAgdGhlc2UgcGl4ZWwgdmFsdWVzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVNuYXBPZmZzZXRzOyBpKyspCisgICAgICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQuYXBwZW5k
KGZyYW1lVmlldy0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCktPmF0KGkpLnJvdW5kKCkpOworICAg
ICAgICBub2RlLT5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsK
KyAgICB9CisKKyAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpIHsKKyAg
ICAgICAgc2l6ZV90IG51bVNuYXBPZmZzZXRzID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNuYXBPZmZz
ZXRzKCktPnNpemUoKTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBzbmFwT2Zmc2V0c0FzRmxvYXQ7
CisgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlQ2FwYWNpdHkobnVtU25hcE9mZnNl
dHMpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHdlIHNuYXAgdGhlc2UgcGl4ZWwgdmFs
dWVzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVNuYXBPZmZzZXRzOyBpKysp
CisgICAgICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQuYXBwZW5kKGZyYW1lVmlldy0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpLT5hdChpKS5yb3VuZCgpKTsKKyAgICAgICAgbm9kZS0+c2V0VmVydGlj
YWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOworICAgIH0KKyNlbmRpZgorCiAgICAg
U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRlcnM7CiAgICAgc2Nyb2xsUGFy
YW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+aG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7CkBAIC0z
OTksNiArNDIyLDIzIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlCiAgICAgICAgIG5vZGUtPnNl
dFRvdGFsQ29udGVudHNTaXplKHNjcm9sbGluZ0dlb21ldHJ5LT5jb250ZW50U2l6ZSk7CiAgICAg
ICAgIG5vZGUtPnNldFJlYWNoYWJsZUNvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS0+cmVh
Y2hhYmxlQ29udGVudFNpemUpOwogICAgICAgICBub2RlLT5zZXRTY3JvbGxhYmxlQXJlYVNpemUo
c2Nyb2xsaW5nR2VvbWV0cnktPnNjcm9sbGFibGVBcmVhU2l6ZSk7CisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKKyAgICAgICAgc2l6ZV90IG51bVNuYXBPZmZzZXRzID0gc2Nyb2xsaW5nR2Vv
bWV0cnktPmhvcml6b250YWxTbmFwT2Zmc2V0cy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxmbG9h
dD4gc25hcE9mZnNldHNBc0Zsb2F0OworICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQucmVzZXJ2
ZUNhcGFjaXR5KG51bVNuYXBPZmZzZXRzKTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2Ugc3VyZSB3
ZSBwaXhlbCBzbmFwIHRoZXNlIHZhbHVlcy4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1TbmFwT2Zmc2V0czsgaSsrKQorICAgICAgICAgICAgc25hcE9mZnNldHNBc0Zsb2F0LmFw
cGVuZChzY3JvbGxpbmdHZW9tZXRyeS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzLmF0KGkpLnJvdW5k
KCkpOworICAgICAgICBub2RlLT5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoc25hcE9mZnNldHNB
c0Zsb2F0KTsKKworICAgICAgICBudW1TbmFwT2Zmc2V0cyA9IHNjcm9sbGluZ0dlb21ldHJ5LT52
ZXJ0aWNhbFNuYXBPZmZzZXRzLnNpemUoKTsKKyAgICAgICAgc25hcE9mZnNldHNBc0Zsb2F0LmNs
ZWFyKCk7CisgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlQ2FwYWNpdHkobnVtU25h
cE9mZnNldHMpOworICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHdlIHBpeGVsIHNuYXAgdGhl
c2UgdmFsdWVzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVNuYXBPZmZzZXRz
OyBpKyspCisgICAgICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQuYXBwZW5kKHNjcm9sbGluZ0dl
b21ldHJ5LT52ZXJ0aWNhbFNuYXBPZmZzZXRzLmF0KGkpLnJvdW5kKCkpOworICAgICAgICBub2Rl
LT5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7CisjZW5kaWYKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNT
Y3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmgKaW5kZXggZWRkZmM0YTM5ZDI2ODcyMDcwMDQ4NDkxNzAyOThjNDRh
NTVkYTMxYS4uNjQzMzUzNmU4ZDY0MTMxMWNjNTE4YmI4NDdlZDA3MWEyNjdlZDk1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZz
ZXRzLmgKQEAgLTQyLDYgKzQyLDQwIEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogCiB2b2lkIHVw
ZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBIVE1MRWxl
bWVudCYgc2Nyb2xsaW5nRWxlbWVudCwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50
Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlKTsKIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK1QgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPFQ+JiBzbmFw
T2Zmc2V0cywgVCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpCit7CisgICAgQVNT
RVJUKHNuYXBPZmZzZXRzLnNpemUoKSk7CisgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IHNu
YXBPZmZzZXRzLmZpcnN0KCkpCisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5maXJzdCgpOwor
CisgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uID49IHNuYXBPZmZzZXRzLmxhc3QoKSkKKyAgICAg
ICAgcmV0dXJuIHNuYXBPZmZzZXRzLmxhc3QoKTsKKworICAgIHNpemVfdCBsb3dlckluZGV4ID0g
MDsKKyAgICBzaXplX3QgdXBwZXJJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CisgICAg
d2hpbGUgKGxvd2VySW5kZXggPCB1cHBlckluZGV4IC0gMSkgeworICAgICAgICBzaXplX3QgbWlk
ZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMjsKKyAgICAgICAgaWYgKHNj
cm9sbERlc3RpbmF0aW9uIDwgc25hcE9mZnNldHNbbWlkZGxlSW5kZXhdKQorICAgICAgICAgICAg
dXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICBlbHNlIGlmIChzY3JvbGxEZXN0aW5h
dGlvbiA+IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XSkKKyAgICAgICAgICAgIGxvd2VySW5kZXgg
PSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1cHBlckluZGV4ID0g
bWlkZGxlSW5kZXg7CisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBUIGxvd2VyU25hcFBvc2l0aW9u
ID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07CisgICAgVCB1cHBlclNuYXBQb3NpdGlvbiA9IHNu
YXBPZmZzZXRzW3VwcGVySW5kZXhdOworICAgIC8vIE5vbnplcm8gdmVsb2NpdHkgaW5kaWNhdGVz
IGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCBz
bmFwIHRvIHRoZSBvbmUgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZS4KKyAg
ICBpZiAodmVsb2NpdHkpCisgICAgICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyBsb3dlclNuYXBQ
b3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOworCisgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVw
cGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247CisgICAgcmV0dXJuIGlzQ2xvc2Vy
VG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRp
b247Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU19TQ1JPTExf
U05BUApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmgKaW5kZXggZTU1YjFlYjdjZDY0ZWY3ZjQzYTQ1ZGNmNzFkN2I1NzNkZjNmOTFm
Yi4uYzBkOGU3M2JlMzA4MTVmYTAyODZmMmJjNTJmOGIyYzcxZTM2MDQ1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCkBA
IC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgdW5zaWduZWQg
U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zOwpAQCAtMTY0LDYgKzE2OCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIEZsb2F0U2l6ZSByZWFjaGFibGVDb250ZW50U2l6ZTsgLy8gU21hbGxlciB0aGFu
IGNvbnRlbnRTaXplIHdoZW4gb3ZlcmZsb3cgaXMgaGlkZGVuIG9uIG9uZSBheGlzLgogICAgICAg
ICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOwogICAgICAgICBJbnRQb2ludCBzY3JvbGxPcmln
aW47CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgVmVjdG9yPExheW91dFVu
aXQ+IGhvcml6b250YWxTbmFwT2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPExheW91dFVuaXQ+IHZl
cnRpY2FsU25hcE9mZnNldHM7CisjZW5kaWYKICAgICB9OwogCiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQsIEdyYXBoaWNzTGF5ZXIqIC8q
c2Nyb2xsTGF5ZXIqLywgR3JhcGhpY3NMYXllciogLypzY3JvbGxlZENvbnRlbnRzTGF5ZXIqLywg
R3JhcGhpY3NMYXllciogLypjb3VudGVyU2Nyb2xsaW5nTGF5ZXIqLywgR3JhcGhpY3NMYXllciog
LyppbnNldENsaXBMYXllciovLCBjb25zdCBTY3JvbGxpbmdHZW9tZXRyeSogPSBudWxscHRyKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IGQ5MzM3NGU4YzczODJlYjFhMDI0NGRh
YTJkZTRkM2FlMDlhMTgwNmMuLmUxYWY0MTJlYWZiNzUwNDA5ODIxYTNjY2FjNzU2ZjI4ZDU1YTYx
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcApAQCAtNDgsNiArNDgsMTAgQEAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3Qg
U2Nyb2xsaW5nU3RhdGVTY3IKICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oc3RhdGVOb2RlLnNjcm9s
bFBvc2l0aW9uKCkpCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHN0YXRlTm9kZS5y
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKQogICAgICwgbV9zY3JvbGxPcmlnaW4oc3RhdGVOb2Rl
LnNjcm9sbE9yaWdpbigpKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLCBtX2hv
cml6b250YWxTbmFwT2Zmc2V0cyhzdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpCisg
ICAgLCBtX3ZlcnRpY2FsU25hcE9mZnNldHMoc3RhdGVOb2RlLnZlcnRpY2FsU25hcE9mZnNldHMo
KSkKKyNlbmRpZgogICAgICwgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoc3RhdGVOb2RlLnNj
cm9sbGFibGVBcmVhUGFyYW1ldGVycygpKQogICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
blJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoc3RhdGVOb2RlLnJlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCgpKQogewpAQCAtMTAyLDYgKzEwNiwy
NiBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsT3JpZ2luKGNv
bnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4pCiAgICAgc2V0UHJvcGVydHlDaGFuZ2VkKFNjcm9s
bE9yaWdpbik7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cykKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU25hcE9mZnNl
dHMgPT0gc25hcE9mZnNldHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbFNu
YXBPZmZzZXRzID0gc25hcE9mZnNldHM7CisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKEhvcml6b250
YWxTbmFwT2Zmc2V0cyk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzKQor
eworICAgIGlmIChtX3ZlcnRpY2FsU25hcE9mZnNldHMgPT0gc25hcE9mZnNldHMpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdmVydGljYWxTbmFwT2Zmc2V0cyA9IHNuYXBPZmZzZXRzOworICAg
IHNldFByb3BlcnR5Q2hhbmdlZChWZXJ0aWNhbFNuYXBPZmZzZXRzKTsKK30KKyNlbmRpZgorCiB2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzKGNvbnN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMgPT0gcGFyYW1ldGVycykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlLmgKaW5kZXggOWYyZDBhOWNmOTljMWVmOWJmZjEwNzAwMmUzZWE3M2MwOGVmMDcwNS4u
ZWI5Y2Q5YjJmOGVhZjNiNjAxZGUwMTI2MmQ5ZTI5MjM4NWQ4NTQwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlLmgKQEAgLTQ4LDYgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsYWJsZUFy
ZWFQYXJhbXMsCiAgICAgICAgIFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLAogICAgICAgICBOdW1T
Y3JvbGxpbmdTdGF0ZU5vZGVCaXRzLAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
ICAgIEhvcml6b250YWxTbmFwT2Zmc2V0cywKKyAgICAgICAgVmVydGljYWxTbmFwT2Zmc2V0cywK
KyNlbmRpZgogICAgIH07CiAKICAgICBjb25zdCBGbG9hdFNpemUmIHNjcm9sbGFibGVBcmVhU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFTaXplOyB9CkBAIC02NSw2ICs2OSwx
NCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3Qg
SW50UG9pbnQmKTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgY29uc3QgVmVj
dG9yPGZsb2F0PiYgaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jp
em9udGFsU25hcE9mZnNldHM7IH0KKyAgICB2b2lkIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNh
bFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOyB9Cisg
ICAgdm9pZCBzZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyNl
bmRpZgorCiAgICAgY29uc3QgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzJiBzY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVyczsg
fQogICAgIHZvaWQgc2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbGFibGVB
cmVhUGFyYW1ldGVycyYgcGFyYW1zKTsKIApAQCAtODUsNiArOTcsMTAgQEAgcHJpdmF0ZToKICAg
ICBGbG9hdFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX3JlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uOwogICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgVmVjdG9yPGZsb2F0PiBtX2hvcml6b250YWxTbmFwT2Zm
c2V0czsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fdmVydGljYWxTbmFwT2Zmc2V0czsKKyNlbmRpZgog
ICAgIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVyczsK
ICAgICBib29sIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGlj
U2Nyb2xsOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCAxMmMzMGE1MGZjYzBhYzZh
YjliNTA0NGU5ODY0MDUzZDY1ZWNmZDczLi4yOTYyMzczZmZkNTZiZmZjNmQyNmNhNjQxYjFjMTdi
MjA5NzQxMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC02Nyw2ICs2NywxNCBAQCB2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25z
dCBTY3JvbGxpbmdTdGF0ZU5vZGUmCiAgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCiAgICAgICAgIG1fc2Ny
b2xsT3JpZ2luID0gc3RhdGUuc2Nyb2xsT3JpZ2luKCk7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpKQorICAgICAgICBtX2hvcml6b250
YWxTbmFwT2Zmc2V0cyA9IHN0YXRlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpOworCisgICAgaWYg
KHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZl
cnRpY2FsU25hcE9mZnNldHMpKQorICAgICAgICBtX3ZlcnRpY2FsU25hcE9mZnNldHMgPSBzdGF0
ZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKwogICAgIGlmIChzdGF0ZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVBh
cmFtcykpCiAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzID0gc3RhdGUuc2Nyb2xs
YWJsZUFyZWFQYXJhbWV0ZXJzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAppbmRleCBkNWJlOWEw
NGYwZWFlMGQ4MmRjMDcwODFlNjlhZGE1MjY3YjI2NjZkLi43YWFhOTZlZDJiM2EwY2FhMDlmMWI1
MzUwODYwMTc3Y2NkZTMxMzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKQEAgLTU3LDYgKzU3LDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0ID0gMDsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9u
dGFsU25hcE9mZnNldHM7IH0KKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOyB9CisjZW5kaWYK
KwogcHJvdGVjdGVkOgogICAgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1Ry
ZWUmLCBTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEKTsKIApAQCAtOTIsNyArOTcs
MTAgQEAgcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9yZWFjaGFibGVDb250ZW50c1NpemU7CiAg
ICAgRmxvYXRQb2ludCBtX2xhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRQb2lu
dCBtX3Njcm9sbE9yaWdpbjsKLSAgICAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAg
IFZlY3RvcjxmbG9hdD4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CisjZW5kaWYKICAgICBTY3JvbGxhYmxlQXJlYVBhcmFt
ZXRlcnMgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkNjZkYTEzYzhiYzFjMWZmMTY2NTAwODMzYzMx
ZTQwYWUwODQxOTgwLi45ZmY4ZDZjNWE0ZmQ4NzhlOGQ3YTk4ZTJjOThlOTRjNGVmMTRiZGY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMzMDksNiArMzMw
OSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQog
ICAgIC8vIENvbXBvc2l0ZWQgc2Nyb2xsaW5nIG1heSBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlz
YWJsZWQgaWYgdGhlIGFtb3VudCBvZiBvdmVyZmxvdyBjaGFuZ2VkLgogICAgIGlmIChjb21wb3Np
dG9yKCkudXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKCp0aGlzKSkKICAgICAgICAgY29tcG9z
aXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKKworI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFs
c28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAppbmRleCBhZTE3NTFiMWQ0ZmU3MjQxODBmNmE5Yzc4NmI5Mzg1MDM2NWIzNjgzLi41ODI1YTdl
MTVkM2IzNjZiMGExMmEzZTUxMWJkNTlhMzAzMjg0MDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzc3MCw2ICszNzcw
LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRl
ZExheWVyKFJlbmRlckxheWVyJiBsYXllciwgU2NyCiAgICAgICAgICAgICBzY3JvbGxpbmdHZW9t
ZXRyeS5zY3JvbGxhYmxlQXJlYVNpemUgPSBsYXllci52aXNpYmxlU2l6ZSgpOwogICAgICAgICAg
ICAgc2Nyb2xsaW5nR2VvbWV0cnkuY29udGVudFNpemUgPSBsYXllci5jb250ZW50c1NpemUoKTsK
ICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LnJlYWNoYWJsZUNvbnRlbnRTaXplID0gbGF5
ZXIuc2Nyb2xsYWJsZUNvbnRlbnRzU2l6ZSgpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgICAgICAgICBpZiAobGF5ZXIuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpCisgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuaG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gKmxheWVy
Lmhvcml6b250YWxTbmFwT2Zmc2V0cygpOworICAgICAgICAgICAgaWYgKGxheWVyLnZlcnRpY2Fs
U25hcE9mZnNldHMoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS52ZXJ0aWNh
bFNuYXBPZmZzZXRzID0gKmxheWVyLnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKyNlbmRpZgogICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZShub2RlSUQsIGJhY2tpbmctPnNjcm9sbGluZ0xheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0Nv
bnRlbnRzTGF5ZXIoKSwgJnNjcm9sbGluZ0dlb21ldHJ5KTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Nyb2xs
aW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCmluZGV4IGY2MmJi
OWNjNTgwODlmYTdiOTgzZmQxMmIwMDc0ZjEwMDYxYzdlMmYuLjdlZTEwMDQxN2VjNzU2NWIwYjJh
NDAwOGQ2NTE1YmQwZjc1N2FlY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clRyYW5zYWN0aW9uLmNwcApAQCAtMTI4LDYgKzEyOCwxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcgogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSwgcmVhY2hhYmxlQ29udGVudHNTaXplKQogICAgIFND
Uk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBv
c2l0aW9uLCBzY3JvbGxQb3NpdGlvbikKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4sIHNjcm9sbE9yaWdpbikKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cywgaG9yaXpvbnRhbFNu
YXBPZmZzZXRzKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25hcE9mZnNldHMpCisjZW5k
aWYKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxhYmxlQXJlYVBhcmFtcywgc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKQogICAgIFND
Uk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKICAgICBTQ1JPTExJTkdf
Tk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbiwgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Ny
b2xsKQpAQCAtMTkzLDYgKzE5NywxMCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlcgogICAgIFND
Uk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJs
ZUNvbnRlbnRzU2l6ZSwgRmxvYXRTaXplLCBzZXRSZWFjaGFibGVDb250ZW50c1NpemUpOwogICAg
IFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bFBvc2l0aW9uLCBGbG9hdFBvaW50LCBzZXRTY3JvbGxQb3NpdGlvbik7CiAgICAgU0NST0xMSU5H
X05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luLCBJ
bnRQb2ludCwgc2V0U2Nyb2xsT3JpZ2luKTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhv
cml6b250YWxTbmFwT2Zmc2V0cywgVmVjdG9yPGZsb2F0Piwgc2V0SG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKTsKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzLCBWZWN0b3I8ZmxvYXQ+LCBzZXRWZXJ0aWNhbFNuYXBP
ZmZzZXRzKTsKKyNlbmRpZgogICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zLCBTY3JvbGxhYmxlQXJlYVBhcmFt
ZXRlcnMsIHNldFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyk7CiAgICAgCiAgICAgaWYgKG5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCmluZGV4IGJkMDE5Nzc2MDcyNjM2Y2YzOTc2NmEzZmNhMTA2N2NiNmVi
MWI1N2IuLjYwZTc3NjYxNzQ4MDMwODE2OGVlMjdlNjQzOGMyM2NmYmZlYjAwNzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC04Myw2
ICs4Myw5IEBACiAjaW1wb3J0ICJQcmludEluZm8uaCIKICNpbXBvcnQgIlByb2Nlc3NUaHJvdHRs
ZXIuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5oIgorI2VuZGlmCiAjaW1wb3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldLU2Ny
b2xsVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIK
QEAgLTEyOTksNiArMTMwMiwyMiBAQCBzdGF0aWMgV2ViQ29yZTo6RmxvYXRQb2ludCBjb25zdHJh
aW5Db250ZW50T2Zmc2V0KFdlYkNvcmU6OkZsb2F0UG9pbnQgY29udGVudE9mZgogICAgIC8vIHpv
b21pbmcuIFdlJ2xsIGFuaW1hdGUgdG8gdGhlIHJpZ2h0IHBsYWNlIG9uY2UgdGhlIHpvb20gZmlu
aXNoZXMuCiAgICAgaWYgKFtzY3JvbGxWaWV3IGlzWm9vbWluZ10pCiAgICAgICAgICp0YXJnZXRD
b250ZW50T2Zmc2V0ID0gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAoX3BhZ2Ut
Pm1haW5GcmFtZSgpICYmIF9wYWdlLT5tYWluRnJhbWUoKS0+cGFnZSgpICYmIF9wYWdlLT5tYWlu
RnJhbWUoKS0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkpIHsKKyAgICAgICAg
V2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9w
YWdlLT5tYWluRnJhbWUoKS0+cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7Cisg
ICAgICAgIGZsb2F0IG1heFNjcm9sbExlZnQgPSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRo
IC0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZS53aWR0aDsKKyAgICAgICAgaWYgKGNvb3JkaW5hdG9y
LT5zaG91bGRIb3Jpem9udGFsU25hcEZvck1haW5mcmFtZVNjcm9sbGluZygpICYmIHRhcmdldENv
bnRlbnRPZmZzZXQtPnggPiAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPCBtYXhTY3JvbGxM
ZWZ0KSB7CisgICAgICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjb29yZGlu
YXRvci0+Y2xvc2VzdEhvcml6b250YWxTbmFwT2Zmc2V0Rm9yTWFpbmZyYW1lU2Nyb2xsaW5nKHRh
cmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA+IG1heFNjcm9sbExlZnQgPyBt
YXhTY3JvbGxMZWZ0IDogcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgICAgICB9CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYWNjb3VudCBmb3IgaG93IHRoZSB0b3AgbmF2aWdhdGlvbiBi
YXIgY2hhbmdlcyBpbiBzaXplLgorICAgICAgICBmbG9hdCBtYXhTY3JvbGxUb3AgPSBzY3JvbGxW
aWV3LmNvbnRlbnRTaXplLmhlaWdodCAtIHNjcm9sbFZpZXcuYm91bmRzLnNpemUuaGVpZ2h0Owor
ICAgICAgICBpZiAoY29vcmRpbmF0b3ItPnNob3VsZFZlcnRpY2FsU25hcEZvck1haW5mcmFtZVNj
cm9sbGluZygpICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPiAwICYmIHRhcmdldENvbnRlbnRP
ZmZzZXQtPnkgPCBtYXhTY3JvbGxUb3ApIHsKKyAgICAgICAgICAgIGZsb2F0IHBvdGVudGlhbFNu
YXBQb3NpdGlvbiA9IGNvb3JkaW5hdG9yLT5jbG9zZXN0VmVydGljYWxTbmFwT2Zmc2V0Rm9yTWFp
bmZyYW1lU2Nyb2xsaW5nKHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOworICAg
ICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA+
IG1heFNjcm9sbFRvcCA/IG1heFNjcm9sbFRvcCA6IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFn
Z2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTClkZWNl
bGVyYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4IDQwZDI4
MzExNmZlZTQ0NzJmOTJjMjMwNTI0NjljNWFkZTc5NGIwYWIuLjMxN2QwZWM5NDE3Zjg5MzI5ZDIw
YjdkZDE0ZGFiZjljZDhlNTJhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eS5oCkBAIC04NCw2ICs4NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVl
Tm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKTsKICAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2ls
bFN0YXJ0U2Nyb2xsKCk7CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNjcm9sbCgp
OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBzaG91bGRIb3Jpem9udGFs
U25hcEZvck1haW5mcmFtZVNjcm9sbGluZygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkVmVydGlj
YWxTbmFwRm9yTWFpbmZyYW1lU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgZmxvYXQgY2xvc2VzdEhv
cml6b250YWxTbmFwT2Zmc2V0Rm9yTWFpbmZyYW1lU2Nyb2xsaW5nKGZsb2F0IHNjcm9sbERlc3Rp
bmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3Q7CisgICAgZmxvYXQgY2xvc2VzdFZlcnRpY2Fs
U25hcE9mZnNldEZvck1haW5mcmFtZVNjcm9sbGluZyhmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwg
ZmxvYXQgdmVsb2NpdHkpIGNvbnN0OworI2VuZGlmCiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
U2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCmlu
ZGV4IGViMGFjY2E5NDllN2E2MmI4NjY3YTA4NTc5NmIzYzZkM2VkMThlMTcuLmRhZWQ3NzhmZTkz
NzU3Y2JkNWI3MzBkYzE4MTY5YTZmMzU5YWM4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQpAQCAtMzAsNiArMzAsOSBAQAog
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW1wb3J0IDxXZWJDb3JlL0F4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgorI2VuZGlmCiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhj
ZXB0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlLmg+CkBAIC03Myw2ICs3
NiwxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUt
Pm92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0KCk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilz
Y3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zm
c2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVudE9mZnNldAoreworICAgIGlmIChfc2Ny
b2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSA+IDApCisgICAg
ICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdD4oX3Nj
cm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9m
ZnNldC0+eCwgdmVsb2NpdHkueCk7CisgICAgaWYgKF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpLnNpemUoKSA+IDApCisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQt
PnkgPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOworfQor
I2VuZGlmCisKIC0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09MKXdpbGxEZWNlbGVyYXRlCiB7CiAgICAg
aWYgKF9pblVzZXJJbnRlcmFjdGlvbiAmJiAhd2lsbERlY2VsZXJhdGUpIHsKQEAgLTE4OCw3ICsy
MDEsMTIgQEAgdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRh
dGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1MKIAogICAgICAgICAgICAgc2Nyb2xsVmll
dy5jb250ZW50SW5zZXQgPSBpbnNldHM7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgLy8gRklYTUU6IEluIG9ubHkgb25lIGF4
aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUg
ZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ugd2FudD8KKyAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRz
KSkKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250YWxT
bmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlT
Y3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25S
YXRlTm9ybWFsOworI2VuZGlmCiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KaW5kZXggZDU0OWQ0YTY5
OTJjYzk1MjU1MTM4MjUxZjViMzNjZTc2NTA3ODE0Zi4uNGM4NzI2MzM4ZDU4OGQ1ZTMxYzJhMmFj
YmEyY2E5M2Y5Y2QxMTFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpA
QCAtMzIsMTAgKzMyLDEyIEBACiAjaW5jbHVkZSAiTGF5ZXJSZXByZXNlbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUuaD4KICNpbmNsdWRlIDxVSUtpdC9VSVZpZXcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTEwNiw2ICsxMDgsNDggQEAgdm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNjcm9sbCgp
CiAgICAgbV93ZWJQYWdlUHJveHkub3ZlcmZsb3dTY3JvbGxEaWRFbmRTY3JvbGwoKTsKIH0KIAor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHk6OnNob3VsZEhvcml6b250YWxTbmFwRm9yTWFpbmZyYW1lU2Nyb2xsaW5nKCkgY29u
c3QKK3sKKyAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9v
dE5vZGUoKTsKKyAgICBpZiAocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKSB7
CisgICAgICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RGcmFtZSA9IHN0
YXRpY19jYXN0PFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqPihyb290KTsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMgPSByb290RnJhbWUtPmhvcml6b250
YWxTbmFwT2Zmc2V0cygpOworICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuc2l6ZSgpID4gMDsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OnNob3VsZFZlcnRpY2FsU25hcEZvck1haW5mcmFtZVNjcm9sbGluZygpIGNv
bnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJv
b3ROb2RlKCk7CisgICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSkg
eworICAgICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290RnJhbWUgPSBz
dGF0aWNfY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9vdCk7CisgICAg
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gcm9vdEZyYW1lLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzKCk7CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5zaXplKCkgPiAwOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OmNsb3Nlc3RIb3Jpem9udGFsU25hcE9mZnNldEZvck1haW5mcmFtZVNjcm9s
bGluZyhmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNvbnN0Cit7Cisg
ICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7
CisgICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSk7CisgICAg
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSogcm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJvb3QpOworICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gcm9vdEZyYW1lLT5ob3Jpem9udGFsU25hcE9mZnNldHMo
KTsKKyAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQ+KHNuYXBPZmZzZXRzLCBzY3Jv
bGxEZXN0aW5hdGlvbiwgdmVsb2NpdHkpOworfQorCitmbG9hdCBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5OjpjbG9zZXN0VmVydGljYWxTbmFwT2Zmc2V0Rm9yTWFpbmZyYW1lU2Nyb2xs
aW5nKGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3QKK3sKKyAg
ICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsK
KyAgICBBU1NFUlQocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290RnJhbWUgPSBzdGF0aWNfY2FzdDxT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9vdCk7CisgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgc25hcE9mZnNldHMgPSByb290RnJhbWUtPnZlcnRpY2FsU25hcE9mZnNldHMoKTsK
KyAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQ+KHNuYXBPZmZzZXRzLCBzY3JvbGxE
ZXN0aW5hdGlvbiwgdmVsb2NpdHkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236615</attachid>
            <date>2014-08-14 13:31:39 -0700</date>
            <delta_ts>2014-08-14 16:36:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135769-20140814133129.patch</filename>
            <type>text/plain</type>
            <size>29758</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY4Y2I5ZDNmOWQ0ZTg1
MTE2Yzc4OTAyZTc3ZGM4Mjg4OWQwYjhiZC4uNDFiOTA2OTBhNjFkN2Y1NzhlYzI0Mzc2MzJlYWE3
NWJiMDBlYzkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
bmFwcGluZyBiZWhhdmlvciBmb3IgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzU3NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzbmFwIHBvaW50cyBvbiBpT1MuIFRo
aXMgZW50YWlscyBzZW5kaW5nIHNuYXAgcG9pbnRzIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRo
ZSBVSSBwcm9jZXNzCisgICAgICAgIGJ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBzbmFwIHBvaW50
cyBhbmQgdXBkYXRpbmcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQg
V0tXZWJWaWV3IHRvIHN1cHBvcnQKKyAgICAgICAgYW5pbWF0aW9uIHRvIHNuYXAgcG9pbnRzIGlu
IHRoZSBjYXNlcyBvZiBtYWluZnJhbWUgYW5kIG92ZXJmbG93IHNjcm9sbGluZywgcmVzcGVjdGl2
ZWx5LgorCisgICAgICAgIFRoZXJlIGFyZSBubyBuZXcgdGVzdHMgeWV0IC0tIHdlJ2xsIG5lZWQg
dG8gZmluZCBhIHdheSB0byB0ZXN0IHRoaXMhCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9h
dCk6IEhlbHBlciBmdW5jdGlvbnMgdXNlZCB0byBjb252ZXJ0IExheW91dFVuaXRzIHRvIGZsb2F0
cyBmb3Igc25hcCBvZmZzZXRzLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6IFVwZGF0ZSBzbmFwIG9mZnNldHMgZm9y
IG1haW5mcmFtZSBzY3JvbGxpbmcsIGFzIHdlbGwgYXMgdGhlIHN0YXRlIG5vZGUuCisgICAgICAg
IChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUpOiBBZGRlZCBzbmFwIG9mZnNldHMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9m
ZnNldCk6IENvbXB1dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIGEgc29ydGVkIHZl
Y3RvciBvZiBjb21wYXJhYmxlIHR5cGVzIChlLmcuIGZsb2F0LCBMYXlvdXRVbml0KS4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcnRpY2FsU25hcE9mZnNldHMpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpob3Jpem9udGFsU25hcE9mZnNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNh
bFNuYXBPZmZzZXRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNhbFNuYXBPZmZzZXRzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6IFVwZGF0ZSBzbmFwIG9mZnNl
dHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcik6IFVwZGF0ZXMgdGhlIHN0YXRlIG5vZGUn
cyBzbmFwIG9mZnNldHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKwogMjAxNC0wOC0xNCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG5vblJlbmRl
cmVyU3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3ZjcxYTJhZmUxODUyOTk3ZGQ2NmI4MzY3ODRjZjIwOWNl
OWMwYzIxLi5jNmViMDE2ZDAxY2MwZjQ4N2FkMDRiYzIzZTkwMDgxOGMwODA3ZWYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTQtMDgtMTQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHNuYXBwaW5nIGJlaGF2aW9yIGZv
ciBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTc2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPjo6
ZW5jb2RlKTogQWRkZWQgc25hcCBvZmZzZXQgZW5jb2RpbmcuCisgICAgICAgIChBcmd1bWVudENv
ZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmRlY29kZSk6IEFkZGVkIHNuYXAgb2Zm
c2V0IGRlY29kaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVs
b2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTogRm9yIG1haW5mcmFtZSBzY3JvbGxpbmcsIHJl
dGFyZ2V0cyB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBzbmFwIHBv
aW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oOiBBZGRlZCBtZXRob2RzIHRvIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRp
b24gZm9yIFdLV2ViVmlldyBmcm9tIHNuYXAgb2Zmc2V0cyBpbiBtYWluZnJhbWUgc2Nyb2xsaW5n
LgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MubW06CisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVs
ZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVu
dE9mZnNldDpdKTogRm9yIG92ZXJmbG93IHNjcm9sbGluZywgcmV0YXJnZXRzIHRoZSBzY3JvbGwg
ZGVzdGluYXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIHNuYXAgcG9pbnQuCisgICAgICAgIChXZWJL
aXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUFmdGVyQ2hp
bGRyZW4pOiBTZXRzIHRoZSBkZWNlbGVyYXRpb24gZmFjdG9yIHRvIEZBU1QgaWYgc25hcCBwb2lu
dHMgYXJlIGFjdGl2ZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNob3VsZFNu
YXBGb3JNYWluZnJhbWVTY3JvbGxpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5mcmFtZVNjcm9sbGlu
Zyk6IEludm9rZWQgYnkgV0tXZWJWaWV3IHRvIHJldGFyZ2V0IHRoZSBzY3JvbGwgZGVzdGluYXRp
b24uCisKIDIwMTQtMDgtMTQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbU2VydmljZXMgd2l0aCBVSV0gU2VsZWN0aW9uIHNlcnZpY2VzIGRvbid0IHdvcmsg
aW5zaWRlIDxpZnJhbWVzPi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMzdlZDM3ZTI1OGJkZDBm
ODcxMzEzNDM1NDNhZjg0NDcxZWUxM2YzNC4uNTI1ZTM1NGIwM2YyZDZmZDZlOGU1MmU0ZDY1YWEw
NWI1OTFjZjU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTMwMTEsNiArMzAxMSwxMSBAQCBf
X1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0
RVBOU18xMkRPTVdpbmRvd0NTU0UKIF9fWk43V2ViQ29yZTE2RmlsdGVyT3BlcmF0aW9uc2FTRVJL
UzBfCiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitfX1pON1dlYkNvcmUy
N1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTIyc2V0VmVydGljYWxTbmFwT2Zmc2V0c0VSS04z
V1RGNlZlY3RvcklmTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMjdT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUyNHNldEhvcml6b250YWxTbmFwT2Zmc2V0c0VSS04z
V1RGNlZlY3RvcklmTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQorI2VuZGlmCisKICNpZiBF
TkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiBfX1pOSzdXZWJDb3JlOERvY3VtZW50MTZhbm5vdGF0
ZWRSZWdpb25zRXYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBhZmFiMmY2ZDVl
ZDhkOWE0ODA1ZjIxODUxNWI1OTE5ZWFkZTA1OThkLi4zM2M5ZDI2NzA0YzFiMTU0NzMwN2JlMTM1
YjY0MDg1ODE2Y2U2MjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNTksNiArNTksMjAg
QEAgdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVQcm9w
ZXJ0aWVzQ2hhbmdlZCgpCiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAorc3Rh
dGljIGlubGluZSB2b2lkIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChT
Y3JvbGxFdmVudEF4aXMgYXhpcywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlLCBj
b25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcikKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgVmVjdG9yPGZsb2F0PiBzbmFwT2Zmc2V0
c0FzRmxvYXQ7CisgICAgc25hcE9mZnNldHNBc0Zsb2F0LnJlc2VydmVDYXBhY2l0eShzbmFwT2Zm
c2V0cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc25hcE9mZnNldHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5hcHBlbmQocm91bmRUb0Rldmlj
ZVBpeGVsKHNuYXBPZmZzZXRzW2ldLCBkZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpKTsKKworICAg
IGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgbm9kZS0+
c2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7CisgICAgZWxzZQor
ICAgICAgICBub2RlLT5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7
Cit9CisKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBk
YXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwpAQCAtOTcsNiArMTExLDE1IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJh
bWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmlldykKICAgICBub2RlLT5zZXRU
b3RhbENvbnRlbnRzU2l6ZShmcmFtZVZpZXctPnRvdGFsQ29udGVudHNTaXplKCkpOwogICAgIG5v
ZGUtPnNldFJlYWNoYWJsZUNvbnRlbnRzU2l6ZShmcmFtZVZpZXctPnRvdGFsQ29udGVudHNTaXpl
KCkpOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBmcmFtZVZpZXctPnVwZGF0
ZVNuYXBPZmZzZXRzKCk7CisgICAgaWYgKGZyYW1lVmlldy0+aG9yaXpvbnRhbFNuYXBPZmZzZXRz
KCkpCisgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5vZGUsICpmcmFtZVZpZXctPmhvcml6b250YWxTbmFw
T2Zmc2V0cygpLCBmcmFtZVZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisKKyAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAg
ICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBub2RlLCAqZnJhbWVWaWV3LT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIGZy
YW1lVmlldy0+ZnJhbWUoKS5kb2N1bWVudCgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyNlbmRp
ZgorCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRlcnM7CiAgICAg
c2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KCk7CkBAIC0zOTksNiArNDIyLDEwIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
dXBkYXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlCiAgICAgICAg
IG5vZGUtPnNldFRvdGFsQ29udGVudHNTaXplKHNjcm9sbGluZ0dlb21ldHJ5LT5jb250ZW50U2l6
ZSk7CiAgICAgICAgIG5vZGUtPnNldFJlYWNoYWJsZUNvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9t
ZXRyeS0+cmVhY2hhYmxlQ29udGVudFNpemUpOwogICAgICAgICBub2RlLT5zZXRTY3JvbGxhYmxl
QXJlYVNpemUoc2Nyb2xsaW5nR2VvbWV0cnktPnNjcm9sbGFibGVBcmVhU2l6ZSk7CisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9m
ZnNldHNBc0Zsb2F0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbm9kZSwgc2Nyb2xsaW5n
R2VvbWV0cnktPmhvcml6b250YWxTbmFwT2Zmc2V0cywgc2Nyb2xsZWRDb250ZW50c0xheWVyLT5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9m
ZnNldHNBc0Zsb2F0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG5vZGUsIHNjcm9sbGluZ0dl
b21ldHJ5LT52ZXJ0aWNhbFNuYXBPZmZzZXRzLCBzY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworI2VuZGlmCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmluZGV4IGVkZGZj
NGEzOWQyNjg3MjA3MDA0ODQ5MTcwMjk4YzQ0YTU1ZGEzMWEuLjY0MzM1MzZlOGQ2NDEzMTFjYzUx
OGJiODQ3ZWQwNzFhMjY3ZWQ5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCkBAIC00Miw2ICs0Miw0MCBAQCBjbGFz
cyBTY3JvbGxhYmxlQXJlYTsKIAogdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVB
cmVhKFNjcm9sbGFibGVBcmVhJiwgSFRNTEVsZW1lbnQmIHNjcm9sbGluZ0VsZW1lbnQsIGNvbnN0
IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9s
bGluZ0VsZW1lbnRTdHlsZSk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIGNsb3Nlc3RTbmFw
T2Zmc2V0KGNvbnN0IFZlY3RvcjxUPiYgc25hcE9mZnNldHMsIFQgc2Nyb2xsRGVzdGluYXRpb24s
IGZsb2F0IHZlbG9jaXR5KQoreworICAgIEFTU0VSVChzbmFwT2Zmc2V0cy5zaXplKCkpOworICAg
IGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0cy5maXJzdCgpKQorICAgICAgICBy
ZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+
PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5sYXN0KCk7
CisKKyAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7CisgICAgc2l6ZV90IHVwcGVySW5kZXggPSBz
bmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJbmRl
eCAtIDEpIHsKKyAgICAgICAgc2l6ZV90IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBl
ckluZGV4KSAvIDI7CisgICAgICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8IHNuYXBPZmZzZXRz
W21pZGRsZUluZGV4XSkKKyAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAg
ICAgICAgZWxzZSBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPiBzbmFwT2Zmc2V0c1ttaWRkbGVJbmRl
eF0pCisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgbG93
ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgVCBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdOwor
ICAgIFQgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4XTsKKyAgICAv
LyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5v
dGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25hcCB0byB0aGUgb25lIGluIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCisgICAgaWYgKHZlbG9jaXR5KQorICAgICAgICByZXR1
cm4gdmVsb2NpdHkgPCAwID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsK
KworICAgIGJvb2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRp
b24gLSBsb3dlclNuYXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3Rp
bmF0aW9uOworICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNu
YXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmluZGV4IGU1NWIxZWI3Y2Q2
NGVmN2Y0M2E0NWRjZjcxZDdiNTczZGYzZjkxZmIuLmMwZDhlNzNiZTMwODE1ZmEwMjg2ZjJiYzUy
ZjhiMmM3MWUzNjA0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisj
aW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIHVuc2lnbmVkIFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29uczsK
QEAgLTE2NCw2ICsxNjgsMTAgQEAgcHVibGljOgogICAgICAgICBGbG9hdFNpemUgcmVhY2hhYmxl
Q29udGVudFNpemU7IC8vIFNtYWxsZXIgdGhhbiBjb250ZW50U2l6ZSB3aGVuIG92ZXJmbG93IGlz
IGhpZGRlbiBvbiBvbmUgYXhpcy4KICAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbjsK
ICAgICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisgICAgICAgIFZlY3RvcjxMYXlvdXRVbml0PiBob3Jpem9udGFsU25hcE9mZnNldHM7Cisg
ICAgICAgIFZlY3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOworI2VuZGlmCiAg
ICAgfTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcmFtZVNjcm9sbGluZ05vZGUoU2Nyb2xs
aW5nTm9kZUlELCBHcmFwaGljc0xheWVyKiAvKnNjcm9sbExheWVyKi8sIEdyYXBoaWNzTGF5ZXIq
IC8qc2Nyb2xsZWRDb250ZW50c0xheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8qY291bnRlclNjcm9s
bGluZ0xheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8qaW5zZXRDbGlwTGF5ZXIqLywgY29uc3QgU2Ny
b2xsaW5nR2VvbWV0cnkqID0gbnVsbHB0cikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcApp
bmRleCBkOTMzNzRlOGM3MzgyZWIxYTAyNDRkYWEyZGU0ZDNhZTA5YTE4MDZjLi5lMWFmNDEyZWFm
Yjc1MDQwOTgyMWEzY2NhYzc1NmYyOGQ1NWE2MTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAKQEAgLTQ4LDYgKzQ4LDEwIEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2NyCiAgICAgLCBtX3Nj
cm9sbFBvc2l0aW9uKHN0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpKQogICAgICwgbV9yZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSkKICAg
ICAsIG1fc2Nyb2xsT3JpZ2luKHN0YXRlTm9kZS5zY3JvbGxPcmlnaW4oKSkKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgICwgbV9ob3Jpem9udGFsU25hcE9mZnNldHMoc3RhdGVOb2Rl
Lmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAgICwgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzKHN0
YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisjZW5kaWYKICAgICAsIG1fc2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzKHN0YXRlTm9kZS5zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoKSkKICAg
ICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xs
KHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNT
Y3JvbGwoKSkKIHsKQEAgLTEwMiw2ICsxMDYsMjYgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQog
ICAgIHNldFByb3BlcnR5Q2hhbmdlZChTY3JvbGxPcmlnaW4pOwogfQogCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jp
em9udGFsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMpCit7Cisg
ICAgaWYgKG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzID09IHNuYXBPZmZzZXRzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2hvcml6b250YWxTbmFwT2Zmc2V0cyA9IHNuYXBPZmZzZXRzOworICAg
IHNldFByb3BlcnR5Q2hhbmdlZChIb3Jpem9udGFsU25hcE9mZnNldHMpOworfQorCit2b2lkIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVydGljYWxTbmFwT2Zmc2V0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cykKK3sKKyAgICBpZiAobV92ZXJ0aWNhbFNuYXBPZmZz
ZXRzID09IHNuYXBPZmZzZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZlcnRpY2FsU25h
cE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKKyAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoVmVydGljYWxT
bmFwT2Zmc2V0cyk7Cit9CisjZW5kaWYKKwogdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OnNldFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyhjb25zdCBTY3JvbGxhYmxlQXJlYVBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJz
ID09IHBhcmFtZXRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCmluZGV4IDlmMmQwYTljZjk5YzFl
ZjliZmYxMDcwMDJlM2VhNzNjMDhlZjA3MDUuLmViOWNkOWIyZjhlYWYzYjYwMWRlMDEyNjJkOWUy
OTIzODVkODU0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCkBAIC00OCw2ICs0OCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIFNjcm9sbGFibGVBcmVhUGFyYW1zLAogICAgICAgICBSZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbiwKICAgICAgICAgTnVtU2Nyb2xsaW5nU3RhdGVOb2RlQml0cywKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICBIb3Jpem9udGFsU25hcE9mZnNldHMsCisg
ICAgICAgIFZlcnRpY2FsU25hcE9mZnNldHMsCisjZW5kaWYKICAgICB9OwogCiAgICAgY29uc3Qg
RmxvYXRTaXplJiBzY3JvbGxhYmxlQXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFi
bGVBcmVhU2l6ZTsgfQpAQCAtNjUsNiArNjksMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEludFBv
aW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9yaWdpbjsgfQogICAg
IHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50Jik7CiAKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQorICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWxTbmFwT2Zm
c2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOyB9CisgICAgdm9p
ZCBzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdmVydGljYWxTbmFwT2Zmc2V0czsgfQorICAgIHZvaWQgc2V0VmVydGljYWxTbmFwT2Zmc2V0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisjZW5kaWYKKwogICAgIGNvbnN0IFNjcm9sbGFibGVB
cmVhUGFyYW1ldGVycyYgc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7IH0KICAgICB2b2lkIHNldFNjcm9sbGFibGVBcmVh
UGFyYW1ldGVycyhjb25zdCBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMmIHBhcmFtcyk7CiAKQEAg
LTg1LDYgKzk3LDEwIEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3Njcm9sbFBvc2l0aW9u
OwogICAgIEZsb2F0UG9pbnQgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRQb2lu
dCBtX3Njcm9sbE9yaWdpbjsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFZlY3Rv
cjxmbG9hdD4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgVmVjdG9yPGZsb2F0PiBtX3Zl
cnRpY2FsU25hcE9mZnNldHM7CisjZW5kaWYKICAgICBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMg
bV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7CiAgICAgYm9vbCBtX3JlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZS5jcHAKaW5kZXggMTJjMzBhNTBmY2MwYWM2YWI5YjUwNDRlOTg2NDA1M2Q2NWVjZmQ3My4uMjk2
MjM3M2ZmZDU2YmZmYzZkMjZjYTY0MWIxYzE3YjIwOTc0MTI1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLmNwcApAQCAtNjcsNiArNjcsMTQgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJgogICAgIGlm
IChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxPcmlnaW4pKQogICAgICAgICBtX3Njcm9sbE9yaWdpbiA9IHN0YXRlLnNjcm9sbE9yaWdp
bigpOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoc3RhdGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU25hcE9mZnNldHMgPSBzdGF0ZS5ob3Jpem9u
dGFsU25hcE9mZnNldHMoKTsKKworICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAg
bV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0gc3RhdGUudmVydGljYWxTbmFwT2Zmc2V0cygpOworI2Vu
ZGlmCisKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMpKQogICAgICAgICBtX3Njcm9sbGFibGVB
cmVhUGFyYW1ldGVycyA9IHN0YXRlLnNjcm9sbGFibGVBcmVhUGFyYW1ldGVycygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmgKaW5kZXggZDViZTlhMDRmMGVhZTBkODJkYzA3MDgxZTY5YWRhNTI2N2Iy
NjY2ZC4uN2FhYTk2ZWQyYjNhMGNhYTA5ZjFiNTM1MDg2MDE3N2NjZGUzMTM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5oCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZs
b2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCA9IDA7CiAKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0
cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOyB9CisgICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxTbmFwT2Zmc2V0czsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9s
bGluZ05vZGVJRCk7CiAKQEAgLTkyLDcgKzk3LDEwIEBAIHByaXZhdGU6CiAgICAgRmxvYXRTaXpl
IG1fcmVhY2hhYmxlQ29udGVudHNTaXplOwogICAgIEZsb2F0UG9pbnQgbV9sYXN0Q29tbWl0dGVk
U2Nyb2xsUG9zaXRpb247CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47Ci0gICAgCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBWZWN0b3I8ZmxvYXQ+IG1faG9yaXpvbnRhbFNu
YXBPZmZzZXRzOworICAgIFZlY3RvcjxmbG9hdD4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworI2Vu
ZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
ZDY2ZGExM2M4YmMxYzFmZjE2NjUwMDgzM2MzMWU0MGFlMDg0MTk4MC4uOWZmOGQ2YzVhNGZkODc4
ZThkN2E5OGUyYzk4ZTk0YzRlZjE0YmRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0zMzA5LDYgKzMzMDksMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGluZyBt
YXkgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGlmIHRoZSBhbW91bnQgb2Ygb3ZlcmZs
b3cgY2hhbmdlZC4KICAgICBpZiAoY29tcG9zaXRvcigpLnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdT
dGF0ZSgqdGhpcykpCiAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRDb21wb3NpdGluZ0xheWVyc05l
ZWRSZWJ1aWxkKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1F
OiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFt
bWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCiB9
CiAKIGJvb2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0
IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYWUxNzUxYjFkNGZlNzI0MTgwZjZh
OWM3ODZiOTM4NTAzNjViMzY4My4uNTgyNWE3ZTE1ZDNiMzY2YjBhMTJhM2U1MTFiZDU5YTMwMzI4
NDA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKQEAgLTM3NzAsNiArMzc3MCwxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIFNj
cgogICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuc2Nyb2xsYWJsZUFyZWFTaXplID0gbGF5
ZXIudmlzaWJsZVNpemUoKTsKICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LmNvbnRlbnRT
aXplID0gbGF5ZXIuY29udGVudHNTaXplKCk7CiAgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRy
eS5yZWFjaGFibGVDb250ZW50U2l6ZSA9IGxheWVyLnNjcm9sbGFibGVDb250ZW50c1NpemUoKTsK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAgICAgaWYgKGxheWVyLmhvcml6
b250YWxTbmFwT2Zmc2V0cygpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5Lmhv
cml6b250YWxTbmFwT2Zmc2V0cyA9ICpsYXllci5ob3Jpem9udGFsU25hcE9mZnNldHMoKTsKKyAg
ICAgICAgICAgIGlmIChsYXllci52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nR2VvbWV0cnkudmVydGljYWxTbmFwT2Zmc2V0cyA9ICpsYXllci52ZXJ0aWNh
bFNuYXBPZmZzZXRzKCk7CisjZW5kaWYKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT51cGRhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUobm9kZUlELCBiYWNraW5nLT5zY3JvbGxpbmdM
YXllcigpLCBiYWNraW5nLT5zY3JvbGxpbmdDb250ZW50c0xheWVyKCksICZzY3JvbGxpbmdHZW9t
ZXRyeSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clRyYW5zYWN0aW9uLmNwcAppbmRleCBmNjJiYjljYzU4MDg5ZmE3Yjk4M2ZkMTJiMDA3NGYxMDA2
MWM3ZTJmLi43ZWUxMDA0MTdlYzc1NjViMGIyYTQwMDhkNjUxNWJkMGY3NTdhZWNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxp
bmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKQEAgLTEyOCw2ICsx
MjgsMTAgQEAgdm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46
OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNP
REUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUsIHJl
YWNoYWJsZUNvbnRlbnRzU2l6ZSkKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24pCiAgICAg
U0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
T3JpZ2luLCBzY3JvbGxPcmlnaW4pCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBT
Q1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9u
dGFsU25hcE9mZnNldHMsIGhvcml6b250YWxTbmFwT2Zmc2V0cykKKyAgICBTQ1JPTExJTkdfTk9E
RV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRz
LCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKQorI2VuZGlmCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMsIHNjcm9s
bGFibGVBcmVhUGFyYW1ldGVycykKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiwgcmVxdWVzdGVkU2Ny
b2xsUG9zaXRpb24pCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCkKQEAgLTE5Myw2ICsxOTcsMTAgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmRlY29kZShBcmd1
bWVudERlY29kZXImIGRlY29kZXIKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUsIEZsb2F0U2l6ZSwgc2V0
UmVhY2hhYmxlQ29udGVudHNTaXplKTsKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwgRmxvYXRQb2ludCwgc2V0U2Ny
b2xsUG9zaXRpb24pOwogICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwgSW50UG9pbnQsIHNldFNjcm9sbE9yaWdpbik7Cisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMsIFZlY3Rvcjxm
bG9hdD4sIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAgU0NST0xMSU5HX05PREVfREVD
T0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cywgVmVj
dG9yPGZsb2F0Piwgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyk7CisjZW5kaWYKICAgICBTQ1JPTExJ
TkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJl
YVBhcmFtcywgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLCBzZXRTY3JvbGxhYmxlQXJlYVBhcmFt
ZXRlcnMpOwogICAgIAogICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCBiZDAxOTc3
NjA3MjYzNmNmMzk3NjZhM2ZjYTEwNjdjYjZlYjFiNTdiLi4yYzY0YThiN2U4N2U2YjYzOTZlODIx
YTM4YmE3NTc5ZjdhZGQxYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQpAQCAtODMsNiArODMsNyBAQAogI2ltcG9ydCAiUHJpbnRJbmZv
LmgiCiAjaW1wb3J0ICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmgiCiAjaW1wb3J0ICJXS1BERlZpZXcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5o
IgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKQEAgLTEyOTks
NiArMTMwMCwxMiBAQCBzdGF0aWMgV2ViQ29yZTo6RmxvYXRQb2ludCBjb25zdHJhaW5Db250ZW50
T2Zmc2V0KFdlYkNvcmU6OkZsb2F0UG9pbnQgY29udGVudE9mZgogICAgIC8vIHpvb21pbmcuIFdl
J2xsIGFuaW1hdGUgdG8gdGhlIHJpZ2h0IHBsYWNlIG9uY2UgdGhlIHpvb20gZmluaXNoZXMuCiAg
ICAgaWYgKFtzY3JvbGxWaWV3IGlzWm9vbWluZ10pCiAgICAgICAgICp0YXJnZXRDb250ZW50T2Zm
c2V0ID0gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAoX3BhZ2UtPm1haW5GcmFt
ZSgpICYmIF9wYWdlLT5tYWluRnJhbWUoKS0+cGFnZSgpICYmIF9wYWdlLT5tYWluRnJhbWUoKS0+
cGFnZSgpLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkpIHsKKyAgICAgICAgQ0dTaXplIG1h
eFNjcm9sbERpbWVuc2lvbnMgPSBDR1NpemVNYWtlKHNjcm9sbFZpZXcuY29udGVudFNpemUud2lk
dGggLSBzY3JvbGxWaWV3LmJvdW5kcy5zaXplLndpZHRoLCBzY3JvbGxWaWV3LmNvbnRlbnRTaXpl
LmhlaWdodCAtIHNjcm9sbFZpZXcuYm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAgICAgX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5wYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+YWRqdXN0
VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKG1heFNjcm9sbERpbWVuc2lvbnMsIHZlbG9j
aXR5LCB0YXJnZXRDb250ZW50T2Zmc2V0KTsKKyAgICB9CisjZW5kaWYKIH0KIAogLSAodm9pZClz
Y3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERl
Y2VsZXJhdGU6KEJPT0wpZGVjZWxlcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuaAppbmRleCA0MGQyODMxMTZmZWU0NDcyZjkyYzIzMDUyNDY5YzVhZGU3OTRiMGFiLi41
ODk2ZjcyMzVlNmYxNmJhOTMzNGNmZTJhNjYwNjA4NDFjMzNhOGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaApAQCAtODQsMTAgKzg0LDE3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0UGFuR2VzdHVyZSgpOwogICAgIHZvaWQg
c2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRTY3JvbGwoKTsKICAgICB2b2lkIHNjcm9sbGluZ1Ry
ZWVOb2RlRGlkRW5kU2Nyb2xsKCk7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2
b2lkIGFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1NpemUgbWF4U2Nyb2xs
RGltZW5zaW9ucywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNl
dCkgY29uc3Q7CisjZW5kaWYKICNlbmRpZgogCiBwcml2YXRlOgogICAgIHZvaWQgY29ubmVjdFN0
YXRlTm9kZUxheWVycyhXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUmLCBjb25zdCBSZW1vdGVM
YXllclRyZWVIb3N0Jik7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIHNo
b3VsZFNuYXBGb3JNYWluZnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzKSBj
b25zdDsKKyAgICBmbG9hdCBjbG9zZXN0U25hcE9mZnNldEZvck1haW5mcmFtZVNjcm9sbGluZyhX
ZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2
ZWxvY2l0eSkgY29uc3Q7CisjZW5kaWYKIAogICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdlUHJv
eHk7CiAgICAgUmVmUHRyPFJlbW90ZVNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1t
CmluZGV4IGViMGFjY2E5NDllN2E2MmI4NjY3YTA4NTc5NmIzYzZkM2VkMThlMTcuLjhjMmFiYTZl
ZGVhMjRjZjU1ZWY2NWYxN2UxMWNlMTYwNDQ1ZjI5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3Mv
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQpAQCAtMzcsNiArMzcsMTAg
QEAKICNpbXBvcnQgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgogI2ltcG9ydCA8d3RmL1RlbXBvcmFy
eUNoYW5nZS5oPgogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBvcnQgPFdlYkNv
cmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIEBpbnRlcmZhY2UgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4gewpAQCAtNzMsNiArNzcsMTYgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9sbFdp
bGxTdGFydCgpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKy0gKHZvaWQpc2Ny
b2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVs
b2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2lu
dCAqKXRhcmdldENvbnRlbnRPZmZzZXQKK3sKKyAgICBpZiAoX3Njcm9sbGluZ1RyZWVOb2RlLT5o
b3Jpem9udGFsU25hcE9mZnNldHMoKS5zaXplKCkgPiAwKQorICAgICAgICB0YXJnZXRDb250ZW50
T2Zmc2V0LT54ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5
LngpOworICAgIGlmIChfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKS5z
aXplKCkgPiAwKQorICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gY2xvc2VzdFNuYXBP
ZmZzZXQ8ZmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLCB0
YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55KTsKK30KKyNlbmRpZgorCiAtICh2b2lk
KXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxs
RGVjZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxlcmF0ZQogewogICAgIGlmIChfaW5Vc2VySW50ZXJh
Y3Rpb24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7CkBAIC0xODgsNyArMjAyLDEyIEBAIHZvaWQgU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihj
b25zdCBTY3JvbGxpbmdTCiAKICAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0g
aW5zZXRzOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisgICAgICAgIC8vIEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNuYXBzIGluIDJEIHNj
cm9sbGluZywgdGhlIG90aGVyIGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3QgYXMgd2VsbC4gSXMg
dGhpcyB3aGF0IHdlIHdhbnQ/CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisgICAgICAgICAgICBz
Y3JvbGxWaWV3LmRlY2VsZXJhdGlvblJhdGUgPSBob3Jpem9udGFsU25hcE9mZnNldHMoKS5zaXpl
KCkgfHwgdmVydGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJh
dGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKKyNlbmRp
ZgogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5SU9TLm1tCmluZGV4IGQ1NDlkNGE2OTkyY2M5NTI1NTEzODI1MWY1
YjMzY2U3NjUwNzgxNGYuLjI1YjYzZmQ1Yjc0YjczNDU1M2FmMTMyZjQwNjhjYjk3MjU0MjA4YWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KQEAgLTM3LDYgKzM3LDEyIEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUuaD4KICNpbmNsdWRlIDxVSUtp
dC9VSVZpZXcuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5jbHVkZSA8V2Vi
Q29yZS9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFR5
cGVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Lmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMTA2LDYgKzExMiw0MSBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkKICAgICBtX3dlYlBhZ2VQcm94
eS5vdmVyZmxvd1Njcm9sbERpZEVuZFNjcm9sbCgpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFy
Z2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBD
R1BvaW50IHZlbG9jaXR5LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KSBjb25zdAorewor
ICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbmZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA+IDAgJiYgdGFy
Z2V0Q29udGVudE9mZnNldC0+eCA8IG1heFNjcm9sbERpbWVuc2lvbnMud2lkdGgpIHsKKyAgICAg
ICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWlu
ZnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB0YXJn
ZXRDb250ZW50T2Zmc2V0LT54LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgdGFyZ2V0Q29udGVudE9m
ZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3JvbGxEaW1lbnNpb25zLndpZHRoLCBwb3Rl
bnRpYWxTbmFwUG9zaXRpb24pOworICAgIH0KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFjY291
bnQgZm9yIGhvdyB0aGUgdG9wIG5hdmlnYXRpb24gYmFyIGNoYW5nZXMgaW4gc2l6ZS4KKyAgICBp
ZiAoc2hvdWxkU25hcEZvck1haW5mcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsKSAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID4gMCAmJiB0YXJnZXRDb250
ZW50T2Zmc2V0LT55IDwgbWF4U2Nyb2xsRGltZW5zaW9ucy5oZWlnaHQpIHsKKyAgICAgICAgZmxv
YXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluZnJhbWVT
Y3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVu
dE9mZnNldC0+eSwgdmVsb2NpdHkueSk7CisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkg
PSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsRGltZW5zaW9ucy5oZWlnaHQsIHBvdGVudGlhbFNu
YXBQb3NpdGlvbik7CisgICAgfQorfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OnNob3VsZFNuYXBGb3JNYWluZnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1Ry
ZWUtPnJvb3ROb2RlKCk7CisgICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05v
ZGUoKSkgeworICAgICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290RnJh
bWUgPSBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9vdCk7
CisgICAgICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0
cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIHJldHVybiBz
bmFwT2Zmc2V0cy5zaXplKCkgPiAwOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zs
b2F0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9y
TWFpbmZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0
aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUq
IHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7CisgICAgQVNTRVJUKHJvb3QgJiYg
cm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSk7CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZSogcm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZSo+KHJvb3QpOworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRz
ID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6
b250YWxTbmFwT2Zmc2V0cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Cisg
ICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0PihzbmFwT2Zmc2V0cywgc2Nyb2xsRGVz
dGluYXRpb24sIHZlbG9jaXR5KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236637</attachid>
            <date>2014-08-14 16:36:15 -0700</date>
            <delta_ts>2014-08-15 09:35:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135769-20140814163605.patch</filename>
            <type>text/plain</type>
            <size>30484</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVkZmQzYmY3NDgwYmNh
MWI1ZTg2ODA5NGEwNDdkNDljOWQ2MGIzYy4uNjc0ZWRhZDI3NzhlZGZiY2QzMDNmNWM0NzU3ZDVl
MWRiMmEzZmMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
bmFwcGluZyBiZWhhdmlvciBmb3IgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzU3NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzbmFwIHBvaW50cyBvbiBpT1MuIFRo
aXMgZW50YWlscyBzZW5kaW5nIHNuYXAgcG9pbnRzIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRo
ZSBVSSBwcm9jZXNzCisgICAgICAgIGJ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBzbmFwIHBvaW50
cyBhbmQgdXBkYXRpbmcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQg
V0tXZWJWaWV3IHRvIHN1cHBvcnQKKyAgICAgICAgYW5pbWF0aW9uIHRvIHNuYXAgcG9pbnRzIGlu
IHRoZSBjYXNlcyBvZiBtYWluZnJhbWUgYW5kIG92ZXJmbG93IHNjcm9sbGluZywgcmVzcGVjdGl2
ZWx5LgorCisgICAgICAgIFRoZXJlIGFyZSBubyBuZXcgdGVzdHMgeWV0IC0tIHdlJ2xsIG5lZWQg
dG8gZmluZCBhIHdheSB0byB0ZXN0IHRoaXMhCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9h
dCk6IEhlbHBlciBmdW5jdGlvbnMgdXNlZCB0byBjb252ZXJ0IExheW91dFVuaXRzIHRvIGZsb2F0
cyBmb3Igc25hcCBvZmZzZXRzLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6IFVwZGF0ZSBzbmFwIG9mZnNldHMgZm9y
IG1haW5mcmFtZSBzY3JvbGxpbmcsIGFzIHdlbGwgYXMgdGhlIHN0YXRlIG5vZGUuCisgICAgICAg
IChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUpOiBBZGRlZCBzbmFwIG9mZnNldHMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9m
ZnNldCk6IENvbXB1dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIGEgc29ydGVkIHZl
Y3RvciBvZiBjb21wYXJhYmxlIHR5cGVzIChlLmcuIGZsb2F0LCBMYXlvdXRVbml0KS4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcnRpY2FsU25hcE9mZnNldHMpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpob3Jpem9udGFsU25hcE9mZnNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNh
bFNuYXBPZmZzZXRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNhbFNuYXBPZmZzZXRzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6IFVwZGF0ZSBzbmFwIG9mZnNl
dHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcik6IFVwZGF0ZXMgdGhlIHN0YXRlIG5vZGUn
cyBzbmFwIG9mZnNldHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKwogMjAxNC0wOC0xNCAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBDb3JyZWN0
IGJ1aWxkIHdoZW4gRGVyaXZlZFNvdXJjZXMgbG9jYXRpb24gbm90IHN1cHBsaWVkIGJ5IGJ1aWxk
IGVudmlyb25tZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2Y3MWEyYWZlMTg1Mjk5N2RkNjZiODM2Nzg0Y2Yy
MDljZTljMGMyMS4uNDhhMjBjZWIyMmJmNTBmOTFkNDM4ZTczZjI4Nzg1YjgzNThmNGJhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE0LTA4LTE0ICBXZW5zb24gSHNpZWggIDx3ZW5z
b25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzbmFwcGluZyBiZWhhdmlv
ciBmb3IgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzU3NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlv
bi5jcHA6CisgICAgICAgIChBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZT46OmVuY29kZSk6IEFkZGVkIHNuYXAgb2Zmc2V0IGVuY29kaW5nLgorICAgICAgICAoQXJndW1l
bnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNvZGUpOiBBZGRlZCBzbmFw
IG9mZnNldCBkZWNvZGluZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0
aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6IEZvciBtYWluZnJhbWUgc2Nyb2xsaW5n
LCByZXRhcmdldHMgdGhlIHNjcm9sbCBkZXN0aW5hdGlvbiB0byB0aGUgYXBwcm9wcmlhdGUgc25h
cCBwb2ludC4KKyAgICAgICAgKiBVSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHkuaDogQWRkZWQgbWV0aG9kcyB0byBleHRyYWN0IHJlbGV2YW50IGluZm9y
bWF0aW9uIGZvciBXS1dlYlZpZXcgZnJvbSBzbmFwIG9mZnNldHMgaW4gbWFpbmZyYW1lIHNjcm9s
bGluZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tOgorICAgICAgICAoLVtXS092ZXJmbG93U2Nyb2xsVmll
d0RlbGVnYXRlIHNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENv
bnRlbnRPZmZzZXQ6XSk6IEZvciBvdmVyZmxvdyBzY3JvbGxpbmcsIHJldGFyZ2V0cyB0aGUgc2Ny
b2xsIGRlc3RpbmF0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBzbmFwIHBvaW50LgorICAgICAgICAo
V2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVBZnRl
ckNoaWxkcmVuKTogU2V0cyB0aGUgZGVjZWxlcmF0aW9uIGZhY3RvciB0byBGQVNUIGlmIHNuYXAg
cG9pbnRzIGFyZSBhY3RpdmUuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5OjphZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzaG91
bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3Jv
bGxpbmcpOiBJbnZva2VkIGJ5IFdLV2ViVmlldyB0byByZXRhcmdldCB0aGUgc2Nyb2xsIGRlc3Rp
bmF0aW9uLgorCiAyMDE0LTA4LTE0ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+
CiAKICAgICAgICAgW1NlcnZpY2VzIHdpdGggVUldIFNlbGVjdGlvbiBzZXJ2aWNlcyBkb24ndCB3
b3JrIGluc2lkZSA8aWZyYW1lcz4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDM3ZWQzN2UyNThi
ZGQwZjg3MTMxMzQzNTQzYWY4NDQ3MWVlMTNmMzQuLjUyNWUzNTRiMDNmMmQ2ZmQ2ZThlNTJlNGQ2
NWFhMDViNTkxY2Y1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0zMDExLDYgKzMwMTEsMTEg
QEAgX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9i
amVjdEVQTlNfMTJET01XaW5kb3dDU1NFCiBfX1pON1dlYkNvcmUxNkZpbHRlck9wZXJhdGlvbnNh
U0VSS1MwXwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorX19aTjdXZWJD
b3JlMjdTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUyMnNldFZlcnRpY2FsU25hcE9mZnNldHNF
UktOM1dURjZWZWN0b3JJZkxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKK19fWk43V2ViQ29y
ZTI3U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlMjRzZXRIb3Jpem9udGFsU25hcE9mZnNldHNF
UktOM1dURjZWZWN0b3JJZkxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogX19aTks3V2ViQ29yZThEb2N1bWVudDE2YW5u
b3RhdGVkUmVnaW9uc0V2CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggYWZhYjJm
NmQ1ZWQ4ZDlhNDgwNWYyMTg1MTViNTkxOWVhZGUwNTk4ZC4uMzNjOWQyNjcwNGMxYjE1NDczMDdi
ZTEzNWI2NDA4NTgxNmNlNjIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTU5LDYgKzU5
LDIwIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVl
UHJvcGVydGllc0NoYW5nZWQoKQogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxv
YXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9k
ZSwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIFZlY3RvcjxmbG9hdD4gc25hcE9m
ZnNldHNBc0Zsb2F0OworICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlQ2FwYWNpdHkoc25h
cE9mZnNldHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNuYXBPZmZzZXRz
LnNpemUoKTsgaSsrKQorICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQuYXBwZW5kKHJvdW5kVG9E
ZXZpY2VQaXhlbChzbmFwT2Zmc2V0c1tpXSwgZGV2aWNlU2NhbGVGYWN0b3IsIGZhbHNlKSk7CisK
KyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCisgICAgICAgIG5v
ZGUtPnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOworICAgIGVs
c2UKKyAgICAgICAgbm9kZS0+c2V0VmVydGljYWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxv
YXQpOworfQorCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91
dFVwZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKQEAgLTk3LDYgKzExMSwxNSBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgbm9kZS0+
c2V0VG90YWxDb250ZW50c1NpemUoZnJhbWVWaWV3LT50b3RhbENvbnRlbnRzU2l6ZSgpKTsKICAg
ICBub2RlLT5zZXRSZWFjaGFibGVDb250ZW50c1NpemUoZnJhbWVWaWV3LT50b3RhbENvbnRlbnRz
U2l6ZSgpKTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgZnJhbWVWaWV3LT51
cGRhdGVTbmFwT2Zmc2V0cygpOworICAgIGlmIChmcmFtZVZpZXctPmhvcml6b250YWxTbmFwT2Zm
c2V0cygpKQorICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBub2RlLCAqZnJhbWVWaWV3LT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgZnJhbWVWaWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmRldmljZVNjYWxl
RmFjdG9yKCkpOworCisgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTbmFwT2Zmc2V0cygpKQor
ICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCwgbm9kZSwgKmZyYW1lVmlldy0+dmVydGljYWxTbmFwT2Zmc2V0cygp
LCBmcmFtZVZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisj
ZW5kaWYKKwogICAgIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJzOwog
ICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZp
ZXctPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eSgpOwpAQCAtMzk5LDYgKzQyMiwxMCBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnVwZGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQgbm9kZQogICAg
ICAgICBub2RlLT5zZXRUb3RhbENvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS0+Y29udGVu
dFNpemUpOwogICAgICAgICBub2RlLT5zZXRSZWFjaGFibGVDb250ZW50c1NpemUoc2Nyb2xsaW5n
R2VvbWV0cnktPnJlYWNoYWJsZUNvbnRlbnRTaXplKTsKICAgICAgICAgbm9kZS0+c2V0U2Nyb2xs
YWJsZUFyZWFTaXplKHNjcm9sbGluZ0dlb21ldHJ5LT5zY3JvbGxhYmxlQXJlYVNpemUpOworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNu
YXBPZmZzZXRzQXNGbG9hdChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5vZGUsIHNjcm9s
bGluZ0dlb21ldHJ5LT5ob3Jpem9udGFsU25hcE9mZnNldHMsIHNjcm9sbGVkQ29udGVudHNMYXll
ci0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNu
YXBPZmZzZXRzQXNGbG9hdChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBub2RlLCBzY3JvbGxp
bmdHZW9tZXRyeS0+dmVydGljYWxTbmFwT2Zmc2V0cywgc2Nyb2xsZWRDb250ZW50c0xheWVyLT5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyNlbmRpZgogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaAppbmRleCBl
ZGRmYzRhMzlkMjY4NzIwNzAwNDg0OTE3MDI5OGM0NGE1NWRhMzFhLi42NDMzNTM2ZThkNjQxMzEx
Y2M1MThiYjg0N2VkMDcxYTI2N2VkOTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaApAQCAtNDIsNiArNDIsNDAgQEAg
Y2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAKIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxh
YmxlQXJlYShTY3JvbGxhYmxlQXJlYSYsIEhUTUxFbGVtZW50JiBzY3JvbGxpbmdFbGVtZW50LCBj
b25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBz
Y3JvbGxpbmdFbGVtZW50U3R5bGUpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBjbG9zZXN0
U25hcE9mZnNldChjb25zdCBWZWN0b3I8VD4mIHNuYXBPZmZzZXRzLCBUIHNjcm9sbERlc3RpbmF0
aW9uLCBmbG9hdCB2ZWxvY2l0eSkKK3sKKyAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsK
KyAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0gc25hcE9mZnNldHMuZmlyc3QoKSkKKyAgICAg
ICAgcmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7CisKKyAgICBpZiAoc2Nyb2xsRGVzdGluYXRp
b24gPj0gc25hcE9mZnNldHMubGFzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFz
dCgpOworCisgICAgc2l6ZV90IGxvd2VySW5kZXggPSAwOworICAgIHNpemVfdCB1cHBlckluZGV4
ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKKyAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVy
SW5kZXggLSAxKSB7CisgICAgICAgIHNpemVfdCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsg
dXBwZXJJbmRleCkgLyAyOworICAgICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPCBzbmFwT2Zm
c2V0c1ttaWRkbGVJbmRleF0pCisgICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7
CisgICAgICAgIGVsc2UgaWYgKHNjcm9sbERlc3RpbmF0aW9uID4gc25hcE9mZnNldHNbbWlkZGxl
SW5kZXhdKQorICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAg
IGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIFQgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4
XTsKKyAgICBUIHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07Cisg
ICAgLy8gTm9uemVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlm
IGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIHNuYXAgdG8gdGhlIG9uZSBpbiB0aGUgZGly
ZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlLgorICAgIGlmICh2ZWxvY2l0eSkKKyAgICAgICAg
cmV0dXJuIHZlbG9jaXR5IDwgMCA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRp
b247CisKKyAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9IHNjcm9sbERlc3Rp
bmF0aW9uIC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9zaXRpb24gLSBzY3JvbGxE
ZXN0aW5hdGlvbjsKKyAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93
ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAppbmRleCBlNTViMWVi
N2NkNjRlZjdmNDNhNDVkY2Y3MWQ3YjU3M2RmM2Y5MWZiLi5jMGQ4ZTczYmUzMDgxNWZhMDI4NmYy
YmM1MmY4YjJjNzFlMzYwNDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdHlwZWRlZiB1bnNpZ25lZCBTeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNv
bnM7CkBAIC0xNjQsNiArMTY4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgRmxvYXRTaXplIHJlYWNo
YWJsZUNvbnRlbnRTaXplOyAvLyBTbWFsbGVyIHRoYW4gY29udGVudFNpemUgd2hlbiBvdmVyZmxv
dyBpcyBoaWRkZW4gb24gb25lIGF4aXMuCiAgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRp
b247CiAgICAgICAgIEludFBvaW50IHNjcm9sbE9yaWdpbjsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRz
OworICAgICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gdmVydGljYWxTbmFwT2Zmc2V0czsKKyNlbmRp
ZgogICAgIH07CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJhbWVTY3JvbGxpbmdOb2RlKFNj
cm9sbGluZ05vZGVJRCwgR3JhcGhpY3NMYXllciogLypzY3JvbGxMYXllciovLCBHcmFwaGljc0xh
eWVyKiAvKnNjcm9sbGVkQ29udGVudHNMYXllciovLCBHcmFwaGljc0xheWVyKiAvKmNvdW50ZXJT
Y3JvbGxpbmdMYXllciovLCBHcmFwaGljc0xheWVyKiAvKmluc2V0Q2xpcExheWVyKi8sIGNvbnN0
IFNjcm9sbGluZ0dlb21ldHJ5KiA9IG51bGxwdHIpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAKaW5kZXggZDkzMzc0ZThjNzM4MmViMWEwMjQ0ZGFhMmRlNGQzYWUwOWExODA2Yy4uZTFhZjQx
MmVhZmI3NTA0MDk4MjFhM2NjYWM3NTZmMjhkNTVhNjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuY3BwCkBAIC00OCw2ICs0OCwxMCBAQCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcgogICAgICwg
bV9zY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUuc2Nyb2xsUG9zaXRpb24oKSkKICAgICAsIG1fcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oc3RhdGVOb2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkp
CiAgICAgLCBtX3Njcm9sbE9yaWdpbihzdGF0ZU5vZGUuc2Nyb2xsT3JpZ2luKCkpCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAsIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzKHN0YXRl
Tm9kZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkKKyAgICAsIG1fdmVydGljYWxTbmFwT2Zmc2V0
cyhzdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0cygpKQorI2VuZGlmCiAgICAgLCBtX3Njcm9s
bGFibGVBcmVhUGFyYW1ldGVycyhzdGF0ZU5vZGUuc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKCkp
CiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Nj
cm9sbChzdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1h
dGljU2Nyb2xsKCkpCiB7CkBAIC0xMDIsNiArMTA2LDI2IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdp
bikKICAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoU2Nyb2xsT3JpZ2luKTsKIH0KIAorI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0
SG9yaXpvbnRhbFNuYXBPZmZzZXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzKQor
eworICAgIGlmIChtX2hvcml6b250YWxTbmFwT2Zmc2V0cyA9PSBzbmFwT2Zmc2V0cykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9ob3Jpem9udGFsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsK
KyAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoSG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcnRpY2FsU25hcE9mZnNldHMoY29u
c3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMpCit7CisgICAgaWYgKG1fdmVydGljYWxTbmFw
T2Zmc2V0cyA9PSBzbmFwT2Zmc2V0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92ZXJ0aWNh
bFNuYXBPZmZzZXRzID0gc25hcE9mZnNldHM7CisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKFZlcnRp
Y2FsU25hcE9mZnNldHMpOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpzZXRTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWFQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIGlmIChtX3Njcm9sbGFibGVBcmVhUGFyYW1l
dGVycyA9PSBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAppbmRleCA5ZjJkMGE5Y2Y5
OWMxZWY5YmZmMTA3MDAyZTNlYTczYzA4ZWYwNzA1Li5lYjljZDliMmY4ZWFmM2I2MDFkZTAxMjYy
ZDllMjkyMzg1ZDg1NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaApAQCAtNDgsNiArNDgsMTAg
QEAgcHVibGljOgogICAgICAgICBTY3JvbGxhYmxlQXJlYVBhcmFtcywKICAgICAgICAgUmVxdWVz
dGVkU2Nyb2xsUG9zaXRpb24sCiAgICAgICAgIE51bVNjcm9sbGluZ1N0YXRlTm9kZUJpdHMsCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAgICAgSG9yaXpvbnRhbFNuYXBPZmZzZXRz
LAorICAgICAgICBWZXJ0aWNhbFNuYXBPZmZzZXRzLAorI2VuZGlmCiAgICAgfTsKIAogICAgIGNv
bnN0IEZsb2F0U2l6ZSYgc2Nyb2xsYWJsZUFyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYVNpemU7IH0KQEAgLTY1LDYgKzY5LDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPcmlnaW47IH0K
ICAgICB2b2lkIHNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYpOwogCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25h
cE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTbmFwT2Zmc2V0czsgfQorICAg
IHZvaWQgc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZlcnRpY2FsU25hcE9mZnNldHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7IH0KKyAgICB2b2lkIHNldFZlcnRpY2FsU25hcE9m
ZnNldHMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworI2VuZGlmCisKICAgICBjb25zdCBTY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMmIHNjcm9sbGFibGVBcmVhUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxhYmxl
QXJlYVBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzJiBwYXJhbXMpOwog
CkBAIC04NSw2ICs5NywxMCBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9zY3JvbGxQb3Np
dGlvbjsKICAgICBGbG9hdFBvaW50IG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247CiAgICAgSW50
UG9pbnQgbV9zY3JvbGxPcmlnaW47CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgIFZlY3RvcjxmbG9hdD4g
bV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworI2VuZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOwogICAgIGJvb2wgbV9yZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGw7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGUuY3BwCmluZGV4IDEyYzMwYTUwZmNjMGFjNmFiOWI1MDQ0ZTk4NjQwNTNkNjVlY2ZkNzMu
LjI5NjIzNzNmZmQ1NmJmZmM2ZDI2Y2E2NDFiMWMxN2IyMDk3NDEyNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5jcHAKQEAgLTY3LDYgKzY3LDE0IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYKICAg
ICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6U2Nyb2xsT3JpZ2luKSkKICAgICAgICAgbV9zY3JvbGxPcmlnaW4gPSBzdGF0ZS5zY3JvbGxP
cmlnaW4oKTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKHN0YXRlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxT
bmFwT2Zmc2V0cykpCisgICAgICAgIG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc3RhdGUuaG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCk7CisKKyAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisgICAg
ICAgIG1fdmVydGljYWxTbmFwT2Zmc2V0cyA9IHN0YXRlLnZlcnRpY2FsU25hcE9mZnNldHMoKTsK
KyNlbmRpZgorCiAgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zKSkKICAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMgPSBzdGF0ZS5zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oCmluZGV4IGQ1YmU5YTA0ZjBlYWUwZDgyZGMwNzA4MWU2OWFkYTUy
NjdiMjY2NmQuLjdhYWE5NmVkMmIzYTBjYWEwOWYxYjUzNTA4NjAxNzdjY2RlMzEzOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGUuaApAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsU25hcE9m
ZnNldHMoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTbmFwT2Zmc2V0czsgfQorICAgIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHZlcnRpY2FsU25hcE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBt
X3ZlcnRpY2FsU25hcE9mZnNldHM7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBT
Y3JvbGxpbmdOb2RlSUQpOwogCkBAIC05Miw3ICs5NywxMCBAQCBwcml2YXRlOgogICAgIEZsb2F0
U2l6ZSBtX3JlYWNoYWJsZUNvbnRlbnRzU2l6ZTsKICAgICBGbG9hdFBvaW50IG1fbGFzdENvbW1p
dHRlZFNjcm9sbFBvc2l0aW9uOwogICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOwotICAgIAor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgVmVjdG9yPGZsb2F0PiBtX2hvcml6b250
YWxTbmFwT2Zmc2V0czsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fdmVydGljYWxTbmFwT2Zmc2V0czsK
KyNlbmRpZgogICAgIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyBtX3Njcm9sbGFibGVBcmVhUGFy
YW1ldGVyczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IGQ2NmRhMTNjOGJjMWMxZmYxNjY1MDA4MzNjMzFlNDBhZTA4NDE5ODAuLmU2ZjJhZDg3ZmJl
YjhiM2Q1NjA4NDhmM2M5ZDJlN2NkNjUyZmM3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMzMwOSw2ICszMzA5LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiAgICAgLy8gQ29tcG9zaXRlZCBzY3JvbGxp
bmcgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBpZiB0aGUgYW1vdW50IG9mIG92
ZXJmbG93IGNoYW5nZWQuCiAgICAgaWYgKGNvbXBvc2l0b3IoKS51cGRhdGVMYXllckNvbXBvc2l0
aW5nU3RhdGUoKnRoaXMpKQogICAgICAgICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBG
SVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJv
Z3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYK
IH0KIAogYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29u
c3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhZTE3NTFiMWQ0ZmU3MjQxODBm
NmE5Yzc4NmI5Mzg1MDM2NWIzNjgzLi5jYjA2ZTFjYzAyYWE0ZmVlYmVlZWUzZDliOGM5ZmI4YzI4
YWQxNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcApAQCAtMzc3MCw2ICszNzcwLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXllciwg
U2NyCiAgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5zY3JvbGxhYmxlQXJlYVNpemUgPSBs
YXllci52aXNpYmxlU2l6ZSgpOwogICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuY29udGVu
dFNpemUgPSBsYXllci5jb250ZW50c1NpemUoKTsKICAgICAgICAgICAgIHNjcm9sbGluZ0dlb21l
dHJ5LnJlYWNoYWJsZUNvbnRlbnRTaXplID0gbGF5ZXIuc2Nyb2xsYWJsZUNvbnRlbnRzU2l6ZSgp
OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgICAgICBpZiAoYXV0byogb2Zm
c2V0cyA9IGxheWVyLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAgICAgICAgICAgICAgIHNj
cm9sbGluZ0dlb21ldHJ5Lmhvcml6b250YWxTbmFwT2Zmc2V0cyA9ICpvZmZzZXRzOworICAgICAg
ICAgICAgaWYgKGF1dG8qIG9mZnNldHMgPSBsYXllci52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisg
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkudmVydGljYWxTbmFwT2Zmc2V0cyA9ICpv
ZmZzZXRzOworI2VuZGlmCiAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlKG5vZGVJRCwgYmFja2luZy0+c2Nyb2xsaW5nTGF5ZXIoKSwg
YmFja2luZy0+c2Nyb2xsaW5nQ29udGVudHNMYXllcigpLCAmc2Nyb2xsaW5nR2VvbWV0cnkpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9s
bGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggZjYyYmI5Y2M1ODA4OWZhN2I5ODNmZDEyYjAwNzRmMTAwNjFjN2UyZi4u
N2VlMTAwNDE3ZWM3NTY1YjBiMmE0MDA4ZDY1MTViZDBmNzU3YWVjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBAIC0xMjgsNiArMTI4LDEwIEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplLCByZWFjaGFibGVD
b250ZW50c1NpemUpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKQogICAgIFNDUk9MTElO
R19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwg
c2Nyb2xsT3JpZ2luKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgU0NST0xMSU5H
X05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBP
ZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldHMpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cywgdmVydGlj
YWxTbmFwT2Zmc2V0cykKKyNlbmRpZgogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zLCBzY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnMpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJl
c2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCkBAIC0xOTMsNiArMTk3LDEwIEBAIGJvb2wgQXJndW1l
bnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyJiBkZWNvZGVyCiAgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplLCBGbG9hdFNpemUsIHNldFJlYWNoYWJs
ZUNvbnRlbnRzU2l6ZSk7CiAgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24sIEZsb2F0UG9pbnQsIHNldFNjcm9sbFBvc2l0
aW9uKTsKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxPcmlnaW4sIEludFBvaW50LCBzZXRTY3JvbGxPcmlnaW4pOworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBWZWN0b3I8ZmxvYXQ+LCBz
ZXRIb3Jpem9udGFsU25hcE9mZnNldHMpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMsIFZlY3RvcjxmbG9h
dD4sIHNldFZlcnRpY2FsU25hcE9mZnNldHMpOworI2VuZGlmCiAgICAgU0NST0xMSU5HX05PREVf
REVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMs
IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycywgc2V0U2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKTsK
ICAgICAKICAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggYmQwMTk3NzYwNzI2MzZj
ZjM5NzY2YTNmY2ExMDY3Y2I2ZWIxYjU3Yi4uOGRhNzk0ZTE4MWMxYzgwODY1YmJmOWI1MzE1ZGYw
NGZhYTZjOTM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KQEAgLTgzLDYgKzgzLDcgQEAKICNpbXBvcnQgIlByaW50SW5mby5oIgogI2lt
cG9ydCAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
IgogI2ltcG9ydCAiV0tQREZWaWV3LmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKICNpbXBv
cnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCkBAIC0xMjk5LDYgKzEzMDAs
MTIgQEAgc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgY29uc3RyYWluQ29udGVudE9mZnNldChX
ZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmYKICAgICAvLyB6b29taW5nLiBXZSdsbCBhbmlt
YXRlIHRvIHRoZSByaWdodCBwbGFjZSBvbmNlIHRoZSB6b29tIGZpbmlzaGVzLgogICAgIGlmIChb
c2Nyb2xsVmlldyBpc1pvb21pbmddKQogICAgICAgICAqdGFyZ2V0Q29udGVudE9mZnNldCA9IFtz
Y3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eSgpKSB7CisgICAgICAgIENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zID0gQ0dTaXpl
TWFrZShzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoIC0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6
ZS53aWR0aCwgc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQgLSBzY3JvbGxWaWV3LmJvdW5k
cy5zaXplLmhlaWdodCk7CisgICAgICAgIGNvb3JkaW5hdG9yLT5hZGp1c3RUYXJnZXRDb250ZW50
T2Zmc2V0Rm9yU25hcHBpbmcobWF4U2Nyb2xsRGltZW5zaW9ucywgdmVsb2NpdHksIHRhcmdldENv
bnRlbnRPZmZzZXQpOworICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKXNjcm9sbFZpZXdEaWRF
bmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9P
TClkZWNlbGVyYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xs
aW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4
IDQwZDI4MzExNmZlZTQ0NzJmOTJjMjMwNTI0NjljNWFkZTc5NGIwYWIuLjI2ODlkMjU4ODFlNjkz
NDAzNjY5MGYyYWU4YjgzYjZhMzhjZmE2OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oCkBAIC04NCwxMCArODQsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xs
aW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCk7CiAgICAgdm9pZCBzY3JvbGxpbmdUcmVl
Tm9kZVdpbGxTdGFydFNjcm9sbCgpOwogICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRT
Y3JvbGwoKTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgYWRqdXN0VGFy
Z2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBD
R1BvaW50IHZlbG9jaXR5LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KSBjb25zdDsKKyNl
bmRpZgogI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0U3RhdGVOb2RlTGF5ZXJz
KFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSYsIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3Qm
KTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgc2hvdWxkU25hcEZvck1h
aW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIGZs
b2F0IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9s
bEV2ZW50QXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBjb25z
dDsKKyNlbmRpZgogCiAgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQcm94eTsKICAgICBSZWZQ
dHI8UmVtb3RlU2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcv
aW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0KaW5kZXggZWIwYWNj
YTk0OWU3YTYyYjg2NjdhMDg1Nzk2YjNjNmQzZWQxOGUxNy4uOGMyYWJhNmVkZWEyNGNmNTVlZjY1
ZjE3ZTExY2UxNjA0NDVmMjk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0zNyw2ICszNywxMCBAQAogI2ltcG9ydCA8
VUlLaXQvVUlTY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xs
U25hcE9mZnNldHMuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGlu
dGVyZmFjZSBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJU2Nyb2xs
Vmlld0RlbGVnYXRlPiB7CkBAIC03Myw2ICs3NywxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0KCk7CiB9
CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorLSAodm9pZClzY3JvbGxWaWV3V2lsbEVu
ZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2lu
dCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29u
dGVudE9mZnNldAoreworICAgIGlmIChfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFw
T2Zmc2V0cygpLnNpemUoKSA+IDApCisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBj
bG9zZXN0U25hcE9mZnNldDxmbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25h
cE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHkueCk7CisgICAgaWYg
KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA+IDApCisg
ICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdD4o
X3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRP
ZmZzZXQtPnksIHZlbG9jaXR5LnkpOworfQorI2VuZGlmCisKIC0gKHZvaWQpc2Nyb2xsVmlld0Rp
ZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihC
T09MKXdpbGxEZWNlbGVyYXRlCiB7CiAgICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbiAmJiAhd2ls
bERlY2VsZXJhdGUpIHsKQEAgLTE4OCw3ICsyMDIsMTIgQEAgdm9pZCBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGlu
Z1MKIAogICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNldHM7CiAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAg
ICAgLy8gRklYTUU6IElmIG9ubHkgb25lIGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUg
b3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJhdGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ug
d2FudD8KKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVj
ZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0aWNh
bFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8gVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3Qg
OiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOworI2VuZGlmCiAgICAgICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHlJT1MubW0KaW5kZXggZDU0OWQ0YTY5OTJjYzk1MjU1MTM4MjUxZjViMzNjZTc2NTA3ODE0
Zi4uZDI1Mzc1MjhiZTNjMmUxMDAwYWE4YTdiNzNjZjZlODk2YWFjYTYyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtMjMsMTkgKzIzLDI1IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKLSNpbmNsdWRlICJM
YXllclJlcHJlc2VudGF0aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0
ZVRyZWUuaD4KLSNpbmNsdWRlIDxVSUtpdC9VSVZpZXcuaD4KKyNpbXBvcnQgIkxheWVyUmVwcmVz
ZW50YXRpb24uaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKKyNpbXBvcnQgIldl
YlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nj
cm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nj
cm9sbGluZ1N0YXRlVHJlZS5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBv
cnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nj
cm9sbFR5cGVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTA2LDYg
KzExMiw0MSBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNjcm9sbGlu
Z1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkKICAgICBtX3dlYlBhZ2VQcm94eS5vdmVyZmxvd1Njcm9s
bERpZEVuZFNjcm9sbCgpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQg
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNl
dEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBDR1BvaW50IHZlbG9jaXR5
LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KSBjb25zdAoreworICAgIGlmIChzaG91bGRT
bmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCkgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA+IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNl
dC0+eCA8IG1heFNjcm9sbERpbWVuc2lvbnMud2lkdGgpIHsKKyAgICAgICAgZmxvYXQgcG90ZW50
aWFsU25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmco
V2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB0YXJnZXRDb250ZW50T2Zmc2V0
LT54LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHN0ZDo6
bWluPGZsb2F0PihtYXhTY3JvbGxEaW1lbnNpb25zLndpZHRoLCBwb3RlbnRpYWxTbmFwUG9zaXRp
b24pOworICAgIH0KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFjY291bnQgZm9yIGhvdyB0aGUg
dG9wIG5hdmlnYXRpb24gYmFyIGNoYW5nZXMgaW4gc2l6ZS4KKyAgICBpZiAoc2hvdWxkU25hcEZv
ck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSAm
JiB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT55IDwg
bWF4U2Nyb2xsRGltZW5zaW9ucy5oZWlnaHQpIHsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25h
cFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29y
ZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVs
b2NpdHkueSk7CisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBzdGQ6Om1pbjxmbG9h
dD4obWF4U2Nyb2xsRGltZW5zaW9ucy5oZWlnaHQsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7Cisg
ICAgfQorfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNob3VsZFNu
YXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7Cisg
ICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7
CisgICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSkgeworICAgICAg
ICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290RnJhbWUgPSBzdGF0aWNfY2Fz
dDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9vdCk7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpIDogcm9vdEZyYW1l
LT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5zaXpl
KCkgPiAwOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xs
aW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQg
dmVsb2NpdHkpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9s
bGluZ1RyZWUtPnJvb3ROb2RlKCk7CisgICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNj
cm9sbGluZ05vZGUoKSk7CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSogcm9v
dEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJv
b3QpOworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0
cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgcmV0dXJuIGNsb3Nl
c3RTbmFwT2Zmc2V0PGZsb2F0PihzbmFwT2Zmc2V0cywgc2Nyb2xsRGVzdGluYXRpb24sIHZlbG9j
aXR5KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236651</attachid>
            <date>2014-08-15 09:36:04 -0700</date>
            <delta_ts>2014-08-15 14:09:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135769-20140815093554.patch</filename>
            <type>text/plain</type>
            <size>35567</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGI4Mzk0OTE1ODE3ZjMw
OWU2NWIxYmY0OTAxNzllMjM0YmNhMTE2Ni4uMjA0YTZkMzgxNjg4ZWMwMjZjMTY0YjFmZTdiOGQ2
YWVjZDMxYjcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE0LTA4LTE1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
bmFwcGluZyBiZWhhdmlvciBmb3IgaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzU3NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzbmFwIHBvaW50cyBvbiBpT1MuIFRo
aXMgZW50YWlscyBzZW5kaW5nIHNuYXAgcG9pbnRzIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRo
ZSBVSSBwcm9jZXNzCisgICAgICAgIGJ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBzbmFwIHBvaW50
cyBhbmQgdXBkYXRpbmcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyBhbmQg
V0tXZWJWaWV3IHRvIHN1cHBvcnQKKyAgICAgICAgYW5pbWF0aW9uIHRvIHNuYXAgcG9pbnRzIGlu
IHRoZSBjYXNlcyBvZiBtYWluZnJhbWUgYW5kIG92ZXJmbG93IHNjcm9sbGluZywgcmVzcGVjdGl2
ZWx5LgorCisgICAgICAgIFRoZXJlIGFyZSBubyBuZXcgdGVzdHMgeWV0IC0tIHdlJ2xsIG5lZWQg
dG8gZmluZCBhIHdheSB0byB0ZXN0IHRoaXMhCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9h
dCk6IEhlbHBlciBmdW5jdGlvbnMgdXNlZCB0byBjb252ZXJ0IExheW91dFVuaXRzIHRvIGZsb2F0
cyBmb3Igc25hcCBvZmZzZXRzLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZCk6IFVwZGF0ZSBzbmFwIG9mZnNldHMgZm9y
IG1haW5mcmFtZSBzY3JvbGxpbmcsIGFzIHdlbGwgYXMgdGhlIHN0YXRlIG5vZGUuCisgICAgICAg
IChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUpOiBBZGRlZCBzbmFwIG9mZnNldHMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9m
ZnNldCk6IENvbXB1dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIGEgc29ydGVkIHZl
Y3RvciBvZiBjb21wYXJhYmxlIHR5cGVzIChlLmcuIGZsb2F0LCBMYXlvdXRVbml0KS4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcnRpY2FsU25hcE9mZnNldHMpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpob3Jpem9udGFsU25hcE9mZnNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNh
bFNuYXBPZmZzZXRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZTo6aG9yaXpvbnRhbFNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNhbFNuYXBPZmZzZXRzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6IFVwZGF0ZSBzbmFwIG9mZnNl
dHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcik6IFVwZGF0ZXMgdGhlIHN0YXRlIG5vZGUn
cyBzbmFwIG9mZnNldHMgZm9yIG92ZXJmbG93IHNjcm9sbGluZy4KKwogMjAxNC0wOC0xNCAgQW5k
cmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHR3byB1bnVz
ZWQgUmFuZ2UgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYwMGUyNzI5ZDBjOWJmN2Y2MzlkYzlk
ZDYzN2ZlMWQ3NjNkYWE4MjcuLjZhYWFmZGUwNjFmNTI4YTBmMDJjYmExOGZhM2FiYjYzNDExYThh
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNC0wOC0xNSAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgc25hcHBpbmcg
YmVoYXZpb3IgZm9yIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1NzY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc25hcCBwb2ludHMgb24gaU9TLgorCisgICAgICAg
ICogU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
LmNwcDoKKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
Pjo6ZW5jb2RlKTogQWRkZWQgc25hcCBvZmZzZXQgZW5jb2RpbmcuCisgICAgICAgIChBcmd1bWVu
dENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmRlY29kZSk6IEFkZGVkIHNuYXAg
b2Zmc2V0IGRlY29kaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRo
VmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTogRm9yIG1haW5mcmFtZSBzY3JvbGxpbmcs
IHJldGFyZ2V0cyB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBzbmFw
IHBvaW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5oOiBBZGRlZCBtZXRob2RzIHRvIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3Jt
YXRpb24gZm9yIFdLV2ViVmlldyBmcm9tIHNuYXAgb2Zmc2V0cyBpbiBtYWluZnJhbWUgc2Nyb2xs
aW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1MubW06CisgICAgICAgICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3
RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29u
dGVudE9mZnNldDpdKTogRm9yIG92ZXJmbG93IHNjcm9sbGluZywgcmV0YXJnZXRzIHRoZSBzY3Jv
bGwgZGVzdGluYXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIHNuYXAgcG9pbnQuCisgICAgICAgIChX
ZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUFmdGVy
Q2hpbGRyZW4pOiBTZXRzIHRoZSBkZWNlbGVyYXRpb24gZmFjdG9yIHRvIEZBU1QgaWYgc25hcCBw
b2ludHMgYXJlIGFjdGl2ZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6
IFVzZWQgYnkgV0tXZWJWaWV3IGZvciBtYWluZnJhbWUgc2Nyb2xsaW5nIHRvIHJldGFyZ2V0IHRo
ZSBzY3JvbGwgZGVzdGluYXRpb24sIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU2V0U2Nyb2xsVmlld0RlY2VsZXJh
dGlvblJhdGVGYXN0KTogVXNlZCBieSBXS1dlYlZpZXcgZm9yIG1haW5mcmFtZSBzY3JvbGxpbmcg
dG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2V0IGRlY2VsZXJhdGlvbiByYXRlIHRvIHRoZSBmYXN0
IHZhbHVlLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
OjpzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKTogSGVscGVyIG1ldGhvZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBP
ZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcpOiBIZWxwZXIgbWV0aG9kLgorCiAyMDE0LTA4LTE1
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLiBVcGRhdGUgT3B0aW9uc0dUSy5jbWFrZSBhbmQgTkVXUyBmb3IgMi41LjMgcmVs
ZWFzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMzdlZDM3ZTI1OGJkZDBmODcxMzEzNDM1NDNh
Zjg0NDcxZWUxM2YzNC4uNTI1ZTM1NGIwM2YyZDZmZDZlOGU1MmU0ZDY1YWEwNWI1OTFjZjU0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTMwMTEsNiArMzAxMSwxMSBAQCBfX1pON1dlYkNvcmU0
dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xMkRPTVdp
bmRvd0NTU0UKIF9fWk43V2ViQ29yZTE2RmlsdGVyT3BlcmF0aW9uc2FTRVJLUzBfCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitfX1pON1dlYkNvcmUyN1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTIyc2V0VmVydGljYWxTbmFwT2Zmc2V0c0VSS04zV1RGNlZlY3Rvcklm
TG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMjdTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUyNHNldEhvcml6b250YWxTbmFwT2Zmc2V0c0VSS04zV1RGNlZlY3Rvcklm
TG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQorI2VuZGlmCisKICNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCiBfX1pOSzdXZWJDb3JlOERvY3VtZW50MTZhbm5vdGF0ZWRSZWdpb25zRXYK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBhZmFiMmY2ZDVlZDhkOWE0ODA1ZjIx
ODUxNWI1OTE5ZWFkZTA1OThkLi4wYTcxODJiMGFiOWQ4NTAzNzAzOWZiY2Q0NDc0OTdmN2M1ZDY3
MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNTksNiArNTksMjAgQEAgdm9pZCBBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdTdGF0ZVRyZWVQcm9wZXJ0aWVzQ2hhbmdl
ZCgpCiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAorc3RhdGljIGlubGluZSB2
b2lkIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUmIG5vZGUsIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8
TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAg
ICAvLyBGSVhNRTogSW5jb3Jwb3JhdGUgY3VycmVudCBwYWdlIHNjYWxlIGZhY3RvciBpbiBzbmFw
cGluZyB0byBkZXZpY2UgcGl4ZWwuIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29udmVydCB0byBm
bG9hdCBoZXJlIGFuZCBsZXQgVUkgcHJvY2VzcyBkbyB0aGUgcGl4ZWwgc25hcHBpbmc/CisgICAg
VmVjdG9yPGZsb2F0PiBzbmFwT2Zmc2V0c0FzRmxvYXQ7CisgICAgc25hcE9mZnNldHNBc0Zsb2F0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc25hcE9mZnNldHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNuYXBPZmZzZXRzLnNpemUoKTsgKytpKQorICAgICAgICBzbmFwT2Zm
c2V0c0FzRmxvYXQuYXBwZW5kKHJvdW5kVG9EZXZpY2VQaXhlbChzbmFwT2Zmc2V0c1tpXSwgZGV2
aWNlU2NhbGVGYWN0b3IsIGZhbHNlKSk7CisKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwpCisgICAgICAgIG5vZGUuc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKHNu
YXBPZmZzZXRzQXNGbG9hdCk7CisgICAgZWxzZQorICAgICAgICBub2RlLnNldFZlcnRpY2FsU25h
cE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsKK30KKwogdm9pZCBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVWaWV3KQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC05Nyw2ICsxMTEsMTUgQEAgdm9pZCBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmll
dyogZnJhbWVWaWV3KQogICAgIG5vZGUtPnNldFRvdGFsQ29udGVudHNTaXplKGZyYW1lVmlldy0+
dG90YWxDb250ZW50c1NpemUoKSk7CiAgICAgbm9kZS0+c2V0UmVhY2hhYmxlQ29udGVudHNTaXpl
KGZyYW1lVmlldy0+dG90YWxDb250ZW50c1NpemUoKSk7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIGZyYW1lVmlldy0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICBpZiAoY29u
c3QgVmVjdG9yPExheW91dFVuaXQ+KiBob3Jpem9udGFsU25hcE9mZnNldHMgPSBmcmFtZVZpZXct
Pmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVT
bmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgKmhv
cml6b250YWxTbmFwT2Zmc2V0cywgZnJhbWVWaWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworCisgICAgaWYgKGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiogdmVy
dGljYWxTbmFwT2Zmc2V0cyA9IGZyYW1lVmlldy0+dmVydGljYWxTbmFwT2Zmc2V0cygpKQorICAg
ICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsICp2ZXJ0aWNhbFNuYXBPZmZzZXRzLCBmcmFtZVZpZXctPmZy
YW1lKCkuZG9jdW1lbnQoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisjZW5kaWYKKwogICAgIFNj
cm9sbGFibGVBcmVhUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJzOwogICAgIHNjcm9sbFBhcmFt
ZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPmhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KCk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpOwpAQCAtMzk5
LDYgKzQyMiwxMCBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQgbm9kZQogICAgICAgICBub2RlLT5zZXRU
b3RhbENvbnRlbnRzU2l6ZShzY3JvbGxpbmdHZW9tZXRyeS0+Y29udGVudFNpemUpOwogICAgICAg
ICBub2RlLT5zZXRSZWFjaGFibGVDb250ZW50c1NpemUoc2Nyb2xsaW5nR2VvbWV0cnktPnJlYWNo
YWJsZUNvbnRlbnRTaXplKTsKICAgICAgICAgbm9kZS0+c2V0U2Nyb2xsYWJsZUFyZWFTaXplKHNj
cm9sbGluZ0dlb21ldHJ5LT5zY3JvbGxhYmxlQXJlYVNpemUpOworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgICAgIHNldFN0YXRlU2Nyb2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9h
dCgqbm9kZSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdHZW9tZXRyeS0+
aG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBzY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgICAgICBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxv
YXQoKm5vZGUsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGluZ0dlb21ldHJ5LT52
ZXJ0aWNhbFNuYXBPZmZzZXRzLCBzY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRldmljZVNjYWxlRmFj
dG9yKCkpOworI2VuZGlmCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAppbmRleCBmMDEzM2ZkZDA0
MGZkMjNmYzA4OTg3ZTk0NjZmNjE0MmUwMDQyYmIxLi4yODA1ZDllZWExYWJjNTNhZWY1MDYxNTMx
ZTM0NmE1MzQ2MTFjZjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKQEAgLTQzLDE0ICs0MywyMiBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRDaGlsZFNuYXBPZmZzZXRzKEhUTUxFbGVtZW50JiBwYXJlbnQsIGJvb2wg
c2hvdWxkQWRkSG9yaXpvbnRhbAogICAgICAgICBpZiAoUmVuZGVyQm94KiBib3ggPSBjaGlsZC0+
cmVuZGVyQm94KCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gYm94LT53
aWR0aCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gYm94LT5oZWlnaHQo
KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBiZWhhdmlvciB3aXRoIENTUyByb3RhdGlv
bnMuCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLy8gRklYTUU6IEludmVzdGlnYXRl
IHdoeSB1c2luZyBsb2NhbFRvQ29udGFpbmVyUG9pbnQgZ2l2ZXMgdGhlIHdyb25nIG9mZnNldHMg
Zm9yIGlPUyBtYWluZnJhbWUuIEFsc28sIHRoZXNlIG9mZnNldHMgd29uJ3QgdGFrZSB0cmFuc2Zv
cm1zIGludG8gYWNjb3VudCAobWFrZSBzdXJlIHRvIHRlc3QgdGhpcyEpCisgICAgICAgICAgICBm
bG9hdCBsZWZ0ID0gY2hpbGQtPm9mZnNldExlZnQoKTsKKyAgICAgICAgICAgIGZsb2F0IHRvcCA9
IGNoaWxkLT5vZmZzZXRUb3AoKTsKKyNlbHNlCisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sg
dGhhdCBsb2NhbFRvQ29udGFpbmVyUG9pbnQgd29ya3Mgd2l0aCBDU1Mgcm90YXRpb25zLgogICAg
ICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGJveC0+bG9jYWxUb0NvbnRhaW5lclBvaW50
KEZsb2F0UG9pbnQoKSwgcGFyZW50LnJlbmRlckJveCgpKTsKKyAgICAgICAgICAgIGZsb2F0IGxl
ZnQgPSBwb3NpdGlvbi54KCk7CisgICAgICAgICAgICBmbG9hdCB0b3AgPSBwb3NpdGlvbi55KCk7
CisjZW5kaWYKICAgICAgICAgICAgIGZvciAoU25hcENvb3JkaW5hdGUgY29vcmRpbmF0ZSA6IGJv
eC0+c3R5bGUoKS5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKSkgewotICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPSBMYXlvdXRVbml0KHBvc2l0aW9u
LngoKSkgKyB2YWx1ZUZvckxlbmd0aChjb29yZGluYXRlLmZpcnN0LCB2aWV3V2lkdGgpOworICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPSBMYXlv
dXRVbml0KGxlZnQpICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5maXJzdCwgdmlld1dpZHRo
KTsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0cyAm
JiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWCA+IDApCiAgICAgICAgICAgICAgICAgICAgIGhv
cml6b250YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UuYXBwZW5kKGxhc3RQb3RlbnRpYWxTbmFwUG9z
aXRpb25YKTsKIAotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQ
b3NpdGlvblkgPSBMYXlvdXRVbml0KHBvc2l0aW9uLnkoKSkgKyB2YWx1ZUZvckxlbmd0aChjb29y
ZGluYXRlLnNlY29uZCwgdmlld0hlaWdodCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBs
YXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA9IExheW91dFVuaXQodG9wKSArIHZhbHVlRm9yTGVu
Z3RoKGNvb3JkaW5hdGUuc2Vjb25kLCB2aWV3SGVpZ2h0KTsKICAgICAgICAgICAgICAgICBpZiAo
c2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMgJiYgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlv
blkgPiAwKQogICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNuYXBPZmZzZXRTdWJzZXF1ZW5j
ZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblkpOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZz
ZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaAppbmRleCA1MjE3ZDFmNzFhMTlmNzRmMjk1YmFiNWZmOGVkZDJmNjE2YzkzN2NlLi43MWVk
ODg2ZWRjOTlhY2Q1YmU0NDViOTc0Y2JkMzZkNmQxMTM1Y2I3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaApAQCAtNDEs
OCArNDEsMTEgQEAgY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAKIHZvaWQgdXBkYXRlU25hcE9mZnNl
dHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYsIEhUTUxFbGVtZW50JiBzY3JvbGxp
bmdFbGVtZW50LCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJl
bmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUpOwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLVQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPFQ+JiBzbmFwT2Zmc2V0cywgVCBz
Y3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkpCisvLyBjbG9zZXN0U25hcE9mZnNldCBp
cyBhIHRlbXBsYXRlZCBmdW5jdGlvbiB0aGF0IHRha2VzIGluIGEgVmVjdG9yIHJlcHJlc2VudGlu
ZyBzbmFwIG9mZnNldHMgYXMgTGF5b3V0VHlwZXMgKGUuZy4gTGF5b3V0VW5pdCBvciBmbG9hdCkg
YW5kCisvLyBhcyB3ZWxsIGFzIGEgVmVsb2NpdHlUeXBlIGluZGljYXRpbmcgdGhlIHZlbG9jaXR5
IChlLmcuIGZsb2F0LCBDR0Zsb2F0LCBldGMuKSBUaGlzIGZ1bmN0aW9uIGlzIHRlbXBsYXRlZCBi
ZWNhdXNlIHRoZSBVSSBwcm9jZXNzIHdpbGwgbm93CisvLyB1c2UgcGl4ZWwgc25hcHBlZCBmbG9h
dHMgdG8gcmVwcmVzZW50IHNuYXAgb2Zmc2V0cyByYXRoZXIgdGhhbiBMYXlvdXRVbml0cy4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlLCB0eXBlbmFtZSBWZWxvY2l0eVR5cGU+CitMYXlv
dXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25hcE9m
ZnNldHMsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb24sIFZlbG9jaXR5VHlwZSB2ZWxvY2l0
eSkKIHsKICAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKICAgICBpZiAoc2Nyb2xsRGVz
dGluYXRpb24gPD0gc25hcE9mZnNldHMuZmlyc3QoKSkKQEAgLTY1LDggKzY4LDggQEAgVCBjbG9z
ZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8VD4mIHNuYXBPZmZzZXRzLCBUIHNjcm9sbERlc3Rp
bmF0aW9uLCBmbG9hdCB2ZWwKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQot
ICAgIFQgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKLSAgICBU
IHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07CisgICAgTGF5b3V0
VHlwZSBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdOworICAgIExh
eW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4XTsKICAg
ICAvLyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYg
YW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25hcCB0byB0aGUgb25lIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCiAgICAgaWYgKHZlbG9jaXR5KQogICAgICAgICBy
ZXR1cm4gdmVsb2NpdHkgPCAwID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5oCmluZGV4IGU1NWIxZWI3Y2Q2NGVmN2Y0M2E0NWRjZjcxZDdiNTczZGYzZjkxZmIu
LmMwZDhlNzNiZTMwODE1ZmEwMjg2ZjJiYzUyZjhiMmM3MWUzNjA0NTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAt
NDMsNiArNDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVuc2lnbmVkIFN5
bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29uczsKQEAgLTE2NCw2ICsxNjgsMTAgQEAgcHVibGljOgog
ICAgICAgICBGbG9hdFNpemUgcmVhY2hhYmxlQ29udGVudFNpemU7IC8vIFNtYWxsZXIgdGhhbiBj
b250ZW50U2l6ZSB3aGVuIG92ZXJmbG93IGlzIGhpZGRlbiBvbiBvbmUgYXhpcy4KICAgICAgICAg
RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbjsKICAgICAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2lu
OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIFZlY3RvcjxMYXlvdXRVbml0
PiBob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgICAgIFZlY3RvcjxMYXlvdXRVbml0PiB2ZXJ0
aWNhbFNuYXBPZmZzZXRzOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVGcmFtZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nTm9kZUlELCBHcmFwaGljc0xheWVyKiAvKnNj
cm9sbExheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8qc2Nyb2xsZWRDb250ZW50c0xheWVyKi8sIEdy
YXBoaWNzTGF5ZXIqIC8qY291bnRlclNjcm9sbGluZ0xheWVyKi8sIEdyYXBoaWNzTGF5ZXIqIC8q
aW5zZXRDbGlwTGF5ZXIqLywgY29uc3QgU2Nyb2xsaW5nR2VvbWV0cnkqID0gbnVsbHB0cikgeyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBkOTMzNzRlOGM3MzgyZWIxYTAyNDRkYWEy
ZGU0ZDNhZTA5YTE4MDZjLi5lMWFmNDEyZWFmYjc1MDQwOTgyMWEzY2NhYzc1NmYyOGQ1NWE2MTYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAKQEAgLTQ4LDYgKzQ4LDEwIEBAIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKGNvbnN0IFNj
cm9sbGluZ1N0YXRlU2NyCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKHN0YXRlTm9kZS5zY3JvbGxQ
b3NpdGlvbigpKQogICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUucmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oKSkKICAgICAsIG1fc2Nyb2xsT3JpZ2luKHN0YXRlTm9kZS5z
Y3JvbGxPcmlnaW4oKSkKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICwgbV9ob3Jp
em9udGFsU25hcE9mZnNldHMoc3RhdGVOb2RlLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQorICAg
ICwgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzKHN0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkp
CisjZW5kaWYKICAgICAsIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzKHN0YXRlTm9kZS5zY3Jv
bGxhYmxlQXJlYVBhcmFtZXRlcnMoKSkKICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25S
ZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoKSkKIHsKQEAgLTEwMiw2ICsxMDYsMjYg
QEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbE9yaWdpbihjb25z
dCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQogICAgIHNldFByb3BlcnR5Q2hhbmdlZChTY3JvbGxP
cmlnaW4pOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29uc3QgVmVjdG9y
PGZsb2F0PiYgc25hcE9mZnNldHMpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNuYXBPZmZzZXRz
ID09IHNuYXBPZmZzZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hvcml6b250YWxTbmFw
T2Zmc2V0cyA9IHNuYXBPZmZzZXRzOworICAgIHNldFByb3BlcnR5Q2hhbmdlZChIb3Jpem9udGFs
U25hcE9mZnNldHMpOworfQorCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0
VmVydGljYWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cykKK3sK
KyAgICBpZiAobV92ZXJ0aWNhbFNuYXBPZmZzZXRzID09IHNuYXBPZmZzZXRzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3ZlcnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKKyAgICBz
ZXRQcm9wZXJ0eUNoYW5nZWQoVmVydGljYWxTbmFwT2Zmc2V0cyk7Cit9CisjZW5kaWYKKwogdm9p
ZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGFibGVBcmVhUGFyYW1ldGVy
cyhjb25zdCBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzID09IHBhcmFtZXRlcnMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oCmluZGV4IDlmMmQwYTljZjk5YzFlZjliZmYxMDcwMDJlM2VhNzNjMDhlZjA3MDUuLmVi
OWNkOWIyZjhlYWYzYjYwMWRlMDEyNjJkOWUyOTIzODVkODU0MDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oCkBAIC00OCw2ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFNjcm9sbGFibGVBcmVh
UGFyYW1zLAogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiwKICAgICAgICAgTnVtU2Ny
b2xsaW5nU3RhdGVOb2RlQml0cywKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAg
ICBIb3Jpem9udGFsU25hcE9mZnNldHMsCisgICAgICAgIFZlcnRpY2FsU25hcE9mZnNldHMsCisj
ZW5kaWYKICAgICB9OwogCiAgICAgY29uc3QgRmxvYXRTaXplJiBzY3JvbGxhYmxlQXJlYVNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhU2l6ZTsgfQpAQCAtNjUsNiArNjksMTQg
QEAgcHVibGljOgogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbE9yaWdpbjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IElu
dFBvaW50Jik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpv
bnRhbFNuYXBPZmZzZXRzOyB9CisgICAgdm9pZCBzZXRIb3Jpem9udGFsU25hcE9mZnNldHMoY29u
c3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWxT
bmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTbmFwT2Zmc2V0czsgfQorICAg
IHZvaWQgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisjZW5k
aWYKKwogICAgIGNvbnN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyYgc2Nyb2xsYWJsZUFyZWFQ
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7IH0K
ICAgICB2b2lkIHNldFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycyhjb25zdCBTY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnMmIHBhcmFtcyk7CiAKQEAgLTg1LDYgKzk3LDEwIEBAIHByaXZhdGU6CiAgICAg
RmxvYXRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9yZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdpbjsKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgIFZlY3RvcjxmbG9hdD4gbV9ob3Jpem9udGFsU25hcE9mZnNl
dHM7CisgICAgVmVjdG9yPGZsb2F0PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CisjZW5kaWYKICAg
ICBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMgbV9zY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7CiAg
ICAgYm9vbCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Nj
cm9sbDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKaW5kZXggMTJjMzBhNTBmY2MwYWM2YWI5
YjUwNDRlOTg2NDA1M2Q2NWVjZmQ3My4uMjk2MjM3M2ZmZDU2YmZmYzZkMjZjYTY0MWIxYzE3YjIw
OTc0MTI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtNjcsNiArNjcsMTQgQEAgdm9p
ZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3Qg
U2Nyb2xsaW5nU3RhdGVOb2RlJgogICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQogICAgICAgICBtX3Njcm9s
bE9yaWdpbiA9IHN0YXRlLnNjcm9sbE9yaWdpbigpOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKKyAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgbV9ob3Jpem9udGFs
U25hcE9mZnNldHMgPSBzdGF0ZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKTsKKworICAgIGlmIChz
dGF0ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0
aWNhbFNuYXBPZmZzZXRzKSkKKyAgICAgICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0gc3RhdGUu
dmVydGljYWxTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJh
bXMpKQogICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycyA9IHN0YXRlLnNjcm9sbGFi
bGVBcmVhUGFyYW1ldGVycygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKaW5kZXggZDViZTlhMDRm
MGVhZTBkODJkYzA3MDgxZTY5YWRhNTI2N2IyNjY2ZC4uN2FhYTk2ZWQyYjNhMGNhYTA5ZjFiNTM1
MDg2MDE3N2NjZGUzMTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCkBAIC01Nyw2ICs1NywxMSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25z
dCA9IDA7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGhvcml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bFNuYXBPZmZzZXRzOyB9CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWxTbmFwT2Zm
c2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTbmFwT2Zmc2V0czsgfQorI2VuZGlmCisK
IHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdUcmVl
JiwgU2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCk7CiAKQEAgLTkyLDcgKzk3LDEw
IEBAIHByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fcmVhY2hhYmxlQ29udGVudHNTaXplOwogICAg
IEZsb2F0UG9pbnQgbV9sYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb247CiAgICAgSW50UG9pbnQg
bV9zY3JvbGxPcmlnaW47Ci0gICAgCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAgIFZlY3RvcjxmbG9hdD4g
bV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworI2VuZGlmCiAgICAgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0
ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQppbmRleCBlODZk
NGY5MmU4NWU2MzRhOTY1NWYxNTNkZTM3MGFlN2VlZWFkZDkwLi5iZGQyNDg3Y2UzMmQ1MDE1MWEx
OTMxNmZjNTJjZTljMTk3NGZmMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQpAQCAtMTY5LDcgKzE2OSw3IEBAIHZv
aWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9s
bFNuYXBTdGF0ZSBuZXdTdGF0ZSkKICAgICBMYXlvdXRVbml0IHByb2plY3RlZFNjcm9sbERlc3Rp
bmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gbV9iZWdpblRy
YWNraW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQocHJvamVjdGVkSW5lcnRpYWxTY3Jv
bGxEaXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zmc2V0OwogICAgIHByb2plY3RlZFNj
cm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocHJvamVjdGVkU2Nyb2xsRGVzdGlu
YXRpb24sIG1fc25hcE9mZnNldHMtPmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLT5sYXN0KCkpOwog
ICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKLSAgICBtX3RhcmdldE9mZnNldCA9IGNsb3Nl
c3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gY2xv
c2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0
ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOwogICAgIGlmIChtX2luaXRp
YWxPZmZzZXQgPT0gbV90YXJnZXRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDY2ZGExM2M4YmMxYzFmZjE2NjUw
MDgzM2MzMWU0MGFlMDg0MTk4MC4uZTZmMmFkODdmYmViOGIzZDU2MDg0OGYzYzlkMmU3Y2Q2NTJm
Yzc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMzA5
LDYgKzMzMDksMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCkKICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGluZyBtYXkgbmVlZCB0byBiZSBlbmFibGVk
IG9yIGRpc2FibGVkIGlmIHRoZSBhbW91bnQgb2Ygb3ZlcmZsb3cgY2hhbmdlZC4KICAgICBpZiAo
Y29tcG9zaXRvcigpLnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZSgqdGhpcykpCiAgICAgICAg
IGNvbXBvc2l0b3IoKS5zZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7CisKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRz
IGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Cisg
ICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlckxheWVyOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCmluZGV4IGFlMTc1MWIxZDRmZTcyNDE4MGY2YTljNzg2YjkzODUwMzY1YjM2ODMuLjQ0
ZWI1MTkwYzgwZGVmNjYxYWI3ODlmNTYwYzMxZWUyZDgxOTZiZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0zNzcwLDYg
KzM3NzAsMTIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3Jk
aW5hdGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBTY3IKICAgICAgICAgICAgIHNjcm9sbGlu
Z0dlb21ldHJ5LnNjcm9sbGFibGVBcmVhU2l6ZSA9IGxheWVyLnZpc2libGVTaXplKCk7CiAgICAg
ICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5jb250ZW50U2l6ZSA9IGxheWVyLmNvbnRlbnRzU2l6
ZSgpOwogICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkucmVhY2hhYmxlQ29udGVudFNpemUg
PSBsYXllci5zY3JvbGxhYmxlQ29udGVudHNTaXplKCk7CisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKKyAgICAgICAgICAgIGlmIChjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIG9mZnNldHMg
PSBsYXllci5ob3Jpem9udGFsU25hcE9mZnNldHMoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxp
bmdHZW9tZXRyeS5ob3Jpem9udGFsU25hcE9mZnNldHMgPSAqb2Zmc2V0czsKKyAgICAgICAgICAg
IGlmIChjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIG9mZnNldHMgPSBsYXllci52ZXJ0aWNhbFNu
YXBPZmZzZXRzKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkudmVydGljYWxT
bmFwT2Zmc2V0cyA9ICpvZmZzZXRzOworI2VuZGlmCiAgICAgICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+dXBkYXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlKG5vZGVJRCwgYmFja2luZy0+c2Ny
b2xsaW5nTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsaW5nQ29udGVudHNMYXllcigpLCAmc2Nyb2xs
aW5nR2VvbWV0cnkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKaW5kZXggZjYyYmI5Y2M1ODA4OWZhN2I5ODNmZDEyYjAw
NzRmMTAwNjFjN2UyZi4uN2VlMTAwNDE3ZWM3NTY1YjBiMmE0MDA4ZDY1MTViZDBmNzU3YWVjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBAIC0x
MjgsNiArMTI4LDEwIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyCiAgICAgU0NST0xMSU5HX05P
REVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNT
aXplLCByZWFjaGFibGVDb250ZW50c1NpemUpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9u
KQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbE9yaWdpbiwgc2Nyb2xsT3JpZ2luKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
SG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldHMpCisgICAgU0NST0xM
SU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFw
T2Zmc2V0cywgdmVydGljYWxTbmFwT2Zmc2V0cykKKyNlbmRpZgogICAgIFNDUk9MTElOR19OT0RF
X0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1z
LCBzY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVl
c3RlZFNjcm9sbFBvc2l0aW9uKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCkBAIC0xOTMsNiArMTk3LDEw
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyCiAgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplLCBGbG9hdFNp
emUsIHNldFJlYWNoYWJsZUNvbnRlbnRzU2l6ZSk7CiAgICAgU0NST0xMSU5HX05PREVfREVDT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24sIEZsb2F0UG9pbnQs
IHNldFNjcm9sbFBvc2l0aW9uKTsKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4sIEludFBvaW50LCBzZXRTY3JvbGxPcmln
aW4pOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgU0NST0xMSU5HX05PREVfREVD
T0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBW
ZWN0b3I8ZmxvYXQ+LCBzZXRIb3Jpem9udGFsU25hcE9mZnNldHMpOworICAgIFNDUk9MTElOR19O
T0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNl
dHMsIFZlY3RvcjxmbG9hdD4sIHNldFZlcnRpY2FsU25hcE9mZnNldHMpOworI2VuZGlmCiAgICAg
U0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
YWJsZUFyZWFQYXJhbXMsIFNjcm9sbGFibGVBcmVhUGFyYW1ldGVycywgc2V0U2Nyb2xsYWJsZUFy
ZWFQYXJhbWV0ZXJzKTsKICAgICAKICAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXgg
YmQwMTk3NzYwNzI2MzZjZjM5NzY2YTNmY2ExMDY3Y2I2ZWIxYjU3Yi4uZDY0OTJkZjBiYTc0ZDk3
YzYyNmQ2MTg4YTBjM2Y5Y2YxZWJlNWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTgzLDYgKzgzLDcgQEAKICNpbXBvcnQgIlBy
aW50SW5mby5oIgogI2ltcG9ydCAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2ltcG9ydCAiUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5oIgogI2ltcG9ydCAiV0tQREZWaWV3LmgiCiAjaW1wb3J0ICJXS1Njcm9s
bFZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCkBA
IC0xMjgyLDYgKzEyODMsMTEgQEAgc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgY29uc3RyYWlu
Q29udGVudE9mZnNldChXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmYKICAgICBpZiAoc2Ny
b2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVCZWdhbikKICAgICAgICAgW19jb250ZW50VmlldyBzY3JvbGxWaWV3V2lsbFN0YXJ0UGFu
T3JQaW5jaEdlc3R1cmVdOwogICAgIFtfY29udGVudFZpZXcgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xs
XTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorICAgIC8vIEZJWE1FOiBXZSB3aWxsIHdhbnQgdG8gZGV0ZWN0IHdoZXRoZXIgc25hcHBpbmcg
d2lsbCBvY2N1ciBiZWZvcmUgYmVnaW5uaW5nIHRvIGRyYWcuIFNlZSBXZWJQYWdlUHJveHk6OmRp
ZENvbW1pdExheWVyVHJlZS4KKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsK
KyAgICBzY3JvbGxWaWV3LmRlY2VsZXJhdGlvblJhdGUgPSAoY29vcmRpbmF0b3IgJiYgY29vcmRp
bmF0b3ItPnNob3VsZFNldFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCgpKSA/IFVJU2Ny
b2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0
ZU5vcm1hbDsKKyNlbmRpZgogfQogCiAtICh2b2lkKV9kaWRGaW5pc2hTY3JvbGxpbmcKQEAgLTEy
OTksNiArMTMwNSwxMyBAQCBzdGF0aWMgV2ViQ29yZTo6RmxvYXRQb2ludCBjb25zdHJhaW5Db250
ZW50T2Zmc2V0KFdlYkNvcmU6OkZsb2F0UG9pbnQgY29udGVudE9mZgogICAgIC8vIHpvb21pbmcu
IFdlJ2xsIGFuaW1hdGUgdG8gdGhlIHJpZ2h0IHBsYWNlIG9uY2UgdGhlIHpvb20gZmluaXNoZXMu
CiAgICAgaWYgKFtzY3JvbGxWaWV3IGlzWm9vbWluZ10pCiAgICAgICAgICp0YXJnZXRDb250ZW50
T2Zmc2V0ID0gW3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAoV2ViS2l0OjpSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxp
bmdDb29yZGluYXRvclByb3h5KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEhlcmUsIEknbSBmaW5k
aW5nIHRoZSBtYXhpbXVtIGhvcml6b250YWwvdmVydGljYWwgc2Nyb2xsIG9mZnNldHMuIFRoZXJl
J3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuCisgICAgICAgIENHU2l6ZSBtYXhT
Y3JvbGxPZmZzZXRzID0gQ0dTaXplTWFrZShzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoIC0g
c2Nyb2xsVmlldy5ib3VuZHMuc2l6ZS53aWR0aCwgc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWln
aHQgLSBzY3JvbGxWaWV3LmJvdW5kcy5zaXplLmhlaWdodCk7CisgICAgICAgIGNvb3JkaW5hdG9y
LT5hZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcobWF4U2Nyb2xsT2Zmc2V0cywg
dmVsb2NpdHksIHRhcmdldENvbnRlbnRPZmZzZXQpOworICAgIH0KKyNlbmRpZgogfQogCiAtICh2
b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3
aWxsRGVjZWxlcmF0ZTooQk9PTClkZWNlbGVyYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oCmluZGV4IDQwZDI4MzExNmZlZTQ0NzJmOTJjMjMwNTI0NjljNWFkZTc5NGIw
YWIuLjA4MThkYWY0Y2JkZTg2OTljNTBlMzE2ZTUyNjU5NDNiNzJkNTU0MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCkBAIC04NCwxMCArODQsMTggQEAgcHVibGlj
OgogICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCk7CiAgICAg
dm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgpOwogICAgIHZvaWQgc2Nyb2xs
aW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIHZvaWQgYWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhT
Y3JvbGxEaW1lbnNpb25zLCBDR1BvaW50IHZlbG9jaXR5LCBDR1BvaW50KiB0YXJnZXRDb250ZW50
T2Zmc2V0KSBjb25zdDsKKyAgICBib29sIHNob3VsZFNldFNjcm9sbFZpZXdEZWNlbGVyYXRpb25S
YXRlRmFzdCgpIGNvbnN0OworI2VuZGlmCiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICB2b2lkIGNv
bm5lY3RTdGF0ZU5vZGVMYXllcnMoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlJiwgY29uc3Qg
UmVtb3RlTGF5ZXJUcmVlSG9zdCYpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
Ym9vbCBzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50
QXhpcykgY29uc3Q7CisgICAgZmxvYXQgY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3Jv
bGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwg
ZmxvYXQgdmVsb2NpdHkpIGNvbnN0OworI2VuZGlmCiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2Vi
UGFnZVByb3h5OwogICAgIFJlZlB0cjxSZW1vdGVTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1Ry
ZWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUy5tbQppbmRleCBlYjBhY2NhOTQ5ZTdhNjJiODY2N2EwODU3OTZiM2M2ZDNlZDE4ZTE3Li4w
ODA3YzBjMGI4NWM1Y2JkYTUyYWJmZWRhYzAyYjlhMWZlODA2YTU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TY3JvbGxp
bmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0KQEAgLTM3LDYg
KzM3LDEwIEBACiAjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KICNpbXBvcnQgPHd0Zi9U
ZW1wb3JhcnlDaGFuZ2UuaD4KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW1wb3J0
IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBAaW50ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUg
OiBOU09iamVjdCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IHsKQEAgLTczLDYgKzc3LDE2IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+b3ZlcmZsb3dT
Y3JvbGxXaWxsU3RhcnQoKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCistICh2
b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcg
d2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0
IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0Cit7CisgICAgaWYgKCFfc2Nyb2xsaW5nVHJl
ZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Ny
b2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCB0YXJnZXRDb250ZW50T2Zm
c2V0LT54LCB2ZWxvY2l0eS54KTsKKyAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+
eSA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUt
PnZlcnRpY2FsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2NpdHku
eSk7Cit9CisjZW5kaWYKKwogLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Ny
b2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2lsbERlY2VsZXJhdGUK
IHsKICAgICBpZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxlcmF0ZSkgewpAQCAt
MTg4LDcgKzIwMiwxMiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nUwogCiAgICAgICAgICAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKICAgICAgICAgfQotICAgICAgICAgICAg
CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhNRTogSWYgb25s
eSBvbmUgYXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVj
ZWxlcmF0ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25h
cE9mZnNldHMpKQorICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gaG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXpl
KCkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2Vs
ZXJhdGlvblJhdGVOb3JtYWw7CisjZW5kaWYKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQppbmRleCBk
NTQ5ZDRhNjk5MmNjOTUyNTUxMzgyNTFmNWIzM2NlNzY1MDc4MTRmLi4wYmNmOWZlNDM0MmY5N2Zk
ZTIxZTBiNjQ0N2UxMWVhNDI2MWUwOTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
SU9TLm1tCkBAIC0yMywxOSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eS5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAKICNpZiBQTEFURk9STShJT1MpCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAotI2luY2x1ZGUgIkxheWVyUmVwcmVzZW50YXRpb24u
aCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05v
ZGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlVHJlZS5oPgotI2luY2x1ZGUg
PFVJS2l0L1VJVmlldy5oPgorI2ltcG9ydCAiTGF5ZXJSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0IDxVSUtpdC9VSVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxv
d1Njcm9sbGluZ05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+
CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVHlwZXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgorI2VuZGlmCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xMDYsNiArMTEyLDQ3IEBAIHZvaWQgUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3Jv
bGwoKQogICAgIG1fd2ViUGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xsRGlkRW5kU2Nyb2xsKCk7CiB9
CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5OjphZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcoQ0dTaXpl
IG1heFNjcm9sbE9mZnNldHMsIENHUG9pbnQgdmVsb2NpdHksIENHUG9pbnQqIHRhcmdldENvbnRl
bnRPZmZzZXQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIG1heFNj
cm9sbE9mZnNldHMgaXMgdG8gZW5zdXJlIHRoYXQgd2Ugd29uJ3QgaW50ZXJmZXJlIHdpdGggcnVi
YmVyLWJhbmRpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGVkZ2Ugb2YgdGhlIHBhZ2UuCisgICAg
aWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsKSAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID4gMCAmJiB0YXJnZXRD
b250ZW50T2Zmc2V0LT54IDwgbWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCkgeworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNj
cm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRl
bnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54
ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMud2lkdGgsIHBvdGVudGlhbFNuYXBQ
b3NpdGlvbik7CisgICAgfQorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIGhv
dyB0aGUgdG9wIG5hdmlnYXRpb24gYmFyIGNoYW5nZXMgaW4gc2l6ZS4KKyAgICBpZiAoc2hvdWxk
U25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKSAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0
LT55IDwgbWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQpIHsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2Vi
Q29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwg
dmVsb2NpdHkueSk7CisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBzdGQ6Om1pbjxm
bG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7Cisg
ICAgfQorfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNob3VsZFNl
dFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNo
b3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KSB8fCBzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwpOworfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNob3Vs
ZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7
CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2Rl
KCk7CisgICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSkgeworICAg
ICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiByb290RnJhbWUgPSBzdGF0aWNf
Y2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9vdCk7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpIDogcm9vdEZy
YW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5z
aXplKCkgPiAwOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Ny
b2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxv
YXQgdmVsb2NpdHkpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Nj
cm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7CisgICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+aXNGcmFt
ZVNjcm9sbGluZ05vZGUoKSk7CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSog
cm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+
KHJvb3QpOworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zm
c2V0cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgcmV0dXJuIGNs
b3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBmbG9hdD4oc25hcE9mZnNldHMsIHNjcm9sbERlc3RpbmF0
aW9uLCB2ZWxvY2l0eSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>