<?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>127015</bug_id>
          
          <creation_ts>2014-01-14 15:43:13 -0800</creation_ts>
          <short_desc>Support WebSelections in WK2 on iOS</short_desc>
          <delta_ts>2014-02-21 13:51:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968073</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-14 15:43:13 -0800</bug_when>
    <thetext>This bug tracks the work required to support selections in non editable content on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968081</commentid>
    <comment_count>1</comment_count>
      <attachid>221212</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-14 16:01:00 -0800</bug_when>
    <thetext>Created attachment 221212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968088</commentid>
    <comment_count>2</comment_count>
      <attachid>221212</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-14 16:28:43 -0800</bug_when>
    <thetext>Comment on attachment 221212
Patch

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

&gt; Source/WebKit2/ChangeLog:12
&gt; +        This is the first step towards adding support for selections in
&gt; +        non editable content on iOS for WK2.
&gt; +        In particular, this patch adds the basic plumbing to decide which
&gt; +        gesture recognizers are enabled and empty stubs for the gestures
&gt; +        that we&apos;ll need to support.

I think you should add an explanation about the sequence of events, and how it differs when the assistant is up or not.
It is far from trivial, the more descriptive the better.

&gt; Source/WebKit2/Shared/PositionInformation.cpp:42
&gt; +    encoder &lt;&lt; point;
&gt; +    encoder &lt;&lt; isSameAssistedNode;
&gt; +    encoder &lt;&lt; wantsHighlight;
&gt; +    encoder &lt;&lt; clickableElementName;
&gt; +    encoder &lt;&lt; url;
&gt; +    encoder &lt;&lt; selectionRects;

I believe you can just use the SimpleArgumentCoder to encode/decode here.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:168
&gt; +    PositionInformation _positionInfo;
&gt; +    BOOL _hasValidPositionInfo;

Let&apos;s not shorten the name.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:225
&gt; +    [_doubleTapGestureRecognizer.get() setDelegate:nil];
&gt;      [_highlightLongPressGestureRecognizer.get() setDelegate:nil];
&gt; -    [_textSelectionAssistant release];
&gt; +    [_longPressGestureRecognizer.get() setDelegate:nil];
&gt; +    [_twoFingerPanGestureRecognizer.get() setDelegate:nil];

I believe you can remove the .get() now.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:380
&gt; +    // don&apos;t allow the highlight to be prevented by a selection gesture. press-and-hold on a link should highlight the link, not select it

Missing uppercase and period to form sentences.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:389
&gt; +#define IS_SAME_PAIR(a,b,x,y) ((((a) == (x)) &amp;&amp; ((b) == (y))) || (((b) == (x)) &amp;&amp; ((a) == (y))))

Let&apos;s use a static inline function instead of a Macro, that way we get type checking.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:419
&gt; +    if (_positionInfo.clickableElementName == String(&quot;IMG&quot;))
&gt; +        return @selector(_showImageSheet);
&gt; +    else if (_positionInfo.clickableElementName == String(&quot;A&quot;))

String -&gt; ASCIILiteral.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:437
&gt; +            // If the assisted node is the same return NO.

&quot;return NO&quot; -&gt; &quot;, prevent the default gesture from starting.&quot;

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:438
&gt; +            _page-&gt;getPositionInformation(IntPoint(point), _positionInfo);

I would prefer roundedIntPoint(point).

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:449
&gt; +            // Return NO is there is no node.
&gt; +            // Return YES if it is a node that wants highlight or if there is an action for it.

I think instead of Return NO/YES, you should say the desired action. The reader can see the return value bellow but it is hard to know why you are preventing the gesture from starting.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:459
&gt; +            _page-&gt;requestPositionInformation(IntPoint(point));

I would prefer roundedIntPoint(point).

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:471
&gt; +        if (!_hasValidPositionInfo) {
&gt; +            _page-&gt;getPositionInformation(IntPoint(point), _positionInfo);
&gt; +            _hasValidPositionInfo = YES;
&gt; +        }

Use ensurePositionInfoIsUpToDate instead?

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:485
&gt; +        // FIXME: Add implementation

notImplemented().

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:509
&gt; +    return _positionInfo.clickableElementName != String(&quot;img&quot;) &amp;&amp; _positionInfo.clickableElementName != String(&quot;a&quot;) &amp;&amp; !_positionInfo.selectionRects.isEmpty();

String -&gt; ASCIILiteral.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:553
&gt; +        case UIGestureRecognizerStateBegan:
&gt; +            // FIXME: add implementation
&gt; +            break;
&gt; +        case UIGestureRecognizerStateEnded:
&gt; +            // FIXME: add implementation
&gt; +            break;
&gt; +        case UIGestureRecognizerStateCancelled:
&gt; +            // FIXME: add implementation
&gt; +            break;
&gt; +        default:
&gt; +            break;

Indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968136</commentid>
    <comment_count>3</comment_count>
      <attachid>221212</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-14 18:24:41 -0800</bug_when>
    <thetext>Comment on attachment 221212
Patch

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

&gt; Source/WebKit2/Shared/PositionInformation.h:37
&gt; +struct PositionInformation {

This name seems a bit generic to me.

&gt; Source/WebKit2/Shared/PositionInformation.h:45
&gt; +    bool isSameAssistedNode;

Is same as what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968442</commentid>
    <comment_count>4</comment_count>
      <attachid>221300</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-15 13:00:41 -0800</bug_when>
    <thetext>Created attachment 221300
Patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968484</commentid>
    <comment_count>5</comment_count>
      <attachid>221300</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-15 15:05:17 -0800</bug_when>
    <thetext>Comment on attachment 221300
Patch2

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

&gt; Source/WebKit2/ChangeLog:4
&gt; +        Support WebSelections in WK2 on iOS.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=127015

Awesome changelog!

&gt; Source/WebKit2/ChangeLog:11
&gt; +        gesture recognizers are enabled and empty stubs for the gestures

and add empty stubs?

&gt; Source/WebKit2/ChangeLog:37
&gt; +            We are then able tp make an informed decision about whether

Typo: tp -&gt; to

&gt; Source/WebKit2/Shared/PositionInformation.h:37
&gt; +struct PositionInformation {

InteractionInformationAtPosition maybe?

&gt; Source/WebKit2/Shared/PositionInformation.h:40
&gt; +        , wantsHighlight(true)

Shouldn&apos;t this be false by default?

Is it still needed?

&gt; Source/WebKit2/Shared/PositionInformation.h:44
&gt; +    WebCore::IntPoint point;

Maybe we should pass a floating point and round in the WebProcess?
I have the dream some day we will handle input on floating points position :)

(Not important for landing this).

&gt; Source/WebKit2/Shared/PositionInformation.h:45
&gt; +    bool isSameAssistedNode;

Maybe &quot;nodeAtPositionIsSameAssistedNode&quot;

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:39
&gt; +#import &lt;UIKit/UIGestureRecognizer_Private.h&gt;
&gt;  #import &lt;UIKit/UIFont_Private.h&gt;

Include order.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:424
&gt; +    if (_positionInformation.clickableElementName == String(ASCIILiteral(&quot;IMG&quot;)))
&gt; +        return @selector(_showImageSheet);
&gt; +    else if (_positionInformation.clickableElementName == String(ASCIILiteral(&quot;A&quot;)))
&gt; +        return @selector(_showLinkSheet);

Did you need the String() with ASCIILiteral()? If so, I should fix operator==.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:817
&gt; +        const HTMLElement* element = toHTMLElement(hitNode);
&gt; +        if (!element)

Is this right? IIRC, toHTMLElement will just static_cast. On the other hand, hitNode is already check for nullity above, and could be a SVN element.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:834
&gt; +        if (element-&gt;hasLocalName(HTMLNames::appletTag) || element-&gt;hasLocalName(HTMLNames::embedTag) || element-&gt;hasLocalName(HTMLNames::objectTag))
&gt; +            info.wantsHighlight = false;
&gt; +        else if (element-&gt;renderer() &amp;&amp; element-&gt;renderer()-&gt;isImage()) {
&gt; +            URL url = toRenderImage(element-&gt;renderer())-&gt;cachedImage()-&gt;url();
&gt; +            if (!url.string().isNull()) {
&gt; +                info.wantsHighlight = true;
&gt; +                info.url = url.string();
&gt; +            }
&gt; +        } else if (element-&gt;isLink()) {
&gt; +            info.wantsHighlight = true;
&gt; +            info.url = element-&gt;getAttribute(HTMLNames::hrefAttr).string();
&gt; +        } else if (isHTMLSelectElement(hitNode))
&gt; +            info.wantsHighlight = true;
&gt; +        else
&gt; +            info.wantsHighlight = hitNode-&gt;isContentEditable();

Why not set wantsHighlight to yet in all of those cases?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:853
&gt; +

You can remove the empty line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968524</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-15 16:49:18 -0800</bug_when>
    <thetext>Part one landed 162103.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969151</commentid>
    <comment_count>7</comment_count>
      <attachid>221474</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-17 09:24:49 -0800</bug_when>
    <thetext>Created attachment 221474
Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969152</commentid>
    <comment_count>8</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-17 09:30:08 -0800</bug_when>
    <thetext>Landed build fix 162204.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970421</commentid>
    <comment_count>9</comment_count>
      <attachid>221787</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-21 14:25:54 -0800</bug_when>
    <thetext>Created attachment 221787
Patch3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970965</commentid>
    <comment_count>10</comment_count>
      <attachid>221787</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-22 18:08:03 -0800</bug_when>
    <thetext>Comment on attachment 221787
Patch3

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

&gt; Source/WebKit2/Shared/ios/WKGestureTypes.h:57
&gt;      WKSelectionTouchEnded,
&gt;      WKSelectionTouchEndedMovingForward,
&gt;      WKSelectionTouchEndedMovingBackward,
&gt; -    WKSelectionTouchEndedNotMoving
&gt; +    WKSelectionTouchEndedNotMoving,
&gt; +    WKWebSelectionTouchStarted,
&gt; +    WKWebSelectionTouchMoved,
&gt; +    WKWebSelectionTouchEnded,

What about prefixing with WKEditableContentSelection and WKNonEditableContentSelection?

The UIKit names we use are pretty bad.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:712
&gt; +    BOOL hasWebSelection = _webSelectionAssistant != nil &amp;&amp; !CGRectIsEmpty(_webSelectionAssistant.get().selectionFrame);

_webSelectionAssistant != nil -&gt; _webSelectionAssistant or !!_webSelectionAssistant

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:386
&gt; +    IntPoint constrainedPoint = (m_assistedNode) ? constrainPoint(point, &amp;frame, m_assistedNode.get()) : point;

No need for the parenthesis around m_assistedNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970979</commentid>
    <comment_count>11</comment_count>
      <attachid>221933</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-22 18:26:51 -0800</bug_when>
    <thetext>Created attachment 221933
Patch4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979173</commentid>
    <comment_count>12</comment_count>
      <attachid>223781</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-10 18:01:28 -0800</bug_when>
    <thetext>Created attachment 223781
block selection part1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979218</commentid>
    <comment_count>13</comment_count>
      <attachid>223781</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-10 19:39:52 -0800</bug_when>
    <thetext>Comment on attachment 223781
block selection part1

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

&gt; Source/WebKit2/Shared/ios/WKGestureTypes.h:77
&gt; +typedef enum {
&gt; +    WKNone = 0,
&gt; +    WKWordIsNearTap = 1,
&gt; +    WKIsBlockSelection = 2
&gt; +} WKSelectionFlags;
&gt; +

If this is only used by Objective-C++ and C++, you could use a typed enum instead.

If those values are exclusive, I would use the name SelectionType instead of SelectionFlags.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:1077
&gt; +    {

The bracket should be on the previous line.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:1068
&gt; +    const int blockSelectionStartWidth = 100;
&gt; +    const int blockSelectionStartHeight = 100;

Does this have to be defined on the header? Could it be moved to the implementation?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:430
&gt; +        if (!range)
&gt; +            return range;

I would use &quot;return nullptr&quot;. The code might be a little misleading otherwise.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:438
&gt; +            if (boundingRect.isEmpty())

You could use instead &quot;i == 0&quot;, which can be optimized by the compiler.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:443
&gt; +        if (boundingRect.width() &gt; m_blockSelectionDesiredSize.width() &amp;&amp; boundingRect.height() &gt; m_blockSelectionDesiredSize.height())

The same condition is repeated bellow. I think a nice little static inline function naming this would be good.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:450
&gt; +    if (!currentNode-&gt;isElementNode())
&gt; +        currentNode = currentNode-&gt;parentElement();

Now this is confusing me.
If we had a text node above, we now take its parent element? Is there a missing return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979219</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-10 19:40:39 -0800</bug_when>
    <thetext>This looks sane to me. Maybe Ryosuke should double check the selection code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979260</commentid>
    <comment_count>15</comment_count>
      <attachid>223781</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-10 21:58:52 -0800</bug_when>
    <thetext>Comment on attachment 223781
block selection part1

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

&gt;&gt; Source/WebKit2/Shared/ios/WKGestureTypes.h:77
&gt;&gt; +
&gt; 
&gt; If this is only used by Objective-C++ and C++, you could use a typed enum instead.
&gt; 
&gt; If those values are exclusive, I would use the name SelectionType instead of SelectionFlags.

For now they are, but the idea was that when adding more they could be combined. All the other enums in this file are not. I&apos;ll change them all at once in another patch.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:1068
&gt;&gt; +    const int blockSelectionStartHeight = 100;
&gt; 
&gt; Does this have to be defined on the header? Could it be moved to the implementation?

I&apos;ll do that.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:450
&gt;&gt; +        currentNode = currentNode-&gt;parentElement();
&gt; 
&gt; Now this is confusing me.
&gt; If we had a text node above, we now take its parent element? Is there a missing return?

Yes, we had a text node, but it did not meet the size requirements. We are then looking for the enclosing block to see if we want to turn it into a block selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983045</commentid>
    <comment_count>16</comment_count>
      <attachid>224810</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-20 17:15:58 -0800</bug_when>
    <thetext>Created attachment 224810
block selection part2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983046</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-20 17:17:13 -0800</bug_when>
    <thetext>Attachment 224810 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:441:  The parameter name &quot;point&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:743:  The parameter name &quot;handlePosition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983068</commentid>
    <comment_count>18</comment_count>
      <attachid>224810</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-20 18:54:21 -0800</bug_when>
    <thetext>Comment on attachment 224810
block selection part2

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

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:748
&gt; +    return ((widthRatio &gt; minMagnitudeRatio &amp;&amp; xOriginShiftRatio &lt; maxDisplacementRatio) &amp;&amp;
&gt; +            (heightRatio &gt; minMagnitudeRatio &amp;&amp; yOriginShiftRatio &lt; maxDisplacementRatio));

Nit: &amp;&amp; should be at the beginning of the second line.
Also, it should be indented by 4 spaces instead of being aligned.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:758
&gt; +    return (first-&gt;commonAncestorContainer(ec)-&gt;ownerDocument() == second-&gt;commonAncestorContainer(ec)-&gt;ownerDocument() &amp;&amp;
&gt; +            first-&gt;compareBoundaryPoints(Range::START_TO_START, second, ASSERT_NO_EXCEPTION) &lt;= 0 &amp;&amp;
&gt; +            first-&gt;compareBoundaryPoints(Range::END_TO_END, second, ASSERT_NO_EXCEPTION) &gt;= 0);

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:991
&gt; +        ExceptionCode ec;
&gt; +        Node* node = currentRange-&gt;commonAncestorContainer(ec);

We should probably use ASSERT_NO_EXCEPTION here (probably always has it as the default argument).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983071</commentid>
    <comment_count>19</comment_count>
      <attachid>224810</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-20 19:02:56 -0800</bug_when>
    <thetext>Comment on attachment 224810
block selection part2

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

Quick first round.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:500
&gt; +    IntRect boundingRect;

This looks unused.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:501
&gt; +    ExceptionCode ec;

ASSERT_NO_EXCEPTION or IGNORE_EXCEPTION instead?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:629
&gt; +        if (static_cast&lt;WKGestureRecognizerState&gt;(gestureState) == WKGestureRecognizerStateEnded &amp;&amp; flags &amp; WKIsBlockSelection)

Maybe time to remove all the static_cast and do the conversion at the beginning of the function?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:721
&gt; +static const int MaxHitTests = 10;

The first letter of the constant is uppercase.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:753
&gt; +    ExceptionCode ec;

IGNORE_EXCEPTION or ASSERT_NO_EXCEPTION instead?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:793
&gt; +    static const CGFloat maxDistance = 1000;

CGFloat -&gt; float.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:836
&gt; +        BOOL better = !(rectsEssentiallyTheSame(copyRect, currentBox, .05));

BOOL -&gt; bool.

The name &quot;better&quot; does not provide enough information about the variable.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:846
&gt; +                case WKHandleTop:
&gt; +                case WKHandleBottom:
&gt; +                    better = (copyRect.height() &gt; currentBox.height());
&gt; +                    break;
&gt; +                case WKHandleRight:
&gt; +                case WKHandleLeft:
&gt; +                    better = (copyRect.width() &gt; currentBox.width());
&gt; +                    break;

Style.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:871
&gt; +        distance *= multiple;
&gt; +        distance = ceilf(distance);

distance = ceilf(distance * multiple);

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:893
&gt; +    float distance = 1;
&gt; +    RefPtr&lt;Range&gt; best;
&gt; +    IntRect bestRect;

We should reduce the declaration-use span of those variables.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:907
&gt; +    const CGFloat multiple = powf(maxDistance - 1, 1.0/(MaxHitTests - 1));

Looks like this should be In a function, it is used in two places.

CGFloat -&gt; float.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:990
&gt; +        ExceptionCode ec;

You should use IGNORE_EXCEPTION instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983236</commentid>
    <comment_count>20</comment_count>
      <attachid>224878</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-21 09:46:22 -0800</bug_when>
    <thetext>Created attachment 224878
Block selection part2

Thank you Ryosuke and Ben for the feedback. Here is the new patch that addresses your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983237</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-21 09:49:01 -0800</bug_when>
    <thetext>Attachment 224878 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:441:  The parameter name &quot;point&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:743:  The parameter name &quot;handlePosition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983239</commentid>
    <comment_count>22</comment_count>
      <attachid>224880</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-21 09:53:44 -0800</bug_when>
    <thetext>Created attachment 224880
Block selection part2

Fixes the style issue and removes the redundant exports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983303</commentid>
    <comment_count>23</comment_count>
      <attachid>224880</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-21 12:51:58 -0800</bug_when>
    <thetext>Comment on attachment 224880
Block selection part2

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:461
&gt; +    void updateBlockSelectionWithTouches(const WebCore::IntPoint, uint32_t touches, uint32_t handlePosition);

WithTouches -&gt; WithTouch?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:716
&gt; +static const int maxHitTests = 10;

If you make a single template (see comment bellow), this constant could simply be in the common function itself.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:772
&gt; +        return IntPoint(box.x() + box.width() / 2, box.y());

x + width -&gt; maxX?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:774
&gt; +        return IntPoint(box.maxX(), box.y() + box.height() / 2);

maxY

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:776
&gt; +        return IntPoint(box.x() + box.width() / 2, box.maxY());

ditto

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:778
&gt; +        return IntPoint(box.x(), box.y() + box.height() / 2);

ditto

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:791
&gt; +    RefPtr&lt;Range&gt; best;

bestRange?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:873
&gt; +PassRefPtr&lt;Range&gt; WebPage::contractedRangeFromHandle(Range* currentRange, WKHandlePosition handlePosition, WKSelectionFlags&amp; flags)

Any way to make expandedRangeFromHandle and contractedRangeFromHandle client of a single template handling the loop?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:875
&gt; +    // Shrinking with a base and extent will always give better results.  If we only have a single element,

Two spaces after the period.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:876
&gt; +    // see if we can break that down to a base and extent.  Shrinking base and extent is comparatively straightforward.

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:899
&gt; +    RefPtr&lt;Range&gt; best;

bestRange?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:987
&gt; +        if (renderer &amp;&amp; renderer-&gt;childrenInline() &amp;&amp; (renderer-&gt;isRenderBlock() &amp;&amp; toRenderBlock(renderer)-&gt;inlineElementContinuation() == nil) &amp;&amp; !renderer-&gt;isTable()) {

Instead of == nil, it should use ! on the value.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:998
&gt; +    RefPtr&lt;Range&gt; currentRange = m_currentBlockSelection ? m_currentBlockSelection.get() : frame.selection().selection().toNormalizedRange();

Why are m_currentBlockSelection and frame.selection().selection() different?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1010
&gt; +    float current, expanded, contracted;

Need update to match WebKit&apos;s style.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1105
&gt; +

Blank line.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1108
&gt; +

Empty line.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1416
&gt; +            info.bounds = hitNode-&gt;renderer()-&gt;absoluteBoundingBoxRect(true);

useTransform is the default, you could drop the argument here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983315</commentid>
    <comment_count>24</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-21 13:19:07 -0800</bug_when>
    <thetext>Thanks for the review

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:772
&gt; &gt; +        return IntPoint(box.x() + box.width() / 2, box.y());
&gt; 
&gt; x + width -&gt; maxX?
No, it is x + width/2. It is true for all the other cases you pointed out.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:873
&gt; &gt; +PassRefPtr&lt;Range&gt; WebPage::contractedRangeFromHandle(Range* currentRange, WKHandlePosition handlePosition, WKSelectionFlags&amp; flags)
&gt; 
&gt; Any way to make expandedRangeFromHandle and contractedRangeFromHandle client of a single template handling the loop?
Yes, I&apos;ll do it in another patch. I&apos;ll add a fix me.

&gt; 
&gt; Why are m_currentBlockSelection and frame.selection().selection() different?

Because once you set a range as Selection it gets normalized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983332</commentid>
    <comment_count>25</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-21 13:51:40 -0800</bug_when>
    <thetext>Committed revision 164497.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221212</attachid>
            <date>2014-01-14 16:01:00 -0800</date>
            <delta_ts>2014-01-15 13:00:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>webselection-webkit-part2.txt</filename>
            <type>text/plain</type>
            <size>45312</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjAxOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE0LTAxLTE0ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgYWRkaW5nIHN1cHBvcnQg
Zm9yIHNlbGVjdGlvbnMgaW4KKyAgICAgICAgbm9uIGVkaXRhYmxlIGNvbnRlbnQgb24gaU9TIGZv
ciBXSzIuCisgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoaXMgcGF0Y2ggYWRkcyB0aGUgYmFzaWMg
cGx1bWJpbmcgdG8gZGVjaWRlIHdoaWNoCisgICAgICAgIGdlc3R1cmUgcmVjb2duaXplcnMgYXJl
IGVuYWJsZWQgYW5kIGVtcHR5IHN0dWJzIGZvciB0aGUgZ2VzdHVyZXMKKyAgICAgICAgdGhhdCB3
ZSdsbCBuZWVkIHRvIHN1cHBvcnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2Fn
ZXMucHk6CisgICAgICAgICogU2hhcmVkL1Bvc2l0aW9uSW5mb3JtYXRpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlvbjo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
UG9zaXRpb25JbmZvcm1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UG9zaXRpb25J
bmZvcm1hdGlvbjo6UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBv
c2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9z
L1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3Bvc2l0aW9uSW5m
b3JtYXRpb25EaWRDaGFuZ2U6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250
ZW50Vmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFj
dGlvblZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmll
dy5tbToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaW5pdFdpdGhGcmFtZTpdKToKKyAg
ICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgZGVhbGxvY10pOgorICAgICAgICAoLVtXS0ludGVy
YWN0aW9uVmlldyBnZXN0dXJlUmVjb2duaXplcjpjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6ZXI6
XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGdlc3R1cmVSZWNvZ25pemVyOmNhbkJl
UHJldmVudGVkQnlHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgZ2VzdHVyZVJlY29nbml6ZXI6c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRo
R2VzdHVyZVJlY29nbml6ZXI6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9zaG93
SW1hZ2VTaGVldF0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfc2hvd0xpbmtTaGVl
dF0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfYWN0aW9uRm9yTG9uZ1ByZXNzXSk6
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGdlc3R1cmVSZWNvZ25pemVyU2hvdWxkQmVn
aW46XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGVuc3VyZVBvc2l0aW9uSW5mb0lz
VXBUb0RhdGU6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGhhc1NlbGVjdGFibGVQ
b3NpdGlvbkF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHBvaW50SXNJ
bkFzc2lzdGVkTm9kZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2xvbmdQcmVz
c1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9kb3VibGVUYXBS
ZWNvZ25pemVkOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdHdvRmluZ2VyRG91
YmxlVGFwUmVjb2duaXplZDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3R3b0Zp
bmdlclBhblJlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHVzZVNl
bGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmll
dyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgX3N0YXJ0QXNzaXN0aW5nS2V5Ym9hcmRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgX3N0b3BBc3Npc3RpbmdLZXlib2FyZF0pOgorICAgICAgICAoLVtXS1RleHRSYW5nZSBp
c0VxdWFsOl0pOgorICAgICAgICAoLVtXS1RleHRQb3NpdGlvbiBpc0VxdWFsOl0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46Cisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKToKKwog
MjAxNC0wMS0xNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE2MjAwMC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDE2MjAwNykKKysrIFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpA
QCAtMjEwLDYgKzIxMCw3IEBAIGRlZiBzdHJ1Y3Rfb3JfY2xhc3MobmFtZXNwYWNlLCB0eXBlKToK
ICAgICAgICAgJ1dlYktpdDo6UGxhdGZvcm1Qb3B1cE1lbnVEYXRhJywKICAgICAgICAgJ1dlYktp
dDo6UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJywKICAgICAgICAgJ1dlYktpdDo6UGx1Z2luUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycycsCisgICAgICAgICdXZWJLaXQ6OlBvc2l0aW9uSW5mb3Jt
YXRpb24nLAogICAgICAgICAnV2ViS2l0OjpQcmludEluZm8nLAogICAgICAgICAnV2ViS2l0OjpT
ZWN1cml0eU9yaWdpbkRhdGEnLAogICAgICAgICAnV2ViS2l0OjpTdGF0aXN0aWNzRGF0YScsCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUG9zaXRpb25JbmZvcm1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Bvc2l0aW9uSW5mb3JtYXRpb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Bvc2l0aW9uSW5mb3JtYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JbmZvcm1hdGlvbi5oIgorCisjaW5jbHVk
ZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBQb3NpdGlvbkluZm9y
bWF0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBwb2ludDsKKyAgICBlbmNvZGVyIDw8IGlzU2FtZUFzc2lzdGVkTm9kZTsK
KyAgICBlbmNvZGVyIDw8IHdhbnRzSGlnaGxpZ2h0OworICAgIGVuY29kZXIgPDwgY2xpY2thYmxl
RWxlbWVudE5hbWU7CisgICAgZW5jb2RlciA8PCB1cmw7CisgICAgZW5jb2RlciA8PCBzZWxlY3Rp
b25SZWN0czsKK30KKworYm9vbCBQb3NpdGlvbkluZm9ybWF0aW9uOjpkZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFBvc2l0aW9uSW5mb3JtYXRpb24mIHJlc3VsdCkKK3sKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wb2ludCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzU2FtZUFzc2lzdGVkTm9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LndhbnRzSGlnaGxpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuY2xpY2thYmxlRWxlbWVudE5hbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmwpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3Rpb25S
ZWN0cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorI2Vu
ZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qb3NpdGlvbkluZm9ybWF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Bvc2l0aW9uSW5mb3JtYXRp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qb3NpdGlvbkluZm9y
bWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUG9zaXRpb25JbmZvcm1hdGlvbl9oCisjZGVmaW5lIFBvc2l0aW9uSW5mb3JtYXRpb25f
aAorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFBv
aW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25SZWN0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0o
SU9TKQorc3RydWN0IFBvc2l0aW9uSW5mb3JtYXRpb24geworICAgIFBvc2l0aW9uSW5mb3JtYXRp
b24oKQorICAgICAgICA6IGlzU2FtZUFzc2lzdGVkTm9kZShmYWxzZSkKKyAgICAgICAgLCB3YW50
c0hpZ2hsaWdodCh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBw
b2ludDsKKyAgICBib29sIGlzU2FtZUFzc2lzdGVkTm9kZTsKKyAgICBib29sIHdhbnRzSGlnaGxp
Z2h0OworICAgIFN0cmluZyBjbGlja2FibGVFbGVtZW50TmFtZTsKKyAgICBTdHJpbmcgdXJsOwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKKworICAg
IHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJv
b2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgUG9zaXRpb25JbmZvcm1hdGlvbiYpOwor
fTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBQb3NpdGlvbkluZm9ybWF0aW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTYyMDA3KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQzLDYgKzI0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEFzc2lzdGluZ05v
ZGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkRpZENoYW5nZSgpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25J
bmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBQb3NpdGlvbkluZm9ybWF0aW9uJikgPSAwOwogI2Vu
ZGlmCiAKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNjIwMDcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JbmZvcm1hdGlvbi5oIgogI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
ICNpbmNsdWRlICJXS0Jhc2UuaCIKQEAgLTQ0NCw2ICs0NDUsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbFRleHQsIFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKICAgICB2b2lk
IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQoUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNv
bnRleHRDYWxsYmFjaz4pOwogICAgIHZvaWQgZ2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmlu
ZyYgY29udGV4dEJlZm9yZSwgU3RyaW5nJiBtYXJrZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4
dCwgU3RyaW5nJiBjb250ZXh0QWZ0ZXIsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxl
bmd0aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBQb3Np
dGlvbkluZm9ybWF0aW9uJik7CisgICAgdm9pZCBnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgUG9zaXRpb25JbmZvcm1hdGlvbiYpOworICAgIHZvaWQgcmVx
dWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICNlbmRp
ZgogCiAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9lZGl0b3JTdGF0ZTsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjIwMDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTMsNiArMTUzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBBdXRvY29y
cmVjdGlvbkRhdGFDYWxsYmFjayhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHMs
IFN0cmluZyBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFpdHMsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiAgICAgQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2soU3RyaW5n
IGJlZm9yZVRleHQsIFN0cmluZyBtYXJrZWRUZXh0LCBTdHJpbmcgc2VsZWN0ZWRUZXh0LCBTdHJp
bmcgYWZ0ZXJUZXh0LCB1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRf
dCBjYWxsYmFja0lEKQogICAgIEludGVycHJldEtleUV2ZW50KFdlYktpdDo6RWRpdG9yU3RhdGUg
c3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChib29sIGhhbmRsZWQpCisgICAgRGlkUmVjZWl2
ZVBvc2l0aW9uSW5mb3JtYXRpb24oV2ViS2l0OjpQb3NpdGlvbkluZm9ybWF0aW9uIGluZm9ybWF0
aW9uKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFByaW50RmluaXNoZWRDYWxsYmFj
ayhXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCB1aW50NjRfdCBjYWxsYmFja0lEKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oCShyZXZpc2lvbiAxNjIwMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEFzc2lzdGluZ05vZGUoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
aXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBQb3NpdGlvbkluZm9ybWF0aW9uJik7CiAK
ICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudElt
cGxJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDE2MjAwNykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbElPUy5oIgogCiAjaW1wb3J0
ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW1wb3J0ICJQb3NpdGlvbkluZm9ybWF0aW9u
LmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkNvbnRl
eHRNZW51UHJveHkuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKQEAgLTIwMCw3
ICsyMDEsMTIgQEAgYm9vbCBQYWdlQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoYwogewog
ICAgIHJldHVybiBbbV92aWV3IF9pbnRlcnByZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgp
IGlzQ2hhckV2ZW50OmlzQ2hhckV2ZW50XTsKIH0KLSAgICAKKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6cG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBQb3NpdGlvbkluZm9ybWF0aW9u
JiBpbmZvKQoreworICAgIFttX3ZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6aW5m
b107Cit9CisKIGJvb2wgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVj
dG9yKGNvbnN0IFN0cmluZyYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQkocmV2
aXNpb24gMTYyMDA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250
ZW50Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV0tD
b250ZW50Vmlld0ludGVybmFsLmgiCiAKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsSU9TLmgiCisj
aW1wb3J0ICJQb3NpdGlvbkluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKQEAgLTI3Nyw2ICsyNzgs
MTEgQEAgLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50IAogICAgIHJldHVy
biBbX2ludGVyYWN0aW9uVmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6dGhlRXZlbnQgaXNDaGFyRXZl
bnQ6aXNDaGFyRXZlbnRdOwogfQogCistICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hh
bmdlOihjb25zdCBQb3NpdGlvbkluZm9ybWF0aW9uJilpbmZvCit7CisgICAgW19pbnRlcmFjdGlv
blZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6aW5mb107Cit9CisKIC0gKHZvaWQp
X2RlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46KFdlYlNlY3VyaXR5
T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6KEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVlc3QKIHsKICAgICBb
W3dyYXBwZXIoX3BhZ2UtPnByb2Nlc3MoKS5jb250ZXh0KCkpIF9nZW9sb2NhdGlvblByb3ZpZGVy
XSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOnRvQVBJKCZvcmln
aW4pIGZyYW1lOnRvQVBJKCZmcmFtZSkgcmVxdWVzdDp0b0FQSSgmcGVybWlzc2lvblJlcXVlc3Qp
IHdpbmRvdzpbc2VsZiB3aW5kb3ddXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAx
NjIwMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBjbGFzcyBHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CiBjbGFzcyBMYXllclRyZWVDb250ZXh0OwogY2xh
c3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworc3RydWN0IFBvc2l0
aW9uSW5mb3JtYXRpb247CiB9CiAKIEBjbGFzcyBXZWJJT1NFdmVudDsKQEAgLTYyLDcgKzYzLDcg
QEAgY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CiAtICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZTsK
IC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7CiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDoo
V2ViSU9TRXZlbnQgKil0aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKLQor
LSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTooY29uc3QgV2ViS2l0OjpQb3Np
dGlvbkluZm9ybWF0aW9uJilpbmZvOwogLSAodm9pZClfZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25SZXF1ZXN0RnJvbU9yaWdpbjooV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpb3JpZ2luIGZy
YW1lOihXZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6KFdlYktpdDo6R2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9uUmVxdWVzdDsKIAogQGVuZApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVy
YWN0aW9uVmlldy5oCShyZXZpc2lvbiAxNjIwMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxV
SUtpdC9VSVZpZXcuaD4KICNpbXBvcnQgPFVJS2l0L1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQvVUlXS1NlbGVjdGlvbkFzc2lzdGFudC5oPgogI2lt
cG9ydCA8VUlLaXQvVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudC5oPgogI2ltcG9ydCA8d3Rm
L0ZvcndhcmQuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDYgKzQyLDcgQEAgY2xh
c3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7Citz
dHJ1Y3QgUG9zaXRpb25JbmZvcm1hdGlvbjsKIH0KIAogQGNsYXNzIFdlYklPU0V2ZW50OwpAQCAt
NTYsNCArNTgsNSBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAtICh2b2lkKV9zdG9wQXNzaXN0aW5n
Tm9kZTsKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7CiAtIChCT09MKV9pbnRlcnByZXRLZXlF
dmVudDooV2ViSU9TRXZlbnQgKil0aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVu
dDsKKy0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdlYktpdDo6
UG9zaXRpb25JbmZvcm1hdGlvbiYpaW5mbzsKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCShyZXZpc2lv
biAxNjIwMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0
aW9uVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDIwIEBACiAKICNpbXBvcnQg
Ik5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYlRvdWNoRXZlbnQu
aCIKKyNpbXBvcnQgIlBvc2l0aW9uSW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIldLQmFzZS5oIgog
I2ltcG9ydCAiV0tHZXN0dXJlVHlwZXMuaCIKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0
ICJXZWJJT1NFdmVudEZhY3RvcnkuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2lt
cG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25p
emVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJRm9udF9Qcml2YXRlLmg+CiAjaW1wb3J0
IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVRhcEdlc3R1cmVSZWNv
Z25pemVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJVGV4dEludGVyYWN0aW9uQXNzaXN0
YW50X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2ViRG9jdW1lbnRWaWV3Lmg+CiAjaW1w
b3J0IDxVSUtpdC9VSVdlYlNjcm9sbFZpZXcuaD4KICNpbXBvcnQgPFVJS2l0L19VSUhpZ2hsaWdo
dFZpZXcuaD4KICNpbXBvcnQgPFVJS2l0L19VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyLmg+CkBAIC01Miw2ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogc3RhdGljIGNvbnN0IGZsb2F0IGhpZ2hsaWdodERl
bGF5ID0gMC4xMjsKK3N0YXRpYyBjb25zdCBmbG9hdCB0YXBBbmRIb2xkRGVsYXkgID0gMC43NTsK
IAogQGludGVyZmFjZSBXS1RleHRSYW5nZSA6IFVJVGV4dFJhbmdlIHsKICAgICBDR1JlY3QgX3N0
YXJ0UmVjdDsKQEAgLTEzOCw4ICsxNDIsMTQgQEAgQGludGVyZmFjZSBXS0ludGVyYWN0aW9uVmll
dyAoUHJpdmF0ZSkKICAgICBSZXRhaW5QdHI8VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25p
emVyPiBfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyOwogICAgIFJldGFpblB0cjxVSVRhcEdl
c3R1cmVSZWNvZ25pemVyPiBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXI7CiAgICAgUmV0YWlu
UHRyPF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyPiBfaGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI+IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5Q
dHI8VUlUYXBHZXN0dXJlUmVjb2duaXplcj4gX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyOwor
ICAgIFJldGFpblB0cjxVSVRhcEdlc3R1cmVSZWNvZ25pemVyPiBfdHdvRmluZ2VyRG91YmxlVGFw
R2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFVJUGFuR2VzdHVyZVJlY29nbml6ZXI+
IF90d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplcjsKKworICAgIFJldGFpblB0cjxVSVdLVGV4
dEludGVyYWN0aW9uQXNzaXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKKyAgICBSZXRh
aW5QdHI8VUlXS1NlbGVjdGlvbkFzc2lzdGFudD4gX3dlYlNlbGVjdGlvbkFzc2lzdGFudDsKIAot
ICAgIFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKl90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
OwogICAgIFVJVGV4dElucHV0VHJhaXRzICpfdHJhaXRzOwogICAgIEJPT0wgX2NhbkJlRmlyc3RS
ZXNwb25kZXI7CiAgICAgVUlXZWJGb3JtQWNjZXNzb3J5ICpfYWNjZXNzb3J5OwpAQCAtMTU0LDYg
KzE2NCw4IEBAIEBpbnRlcmZhY2UgV0tJbnRlcmFjdGlvblZpZXcgKFByaXZhdGUpCiAgICAgQk9P
TCBfaXNUYXBIaWdobGlnaHRJRFZhbGlkOwogICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhIF9hdXRv
Y29ycmVjdGlvbkRhdGE7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWFya2VkVGV4dDsKKyAg
ICBQb3NpdGlvbkluZm9ybWF0aW9uIF9wb3NpdGlvbkluZm87CisgICAgQk9PTCBfaGFzVmFsaWRQ
b3NpdGlvbkluZm87CiB9CiAKIEBzeW50aGVzaXplIGlucHV0RGVsZWdhdGUgPSBfaW5wdXREZWxl
Z2F0ZTsKQEAgLTE3MCwxNiArMTgyLDM2IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClm
cmFtZQogICAgICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVn
YXRlOnNlbGZdOwogICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfc2luZ2xlVGFw
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwogCisgICAgICAgIF9kb3VibGVUYXBHZXN0dXJlUmVj
b2duaXplciA9IGFkb3B0TlMoW1tVSVRhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0
aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2RvdWJsZVRhcFJlY29nbml6ZWQ6KV0pOwor
ICAgICAgICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldE51bWJlck9mVGFwc1JlcXVp
cmVkOjJdOworICAgICAgICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRl
OnNlbGZdOworICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfZG91YmxlVGFwR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25p
emVyIHJlcXVpcmVPdGhlckdlc3R1cmVUb0ZhaWw6X2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKKwogICAgICAgICBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIg
PSBhZG9wdE5TKFtbX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgYWxs
b2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaGlnaGxpZ2h0TG9uZ1By
ZXNzUmVjb2duaXplZDopXSk7CiAgICAgICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCkgc2V0RGVsYXk6aGlnaGxpZ2h0RGVsYXldOwogICAgICAgICBbX2hpZ2hs
aWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOnNlbGZdOwog
ICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgICAgICAKKworICAgICAgICBfbG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBh
bGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9sb25nUHJlc3NSZWNv
Z25pemVkOildKTsKKyAgICAgICAgW19sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSBz
ZXREZWxheTp0YXBBbmRIb2xkRGVsYXldOworICAgICAgICBbX2xvbmdQcmVzc0dlc3R1cmVSZWNv
Z25pemVyLmdldCgpIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbc2VsZiBhZGRHZXN0dXJl
UmVjb2duaXplcjpfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisgICAgICAg
IF90d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVBhbkdlc3R1cmVS
ZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3R3
b0ZpbmdlclBhblJlY29nbml6ZWQ6KV0pOworICAgICAgICBbX3R3b0ZpbmdlclBhbkdlc3R1cmVS
ZWNvZ25pemVyIHNldE1pbmltdW1OdW1iZXJPZlRvdWNoZXM6Ml07CisgICAgICAgIFtfdHdvRmlu
Z2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgc2V0TWF4aW11bU51bWJlck9mVG91Y2hlczoyXTsKKyAg
ICAgICAgW190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsK
KyAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclBhbkdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpXTsKKwogICAgICAgICBbc2VsZiBzZXRVc2VySW50ZXJhY3Rpb25FbmFi
bGVkOllFU107CiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Jlc2V0U2hvd2luZ1RleHRTdHls
ZTopIG5hbWU6VUlNZW51Q29udHJvbGxlckRpZEhpZGVNZW51Tm90aWZpY2F0aW9uIG9iamVjdDpu
aWxdOwogICAgICAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKICAgICB9CiAKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IG5vdGlmaWVkIHRo
YXQgbG9hZGluZyBoYXMgY29tcGxldGVkLgorICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFu
dFdpdGhNb2RlOlVJV2ViU2VsZWN0aW9uTW9kZVdlYl07CisKICAgICByZXR1cm4gc2VsZjsKIH0K
IApAQCAtMTg3LDggKzIxOSwxMSBAQCAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBbX3RvdWNoRXZl
bnRHZXN0dXJlUmVjb2duaXplci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2RvdWJs
ZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CiAgICAgW19oaWdo
bGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwot
ICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCByZWxlYXNlXTsKKyAgICBbX2xvbmdQcmVzc0dl
c3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgW190d29GaW5nZXJQ
YW5HZXN0dXJlUmVjb2duaXplci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworCiAgICAgW19hY2Nl
c3NvcnkgcmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMzMzLDEyICszNjgs
MTIzIEBAIC0gKEJPT0wpX3JlcXVpcmVzS2V5Ym9hcmRSZXNldE9uUmVsb2FkCiAgICAgcmV0dXJu
IFlFUzsKIH0KIAorLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXpl
ciAqKXByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciBjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6
ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplcgorewor
ICAgIC8vIEEgbG9uZy1wcmVzcyBnZXN0dXJlIGNhbiBub3QgYmUgcmVjb2duaXplZCB3aGlsZSBw
YW5uaW5nLCBidXQgYSBwYW4gY2FuIGJlIHJlY29nbml6ZWQKKyAgICAvLyBkdXJpbmcgYSBsb25n
LXByZXNzIGdlc3R1cmUuCisgICAgQk9PTCBzaG91bGROb3RQcmV2ZW50UGFuR2VzdHVyZSA9IHBy
ZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIgfHwgcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplcjsKKyAgICByZXR1cm4gIShzaG91bGROb3RQcmV2ZW50UGFuR2VzdHVyZSAm
JiBbcHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpOU0NsYXNzRnJvbVN0
cmluZyhAIlVJU2Nyb2xsVmlld1Bhbkdlc3R1cmVSZWNvZ25pemVyIildKTsKK30KKworLSAoQk9P
TClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdlc3R1
cmVSZWNvZ25pemVyIGNhbkJlUHJldmVudGVkQnlHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJl
UmVjb2duaXplciAqKXByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciB7CisgICAgLy8gZG9uJ3Qg
YWxsb3cgdGhlIGhpZ2hsaWdodCB0byBiZSBwcmV2ZW50ZWQgYnkgYSBzZWxlY3Rpb24gZ2VzdHVy
ZS4gcHJlc3MtYW5kLWhvbGQgb24gYSBsaW5rIHNob3VsZCBoaWdobGlnaHQgdGhlIGxpbmssIG5v
dCBzZWxlY3QgaXQKKyAgICBpZiAoKHByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciA9PSBfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5sb3VwZUdlc3R1cmUgfHwgW193ZWJTZWxlY3Rpb25B
c3Npc3RhbnQgaXNTZWxlY3Rpb25HZXN0dXJlUmVjb2duaXplcjpwcmV2ZW50aW5nR2VzdHVyZVJl
Y29nbml6ZXJdKQorICAgICAgICAmJiAocHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgPT0gX2hp
Z2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHx8IHByZXZlbnRlZEdlc3R1cmVSZWNv
Z25pemVyID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikpIHsKKyAgICAgICAgcmV0dXJu
IE5POworICAgIH0KKworICAgIHJldHVybiBZRVM7Cit9CisKKyNkZWZpbmUgSVNfU0FNRV9QQUlS
KGEsYix4LHkpICgoKChhKSA9PSAoeCkpICYmICgoYikgPT0gKHkpKSkgfHwgKCgoYikgPT0gKHgp
KSAmJiAoKGEpID09ICh5KSkpKQorCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaXplU2ltdWx0YW5l
b3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIqKW90aGVyR2Vz
dHVyZVJlY29nbml6ZXIKK3sKKyAgICBpZiAoSVNfU0FNRV9QQUlSKGdlc3R1cmVSZWNvZ25pemVy
LCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXIsIF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikpCisgICAgICAgIHJldHVybiBZRVM7
CisKKyAgICBpZiAoSVNfU0FNRV9QQUlSKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVS
ZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIsIF93ZWJTZWxl
Y3Rpb25Bc3Npc3RhbnQuZ2V0KCkuc2VsZWN0aW9uTG9uZ1ByZXNzUmVjb2duaXplcikpCisgICAg
ICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoSVNfU0FNRV9QQUlSKGdlc3R1cmVSZWNvZ25pemVy
LCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIsIF90
ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLnNpbmdsZVRhcEdlc3R1cmUpKQorICAgICAgICBy
ZXR1cm4gWUVTOworCisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKV9zaG93SW1hZ2VTaGVl
dAoreworCit9CisKKy0gKHZvaWQpX3Nob3dMaW5rU2hlZXQKK3sKKworfQorCistIChTRUwpX2Fj
dGlvbkZvckxvbmdQcmVzcworeworICAgIGlmIChfcG9zaXRpb25JbmZvLmNsaWNrYWJsZUVsZW1l
bnROYW1lID09IFN0cmluZygiSU1HIikpCisgICAgICAgIHJldHVybiBAc2VsZWN0b3IoX3Nob3dJ
bWFnZVNoZWV0KTsKKyAgICBlbHNlIGlmIChfcG9zaXRpb25JbmZvLmNsaWNrYWJsZUVsZW1lbnRO
YW1lID09IFN0cmluZygiQSIpKQorICAgICAgICByZXR1cm4gQHNlbGVjdG9yKF9zaG93TGlua1No
ZWV0KTsKKyAgICAvLyBGSVhNRTogQWRkIGNoZWNrIGZvciBsaW5rcyBhbmQgZGF0YWRldGVjdG9y
cy4KKworICAgIHJldHVybiBuaWw7Cit9CisKIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXJTaG91
bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7Ci0gICAg
aWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7Ci0gICAgICAgIGlmIChnZXN0dXJlUmVjb2du
aXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgfHwgZ2VzdHVyZVJl
Y29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyKQotICAgICAgICAgICAgcmV0
dXJuIE5POworICAgIENHUG9pbnQgcG9pbnQgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25J
blZpZXc6c2VsZl07CisKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyCisgICAgICAgIHx8IGdlc3R1cmVSZWNvZ25pemVyID09
IF9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcgorICAgICAgICB8fCBnZXN0dXJlUmVjb2duaXpl
ciA9PSBfdHdvRmluZ2VyRG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIKKyAgICAgICAgfHwgZ2Vz
dHVyZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyKSB7CisKKyAgICAg
ICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7CisgICAgICAgICAgICAvLyBSZXF1ZXN0
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3NpdGlvbiB3aXRoIHN5bmMgbWVzc2FnZS4KKyAgICAg
ICAgICAgIC8vIElmIHRoZSBhc3Npc3RlZCBub2RlIGlzIHRoZSBzYW1lIHJldHVybiBOTy4KKyAg
ICAgICAgICAgIF9wYWdlLT5nZXRQb3NpdGlvbkluZm9ybWF0aW9uKEludFBvaW50KHBvaW50KSwg
X3Bvc2l0aW9uSW5mbyk7CisgICAgICAgICAgICBfaGFzVmFsaWRQb3NpdGlvbkluZm8gPSBZRVM7
CisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mby5pc1NhbWVBc3Npc3RlZE5vZGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGdlc3R1
cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikgewor
ICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSBkaWZmZXJlbnQgbm9kZSB0aGFuIHRoZSBhc3Npc3RlZCBvbmUuCisgICAgICAgICAg
ICAvLyBSZXR1cm4gTk8gaXMgdGhlcmUgaXMgbm8gbm9kZS4KKyAgICAgICAgICAgIC8vIFJldHVy
biBZRVMgaWYgaXQgaXMgYSBub2RlIHRoYXQgd2FudHMgaGlnaGxpZ2h0IG9yIGlmIHRoZXJlIGlz
IGFuIGFjdGlvbiBmb3IgaXQuCisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mby5jbGlja2Fi
bGVFbGVtZW50TmFtZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTk87CisgICAg
ICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mby53YW50c0hpZ2hsaWdodCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gWUVTOworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY3Rpb25Gb3JMb25nUHJl
c3NdICE9IG5pbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhh
dmUgbm8gaWRlYSBhYm91dCB3aGF0IGlzIGF0IHRoZSBsb2NhdGlvbi4KKyAgICAgICAgICAgIC8v
IFNlbmQgYW5kIGFzeW5jIG1lc3NhZ2UgdG8gZmluZCBvdXQuCisgICAgICAgICAgICBfaGFzVmFs
aWRQb3NpdGlvbkluZm8gPSBOTzsKKyAgICAgICAgICAgIF9wYWdlLT5yZXF1ZXN0UG9zaXRpb25J
bmZvcm1hdGlvbihJbnRQb2ludChwb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfbG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBpbmZvcm1hdGlvbiByZXRy
aWV2ZWQgd2l0aCBvbmUgb2YgdGhlIHByZXZpb3VzIGNhbGxzCisgICAgICAgIC8vIHRvIGdlc3R1
cmVSZWNvZ25pemVyU2hvdWxkQmVnaW4uCisgICAgICAgIC8vIEZvcmNlIGEgc3luYyBjYWxsIGlm
IG5vdCByZWFkeSB5ZXQuCisgICAgICAgIGlmICghX2hhc1ZhbGlkUG9zaXRpb25JbmZvKSB7Cisg
ICAgICAgICAgICBfcGFnZS0+Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihJbnRQb2ludChwb2ludCks
IF9wb3NpdGlvbkluZm8pOworICAgICAgICAgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvID0gWUVT
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7Cisg
ICAgICAgICAgICAvLyBSZXR1cm4gTk8gaWYgaXQgaXMgdGhlIHNhbWUgbm9kZS4KKyAgICAgICAg
ICAgIGlmIChfcG9zaXRpb25JbmZvLmlzU2FtZUFzc2lzdGVkTm9kZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTk87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSZXR1cm4gWUVT
IGlmIHRoZXJlIGlzIGFuIGFjdGlvbiBmb3IgdGhlIG5vZGUuCisgICAgICAgICAgICAvLyBSZXR1
cm4gTk8gb3RoZXJ3aXNlLgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY3Rpb25Gb3JMb25n
UHJlc3NdICE9IG5pbDsKKyAgICAgICAgfQogICAgIH0KKworICAgIGlmIChnZXN0dXJlUmVjb2du
aXplciA9PSBfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBpbXBsZW1lbnRhdGlvbgorICAgIH0KKwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAg
LTM0OCw2ICs0OTQsMjcgQEAgLSAodm9pZClfY2FuY2VsSW50ZXJhY3Rpb24KICAgICBbX2hpZ2hs
aWdodFZpZXcuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CiB9CiAKKy0gKHZvaWQpZW5zdXJl
UG9zaXRpb25JbmZvSXNVcFRvRGF0ZTooQ0dQb2ludClwb2ludAoreworICAgIGlmICghX2hhc1Zh
bGlkUG9zaXRpb25JbmZvIHx8IEludFBvaW50KHBvaW50KSAhPSBfcG9zaXRpb25JbmZvLnBvaW50
KSB7CisgICAgICAgIF9wYWdlLT5nZXRQb3NpdGlvbkluZm9ybWF0aW9uKEludFBvaW50KHBvaW50
KSwgX3Bvc2l0aW9uSW5mbyk7CisgICAgICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mbyA9IFlFUzsK
KyAgICB9Cit9CisKKy0gKEJPT0wpaGFzU2VsZWN0YWJsZVBvc2l0aW9uQXRQb2ludDooQ0dQb2lu
dClwb2ludAoreworICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb0lzVXBUb0RhdGU6cG9pbnRd
OworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIG5lZWRzIHRvIGJlIGV4dGVuZGVkIHRvIGluY2x1
ZGUgb3RoZXIgZWxlbWVudHMuCisgICAgcmV0dXJuIF9wb3NpdGlvbkluZm8uY2xpY2thYmxlRWxl
bWVudE5hbWUgIT0gU3RyaW5nKCJpbWciKSAmJiBfcG9zaXRpb25JbmZvLmNsaWNrYWJsZUVsZW1l
bnROYW1lICE9IFN0cmluZygiYSIpICYmICFfcG9zaXRpb25JbmZvLnNlbGVjdGlvblJlY3RzLmlz
RW1wdHkoKTsKK30KKworLSAoQk9PTClwb2ludElzSW5Bc3Npc3RlZE5vZGU6KENHUG9pbnQpcG9p
bnQKK3sKKyAgICBbc2VsZiBlbnN1cmVQb3NpdGlvbkluZm9Jc1VwVG9EYXRlOnBvaW50XTsKKyAg
ICByZXR1cm4gX3Bvc2l0aW9uSW5mby5pc1NhbWVBc3Npc3RlZE5vZGU7Cit9CisKIC0gKHZvaWQp
X2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6KFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewogICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9
PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIpOwpAQCAtMzY4LDE1ICs1MzUs
NDMgQEAgLSAodm9pZClfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVjb2duaXplZDooVQogICAgIH0KIH0K
IAorLSAodm9pZClfbG9uZ1ByZXNzUmVjb2duaXplZDooVUlMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgQVNTRVJUKGdlc3R1cmVSZWNvZ25pemVy
ID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcik7CisKKyAgICBzd2l0Y2ggKFtnZXN0dXJl
UmVjb2duaXplciBzdGF0ZV0pIHsKKyAgICAgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVCZWdhbjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVk
OgorICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOgor
ICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIC0g
KHZvaWQpX3NpbmdsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0
dXJlUmVjb2duaXplcgogewogICAgIFtzZWxmIF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltnZXN0
dXJlUmVjb2duaXplciBsb2NhdGlvbl1dOwogfQogCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVy
OihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIGNhblBy
ZXZlbnRHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdl
c3R1cmVSZWNvZ25pemVyCistICh2b2lkKV9kb3VibGVUYXBSZWNvZ25pemVkOihVSVRhcEdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKLSAgICBCT09MIHNob3VsZE5vdFBy
ZXZlbnRQYW5HZXN0dXJlID0gcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGln
aHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKLSAgICByZXR1cm4gIShzaG91bGROb3RQcmV2
ZW50UGFuR2VzdHVyZSAmJiBbcHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFz
czpOU0NsYXNzRnJvbVN0cmluZyhAIlVJU2Nyb2xsVmlld1Bhbkdlc3R1cmVSZWNvZ25pemVyIild
KTsKKyAgICAvLyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgorfQorCistICh2b2lkKV90d29G
aW5nZXJEb3VibGVUYXBSZWNvZ25pemVkOihVSVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVy
ZVJlY29nbml6ZXIKK3sKKyAgICAvLyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgorfQorCist
ICh2b2lkKV90d29GaW5nZXJQYW5SZWNvZ25pemVkOihVSVBhbkdlc3R1cmVSZWNvZ25pemVyICop
Z2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAvLyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgog
fQogCiAtICh2b2lkKV9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uCkBA
IC0zOTEsNiArNTg2LDM2IEBAIC0gKHZvaWQpX2F0dGVtcHRDbGlja0F0TG9jYXRpb246KENHUG9p
bnQKICAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZVRh
cChJbnRQb2ludChsb2NhdGlvbikpLCBfcGFnZS0+cGFnZUlEKCkpOwogfQogCistICh2b2lkKXVz
ZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOihVSVdlYlNlbGVjdGlvbk1vZGUpc2VsZWN0aW9u
TW9kZQoreworICAgIGlmIChzZWxlY3Rpb25Nb2RlID09IFVJV2ViU2VsZWN0aW9uTW9kZVdlYikg
eworICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgICAgIFtf
dGV4dFNlbGVjdGlvbkFzc2lzdGFudCBkZWFjdGl2YXRlU2VsZWN0aW9uXTsKKyAgICAgICAgICAg
IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOworICAgICAgICB9CisgICAgICAgIGlmICgh
X3dlYlNlbGVjdGlvbkFzc2lzdGFudCkKKyAgICAgICAgICAgIF93ZWJTZWxlY3Rpb25Bc3Npc3Rh
bnQgPSBhZG9wdE5TKFtbVUlXS1NlbGVjdGlvbkFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3
OnNlbGZdKTsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgPT0gVUlXZWJTZWxlY3Rpb25N
b2RlVGV4dE9ubHkpIHsKKyAgICAgICAgaWYgKF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAg
ICAgICAgICBfd2ViU2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOworCisgICAgICAgIGlmICghX3Rl
eHRTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAgICAgICAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFu
dCA9IGFkb3B0TlMoW1tVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0
aFZpZXc6c2VsZl0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBn
ZXN0dXJlIHJlY29nbml6ZXJzIGluIGNhc2UgZWRpdGliaWxpdHkgaGFzIGNoYW5nZWQuCisgICAg
ICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2V0R2VzdHVyZVJlY29nbml6ZXJzXTsK
KyAgICAgICAgfQorCisgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBhY3RpdmF0ZVNl
bGVjdGlvbl07CisgICAgfQorfQorCistICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hh
bmdlOihjb25zdCBQb3NpdGlvbkluZm9ybWF0aW9uJilpbmZvCit7CisgICAgX3Bvc2l0aW9uSW5m
byA9IGluZm87CisgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvID0gWUVTOworfQorCiAtIChVSVZp
ZXcgKilpbnB1dEFjY2Vzc29yeVZpZXcKIHsKICAgICBpZiAoIV9jYW5CZUZpcnN0UmVzcG9uZGVy
KQpAQCAtMTEyOSw3ICsxMzU0LDcgQEAgLSAoVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilp
bnRlcmFjdAogICAgIGlmICghX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCiAgICAgICAgIF90ZXh0
U2VsZWN0aW9uQXNzaXN0YW50ID0gW1tVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50IGFsbG9j
XSBpbml0V2l0aFZpZXc6c2VsZl07CiAKLSAgICByZXR1cm4gX3RleHRTZWxlY3Rpb25Bc3Npc3Rh
bnQ7CisgICAgcmV0dXJuIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpOwogfQogCiAKQEAg
LTEzOTUsMjIgKzE2MjAsMTIgQEAgLSAodm9pZCl0YWtlVHJhaXRzRnJvbTooVUlUZXh0SW5wdXRU
cmFpdAogCiAtICh2b2lkKV9zdGFydEFzc2lzdGluZ0tleWJvYXJkCiB7Ci0gICAgaWYgKCFfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudCkKLSAgICAgICAgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgPSBb
W1VJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgYWxsb2NdIGluaXRXaXRoVmlldzpzZWxmXTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gUmVzZXQgdGhlIGdlc3R1cmUgcmVjb2duaXplcnMgaW4g
Y2FzZSBlZGl0aWJpbGl0eSBoYXMgY2hhbmdlZC4KLSAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNz
aXN0YW50IHNldEdlc3R1cmVSZWNvZ25pemVyc107Ci0gICAgfQotICAgIFtfdGV4dFNlbGVjdGlv
bkFzc2lzdGFudCBhY3RpdmF0ZVNlbGVjdGlvbl07CisgICAgW3NlbGYgdXNlU2VsZWN0aW9uQXNz
aXN0YW50V2l0aE1vZGU6VUlXZWJTZWxlY3Rpb25Nb2RlVGV4dE9ubHldOwogfQogCiAtICh2b2lk
KV9zdG9wQXNzaXN0aW5nS2V5Ym9hcmQKIHsKLSAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3Rh
bnQpIHsKLSAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IGRlYWN0aXZhdGVTZWxlY3Rp
b25dOwotICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgcmVsZWFzZV07Ci0gICAgICAg
IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOwotICAgIH0KKyAgICBbc2VsZiB1c2VTZWxl
Y3Rpb25Bc3Npc3RhbnRXaXRoTW9kZTpVSVdlYlNlbGVjdGlvbk1vZGVXZWJdOwogfQogCiAtICh2
b2lkKV9zdGFydEFzc2lzdGluZ05vZGUKQEAgLTE1MTUsMzEgKzE3MzAsMjQgQEAgLSAoQk9PTClp
c0VtcHR5CiAgICAgcmV0dXJuICFzZWxmLmlzUmFuZ2U7CiB9CiAKLS8vIEZJWE1FOiBPdmVycmlk
aW5nIGlzRXF1YWw6IHdpdGhvdXQgb3ZlcnJpZGluZyBoYXNoIHdpbGwgY2F1c2UgdHJvdWJsZSBp
ZiB0aGlzIGV2ZXIgZ29lcyBpbnRvIGFuIE5TU2V0IG9yIGlzIHRoZSBrZXkgaW4gYW4gTlNEaWN0
aW9uYXJ5LAotLy8gc2luY2UgdHdvIGVxdWFsIGl0ZW1zIGNvdWxkIGhhdmUgZGlmZmVyZW50IGhh
c2hlcy4KIC0gKEJPT0wpaXNFcXVhbDooaWQpb3RoZXIKIHsKLSAgICBpZiAoIVtvdGhlciBpc0tp
bmRPZkNsYXNzOltXS1RleHRSYW5nZSBjbGFzc11dKQotICAgICAgICByZXR1cm4gTk87Ci0KKyAg
ICBhc3NlcnQoW290aGVyIGlzS2luZE9mQ2xhc3M6W1dLVGV4dFJhbmdlIGNsYXNzXV0pOwogICAg
IFdLVGV4dFJhbmdlICpvdGhlclJhbmdlID0gKFdLVGV4dFJhbmdlICopb3RoZXI7Ci0KKyAgICAK
ICAgICBpZiAoc2VsZiA9PSBvdGhlcikKICAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIC8vIEZJ
WE1FOiBQcm9iYWJseSBpbmNvcnJlY3QgZm9yIGVxdWFsaXR5IHRvIGlnbm9yZSBzbyBtdWNoIG9m
IHRoZSBvYmplY3Qgc3RhdGUuCi0gICAgLy8gSXQgaWdub3JlcyBpc05vbmUsIGlzRWRpdGFibGUs
IHNlbGVjdGVkVGV4dExlbmd0aCwgYW5kIHNlbGVjdGlvblJlY3RzLgotCisgICAgCiAgICAgaWYg
KHNlbGYuaXNSYW5nZSkgewogICAgICAgICBpZiAoIW90aGVyUmFuZ2UuaXNSYW5nZSkKICAgICAg
ICAgICAgIHJldHVybiBOTzsKICAgICAgICAgcmV0dXJuIENHUmVjdEVxdWFsVG9SZWN0KHNlbGYu
c3RhcnRSZWN0LCBvdGhlclJhbmdlLnN0YXJ0UmVjdCkgJiYgQ0dSZWN0RXF1YWxUb1JlY3Qoc2Vs
Zi5lbmRSZWN0LCBvdGhlclJhbmdlLmVuZFJlY3QpOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNl
IGlmICghc2VsZi5pc1JhbmdlKSB7CiAgICAgICAgIGlmIChvdGhlclJhbmdlLmlzUmFuZ2UpCiAg
ICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNo
ZWNrIGlzTm9uZSBoZXJlPwogICAgICAgICByZXR1cm4gQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5z
dGFydFJlY3QsIG90aGVyUmFuZ2Uuc3RhcnRSZWN0KTsKICAgICB9CisgICAgcmV0dXJuIG90aGVy
UmFuZ2UuaXNOb25lOwogfQogCiBAZW5kCkBAIC0xNTU1LDEzICsxNzYzLDkgQEAgKyAoV0tUZXh0
UG9zaXRpb24gKil0ZXh0UG9zaXRpb25XaXRoUmVjdAogICAgIHJldHVybiBbcG9zIGF1dG9yZWxl
YXNlXTsKIH0KIAotLy8gRklYTUU6IE92ZXJyaWRpbmcgaXNFcXVhbDogd2l0aG91dCBvdmVycmlk
aW5nIGhhc2ggd2lsbCBjYXVzZSB0cm91YmxlIGlmIHRoaXMgZXZlciBnb2VzIGludG8gYSBOU1Nl
dCBvciBpcyB0aGUga2V5IGluIGFuIE5TRGljdGlvbmFyeSwKLS8vIHNpbmNlIHR3byBlcXVhbCBp
dGVtcyBjb3VsZCBoYXZlIGRpZmZlcmVudCBoYXNoZXMuCiAtIChCT09MKWlzRXF1YWw6KGlkKW90
aGVyCiB7Ci0gICAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbV0tUZXh0UG9zaXRpb24gY2xh
c3NdXSkKLSAgICAgICAgcmV0dXJuIE5POwotCisgICAgYXNzZXJ0KFtvdGhlciBpc0tpbmRPZkNs
YXNzOltzZWxmIGNsYXNzXV0pOwogICAgIHJldHVybiBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLnBv
c2l0aW9uUmVjdCwgKChXS1RleHRQb3NpdGlvbiAqKW90aGVyKS5wb3NpdGlvblJlY3QpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQkocmV2aXNpb24gMTYyMDA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwMSw2ICszMDEsMjEgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKAogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aFR3b1RvdWNoZXMoZnJvbSwgdG8sIGdlc3R1
cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBQb3NpdGlv
bkluZm9ybWF0aW9uJiBpbmZvKQoreworICAgIG1fcGFnZUNsaWVudC5wb3NpdGlvbkluZm9ybWF0
aW9uRGlkQ2hhbmdlKGluZm8pOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UG9zaXRpb25J
bmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFBvc2l0aW9uSW5mb3Jt
YXRpb24mIGluZm8pCit7CisgICAgbV9wcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZTo6R2V0UG9zaXRpb25JbmZvcm1hdGlvbihwb2ludCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQ
b3NpdGlvbkluZm9ybWF0aW9uOjpSZXBseShpbmZvKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdl
YlBhZ2VQcm94eTo6cmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50KQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQg
V2ViUGFnZVByb3h5Ojpub3RpZnlSZXZlYWxlZFNlbGVjdGlvbigpCiB7CiAgICAgbV9wYWdlQ2xp
ZW50LnNlbGVjdGlvbkRpZENoYW5nZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYyMDA3KQorKysgU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjkyLDYgKzEyOTIsOCBAQAogCQlDMEUzQUE3QzEyMDlFODNDMDBBNDlEMDEgLyog
TW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi87IH07CiAJCUM1MTczODgxMTJE
RjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8q
IERyYWdDb250cm9sbGVyQWN0aW9uLmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFDQTMwMDc4MDQ3
MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tICovOyB9OworCQlDNTMwNjZGMzE4ODVGMDI5MDAzOTMxMEQgLyogUG9zaXRpb25J
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTMwNjZGMTE4ODVGMDI4MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5jcHAg
Ki87IH07CisJCUM1MzA2NkY0MTg4NUYwMjkwMDM5MzEwRCAvKiBQb3NpdGlvbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTMwNjZG
MjE4ODVGMDI4MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5oICovOyB9OwogCQlDNTc0
QTM3NzEyRTYwOTlEMDAyREZFOTggLyogV2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTRGRkEyMTJFNEU4RUEwMDJGMjJD
MCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovOyB9OwogCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVz
LmggKi87IH07CiAJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4
MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovOyB9OwpAQCAtMzAxMCw2
ICszMDEyLDggQEAKIAkJQzBFM0FBNDgxMjA5RTQ1MDAwQTQ5RDAxIC8qIE1vZHVsZU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vZHVsZU1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8qIERy
YWdDb250cm9sbGVyQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERy
YWdDb250cm9sbGVyQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MjM3
RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFZGl0b3JDbGllbnRNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MzA2NkYxMTg4NUYwMjgwMDM5MzEwRCAvKiBQb3Np
dGlvbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBvc2l0aW9uSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NTMwNjZGMjE4ODVGMDI4MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkluZm9ybWF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFn
Q2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
RHJhZ0NsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3NEE1N0Yx
MkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBlcy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2OTYsNiArMzcwMCw4IEBACiAJCQkJQkND
RjY3MkMxMkM3RURGNzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5oICovLAogCQkJCUJD
QzQzQUI4MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwICovLAog
CQkJCUJDQzQzQUI5MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCAq
LywKKwkJCQlDNTMwNjZGMTE4ODVGMDI4MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5j
cHAgKi8sCisJCQkJQzUzMDY2RjIxODg1RjAyODAwMzkzMTBEIC8qIFBvc2l0aW9uSW5mb3JtYXRp
b24uaCAqLywKIAkJCQlFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAq
LywKIAkJCQlFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggKi8sCiAJCQkJ
RjZBMEMxM0YxMzI4MUU2RTAwNzA0MzBGIC8qIFJlc291cmNlQ2FjaGVzVG9DbGVhci5oICovLApA
QCAtNjE1Niw2ICs2MTYyLDcgQEAKIAkJCQlCQ0NGNjcyRDEyQzdFREY3MDA4RjlDMzUgLyogT3Jp
Z2luQW5kRGF0YWJhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4
QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFD
NjAwRTc2NzhCIC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1MzA2NkY0MTg4
NUYwMjkwMDM5MzEwRCAvKiBQb3NpdGlvbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzExMUI1MDExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjE4LDYgKzc2MjUsNyBAQAogCQkJCTFBNjQyMEU0MTJE
Q0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzAxQTI2MDExMjY2MkYyMTAwQzlFRDU1IC8qIFNoYXJlYWJsZUJpdG1hcENHLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFGNzUwNkFGMTg1OTE2MjgwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVn
SW5Ob2RlSGFuZGxlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQzUzMDY2RjMxODg1RjAyOTAwMzkz
MTBEIC8qIFBvc2l0aW9uSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyMTc0
NjAxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBMjRCRjNBMTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NE
YXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxNjIwMDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1
LDcgQEAgY2xhc3MgV2ViUG9wdXBNZW51OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBB
dHRyaWJ1dGVkU3RyaW5nOwogc3RydWN0IEVkaXRvclN0YXRlOworc3RydWN0IFBvc2l0aW9uSW5m
b3JtYXRpb247CiBzdHJ1Y3QgUHJpbnRJbmZvOwogc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnM7CiBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXNTdG9yZTsKQEAgLTQxOSw2ICs0MjAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3Qg
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKICAg
ICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigp
OworICAgIHZvaWQgZ2V0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIFBvc2l0aW9uSW5mb3JtYXRpb24mKTsKKyAgICB2b2lkIHJlcXVlc3RQb3NpdGlvbkluZm9y
bWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAjZW5kaWYKIAogICAgIE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlciogbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTYyMDA3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgSW5zZXJ0VGV4dChTdHJpbmcgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKQogICAgIFNldENvbXBvc2l0aW9u
KFN0cmluZyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVy
bGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQpCiAg
ICAgQ29uZmlybUNvbXBvc2l0aW9uKCkKKyAgICBHZXRQb3NpdGlvbkluZm9ybWF0aW9uKFdlYkNv
cmU6OkludFBvaW50IHBvaW50KSAtPiAoV2ViS2l0OjpQb3NpdGlvbkluZm9ybWF0aW9uIGluZm9y
bWF0aW9uKQorICAgIFJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKFdlYkNvcmU6OkludFBvaW50
IHBvaW50KQogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQko
cmV2aXNpb24gMTYyMDA3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0
ICJXZWJQYWdlLmgiCiAKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCisjaW1wb3J0ICJQb3NpdGlv
bkluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCAiV2ViRnJhbWUuaCIKQEAgLTQxLDExICs0
MiwxNSBAQAogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnRUeXBlSGVscGVy
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9k
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVySW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4K
QEAgLTM3OCwxMyArMzgzLDggQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25z
dCBJbgogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50KHBvaW50KTsKICAg
ICBOb2RlKiBub2RlID0gZnJhbWUubm9kZVJlc3BvbmRpbmdUb0NsaWNrRXZlbnRzKEZsb2F0UG9p
bnQocG9pbnQpLCBhZGp1c3RlZFBvaW50KTsKLSAgICBpZiAobm9kZSAmJiBub2RlICE9IG1fYXNz
aXN0ZWROb2RlLmdldCgpKSB7Ci0gICAgICAgIGhhbmRsZVRhcChJbnRQb2ludChhZGp1c3RlZFBv
aW50KSk7Ci0gICAgICAgIGlmICghbV9hc3Npc3RlZE5vZGUpIHsKLSAgICAgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlw
ZSwgZ2VzdHVyZVN0YXRlLCAwLCBjYWxsYmFja0lEKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUgJiYgbm9kZSA9PSBtX2Fz
c2lzdGVkTm9kZS5nZXQoKSk7CisKICAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gY29u
c3RyYWluUG9pbnQocG9pbnQsICZmcmFtZSwgbV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwogICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNv
bnN0cmFpbmVkUG9pbnQpOwogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkgewpAQCAtODAzLDYg
KzgwMyw1OCBAQCB2b2lkIFdlYlBhZ2U6OmdldEF1dG9jb3JyZWN0aW9uQ29udGV4dChTCiAgICAg
Y29tcHV0ZUF1dG9jb3JyZWN0aW9uQ29udGV4dChtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpLCBjb250ZXh0QmVmb3JlLCBtYXJrZWRUZXh0LCBzZWxlY3RlZFRl
eHQsIGNvbnRleHRBZnRlciwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6
Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQsIFBvc2l0aW9uSW5m
b3JtYXRpb24mIGluZm8pCit7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50OworICAgIE5v
ZGUqIGhpdE5vZGUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2
ZW50cyhwb2ludCwgYWRqdXN0ZWRQb2ludCk7CisKKyAgICBpbmZvLnBvaW50ID0gcG9pbnQ7Cisg
ICAgaW5mby5pc1NhbWVBc3Npc3RlZE5vZGUgPSAoaGl0Tm9kZSA9PSBtX2Fzc2lzdGVkTm9kZSk7
CisgICAgaWYgKGhpdE5vZGUpIHsKKyAgICAgICAgaW5mby5jbGlja2FibGVFbGVtZW50TmFtZSA9
IGhpdE5vZGUtPm5vZGVOYW1lKCk7CisKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0hUTUxFbGVtZW50KGhpdE5vZGUpOworICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmFwcGxldFRhZykgfHwgZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWRUYWcpIHx8IGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpCisg
ICAgICAgICAgICBpbmZvLndhbnRzSGlnaGxpZ2h0ID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYg
KGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKSB7
CisgICAgICAgICAgICBVUkwgdXJsID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LT5yZW5kZXJlcigp
KS0+Y2FjaGVkSW1hZ2UoKS0+dXJsKCk7CisgICAgICAgICAgICBpZiAoIXVybC5zdHJpbmcoKS5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgIGluZm8ud2FudHNIaWdobGlnaHQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGluZm8udXJsID0gdXJsLnN0cmluZygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAgICAgICBpbmZv
LndhbnRzSGlnaGxpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGluZm8udXJsID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpLnN0cmluZygpOworICAgICAgICB9IGVs
c2UgaWYgKGlzSFRNTFNlbGVjdEVsZW1lbnQoaGl0Tm9kZSkpCisgICAgICAgICAgICBpbmZvLndh
bnRzSGlnaGxpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5mby53YW50
c0hpZ2hsaWdodCA9IGhpdE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICAgICAgaGl0
Tm9kZSA9IGZyYW1lLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KChwb2ludCks
IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRU
ZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50KS5pbm5lck5vZGUoKTsKKyAgICAgICAg
aWYgKGhpdE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOworICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlv
bik7CisgICAgICAgICAgICBpZiAocmFuZ2UpCisgICAgICAgICAgICAgICAgcmFuZ2UtPmNvbGxl
Y3RTZWxlY3Rpb25SZWN0cyhpbmZvLnNlbGVjdGlvblJlY3RzKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhlIGxvZ2ljIGZvciB0aGUgYmxvY2sg
c2VsZWN0aW9uLgorICAgICAgICB9CisKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGFnZTo6cmVxdWVz
dFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIFBvc2l0
aW9uSW5mb3JtYXRpb24gaW5mbzsKKworICAgIGdldFBvc2l0aW9uSW5mb3JtYXRpb24ocG9pbnQs
IGluZm8pOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVBvc2l0
aW9uSW5mb3JtYXRpb24oaW5mbykpOworfQorCiB2b2lkIFdlYlBhZ2U6OmVsZW1lbnREaWRGb2N1
cyhXZWJDb3JlOjpOb2RlKiBub2RlKQogewogICAgIG1fYXNzaXN0ZWROb2RlID0gbm9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221300</attachid>
            <date>2014-01-15 13:00:41 -0800</date>
            <delta_ts>2014-01-15 15:05:17 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>webselection-webkit-part2.txt</filename>
            <type>text/plain</type>
            <size>48427</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBAQAorMjAxNC0wMS0xNSAgRW5yaWNh
IENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgV2ViU2VsZWN0
aW9ucyBpbiBXSzIgb24gaU9TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3MDE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGFkZGluZyBzdXBwb3J0
IGZvciBzZWxlY3Rpb25zIGluCisgICAgICAgIG5vbiBlZGl0YWJsZSBjb250ZW50IG9uIGlPUyBm
b3IgV0syLgorICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGlzIHBhdGNoIGFkZHMgdGhlIGJhc2lj
IHBsdW1iaW5nIHRvIGRlY2lkZSB3aGljaAorICAgICAgICBnZXN0dXJlIHJlY29nbml6ZXJzIGFy
ZSBlbmFibGVkIGFuZCBlbXB0eSBzdHVicyBmb3IgdGhlIGdlc3R1cmVzCisgICAgICAgIHRoYXQg
d2UnbGwgbmVlZCB0byBzdXBwb3J0LgorICAgICAgICBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGFz
c2lzdGFudHMgZm9yIHNlbGVjdGlvbnMsIG9uZSB0byBiZSB1c2VkCisgICAgICAgIGluIGVkaXRh
YmxlIHRleHQgKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQpIGFuZCBvbmUgZm9yIG5vbiBl
ZGl0YWJsZQorICAgICAgICB0ZXh0IChVSVdLU2VsZWN0aW9uQXNzaXN0YW50KSBhbmQgdGhleSBh
cmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICAgICAgICBVSVdLU2VsZWN0aW9uQXNzaXN0YW50IGlz
IGNyZWF0ZWQgYXQgdGhlIHRpbWUgdGhlIHZpZXcgaXMgY3JlYXRlZCwgCisgICAgICAgIGFuZCBz
d2FwcGVkIHdpdGggVUlXS1RleHRJbnRlcmFjdGlvbiBhc3Npc3RhbnQKKyAgICAgICAgb25seSB3
aGVuIGFuIGVkaXRhYmxlIGVsZW1lbnQgaXMgZm9jdXNlZCBhbmQgdGhlIGtleWJvYXJkIGFwcGVh
cnMgb24gc2NyZWVuLgorCisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyU2hvdWxkQmVnaW4gaXMg
dGhlIGRlbGVnYXRlIGNhbGwgdXNlZCB0byBkZWNpZGUgd2hpY2ggZ2VzdHVyZXMKKyAgICAgICAg
c2hvdWxkIGJlZ2luIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiB0aGUgZ2VzdHVyZSBvY2N1cnJlZCBh
dC4KKyAgICAgICAgV2Ugd2FudCB0byBhdm9pZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHN5bmNocm9u
b3VzIGNhbGxzIHRvIHRoZSBXZWJQcm9jZXNzIHRvCisgICAgICAgIHJldHJpZXZlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBjb250ZW50IGFuZCBpbiBvcmRlciB0byBkbyBzbywgd2UgdGFrZSBhZHZh
bnRhZ2UKKyAgICAgICAgb2YgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBnZXN0dXJlIHJlY29nbml6
ZXJzIHdpbGwgdHJpZ2dlciwgYmFzZWQgb24gdGhlIGRlbGF5CisgICAgICAgIGNvbmZpZ3VyZWQg
YXQgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIFRoZSBmaXJzdCBnZXN0dXJlIHRvIHRyaWdnZXIg
aXMgaGlnaGxpZ2h0TG9uZ1ByZXNzLCBmb2xsb3dlZCBieSBsb25ncHJlc3MgaW4gdGhlCisgICAg
ICAgIGFjdGl2ZSBhc3Npc3RhbnQgYW5kIGxvbmdwcmVzcyBpbiB0aGUgV0tJbnRlcmFjdGlvblZp
ZXcuCisgICAgICAgIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHNjZW5hcmlvcyBmb3IgaGlnaGxp
Z2hsb25ncHJlc3MgYmFzZWQgb24gd2hpY2ggYXNzaXN0YW50IGlzCisgICAgICAgIGN1cnJlbnRs
eSBhY3RpdmUuCisKKyAgICAgICAgVUlXS1NlbGVjdGlvbkFzc2lzdGFudCBpcyBhY3RpdmU6Cisg
ICAgICAgICAgICBXZSBzZW5kIGEgcmVxdWVzdCB0byB0aGUgV2ViUHJvY2VzcyB0byBnZXQgaW5m
b3JtYXRpb24gb24gdGhlIHBvc2l0aW9uCisgICAgICAgICAgICBhbmQgd2UgcmV0dXJuIFlFUywg
YWxsb3dpbmcgdGhlIGdlc3R1cmUgdG8gc3RhcnQuCisgICAgICAgICAgICBXZSBkZWxlZ2F0ZSB0
byB0aGUgV2ViUHJvY2VzcyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGhpZ2hsaWdodCBiYXNlZCBv
biB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgIFdoZW4gbG9uZ1ByZXNzIGdlc3R1cmUgZmlyZXMg
Zm9yIHRoZSBhc3Npc3RhbnQsIHdlIGFzc3VtZSB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSB0
byBvdXIKKyAgICAgICAgICAgIHByZXZpb3VzIHJlcXVlc3QsIGlmIG5vdCB3ZSBmZXRjaCB0aGUg
aW5mb3JtYXRpb24gc3luY2hyb25vdXNseS4KKyAgICAgICAgICAgIFdlIGFyZSB0aGVuIGFibGUg
dHAgbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyCisgICAgICAgICAgICBv
ciBub3QgdG8gc3RhcnQgdGhlIGdlc3R1cmUuIElmIHRoZSByZXBseSBpcyBOTywgdGhlIHRoaXJk
IGFuZCBsYXN0IGxvbmcgcHJlc3MKKyAgICAgICAgICAgIGdlc3R1cmUgY2FuIGJlIGV2YWx1YXRl
ZCB0byBkZWNpZGUgd2hldGhlciB0byBzaG93IHRoZSBhY3Rpb24gc2hlZXQgb3Igc2ltcGx5IGdl
bmVyYXRlCisgICAgICAgICAgICBhIGNsaWNrIGV2ZW50LgorCisgICAgICAgIFVJV0tUZXh0SW50
ZXJhY3Rpb25Bc3Npc3RhbnQgaXMgYWN0aXZlOgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlIHdl
IG11c3QgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zaXRpb24gaW1tZWRpYXRlbHkgYW5k
IHdlIGlzc3VlCisgICAgICAgICAgICBhIHN5bmNocm9ub3VzIHJlcXVlc3QgdG8gdGhlIFdlYlBy
b2Nlc3MuCisgICAgICAgICAgICBJZiB3ZSBhcmUgbm90IGludGVyYWN0aW5nIHdpdGggdGhlIHNh
bWUgbm9kZSwgd2UgcmV0dXJuIE5PLgorICAgICAgICAgICAgVGhlbiB0aGUgbG9uZ3ByZXNzIGdl
c3R1cmUgZmlyZXMgZm9yIHRoZSBhc3Npc3RhbnQgd2hpY2ggcGVyZm9ybXMgdGhlIHNhbWUgY2hl
Y2suCisgICAgICAgICAgICBJZiB0aGUgbm9kZSBpcyB0aGUgc2FtZSwgdGhlIGxvdXBlIGdlc3R1
cmUgd2lsbCBzdGFydCwgb3RoZXJ3aXNlIHRoZSBsYXN0IGxvbmdwcmVzcworICAgICAgICAgICAg
Z2VzdHVyZSB3aWxsIGJlIGV2YWx1YXRlZCB0byBkZWNpZGUgYWJvdXQgc2hvd2luZyB0aGUgYWN0
aW9uIHNoZWV0IG9yIGdlbmVyYXRpbmcgYQorICAgICAgICAgICAgY2xpY2sgZXZlbnQuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1Bv
c2l0aW9uSW5mb3JtYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UG9zaXRpb25J
bmZvcm1hdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlv
bjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvUG9zaXRpb25JbmZvcm1hdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlvbjo6UG9zaXRpb25JbmZvcm1h
dGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgaW5pdFdpdGhGcmFtZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
ZGVhbGxvY10pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBnZXN0dXJlUmVjb2duaXpl
cjpjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6ZXI6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rp
b25WaWV3IGdlc3R1cmVSZWNvZ25pemVyOmNhbkJlUHJldmVudGVkQnlHZXN0dXJlUmVjb2duaXpl
cjpdKToKKyAgICAgICAgKGlzU2FtZVBhaXIpOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmll
dyBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0
dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dJbWFn
ZVNoZWV0XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9zaG93TGlua1NoZWV0XSk6
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9hY3Rpb25Gb3JMb25nUHJlc3NdKToKKyAg
ICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBU
b0RhdGU6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGdlc3R1cmVSZWNvZ25pemVy
U2hvdWxkQmVnaW46XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGhhc1NlbGVjdGFi
bGVQb3NpdGlvbkF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHBvaW50
SXNJbkFzc2lzdGVkTm9kZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2xvbmdQ
cmVzc1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9kb3VibGVU
YXBSZWNvZ25pemVkOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdHdvRmluZ2Vy
RG91YmxlVGFwUmVjb2duaXplZDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3R3
b0ZpbmdlclBhblJlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHVz
ZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9u
VmlldyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tJbnRl
cmFjdGlvblZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgX3N0YXJ0QXNzaXN0aW5nS2V5Ym9hcmRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgX3N0b3BBc3Npc3RpbmdLZXlib2FyZF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKToKKwogMjAxNC0wMS0xNSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
V2ViIHByb2Nlc3Mgc29tZXRpbWVzIGNyYXNoZXMgd2hlbiBwcmludGluZyBpbiBzeW5jaHJvbm91
cyBtb2RlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
CShyZXZpc2lvbiAxNjIwODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVz
c2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsNyBAQCBkZWYgc3RydWN0X29y
X2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJLaXQ6OlBsYXRmb3JtUG9wdXBN
ZW51RGF0YScsCiAgICAgICAgICdXZWJLaXQ6OlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycycsCiAg
ICAgICAgICdXZWJLaXQ6OlBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMnLAorICAgICAg
ICAnV2ViS2l0OjpQb3NpdGlvbkluZm9ybWF0aW9uJywKICAgICAgICAgJ1dlYktpdDo6UHJpbnRJ
bmZvJywKICAgICAgICAgJ1dlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhJywKICAgICAgICAgJ1dl
YktpdDo6U3RhdGlzdGljc0RhdGEnLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1Bvc2l0
aW9uSW5mb3JtYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Q
b3NpdGlvbkluZm9ybWF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Qb3NpdGlvbkluZm9ybWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvc2l0aW9u
SW5mb3JtYXRpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIFBMQVRGT1JN
KElPUykKK3ZvaWQgUG9zaXRpb25JbmZvcm1hdGlvbjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgcG9pbnQ7CisgICAgZW5jb2Rl
ciA8PCBpc1NhbWVBc3Npc3RlZE5vZGU7CisgICAgZW5jb2RlciA8PCB3YW50c0hpZ2hsaWdodDsK
KyAgICBlbmNvZGVyIDw8IGNsaWNrYWJsZUVsZW1lbnROYW1lOworICAgIGVuY29kZXIgPDwgdXJs
OworICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uUmVjdHM7Cit9CisKK2Jvb2wgUG9zaXRpb25JbmZv
cm1hdGlvbjo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBQb3NpdGlvbklu
Zm9ybWF0aW9uJiByZXN1bHQpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucG9p
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5pc1NhbWVBc3Npc3RlZE5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53YW50c0hpZ2hsaWdodCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNsaWNrYWJsZUVsZW1l
bnROYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQudXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuc2VsZWN0aW9uUmVjdHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUG9zaXRpb25JbmZvcm1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Qb3NpdGlvbkluZm9ybWF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvUG9zaXRpb25JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBvc2l0aW9uSW5mb3JtYXRpb25faAorI2Rl
ZmluZSBQb3NpdGlvbkluZm9ybWF0aW9uX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0
aW9uUmVjdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworI2lmIFBMQVRGT1JNKElPUykKK3N0cnVjdCBQb3NpdGlvbkluZm9ybWF0aW9u
IHsKKyAgICBQb3NpdGlvbkluZm9ybWF0aW9uKCkKKyAgICAgICAgOiBpc1NhbWVBc3Npc3RlZE5v
ZGUoZmFsc2UpCisgICAgICAgICwgd2FudHNIaWdobGlnaHQodHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQ7CisgICAgYm9vbCBpc1NhbWVBc3Npc3RlZE5v
ZGU7CisgICAgYm9vbCB3YW50c0hpZ2hsaWdodDsKKyAgICBTdHJpbmcgY2xpY2thYmxlRWxlbWVu
dE5hbWU7CisgICAgU3RyaW5nIHVybDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVj
dD4gc2VsZWN0aW9uUmVjdHM7CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2Rl
ciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYs
IFBvc2l0aW9uSW5mb3JtYXRpb24mKTsKK307CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gRWRp
dG9yU3RhdGVfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiAxNjIwODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wQXNzaXN0aW5nTm9kZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uRGlk
Q2hhbmdlKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJFdmVudCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IFBvc2l0aW9uSW5mb3Jt
YXRpb24mKSA9IDA7CiAjZW5kaWYKIAogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2
MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJQb3NpdGlvbklu
Zm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgpAQCAtNDQ0LDYgKzQ0NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgUGFzc1JlZlB0cjxTdHJpbmdDYWxs
YmFjaz4pOwogICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dChQYXNzUmVmUHRy
PEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrPik7CiAgICAgdm9pZCBnZXRBdXRvY29ycmVj
dGlvbkNvbnRleHQoU3RyaW5nJiBjb250ZXh0QmVmb3JlLCBTdHJpbmcmIG1hcmtlZFRleHQsIFN0
cmluZyYgc2VsZWN0ZWRUZXh0LCBTdHJpbmcmIGNvbnRleHRBZnRlciwgdWludDY0X3QmIGxvY2F0
aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVQb3NpdGlvbkluZm9y
bWF0aW9uKGNvbnN0IFBvc2l0aW9uSW5mb3JtYXRpb24mKTsKKyAgICB2b2lkIGdldFBvc2l0aW9u
SW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBQb3NpdGlvbkluZm9ybWF0aW9u
Jik7CisgICAgdm9pZCByZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogI2VuZGlmCiAKICAgICBjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2MjA4
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJv
eHkgewogICAgIEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3Q+IHRleHRSZWN0cywgU3RyaW5nIGZvbnROYW1lLCBkb3VibGUgZm9udFNpemUsIHVpbnQ2
NF90IHRyYWl0cywgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBBdXRvY29ycmVjdGlvbkNvbnRl
eHRDYWxsYmFjayhTdHJpbmcgYmVmb3JlVGV4dCwgU3RyaW5nIG1hcmtlZFRleHQsIFN0cmluZyBz
ZWxlY3RlZFRleHQsIFN0cmluZyBhZnRlclRleHQsIHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRf
dCBsZW5ndGgsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgSW50ZXJwcmV0S2V5RXZlbnQoV2Vi
S2l0OjpFZGl0b3JTdGF0ZSBzdGF0ZSwgYm9vbCBpc0NoYXJFdmVudCkgLT4gKGJvb2wgaGFuZGxl
ZCkKKyAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihXZWJLaXQ6OlBvc2l0aW9uSW5m
b3JtYXRpb24gaW5mb3JtYXRpb24pCiAjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgUHJp
bnRGaW5pc2hlZENhbGxiYWNrKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wQXNz
aXN0aW5nTm9kZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25EaWRDaGFu
Z2UoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IFBvc2l0aW9u
SW5mb3JtYXRpb24mKTsKIAogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkocmV2aXNpb24gMTYyMDg1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBs
SU9TLmgiCiAKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbXBvcnQgIlBv
c2l0aW9uSW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQ
cm94eS5oIgpAQCAtMjAwLDcgKzIwMSwxMiBAQCBib29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnBy
ZXRLZXlFdmVudChjCiB7CiAgICAgcmV0dXJuIFttX3ZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2
ZW50Lm5hdGl2ZUV2ZW50KCkgaXNDaGFyRXZlbnQ6aXNDaGFyRXZlbnRdOwogfQotICAgIAorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IFBv
c2l0aW9uSW5mb3JtYXRpb24mIGluZm8pCit7CisgICAgW21fdmlldyBfcG9zaXRpb25JbmZvcm1h
dGlvbkRpZENoYW5nZTppbmZvXTsKK30KKwogYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tCShyZXZpc2lvbiAxNjIwODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiUGFnZUNs
aWVudEltcGxJT1MuaCIKKyNpbXBvcnQgIlBvc2l0aW9uSW5mb3JtYXRpb24uaCIKICNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbXBvcnQgIldlYktpdDJJbml0
aWFsaXplLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5o
IgpAQCAtMjc3LDYgKzI3OCwxMSBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9T
RXZlbnQgCiAgICAgcmV0dXJuIFtfaW50ZXJhY3Rpb25WaWV3IF9pbnRlcnByZXRLZXlFdmVudDp0
aGVFdmVudCBpc0NoYXJFdmVudDppc0NoYXJFdmVudF07CiB9CiAKKy0gKHZvaWQpX3Bvc2l0aW9u
SW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFBvc2l0aW9uSW5mb3JtYXRpb24mKWluZm8KK3sK
KyAgICBbX2ludGVyYWN0aW9uVmlldyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTppbmZv
XTsKK30KKwogLSAodm9pZClfZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9y
aWdpbjooV2ViU2VjdXJpdHlPcmlnaW4mKW9yaWdpbiBmcmFtZTooV2ViRnJhbWVQcm94eSYpZnJh
bWUgcmVxdWVzdDooR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9u
UmVxdWVzdAogewogICAgIFtbd3JhcHBlcihfcGFnZS0+cHJvY2VzcygpLmNvbnRleHQoKSkgX2dl
b2xvY2F0aW9uUHJvdmlkZXJdIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21P
cmlnaW46dG9BUEkoJm9yaWdpbikgZnJhbWU6dG9BUEkoJmZyYW1lKSByZXF1ZXN0OnRvQVBJKCZw
ZXJtaXNzaW9uUmVxdWVzdCkgd2luZG93OltzZWxmIHdpbmRvd11dOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVy
bmFsLmgJKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
aW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBAIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKIGNsYXNzIExheWVy
VHJlZUNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2ViU2VjdXJpdHlPcmln
aW47CitzdHJ1Y3QgUG9zaXRpb25JbmZvcm1hdGlvbjsKIH0KIAogQGNsYXNzIFdlYklPU0V2ZW50
OwpAQCAtNjIsNyArNjMsNyBAQCBjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKIC0gKHZvaWQpX3N0
b3BBc3Npc3RpbmdOb2RlOwogLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZDsKIC0gKEJPT0wpX2lu
dGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlzQ2hhckV2ZW50OihCT09M
KWlzQ2hhckV2ZW50OwotCistICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihj
b25zdCBXZWJLaXQ6OlBvc2l0aW9uSW5mb3JtYXRpb24mKWluZm87CiAtICh2b2lkKV9kZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXZWJLaXQ6OldlYlNlY3VyaXR5
T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYpZnJhbWUgcmVxdWVz
dDooV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKXBlcm1pc3Npb25S
ZXF1ZXN0OwogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9X
S0ludGVyYWN0aW9uVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgJKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZh
dGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8VUlLaXQvVUlXZWJUb3Vj
aEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdLU2VsZWN0aW9u
QXNzaXN0YW50Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50
Lmg+CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAt
NDEsNiArNDIsNyBAQCBjbGFzcyBJbnRTaXplOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IFdlYlBhZ2VQcm94eTsKK3N0cnVjdCBQb3NpdGlvbkluZm9ybWF0aW9uOwogfQogCiBAY2xhc3Mg
V2ViSU9TRXZlbnQ7CkBAIC01Niw0ICs1OCw1IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIC0gKHZv
aWQpX3N0b3BBc3Npc3RpbmdOb2RlOwogLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZDsKIC0gKEJP
T0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlzQ2hhckV2ZW50
OihCT09MKWlzQ2hhckV2ZW50OworLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5n
ZTooY29uc3QgV2ViS2l0OjpQb3NpdGlvbkluZm9ybWF0aW9uJilpbmZvOwogQGVuZApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlv
blZpZXcubW0JKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMiArMjgs
MjYgQEAKIAogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiTmF0
aXZlV2ViVG91Y2hFdmVudC5oIgorI2ltcG9ydCAiUG9zaXRpb25JbmZvcm1hdGlvbi5oIgogI2lt
cG9ydCAiV0tCYXNlLmgiCiAjaW1wb3J0ICJXS0dlc3R1cmVUeXBlcy5oIgogI2ltcG9ydCAiV2Vi
RXZlbnQuaCIKICNpbXBvcnQgIldlYklPU0V2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViUGFn
ZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFVJS2l0
L1VJR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlGb250X1By
aXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0
L1VJVGFwR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlUZXh0
SW50ZXJhY3Rpb25Bc3Npc3RhbnRfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlXZWJEb2N1
bWVudFZpZXcuaD4KICNpbXBvcnQgPFVJS2l0L1VJV2ViU2Nyb2xsVmlldy5oPgogI2ltcG9ydCA8
VUlLaXQvX1VJSGlnaGxpZ2h0Vmlldy5oPgogI2ltcG9ydCA8VUlLaXQvX1VJV2ViSGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViU2VsZWN0aW9uUmVjdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtNTIsNiAr
NTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBoaWdobGlnaHREZWxheSA9IDAuMTI7CitzdGF0aWMgY29u
c3QgZmxvYXQgdGFwQW5kSG9sZERlbGF5ICA9IDAuNzU7CiAKIEBpbnRlcmZhY2UgV0tUZXh0UmFu
Z2UgOiBVSVRleHRSYW5nZSB7CiAgICAgQ0dSZWN0IF9zdGFydFJlY3Q7CkBAIC0xMzgsOCArMTQz
LDE0IEBAIEBpbnRlcmZhY2UgV0tJbnRlcmFjdGlvblZpZXcgKFByaXZhdGUpCiAgICAgUmV0YWlu
UHRyPFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplcj4gX3RvdWNoRXZlbnRHZXN0dXJl
UmVjb2duaXplcjsKICAgICBSZXRhaW5QdHI8VUlUYXBHZXN0dXJlUmVjb2duaXplcj4gX3Npbmds
ZVRhcEdlc3R1cmVSZWNvZ25pemVyOwogICAgIFJldGFpblB0cjxfVUlXZWJIaWdobGlnaHRMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplcj4gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25p
emVyOworICAgIFJldGFpblB0cjxVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyPiBfbG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFVJVGFwR2VzdHVyZVJlY29nbml6
ZXI+IF9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8VUlUYXBHZXN0
dXJlUmVjb2duaXplcj4gX3R3b0ZpbmdlckRvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyOworICAg
IFJldGFpblB0cjxVSVBhbkdlc3R1cmVSZWNvZ25pemVyPiBfdHdvRmluZ2VyUGFuR2VzdHVyZVJl
Y29nbml6ZXI7CisKKyAgICBSZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4g
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7CisgICAgUmV0YWluUHRyPFVJV0tTZWxlY3Rpb25Bc3Np
c3RhbnQ+IF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQ7CiAKLSAgICBVSVdLVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50ICpfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKICAgICBVSVRleHRJbnB1dFRyYWl0
cyAqX3RyYWl0czsKICAgICBCT09MIF9jYW5CZUZpcnN0UmVzcG9uZGVyOwogICAgIFVJV2ViRm9y
bUFjY2Vzc29yeSAqX2FjY2Vzc29yeTsKQEAgLTE1NCw2ICsxNjUsOCBAQCBAaW50ZXJmYWNlIFdL
SW50ZXJhY3Rpb25WaWV3IChQcml2YXRlKQogICAgIEJPT0wgX2lzVGFwSGlnaGxpZ2h0SURWYWxp
ZDsKICAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSBfYXV0b2NvcnJlY3Rpb25EYXRhOwogICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX21hcmtlZFRleHQ7CisgICAgUG9zaXRpb25JbmZvcm1hdGlvbiBf
cG9zaXRpb25JbmZvcm1hdGlvbjsKKyAgICBCT09MIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRp
b247CiB9CiAKIEBzeW50aGVzaXplIGlucHV0RGVsZWdhdGUgPSBfaW5wdXREZWxlZ2F0ZTsKQEAg
LTE2MywzMiArMTc2LDU1IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQogICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07CiAgICAgaWYgKHNlbGYpIHsKICAg
ICAgICAgX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVdlYlRvdWNo
RXZlbnRzR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9u
OkBzZWxlY3Rvcihfd2ViVG91Y2hFdmVudHNSZWNvZ25pemVkOikgdG91Y2hEZWxlZ2F0ZTpzZWxm
XSk7Ci0gICAgICAgIFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVn
YXRlOnNlbGZdOworICAgICAgICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplciBzZXREZWxl
Z2F0ZTpzZWxmXTsKICAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3RvdWNoRXZl
bnRHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAKICAgICAgICAgX3NpbmdsZVRhcEdlc3R1cmVS
ZWNvZ25pemVyID0gYWRvcHROUyhbW1VJVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRX
aXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwUmVjb2duaXplZDopXSk7
Ci0gICAgICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6
c2VsZl07CisgICAgICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6
c2VsZl07CiAgICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9zaW5nbGVUYXBHZXN0
dXJlUmVjb2duaXplci5nZXQoKV07CiAKKyAgICAgICAgX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25p
emVyID0gYWRvcHROUyhbW1VJVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFy
Z2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfZG91YmxlVGFwUmVjb2duaXplZDopXSk7CisgICAg
ICAgIFtfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0TnVtYmVyT2ZUYXBzUmVxdWlyZWQ6
Ml07CisgICAgICAgIFtfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2Vs
Zl07CisgICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9kb3VibGVUYXBHZXN0dXJl
UmVjb2duaXplci5nZXQoKV07CisgICAgICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIg
cmVxdWlyZU90aGVyR2VzdHVyZVRvRmFpbDpfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOworCiAgICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciA9IGFk
b3B0TlMoW1tfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10g
aW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9oaWdobGlnaHRMb25nUHJlc3NS
ZWNvZ25pemVkOildKTsKLSAgICAgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplci5nZXQoKSBzZXREZWxheTpoaWdobGlnaHREZWxheV07Ci0gICAgICAgIFtfaGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
ICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsYXk6aGlnaGxp
Z2h0RGVsYXldOworICAgICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
IHNldERlbGVnYXRlOnNlbGZdOwogICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpf
aGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgICAgICAKKwor
ICAgICAgICBfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9sb25nUHJlc3NSZWNvZ25pemVkOildKTsKKyAgICAgICAgW19sb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplciBzZXREZWxheTp0YXBBbmRIb2xkRGVsYXldOworICAgICAgICBbX2xvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbc2VsZiBh
ZGRHZXN0dXJlUmVjb2duaXplcjpfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwor
CisgICAgICAgIF90d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVBh
bkdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3R3b0ZpbmdlclBhblJlY29nbml6ZWQ6KV0pOworICAgICAgICBbX3R3b0ZpbmdlclBh
bkdlc3R1cmVSZWNvZ25pemVyIHNldE1pbmltdW1OdW1iZXJPZlRvdWNoZXM6Ml07CisgICAgICAg
IFtfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgc2V0TWF4aW11bU51bWJlck9mVG91Y2hl
czoyXTsKKyAgICAgICAgW190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclBh
bkdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKwogICAgICAgICBbc2VsZiBzZXRVc2VySW50ZXJh
Y3Rpb25FbmFibGVkOllFU107CiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Jlc2V0U2hvd2lu
Z1RleHRTdHlsZTopIG5hbWU6VUlNZW51Q29udHJvbGxlckRpZEhpZGVNZW51Tm90aWZpY2F0aW9u
IG9iamVjdDpuaWxdOwogICAgICAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKICAg
ICB9CiAKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IG5v
dGlmaWVkIHRoYXQgbG9hZGluZyBoYXMgY29tcGxldGVkLgorICAgIFtzZWxmIHVzZVNlbGVjdGlv
bkFzc2lzdGFudFdpdGhNb2RlOlVJV2ViU2VsZWN0aW9uTW9kZVdlYl07CisKICAgICByZXR1cm4g
c2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgW190b3VjaEV2ZW50R2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX3NpbmdsZVRhcEdlc3R1cmVS
ZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19oaWdobGlnaHRMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudCByZWxlYXNlXTsKKyAgICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERl
bGVnYXRlOm5pbF07CisgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBz
ZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKKyAgICBbX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOm5pbF07CisKICAgICBbX2FjY2Vzc29yeSByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CkBAIC0zMzMsMTIgKzM2OSwxMzAgQEAgLSAoQk9PTClfcmVxdWlyZXNLZXlib2FyZFJl
c2V0T25SZWxvYWQKICAgICByZXR1cm4gWUVTOwogfQogCistIChCT09MKWdlc3R1cmVSZWNvZ25p
emVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIGNh
blByZXZlbnRHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRl
ZEdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgLy8gQSBsb25nLXByZXNzIGdlc3R1cmUgY2FuIG5v
dCBiZSByZWNvZ25pemVkIHdoaWxlIHBhbm5pbmcsIGJ1dCBhIHBhbiBjYW4gYmUgcmVjb2duaXpl
ZAorICAgIC8vIGR1cmluZyBhIGxvbmctcHJlc3MgZ2VzdHVyZS4KKyAgICBCT09MIHNob3VsZE5v
dFByZXZlbnRQYW5HZXN0dXJlID0gcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9oaWdo
bGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciB8fCBwcmV2ZW50aW5nR2VzdHVyZVJlY29n
bml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIHJldHVybiAhKHNob3Vs
ZE5vdFByZXZlbnRQYW5HZXN0dXJlICYmIFtwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciBpc0tp
bmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiVUlTY3JvbGxWaWV3UGFuR2VzdHVyZVJlY29n
bml6ZXIiKV0pOworfQorCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNv
Z25pemVyICopcHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgY2FuQmVQcmV2ZW50ZWRCeUdlc3R1
cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNv
Z25pemVyIHsKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgaGlnaGxpZ2h0IHRvIGJlIHByZXZlbnRl
ZCBieSBhIHNlbGVjdGlvbiBnZXN0dXJlLiBQcmVzcy1hbmQtaG9sZCBvbiBhIGxpbmsgc2hvdWxk
IGhpZ2hsaWdodCB0aGUgbGluaywgbm90IHNlbGVjdCBpdC4KKyAgICBpZiAoKHByZXZlbnRpbmdH
ZXN0dXJlUmVjb2duaXplciA9PSBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5sb3VwZUdl
c3R1cmUgfHwgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgaXNTZWxlY3Rpb25HZXN0dXJlUmVjb2du
aXplcjpwcmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXJdKQorICAgICAgICAmJiAocHJldmVudGVk
R2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
IHx8IHByZXZlbnRlZEdlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplcikpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIHJldHVybiBZRVM7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIgKmEs
IFVJR2VzdHVyZVJlY29nbml6ZXIgKmIsIFVJR2VzdHVyZVJlY29nbml6ZXIgKngsIFVJR2VzdHVy
ZVJlY29nbml6ZXIgKnkpCit7CisgICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYiA9
PSB4ICYmIGEgPT0geSk7Cit9CisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciopb3RoZXJHZXN0
dXJlUmVjb2duaXplcgoreworICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBv
dGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXIuZ2V0KCksIF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBZRVM7CisKKyAgICBpZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJH
ZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdl
dCgpLCBfd2ViU2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLnNlbGVjdGlvbkxvbmdQcmVzc1JlY29n
bml6ZXIpKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVy
ZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9zaW5nbGVUYXBHZXN0dXJlUmVj
b2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCkuc2luZ2xlVGFwR2Vz
dHVyZSkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZv
aWQpX3Nob3dJbWFnZVNoZWV0Cit7CisKK30KKworLSAodm9pZClfc2hvd0xpbmtTaGVldAorewor
Cit9CisKKy0gKFNFTClfYWN0aW9uRm9yTG9uZ1ByZXNzCit7CisgICAgaWYgKF9wb3NpdGlvbklu
Zm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09IFN0cmluZyhBU0NJSUxpdGVyYWwoIklN
RyIpKSkKKyAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hvd0ltYWdlU2hlZXQpOworICAgIGVs
c2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09IFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIkEiKSkpCisgICAgICAgIHJldHVybiBAc2VsZWN0b3IoX3Nob3dMaW5r
U2hlZXQpOworICAgIC8vIEZJWE1FOiBBZGQgY2hlY2sgZm9yIGxpbmtzIGFuZCBkYXRhZGV0ZWN0
b3JzLgorCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZCllbnN1cmVQb3NpdGlvbkluZm9y
bWF0aW9uSXNVcFRvRGF0ZTooQ0dQb2ludClwb2ludAoreworICAgIGlmICghX2hhc1ZhbGlkUG9z
aXRpb25JbmZvcm1hdGlvbiB8fCByb3VuZGVkSW50UG9pbnQocG9pbnQpICE9IF9wb3NpdGlvbklu
Zm9ybWF0aW9uLnBvaW50KSB7CisgICAgICAgIF9wYWdlLT5nZXRQb3NpdGlvbkluZm9ybWF0aW9u
KHJvdW5kZWRJbnRQb2ludChwb2ludCksIF9wb3NpdGlvbkluZm9ybWF0aW9uKTsKKyAgICAgICAg
X2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsKKyAgICB9Cit9CisKIC0gKEJPT0wp
Z2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1
cmVSZWNvZ25pemVyCiB7Ci0gICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7Ci0gICAg
ICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIgfHwgZ2VzdHVyZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25p
emVyKQotICAgICAgICAgICAgcmV0dXJuIE5POworICAgIENHUG9pbnQgcG9pbnQgPSBbZ2VzdHVy
ZVJlY29nbml6ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07CisKKyAgICBpZiAoZ2VzdHVyZVJlY29n
bml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyCisgICAgICAgIHx8
IGdlc3R1cmVSZWNvZ25pemVyID09IF9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcgorICAgICAg
ICB8fCBnZXN0dXJlUmVjb2duaXplciA9PSBfdHdvRmluZ2VyRG91YmxlVGFwR2VzdHVyZVJlY29n
bml6ZXIKKyAgICAgICAgfHwgZ2VzdHVyZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVS
ZWNvZ25pemVyKSB7CisKKyAgICAgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7Cisg
ICAgICAgICAgICAvLyBSZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3NpdGlvbiB3aXRo
IHN5bmMgbWVzc2FnZS4KKyAgICAgICAgICAgIC8vIElmIHRoZSBhc3Npc3RlZCBub2RlIGlzIHRo
ZSBzYW1lLCBwcmV2ZW50IHRoZSBnZXN0dXJlLgorICAgICAgICAgICAgX3BhZ2UtPmdldFBvc2l0
aW9uSW5mb3JtYXRpb24ocm91bmRlZEludFBvaW50KHBvaW50KSwgX3Bvc2l0aW9uSW5mb3JtYXRp
b24pOworICAgICAgICAgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsKKyAg
ICAgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc1NhbWVBc3Npc3RlZE5vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGdl
c3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikg
eworICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSBkaWZmZXJlbnQgbm9kZSB0aGFuIHRoZSBhc3Npc3RlZCBvbmUuCisgICAgICAg
ICAgICAvLyBQcmV2ZW50IHRoZSBnZXN0dXJlIGlmIHRoZXJlIGlzIG5vIG5vZGUuCisgICAgICAg
ICAgICAvLyBBbGxvdyB0aGUgZ2VzdHVyZSBpZiBpdCBpcyBhIG5vZGUgdGhhdCB3YW50cyBoaWdo
bGlnaHQgb3IgaWYgdGhlcmUgaXMgYW4gYWN0aW9uIGZvciBpdC4KKyAgICAgICAgICAgIGlmIChf
cG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZS5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRp
b24ud2FudHNIaWdobGlnaHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAg
ICAgIHJldHVybiBbc2VsZiBfYWN0aW9uRm9yTG9uZ1ByZXNzXSAhPSBuaWw7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIG5vIGlkZWEgYWJvdXQgd2hhdCBp
cyBhdCB0aGUgbG9jYXRpb24uCisgICAgICAgICAgICAvLyBTZW5kIGFuZCBhc3luYyBtZXNzYWdl
IHRvIGZpbmQgb3V0LgorICAgICAgICAgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9
IE5POworICAgICAgICAgICAgX3BhZ2UtPnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKHJvdW5k
ZWRJbnRQb2ludChwb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfbG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgd2l0
aCBvbmUgb2YgdGhlIHByZXZpb3VzIGNhbGxzCisgICAgICAgIC8vIHRvIGdlc3R1cmVSZWNvZ25p
emVyU2hvdWxkQmVnaW4uCisgICAgICAgIC8vIEZvcmNlIGEgc3luYyBjYWxsIGlmIG5vdCByZWFk
eSB5ZXQuCisgICAgICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRl
OnBvaW50XTsKKworICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAg
ICAgICAgIC8vIFByZXZlbnQgdGhlIGdlc3R1cmUgaWYgaXQgaXMgdGhlIHNhbWUgbm9kZS4KKyAg
ICAgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc1NhbWVBc3Npc3RlZE5vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiB0aGVyZSBpcyBubyBhY3Rpb24gZm9yIHRoZSBub2Rl
LgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY3Rpb25Gb3JMb25nUHJlc3NdICE9IG5pbDsK
KyAgICAgICAgfQogICAgIH0KKworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfdHdvRmlu
Z2VyUGFuR2VzdHVyZVJlY29nbml6ZXIpIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICB9CisKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC0zNDgsNiArNTAyLDE5IEBAIC0gKHZvaWQp
X2NhbmNlbEludGVyYWN0aW9uCiAgICAgW19oaWdobGlnaHRWaWV3LmdldCgpIHJlbW92ZUZyb21T
dXBlcnZpZXddOwogfQogCistIChCT09MKWhhc1NlbGVjdGFibGVQb3NpdGlvbkF0UG9pbnQ6KENH
UG9pbnQpcG9pbnQKK3sKKyAgICBbc2VsZiBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRv
RGF0ZTpwb2ludF07CisgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgbmVlZHMgdG8gYmUgZXh0ZW5k
ZWQgdG8gaW5jbHVkZSBvdGhlciBlbGVtZW50cy4KKyAgICByZXR1cm4gX3Bvc2l0aW9uSW5mb3Jt
YXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUgIT0gU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSU1HIikp
ICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lICE9IFN0cmluZyhB
U0NJSUxpdGVyYWwoIkEiKSkgJiYgIV9wb3NpdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJlY3Rz
LmlzRW1wdHkoKTsKK30KKworLSAoQk9PTClwb2ludElzSW5Bc3Npc3RlZE5vZGU6KENHUG9pbnQp
cG9pbnQKK3sKKyAgICBbc2VsZiBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpw
b2ludF07CisgICAgcmV0dXJuIF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzU2FtZUFzc2lzdGVkTm9k
ZTsKK30KKwogLSAodm9pZClfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVjb2duaXplZDooVUlMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgQVNTRVJUKGdl
c3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcik7
CkBAIC0zNjgsMTUgKzUzNSw0MyBAQCAtICh2b2lkKV9oaWdobGlnaHRMb25nUHJlc3NSZWNvZ25p
emVkOihVCiAgICAgfQogfQogCistICh2b2lkKV9sb25nUHJlc3NSZWNvZ25pemVkOihVSUxvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBBU1NFUlQo
Z2VzdHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKKworICAg
IHN3aXRjaCAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSkgeworICAgIGNhc2UgVUlHZXN0dXJl
UmVjb2duaXplclN0YXRlQmVnYW46CisgICAgICAgIC8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRl
ZDoKKyAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgLy8g
RklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIC0gKHZvaWQpX3NpbmdsZVRhcFJlY29nbml6ZWQ6
KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogewogICAgIFtzZWxm
IF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltnZXN0dXJlUmVjb2duaXplciBsb2NhdGlvbl1dOwog
fQogCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJl
dmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIGNhblByZXZlbnRHZXN0dXJlUmVjb2duaXplcjooVUlH
ZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdlc3R1cmVSZWNvZ25pemVyCistICh2b2lkKV9k
b3VibGVUYXBSZWNvZ25pemVkOihVSVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29n
bml6ZXIKIHsKLSAgICBCT09MIHNob3VsZE5vdFByZXZlbnRQYW5HZXN0dXJlID0gcHJldmVudGlu
Z0dlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
cjsKLSAgICByZXR1cm4gIShzaG91bGROb3RQcmV2ZW50UGFuR2VzdHVyZSAmJiBbcHJldmVudGVk
R2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIlVJU2Ny
b2xsVmlld1Bhbkdlc3R1cmVSZWNvZ25pemVyIildKTsKKyAgICAvLyBGSVhNRTogQWRkIGltcGxl
bWVudGF0aW9uLgorfQorCistICh2b2lkKV90d29GaW5nZXJEb3VibGVUYXBSZWNvZ25pemVkOihV
SVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAvLyBGSVhN
RTogQWRkIGltcGxlbWVudGF0aW9uLgorfQorCistICh2b2lkKV90d29GaW5nZXJQYW5SZWNvZ25p
emVkOihVSVBhbkdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAv
LyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgogfQogCiAtICh2b2lkKV9hdHRlbXB0Q2xpY2tB
dExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uCkBAIC0zOTEsNiArNTg2LDM2IEBAIC0gKHZvaWQp
X2F0dGVtcHRDbGlja0F0TG9jYXRpb246KENHUG9pbnQKICAgICBfcGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZVRhcChJbnRQb2ludChsb2NhdGlvbikpLCBfcGFn
ZS0+cGFnZUlEKCkpOwogfQogCistICh2b2lkKXVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2Rl
OihVSVdlYlNlbGVjdGlvbk1vZGUpc2VsZWN0aW9uTW9kZQoreworICAgIGlmIChzZWxlY3Rpb25N
b2RlID09IFVJV2ViU2VsZWN0aW9uTW9kZVdlYikgeworICAgICAgICBpZiAoX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQpIHsKKyAgICAgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBkZWFj
dGl2YXRlU2VsZWN0aW9uXTsKKyAgICAgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0g
bmlsOworICAgICAgICB9CisgICAgICAgIGlmICghX3dlYlNlbGVjdGlvbkFzc2lzdGFudCkKKyAg
ICAgICAgICAgIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgPSBhZG9wdE5TKFtbVUlXS1NlbGVjdGlv
bkFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdKTsKKyAgICB9IGVsc2UgaWYgKHNl
bGVjdGlvbk1vZGUgPT0gVUlXZWJTZWxlY3Rpb25Nb2RlVGV4dE9ubHkpIHsKKyAgICAgICAgaWYg
KF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAgICAgICAgICBfd2ViU2VsZWN0aW9uQXNzaXN0
YW50ID0gbmlsOworCisgICAgICAgIGlmICghX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAg
ICAgICAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCA9IGFkb3B0TlMoW1tVSVdLVGV4dEludGVy
YWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBnZXN0dXJlIHJlY29nbml6ZXJzIGluIGNhc2Ug
ZWRpdGliaWxpdHkgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQgc2V0R2VzdHVyZVJlY29nbml6ZXJzXTsKKyAgICAgICAgfQorCisgICAgICAgIFtfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudCBhY3RpdmF0ZVNlbGVjdGlvbl07CisgICAgfQorfQorCistICh2
b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjb25zdCBQb3NpdGlvbkluZm9ybWF0
aW9uJilpbmZvCit7CisgICAgX3Bvc2l0aW9uSW5mb3JtYXRpb24gPSBpbmZvOworICAgIF9oYXNW
YWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7Cit9CisKIC0gKFVJVmlldyAqKWlucHV0QWNj
ZXNzb3J5VmlldwogewogICAgIGlmICghX2NhbkJlRmlyc3RSZXNwb25kZXIpCkBAIC0xMTI5LDcg
KzEzNTQsNyBAQCAtIChVSVRleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKWludGVyYWN0CiAgICAg
aWYgKCFfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKICAgICAgICAgX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQgPSBbW1VJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgYWxsb2NdIGluaXRXaXRoVmll
dzpzZWxmXTsKIAotICAgIHJldHVybiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudDsKKyAgICByZXR1
cm4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCk7CiB9CiAKIApAQCAtMTM5NSwyMiArMTYy
MCwxMiBAQCAtICh2b2lkKXRha2VUcmFpdHNGcm9tOihVSVRleHRJbnB1dFRyYWl0CiAKIC0gKHZv
aWQpX3N0YXJ0QXNzaXN0aW5nS2V5Ym9hcmQKIHsKLSAgICBpZiAoIV90ZXh0U2VsZWN0aW9uQXNz
aXN0YW50KQotICAgICAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCA9IFtbVUlXS1RleHRJbnRl
cmFjdGlvbkFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBSZXNldCB0aGUgZ2VzdHVyZSByZWNvZ25pemVycyBpbiBjYXNlIGVkaXRpYmls
aXR5IGhhcyBjaGFuZ2VkLgotICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2V0R2Vz
dHVyZVJlY29nbml6ZXJzXTsKLSAgICB9Ci0gICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IGFj
dGl2YXRlU2VsZWN0aW9uXTsKKyAgICBbc2VsZiB1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRoTW9k
ZTpVSVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seV07CiB9CiAKIC0gKHZvaWQpX3N0b3BBc3Npc3Rp
bmdLZXlib2FyZAogewotICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkgewotICAgICAg
ICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgZGVhY3RpdmF0ZVNlbGVjdGlvbl07Ci0gICAgICAg
IFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCByZWxlYXNlXTsKLSAgICAgICAgX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgPSBuaWw7Ci0gICAgfQorICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFu
dFdpdGhNb2RlOlVJV2ViU2VsZWN0aW9uTW9kZVdlYl07CiB9CiAKIC0gKHZvaWQpX3N0YXJ0QXNz
aXN0aW5nTm9kZQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNiArMzAx
LDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RXaXRoVHdvVG91Y2hlcygKICAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFdpdGhUd29Ub3VjaGVzKGZyb20s
IHRvLCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwog
fQogCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24oY29u
c3QgUG9zaXRpb25JbmZvcm1hdGlvbiYgaW5mbykKK3sKKyAgICBtX3BhZ2VDbGllbnQucG9zaXRp
b25JbmZvcm1hdGlvbkRpZENoYW5nZShpbmZvKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6Omdl
dFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBQb3Np
dGlvbkluZm9ybWF0aW9uJiBpbmZvKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkdldFBvc2l0aW9uSW5mb3JtYXRpb24ocG9pbnQpLCBNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0UG9zaXRpb25JbmZvcm1hdGlvbjo6UmVwbHkoaW5mbyksIG1fcGFnZUlEKTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwor
fQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6bm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb24oKQogewogICAg
IG1fcGFnZUNsaWVudC5zZWxlY3Rpb25EaWRDaGFuZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MjA4
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI5Niw2ICsxMjk2LDggQEAKIAkJQzBFM0FBN0MxMjA5RTgzQzAw
QTQ5RDAxIC8qIE1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovOyB9OwogCQlD
NTE3Mzg4MTEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTczODgwMTJERjhGNEYw
MEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oICovOyB9OwogCQlDNTIzN0Y2MDEyNDQx
Q0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdl
YkVkaXRvckNsaWVudE1hYy5tbSAqLzsgfTsKKwkJQzUzMDY2RjMxODg1RjAyOTAwMzkzMTBEIC8q
IFBvc2l0aW9uSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUzMDY2RjExODg1RjAyODAwMzkzMTBEIC8qIFBvc2l0aW9uSW5mb3Jt
YXRpb24uY3BwICovOyB9OworCQlDNTMwNjZGNDE4ODVGMDI5MDAzOTMxMEQgLyogUG9zaXRpb25J
bmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzUzMDY2RjIxODg1RjAyODAwMzkzMTBEIC8qIFBvc2l0aW9uSW5mb3JtYXRpb24uaCAqLzsg
fTsKIAkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU0RkZBMjEyRTRF
OEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLzsgfTsKIAkJQzU3NEE1ODExMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5oICovOyB9OwogCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVi
b2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLzsgfTsK
QEAgLTMwMTgsNiArMzAyMCw4IEBACiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAvKiBNb2R1
bGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2R1bGVN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTczODgwMTJERjhGNEYwMEVF
M0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEcmFnQ29udHJvbGxlckFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRWRpdG9yQ2xpZW50TWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTMwNjZGMTE4ODVGMDI4MDAzOTMx
MEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb3NpdGlvbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzUzMDY2RjIxODg1RjAyODAwMzkzMTBEIC8qIFBvc2l0aW9uSW5mb3JtYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JbmZvcm1hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTU0RkZBMjEyRTRFOEVBMDAyRjIyQzAg
LyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYkRyYWdDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlw
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYXN0ZWJvYXJk
VHlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzA0LDYgKzM3MDgsOCBA
QAogCQkJCUJDQ0Y2NzJDMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCAq
LywKIAkJCQlCQ0M0M0FCODEyN0I5NURDMDAzMTdGMTYgLyogUGxhdGZvcm1Qb3B1cE1lbnVEYXRh
LmNwcCAqLywKIAkJCQlCQ0M0M0FCOTEyN0I5NURDMDAzMTdGMTYgLyogUGxhdGZvcm1Qb3B1cE1l
bnVEYXRhLmggKi8sCisJCQkJQzUzMDY2RjExODg1RjAyODAwMzkzMTBEIC8qIFBvc2l0aW9uSW5m
b3JtYXRpb24uY3BwICovLAorCQkJCUM1MzA2NkYyMTg4NUYwMjgwMDM5MzEwRCAvKiBQb3NpdGlv
bkluZm9ybWF0aW9uLmggKi8sCiAJCQkJRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50
SW5mby5jcHAgKi8sCiAJCQkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5o
ICovLAogCQkJCUY2QTBDMTNGMTMyODFFNkUwMDcwNDMwRiAvKiBSZXNvdXJjZUNhY2hlc1RvQ2xl
YXIuaCAqLywKQEAgLTYxNjksNiArNjE3NSw3IEBACiAJCQkJQkNDRjY3MkQxMkM3RURGNzAwOEY5
QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIx
NzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkVE
QUE2MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlD
NTMwNjZGNDE4ODVGMDI5MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxMTFCNTAxMTJGNjE5MjAwMzM3QkFCIC8qIFBhZ2VDbGllbnRJbXBsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5OSw2ICs2NDA2LDcgQEAKIAkJCQlC
QzMzREQ2ODEyMzg0NjQ2MDAzNjBGM0YgLyogQVBJTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzg1N0ZCNTEyQjgzMEU2MDBFREVCMkUgLyogV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4NTdGODUxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTMwNjZGMDE4ODBEMEE2MDAz
OTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxREZF
QTQxMkIzMUY4NzAwNURGNzMwIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMDMyRDhGMTBGNDM3QTAwMDU4QzE1QSAvKiBXZWJQYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNv
bnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc2MzQsNiArNzY0Miw3IEBACiAJ
CQkJMUE2NDIwRTQxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMDFBMjYwMTEyNjYyRjIxMDBDOUVENTUgLyogU2hhcmVhYmxlQml0bWFw
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUY3NTA2QUYxODU5MTYyODAwRUMwRkY3IC8qIFdL
V2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGUubW0gaW4gU291cmNlcyAqLywKKwkJCQlDNTMwNjZG
MzE4ODVGMDI5MDAzOTMxMEQgLyogUG9zaXRpb25JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyNEJGM0ExMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJlZE1l
bW9yeU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAg
LyogU3RhdGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTY5LDYgKzc5NzgsNyBA
QAogCQkJCTM3OTQ4NDA4MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc2MDg4MjIx
NTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUM1MzA2NkVGMTg4MEQwQTYwMDM5MzEwRCAvKiBQb3NpdGlvbkluZm9ybWF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMzMzY3NjNBMTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2Fj
aGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY2MzQ0NDVDMTJBODg1RTkwMDA2MTJE
OCAvKiBXS1NlY3VyaXR5T3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjAzMTI0
RkYwMjcwMDY4RjIwQSAvKiBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
cmV2aXNpb24gMTYyMDg1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIGNsYXNzIFdlYlBvcHVw
TWVudTsKIGNsYXNzIFdlYldoZWVsRXZlbnQ7CiBzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZzsKIHN0
cnVjdCBFZGl0b3JTdGF0ZTsKK3N0cnVjdCBQb3NpdGlvbkluZm9ybWF0aW9uOwogc3RydWN0IFBy
aW50SW5mbzsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmU7CkBAIC00MTksNiArNDIwLDggQEAgcHVibGljOgogICAgIHZvaWQgaW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CiAgICAgdm9pZCBzZXRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlv
bkVuZCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICB2b2lkIGdldFBvc2l0
aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBQb3NpdGlvbkluZm9ybWF0
aW9uJik7CisgICAgdm9pZCByZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOwogI2VuZGlmCiAKICAgICBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIqIG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigpOwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDE2MjA4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEluc2VydFRleHQo
U3RyaW5nIHRleHQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVw
bGFjZW1lbnRSYW5nZUVuZCkKICAgICBTZXRDb21wb3NpdGlvbihTdHJpbmcgdGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxl
Y3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kKQogICAgIENvbmZpcm1Db21wb3NpdGlv
bigpCisgICAgR2V0UG9zaXRpb25JbmZvcm1hdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkg
LT4gKFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlvbiBpbmZvcm1hdGlvbikKKyAgICBSZXF1ZXN0
UG9zaXRpb25JbmZvcm1hdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2MjA4NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV2ViUGFnZS5oIgogCiAjaW1w
b3J0ICJFZGl0b3JTdGF0ZS5oIgorI2ltcG9ydCAiUG9zaXRpb25JbmZvcm1hdGlvbi5oIgogI2lt
cG9ydCAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCkBAIC00MSwxMSArNDIsMTUgQEAKICNpbXBvcnQgPFdl
YkNvcmUvRmxvYXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50VHlwZUhlbHBlcnMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL05vZGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZv
cm1Nb3VzZUV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckltYWdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3Iu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRzLmg+CkBAIC0zNzgsMTMgKzM4Myw4IEBA
IHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW4KICAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAg
IEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludChwb2ludCk7CiAgICAgTm9kZSogbm9kZSA9IGZyYW1l
Lm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhGbG9hdFBvaW50KHBvaW50KSwgYWRqdXN0ZWRQ
b2ludCk7Ci0gICAgaWYgKG5vZGUgJiYgbm9kZSAhPSBtX2Fzc2lzdGVkTm9kZS5nZXQoKSkgewot
ICAgICAgICBoYW5kbGVUYXAoSW50UG9pbnQoYWRqdXN0ZWRQb2ludCkpOwotICAgICAgICBpZiAo
IW1fYXNzaXN0ZWROb2RlKSB7Ci0gICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgMCwg
Y2FsbGJhY2tJRCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAg
IEFTU0VSVCghbm9kZSB8fCBub2RlICYmIG5vZGUgPT0gbV9hc3Npc3RlZE5vZGUuZ2V0KCkpOwor
CiAgICAgSW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IGNvbnN0cmFpblBvaW50KHBvaW50LCAm
ZnJhbWUsIG1fYXNzaXN0ZWROb2RlLmdldCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKICAg
ICBpZiAocG9zaXRpb24uaXNOdWxsKCkpIHsKQEAgLTgwMyw2ICs4MDMsNTggQEAgdm9pZCBXZWJQ
YWdlOjpnZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoUwogICAgIGNvbXB1dGVBdXRvY29ycmVjdGlv
bkNvbnRleHQobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKSwg
Y29udGV4dEJlZm9yZSwgbWFya2VkVGV4dCwgc2VsZWN0ZWRUZXh0LCBjb250ZXh0QWZ0ZXIsIGxv
Y2F0aW9uLCBsZW5ndGgpOwogfQogCit2b2lkIFdlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRp
b24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBQb3NpdGlvbkluZm9ybWF0aW9uJiBpbmZvKQorewor
ICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludDsKKyAgICBOb2RlKiBoaXROb2RlID0gbV9wYWdl
LT5tYWluRnJhbWUoKS5ub2RlUmVzcG9uZGluZ1RvQ2xpY2tFdmVudHMocG9pbnQsIGFkanVzdGVk
UG9pbnQpOworCisgICAgaW5mby5wb2ludCA9IHBvaW50OworICAgIGluZm8uaXNTYW1lQXNzaXN0
ZWROb2RlID0gKGhpdE5vZGUgPT0gbV9hc3Npc3RlZE5vZGUpOworICAgIGlmIChoaXROb2RlKSB7
CisgICAgICAgIGluZm8uY2xpY2thYmxlRWxlbWVudE5hbWUgPSBoaXROb2RlLT5ub2RlTmFtZSgp
OworCisgICAgICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCho
aXROb2RlKTsKKyAgICAgICAgaWYgKCFlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmIChlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXRUYWcpIHx8
IGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBlbGVtZW50LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQorICAgICAgICAgICAgaW5mby53YW50
c0hpZ2hsaWdodCA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJlcigp
ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkgeworICAgICAgICAgICAgVVJMIHVy
bCA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC0+cmVuZGVyZXIoKSktPmNhY2hlZEltYWdlKCktPnVy
bCgpOworICAgICAgICAgICAgaWYgKCF1cmwuc3RyaW5nKCkuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbmZvLndhbnRzSGlnaGxpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbmZv
LnVybCA9IHVybC5zdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChl
bGVtZW50LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgaW5mby53YW50c0hpZ2hsaWdodCA9IHRy
dWU7CisgICAgICAgICAgICBpbmZvLnVybCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmhyZWZBdHRyKS5zdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxTZWxlY3RF
bGVtZW50KGhpdE5vZGUpKQorICAgICAgICAgICAgaW5mby53YW50c0hpZ2hsaWdodCA9IHRydWU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZm8ud2FudHNIaWdobGlnaHQgPSBoaXROb2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZyYW1lJiBmcmFt
ZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgICAgIGhpdE5vZGUgPSBmcmFtZS5ldmVudEhh
bmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCgocG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVh
ZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93
U2hhZG93Q29udGVudCkuaW5uZXJOb2RlKCk7CisgICAgICAgIGlmIChoaXROb2RlLT5pc1RleHRO
b2RlKCkpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZp
c2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICAgICAgaWYg
KHJhbmdlKQorICAgICAgICAgICAgICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMoaW5m
by5zZWxlY3Rpb25SZWN0cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IHRoZSBsb2dpYyBmb3IgdGhlIGJsb2NrIHNlbGVjdGlvbi4KKyAgICAgICAg
fQorCisgICAgfQorfQorCit2b2lkIFdlYlBhZ2U6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9u
KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBQb3NpdGlvbkluZm9ybWF0aW9uIGluZm87
CisKKyAgICBnZXRQb3NpdGlvbkluZm9ybWF0aW9uKHBvaW50LCBpbmZvKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVQb3NpdGlvbkluZm9ybWF0aW9uKGluZm8p
KTsKK30KKwogdm9pZCBXZWJQYWdlOjplbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6Tm9kZSogbm9k
ZSkKIHsKICAgICBtX2Fzc2lzdGVkTm9kZSA9IG5vZGU7Cg==
</data>
<flag name="review"
          id="245178"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221474</attachid>
            <date>2014-01-17 09:24:49 -0800</date>
            <delta_ts>2014-01-17 09:26:07 -0800</delta_ts>
            <desc>Build fix</desc>
            <filename>buildfix.txt</filename>
            <type>text/plain</type>
            <size>1519</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjIwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTAxLTE3ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1ODQzMDkwPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92aW5nIHVu
dXNlZCB2YXJpYWJsZSBpbiBzZWxlY3RXaXRoR2VzdHVyZSB0aGF0CisgICAgICAgIGNhdXNlcyBS
ZWxlYXNlIGJ1aWxkIHRvIGZhaWwgYWZ0ZXIgcjE2MjEwMy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2VsZWN0V2l0aEdlc3R1cmUpOgorCiAyMDE0LTAxLTE3ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1
bl96aGFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNzEzOApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTYyMTc1KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zODIsOCArMzgyLDYgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVy
ZShjb25zdCBJbgogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50KHBv
aW50KTsKLSAgICBOb2RlKiBub2RlID0gZnJhbWUubm9kZVJlc3BvbmRpbmdUb0NsaWNrRXZlbnRz
KEZsb2F0UG9pbnQocG9pbnQpLCBhZGp1c3RlZFBvaW50KTsKLSAgICBBU1NFUlQoIW5vZGUgfHwg
bm9kZSAmJiBub2RlID09IG1fYXNzaXN0ZWROb2RlLmdldCgpKTsKIAogICAgIEludFBvaW50IGNv
bnN0cmFpbmVkUG9pbnQgPSBjb25zdHJhaW5Qb2ludChwb2ludCwgJmZyYW1lLCBtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUudmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoY29uc3RyYWluZWRQb2ludCk7Cg==
</data>
<flag name="review"
          id="245397"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221787</attachid>
            <date>2014-01-21 14:25:54 -0800</date>
            <delta_ts>2014-01-22 18:26:51 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>webselections-webkit.txt</filename>
            <type>text/plain</type>
            <size>16802</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjQ3NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTAxLTIxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGFkZHMgc3VwcG9ydCBmb3IgdGV4dCBvbmx5IChub24gYmxvY2sgbW9kZSkKKyAgICAgICAgc2Vs
ZWN0aW9ucyBpbiBub24gZWRpdGFibGUgY29udGVudC4KKyAgICAgICAgVGhlIG1haW4gY2hhbmdl
cyBjb25zaXN0IGluIGhvb2tpbmcgdXAgdGhlIG5ldyBnZXN0dXJlIHR5cGUKKyAgICAgICAgYW5k
IHRvdWNoZXMgdG8gaGFuZGxlIHNlbGVjdGlvbiBjcmVhdGlvbiBhbmQgaW50ZXJhY3Rpb24uCisg
ICAgICAgIEl0IGFsc28gaW5jbHVkZXMgY2hhbmdlcyB0byB0aGUgd2F5IGZpcnN0IHJlc3BvbmRl
ciBpcyBoYW5kbGVkCisgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgaXNFZGl0YWJsZSBtZXRob2QKKyAgICAgICAgdG8gYWxsb3cgaU9TIHRvIGtub3cgd2hl
biB0byBzaG93IHRoZSBrZXlib2FyZC4KKworICAgICAgICAqIFNoYXJlZC9pb3MvV0tHZXN0dXJl
VHlwZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaXNFZGl0YWJsZV0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBjYW5CZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyB3ZWJTZWxlY3Rpb25SZWN0c10pOgorICAgICAgICAoLVtXS0lu
dGVyYWN0aW9uVmlldyBfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVjb2duaXplZDpdKTogV2UgZG8gbm90
CisgICAgICAgIGNhbGwgYXR0ZW1wdENsaWNrIGlmIHdlIGFyZSBvbiBhIG5vbiBjbGljY2FibGUg
ZWxlbWVudC4KKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3NpbmdsZVRhcFJlY29nbml6
ZWQ6XSk6IEFkZGVkIGxvZ2ljIHRvIGRpc21pc3MKKyAgICAgICAgdGhlIHNlbGVjdGlvbiBpZiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaW5wdXRBY2Nlc3NvcnlW
aWV3XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNhblBlcmZvcm1BY3Rpb246d2l0
aFNlbmRlcjpdKTogQWRkZWQgbG9naWMgdG8KKyAgICAgICAgc2hvdyB0aGUgYXBwcm9wcmlhdGUg
YnV0dG9ucyBpbiBub24gZWRpdGFibGUgY29udGVudC4KKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgX3Nob3dEaWN0aW9uYXJ5Ol0pOiBIb29rZWQgdXAgZGljdGlvbmFyeSBpbiBub24gZWRp
dGFibGUKKyAgICAgICAgY29udGVudC4KKyAgICAgICAgKHRvV0tHZXN0dXJlVHlwZSk6CisgICAg
ICAgICh0b1VJV0tHZXN0dXJlVHlwZSk6CisgICAgICAgICh0b1dLU2VsZWN0aW9uVG91Y2gpOgor
ICAgICAgICAodG9VSVdLU2VsZWN0aW9uVG91Y2gpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdl
ZFdpdGhHZXN0dXJlKToKKyAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2gpOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBzZWxlY3RlZFRleHRSYW5nZV0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyB3ZWJTZWxlY3Rpb25Bc3Npc3RhbnRdKToKKyAgICAgICAgKC1b
V0tJbnRlcmFjdGlvblZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZV0pOgorICAgICAgICAoLVtXS0lu
dGVyYWN0aW9uVmlldyBfc3RvcEFzc2lzdGluZ05vZGVdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdp
dGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0
aFRvdWNoZXMpOgorCiAyMDE0LTAxLTIxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTYyNDUyLgpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaAkocmV2aXNpb24g
MTYyNDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0tHZXN0
dXJlT25lRmluZ2VyVHJpcGxlVGFwLAogICAgIFdLR2VzdHVyZVR3b0ZpbmdlclNpbmdsZVRhcCwK
ICAgICBXS0dlc3R1cmVUd29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlLAotICAgIFdLR2VzdHVy
ZVRhcE9uTGlua1dpdGhHZXN0dXJlCisgICAgV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmUs
CisgICAgV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbgogfSBXS0dlc3R1cmVUeXBlOwogCiB0eXBl
ZGVmIGVudW0gewpAQCAtNTAsNyArNTEsMTAgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXS1NlbGVj
dGlvblRvdWNoRW5kZWQsCiAgICAgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nRm9yd2FyZCwK
ICAgICBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZCwKLSAgICBXS1NlbGVjdGlv
blRvdWNoRW5kZWROb3RNb3ZpbmcKKyAgICBXS1NlbGVjdGlvblRvdWNoRW5kZWROb3RNb3Zpbmcs
CisgICAgV0tXZWJTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQsCisgICAgV0tXZWJTZWxlY3Rpb25Ub3Vj
aE1vdmVkLAorICAgIFdLV2ViU2VsZWN0aW9uVG91Y2hFbmRlZCwKIH0gV0tTZWxlY3Rpb25Ub3Vj
aDsKIAogdHlwZWRlZiBlbnVtIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
aW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCShyZXZpc2lvbiAxNjI0NzQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIEBpbnRlcmZhY2UgV0tJbnRlcmFjdGlv
blZpZXcgKFByaXZhdGUpCiAgICAgUmV0YWluUHRyPFVJV0tTZWxlY3Rpb25Bc3Npc3RhbnQ+IF93
ZWJTZWxlY3Rpb25Bc3Npc3RhbnQ7CiAKICAgICBVSVRleHRJbnB1dFRyYWl0cyAqX3RyYWl0czsK
LSAgICBCT09MIF9jYW5CZUZpcnN0UmVzcG9uZGVyOworICAgIEJPT0wgX2lzRWRpdGFibGU7CiAg
ICAgVUlXZWJGb3JtQWNjZXNzb3J5ICpfYWNjZXNzb3J5OwogICAgIGlkIDxVSVRleHRJbnB1dERl
bGVnYXRlPiBfaW5wdXREZWxlZ2F0ZTsKICAgICBCT09MIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9u
czsKQEAgLTI0MSw5ICsyNDEsMTYgQEAgLSAodm9pZClzZXRQYWdlOihQYXNzUmVmUHRyPFdlYktp
dDo6V2ViUAogICAgIF9wYWdlID0gcGFnZTsKIH0KIAorLSAoQk9PTClpc0VkaXRhYmxlCit7Cisg
ICAgcmV0dXJuIF9pc0VkaXRhYmxlOworfQorCiAtIChCT09MKWNhbkJlY29tZUZpcnN0UmVzcG9u
ZGVyCiB7Ci0gICAgcmV0dXJuIF9jYW5CZUZpcnN0UmVzcG9uZGVyOworICAgIC8vIFdlIG1pZ2h0
IHdhbnQgdG8gcmV0dXJuIHNvbWV0aGluZyBlbHNlCisgICAgLy8gaWYgd2UgZGVjaWRlIHRvIGVu
YWJsZS9kaXNhYmxlIGludGVyYWN0aW9uIHByb2dyYW1tYXRpY2FsbHkuCisgICAgcmV0dXJuIFlF
UzsKIH0KIAogLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgpAQCAtNTE1LDYgKzUyMiwzMSBA
QCAtIChCT09MKXBvaW50SXNJbkFzc2lzdGVkTm9kZTooQ0dQb2ludClwCiAgICAgcmV0dXJuIF9w
b3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGU7CiB9CiAKKy0g
KE5TQXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0cworeworICAgIHVuc2lnbmVkIHNpemUgPSBfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0cy5zaXplKCk7CisgICAgaWYgKCFzaXplKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNdXRhYmxlQXJyYXkgKndlYlJlY3RzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9u
UmVjdCYgY29yZVJlY3QgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0c1tpXTsK
KyAgICAgICAgV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNl
bGVjdGlvblJlY3RdOworICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7Cisg
ICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09
IExUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9u
UmlnaHRUb0xlZnQ7CisgICAgICAgIHdlYlJlY3QuaXNMaW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xp
bmVCcmVhaygpOworICAgICAgICB3ZWJSZWN0LmlzRmlyc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0Zp
cnN0T25MaW5lKCk7CisgICAgICAgIHdlYlJlY3QuaXNMYXN0T25MaW5lID0gY29yZVJlY3QuaXNM
YXN0T25MaW5lKCk7CisgICAgICAgIHdlYlJlY3QuY29udGFpbnNTdGFydCA9IGNvcmVSZWN0LmNv
bnRhaW5zU3RhcnQoKTsKKyAgICAgICAgd2ViUmVjdC5jb250YWluc0VuZCA9IGNvcmVSZWN0LmNv
bnRhaW5zRW5kKCk7CisgICAgICAgIHdlYlJlY3QuaXNJbkZpeGVkUG9zaXRpb24gPSBjb3JlUmVj
dC5pc0luRml4ZWRQb3NpdGlvbigpOworICAgICAgICB3ZWJSZWN0LmlzSG9yaXpvbnRhbCA9IGNv
cmVSZWN0LmlzSG9yaXpvbnRhbCgpOworICAgICAgICBbd2ViUmVjdHMgYWRkT2JqZWN0OndlYlJl
Y3RdOworICAgIH0KKworICAgIHJldHVybiB3ZWJSZWN0czsKK30KKwogLSAodm9pZClfaGlnaGxp
Z2h0TG9uZ1ByZXNzUmVjb2duaXplZDooVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciAqKWdl
c3R1cmVSZWNvZ25pemVyCiB7CiAgICAgQVNTRVJUKGdlc3R1cmVSZWNvZ25pemVyID09IF9oaWdo
bGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcik7CkBAIC01MjUsNyArNTU3LDggQEAgLSAo
dm9pZClfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVjb2duaXplZDooVQogICAgICAgICBfaXNUYXBIaWdo
bGlnaHRJRFZhbGlkID0gWUVTOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUVuZGVkOgotICAgICAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRMb2NhdGlv
bjpbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF1dOworICAgICAgICBpZiAoIV9wb3NpdGlv
bkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IFtzZWxmIF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltnZXN0dXJlUmVjb2duaXplciBzdGFydFBv
aW50XV07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
Q2FuY2VsbGVkOgogICAgICAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOwpAQCAtNTU2LDYg
KzU4OSwxMyBAQCAtICh2b2lkKV9sb25nUHJlc3NSZWNvZ25pemVkOihVSUxvbmdQcmVzCiAKIC0g
KHZvaWQpX3NpbmdsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0
dXJlUmVjb2duaXplcgogeworICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9PSBfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIpOworCisgICAgaWYgKCFbX3dlYlNlbGVjdGlvbkFzc2lzdGFu
dCBzaG91bGRIYW5kbGVTaW5nbGVUYXBBdFBvaW50Omdlc3R1cmVSZWNvZ25pemVyLmxvY2F0aW9u
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgY2xlYXJT
ZWxlY3Rpb25dOworCiAgICAgW3NlbGYgX2F0dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVS
ZWNvZ25pemVyIGxvY2F0aW9uXV07CiB9CiAKQEAgLTYxOCw3ICs2NTgsNyBAQCAtICh2b2lkKV9w
b3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjCiAKIC0gKFVJVmlldyAqKWlucHV0QWNjZXNz
b3J5VmlldwogewotICAgIGlmICghX2NhbkJlRmlyc3RSZXNwb25kZXIpCisgICAgaWYgKCFfaXNF
ZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBpZiAoIV9hY2Nlc3Nvcnkp
IHsKQEAgLTY2OSw4ICs3MDksNyBAQCAtICh2b2lkKXJlcGxhY2U6KGlkKXNlbmRlcgogCiAtIChC
T09MKWNhblBlcmZvcm1BY3Rpb246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCiB7
Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gaGFuZGxlIGhhc1dlYlNlbGVjdGlvbgotICAgIEJPT0wg
aGFzV2ViU2VsZWN0aW9uID0gTk87CisgICAgQk9PTCBoYXNXZWJTZWxlY3Rpb24gPSBfd2ViU2Vs
ZWN0aW9uQXNzaXN0YW50ICE9IG5pbCAmJiAhQ0dSZWN0SXNFbXB0eShfd2ViU2VsZWN0aW9uQXNz
aXN0YW50LmdldCgpLnNlbGVjdGlvbkZyYW1lKTsKIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9zaG93VGV4dFN0eWxlT3B0aW9uczopKQogICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCku
c2VsZWN0aW9uSXNSYW5nZSAmJiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtODIyLDcg
Kzg2MSwxMCBAQCAtICh2b2lkKV9zaG93VGV4dFN0eWxlT3B0aW9uczooaWQpc2VuZGVyCiAtICh2
b2lkKV9zaG93RGljdGlvbmFyeTooTlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgQ0dSZWN0IHByZXNl
bnRhdGlvblJlY3QgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0c1swXS5yZWN0
KCk7Ci0gICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopc2VsZi5pbnRlcmFjdGlv
bkFzc2lzdGFudCBzaG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJl
Y3RdOworICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKKyAgICAgICAgW190ZXh0U2Vs
ZWN0aW9uQXNzaXN0YW50IHNob3dEaWN0aW9uYXJ5Rm9yOnRleHQgZnJvbVJlY3Q6cHJlc2VudGF0
aW9uUmVjdF07CisgICAgZWxzZQorICAgICAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBzaG93
RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3RdOwogfQogCiBzdGF0
aWMgdm9pZCBzZWxlY3RlZFN0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIFdLRXJyb3JSZWYgZXJy
b3IsIHZvaWQqIGNvbnRleHQpCkBAIC04NzQsNiArOTE2LDggQEAgc3RhdGljIGlubGluZSBXS0dl
c3R1cmVUeXBlIHRvV0tHZXN0dXJlVAogICAgICAgICByZXR1cm4gV0tHZXN0dXJlVHdvRmluZ2Vy
UmFuZ2VkU2VsZWN0R2VzdHVyZTsKICAgICBjYXNlIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdl
c3R1cmU6CiAgICAgICAgIHJldHVybiBXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZTsKKyAg
ICBjYXNlIFVJV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjoKKyAgICAgICAgcmV0dXJuIFdLR2Vz
dHVyZU1ha2VXZWJTZWxlY3Rpb247CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXS0dlc3R1cmVMb3VwZTsKQEAgLTkwOCw2ICs5NTIsOCBAQCBzdGF0aWMgaW5s
aW5lIFVJV0tHZXN0dXJlVHlwZSB0b1VJV0tHZXN0CiAgICAgICAgIHJldHVybiBVSVdLR2VzdHVy
ZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU7CiAgICAgY2FzZSBXS0dlc3R1cmVUYXBPbkxp
bmtXaXRoR2VzdHVyZToKICAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdl
c3R1cmU7CisgICAgY2FzZSBXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOgorICAgICAgICByZXR1
cm4gVUlXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOwogICAgIH0KIH0KIApAQCAtOTI2LDYgKzk3
MiwxMiBAQCBzdGF0aWMgaW5saW5lIFdLU2VsZWN0aW9uVG91Y2ggdG9XS1NlbGVjCiAgICAgICAg
IHJldHVybiBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDsKICAgICBjYXNlIFVJ
V0tTZWxlY3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOgogICAgICAgICByZXR1cm4gV0tTZWxlY3Rp
b25Ub3VjaEVuZGVkTm90TW92aW5nOworICAgIGNhc2UgVUlXS1dlYlNlbGVjdGlvblRvdWNoU3Rh
cnRlZDoKKyAgICAgICAgcmV0dXJuIFdLV2ViU2VsZWN0aW9uVG91Y2hTdGFydGVkOworICAgIGNh
c2UgVUlXS1dlYlNlbGVjdGlvblRvdWNoTW92ZWQ6CisgICAgICAgIHJldHVybiBXS1dlYlNlbGVj
dGlvblRvdWNoTW92ZWQ7CisgICAgY2FzZSBVSVdLV2ViU2VsZWN0aW9uVG91Y2hFbmRlZDoKKyAg
ICAgICAgcmV0dXJuIFdLV2ViU2VsZWN0aW9uVG91Y2hFbmRlZDsKICAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hFbmRlZDsKQEAgLTk0
Niw2ICs5OTgsMTIgQEAgc3RhdGljIGlubGluZSBVSVdLU2VsZWN0aW9uVG91Y2ggdG9VSVdLUwog
ICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDsKICAg
ICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzoKICAgICAgICAgcmV0dXJuIFVJ
V0tTZWxlY3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOworICAgIGNhc2UgV0tXZWJTZWxlY3Rpb25U
b3VjaFN0YXJ0ZWQ6CisgICAgICAgIHJldHVybiBVSVdLV2ViU2VsZWN0aW9uVG91Y2hTdGFydGVk
OworICAgIGNhc2UgV0tXZWJTZWxlY3Rpb25Ub3VjaE1vdmVkOgorICAgICAgICByZXR1cm4gVUlX
S1dlYlNlbGVjdGlvblRvdWNoTW92ZWQ7CisgICAgY2FzZSBXS1dlYlNlbGVjdGlvblRvdWNoRW5k
ZWQ6CisgICAgICAgIHJldHVybiBVSVdLV2ViU2VsZWN0aW9uVG91Y2hFbmRlZDsKICAgICB9CiB9
CiAKQEAgLTk5NCw3ICsxMDUyLDEwIEBAIHN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRo
R2VzdHVyZSgKICAgICBXS0ludGVyYWN0aW9uVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdLSW50
ZXJhY3Rpb25WaWV3Kj4oY29udGV4dCk7CiAgICAgQVNTRVJUKHZpZXcpOwogICAgIC8vIEZJWE1F
OiBuZWVkIHRvIHBhc3MgZmxhZ3MgdG8gc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlQXQuCi0g
ICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rpb25Bc3Np
c3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhH
ZXN0dXJlOnRvVUlXS0dlc3R1cmVUeXBlKChXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlKSB3aXRo
U3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGljX2Nhc3Q8V0tHZXN0dXJlUmVj
b2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpKV07CisgICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlv
bkFzc2lzdGFudF0pCisgICAgICAgIFsoVUlXS1NlbGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdl
YlNlbGVjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlQXQ6KENHUG9p
bnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5cGUoKFdLR2VzdHVyZVR5cGUpZ2Vz
dHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShzdGF0aWNfY2Fz
dDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSkpXTsKKyAgICBlbHNlCisg
ICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9u
QXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3
aXRoR2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkg
d2l0aFN0YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSldOwogfQogCiBzdGF0aWMgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWlu
dDMyX3QgdG91Y2gsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCkBAIC0xMDA1LDcg
KzEwNjYsMTAgQEAgc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChjbwogICAg
IH0KICAgICBXS0ludGVyYWN0aW9uVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdLSW50ZXJhY3Rp
b25WaWV3Kj4oY29udGV4dCk7CiAgICAgQVNTRVJUKHZpZXcpOwotICAgIFsoVUlXS1RleHRJbnRl
cmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25D
aGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlX
S1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CisgICAgaWYgKFt2aWV3
IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pCisgICAgICAgIFsoVUlXS1NlbGVjdGlvbkFzc2lzdGFu
dCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3Vj
aEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3Vj
aCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCldOworICAgIGVsc2UKKyAgICAgICAgWyhVSVdLVGV4
dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdIHNlbGVj
dGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6
dG9VSVdLU2VsZWN0aW9uVG91Y2goKFdLU2VsZWN0aW9uVG91Y2gpdG91Y2gpXTsKIH0KIAogLSAo
dm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0
dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGUpc3RhdGUKQEAgLTExNjIsMjkgKzEyMjYsMTIgQEAgLSAodm9pZClyZXBsYWNl
UmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZwogCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4
dFJhbmdlCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVj
dGlvblJlY3RzLnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqd2ViUmVjdHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25SZWN0
JiBjb3JlUmVjdCA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzW2ldOwotICAg
ICAgICBXZWJTZWxlY3Rpb25SZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0
aW9uUmVjdF07Ci0gICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKLSAgICAg
ICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gTFRS
ID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDsKLSAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0LmlzTGluZUJy
ZWFrKCk7Ci0gICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0LmlzRmlyc3RP
bkxpbmUoKTsKLSAgICAgICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0xhc3RP
bkxpbmUoKTsKLSAgICAgICAgd2ViUmVjdC5jb250YWluc1N0YXJ0ID0gY29yZVJlY3QuY29udGFp
bnNTdGFydCgpOwotICAgICAgICB3ZWJSZWN0LmNvbnRhaW5zRW5kID0gY29yZVJlY3QuY29udGFp
bnNFbmQoKTsKLSAgICAgICAgd2ViUmVjdC5pc0luRml4ZWRQb3NpdGlvbiA9IGNvcmVSZWN0Lmlz
SW5GaXhlZFBvc2l0aW9uKCk7Ci0gICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0gY29yZVJl
Y3QuaXNIb3Jpem9udGFsKCk7Ci0gICAgICAgIFt3ZWJSZWN0cyBhZGRPYmplY3Q6d2ViUmVjdF07
Ci0gICAgfQotCiAgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0UmFuZ2VXaXRoU3RhdGU6X3Bh
Z2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25lCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzUmFuZ2U6X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5n
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRhYmxlOl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydFJlY3Q6X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRTdGFydAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRSZWN0Ol9wYWdlLT5lZGl0b3JTdGF0
ZSgpLmNhcmV0UmVjdEF0RW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9u
UmVjdHM6d2ViUmVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0
czpbc2VsZiB3ZWJTZWxlY3Rpb25SZWN0c10KICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGVkVGV4dExlbmd0aDpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3RlZFRleHRMZW5ndGhdOwog
fQogCkBAIC0xMzU3LDYgKzE0MDQsMTEgQEAgLSAoVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQg
KilpbnRlcmFjdAogICAgIHJldHVybiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKTsKIH0K
IAorLSAoVUlXZWJTZWxlY3Rpb25Bc3Npc3RhbnQgKil3ZWJTZWxlY3Rpb25Bc3Npc3RhbnQKK3sK
KyAgICByZXR1cm4gX3dlYlNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKTsKK30KKwogCiAvLyBOU1Jh
bmdlIHN1cHBvcnQuICBXb3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0byB0aGUgZXh0ZW50IHBvc3Np
YmxlLCBhbHRob3VnaCBzb21lIHN1cHBvcnQKIC8vIChpLmUuIHNlbGVjdGlvblJhbmdlKSBoYXMg
c2hpcHBlZCBhcyBBUEkuCkBAIC0xNjMwLDE3ICsxNjgyLDE4IEBAIC0gKHZvaWQpX3N0b3BBc3Np
c3RpbmdLZXlib2FyZAogCiAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGUKIHsKLSAgICBfY2Fu
QmVGaXJzdFJlc3BvbmRlciA9IFlFUzsKKyAgICBfaXNFZGl0YWJsZSA9IFlFUzsKICAgICBpZiAo
IVtzZWxmIGlzRmlyc3RSZXNwb25kZXJdKQogICAgICAgICBbc2VsZiBiZWNvbWVGaXJzdFJlc3Bv
bmRlcl07CiAKICAgICBbc2VsZiBfc3RhcnRBc3Npc3RpbmdLZXlib2FyZF07CisgICAgW3NlbGYg
cmVsb2FkSW5wdXRWaWV3c107CiAgICAgW3NlbGYgX3VwZGF0ZUFjY2Vzc29yeV07CiB9CiAKIC0g
KHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlCiB7Ci0gICAgX2NhbkJlRmlyc3RSZXNwb25kZXIgPSBO
TzsKKyAgICBfaXNFZGl0YWJsZSA9IE5POwogICAgIGlmIChbc2VsZiBpc0ZpcnN0UmVzcG9uZGVy
XSkKICAgICAgICAgW3NlbGYgcmVzaWduRmlyc3RSZXNwb25kZXJdOwogICAgIApAQCAtMTY1MSwx
MCArMTcwNCwxMyBAQCAtICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZQogCiAtICh2b2lkKV9zZWxl
Y3Rpb25DaGFuZ2VkCiB7Ci0gICAgX21hcmtlZFRleHQgPSAoX3BhZ2UtPmVkaXRvclN0YXRlKCku
aGFzQ29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCkubWFya2VkVGV4dCA6IFN0cmlu
ZygpOwogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyBpZiB0
aGUgc2VsZWN0aW9uIGlzIGNoYW5nZWQgYnkgSmF2YXNjcmlwdC4KLSAgICBpZiAoIV9zaG93aW5n
VGV4dFN0eWxlT3B0aW9ucykKLSAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNlbGVj
dGlvbkNoYW5nZWRdOworICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkgeworICAgICAg
ICBfbWFya2VkVGV4dCA9IChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikgPyBf
cGFnZS0+ZWRpdG9yU3RhdGUoKS5tYXJrZWRUZXh0IDogU3RyaW5nKCk7CisgICAgICAgIGlmICgh
X3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zKQorICAgICAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNz
aXN0YW50IHNlbGVjdGlvbkNoYW5nZWRdOworICAgIH0gZWxzZQorICAgICAgICBbX3dlYlNlbGVj
dGlvbkFzc2lzdGFudCBzZWxlY3Rpb25DaGFuZ2VkXTsKIH0KIAogI3ByYWdtYSBtYXJrIC0gSW1w
bGVtZW50YXRpb24gb2YgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUu
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNjI0NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4Myw3ICsz
ODMsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEluCiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQocG9pbnQpOwogCi0gICAgSW50UG9pbnQg
Y29uc3RyYWluZWRQb2ludCA9IGNvbnN0cmFpblBvaW50KHBvaW50LCAmZnJhbWUsIG1fYXNzaXN0
ZWROb2RlLmdldCgpKTsKKyAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gKG1fYXNzaXN0
ZWROb2RlKSA/IGNvbnN0cmFpblBvaW50KHBvaW50LCAmZnJhbWUsIG1fYXNzaXN0ZWROb2RlLmdl
dCgpKSA6IHBvaW50OwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVD
YWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgMCwgY2FsbGJhY2tJRCkp
OwpAQCAtNDc4LDcgKzQ3OCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNv
bnN0IEluCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFBhcmFncmFwaEdyYW51bGFyaXR5LCBEaXJlY3Rp
b25Gb3J3YXJkKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2FzZSBXS0dlc3R1
cmVNYWtlV2ViU2VsZWN0aW9uOgorICAgICAgICAvLyBGSVhNRTogSGVyZSB3ZSBzaG91bGQgaW1w
bGVtZW50IHRoZSBsb2dpYyBmb3IgYmxvY2sgc2VsZWN0aW9ucy4KKyAgICAgICAgcmFuZ2UgPSB3
b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBicmVhazsKKwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4MCw2ICs1ODUsNyBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzCiAgICAgVmlzaWJsZVBvc2l0aW9uIHJl
c3VsdDsKICAgICAKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFdLU2VsZWN0aW9uVG91Y2g+KHRv
dWNoZXMpKSB7CisgICAgICAgIGNhc2UgV0tXZWJTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6CiAgICAg
ICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6CiAgICAgICAgIGNhc2UgV0tTZWxlY3Rp
b25Ub3VjaEVuZGVkTm90TW92aW5nOgogICAgICAgICAgICAgYnJlYWs7CkBAIC01OTgsNyArNjA0
LDkgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcwogICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZUF0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3NpdGlv
biwgYmFzZUlzU3RhcnQsIERpcmVjdGlvbkJhY2t3YXJkKTsKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgV0tXZWJTZWxlY3Rpb25Ub3VjaEVuZGVkOgogICAgICAgICBjYXNlIFdL
U2VsZWN0aW9uVG91Y2hNb3ZlZDoKKyAgICAgICAgY2FzZSBXS1dlYlNlbGVjdGlvblRvdWNoTW92
ZWQ6CiAgICAgICAgICAgICByYW5nZSA9IHJhbmdlRm9yUG9zaXRpb24oJmZyYW1lLCBwb3NpdGlv
biwgYmFzZUlzU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221933</attachid>
            <date>2014-01-22 18:26:51 -0800</date>
            <delta_ts>2014-01-22 18:28:18 -0800</delta_ts>
            <desc>Patch4</desc>
            <filename>webselections-webkit.txt</filename>
            <type>text/plain</type>
            <size>15183</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjU4MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE0LTAxLTIyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGFkZHMgc3VwcG9ydCBmb3IgdGV4dCBvbmx5IChub24gYmxvY2sgbW9kZSkKKyAgICAgICAgc2Vs
ZWN0aW9ucyBpbiBub24gZWRpdGFibGUgY29udGVudC4KKyAgICAgICAgVGhlIG1haW4gY2hhbmdl
cyBjb25zaXN0IGluIGhvb2tpbmcgdXAgdGhlIG5ldyBnZXN0dXJlIHR5cGUKKyAgICAgICAgYW5k
IHRvdWNoZXMgdG8gaGFuZGxlIHNlbGVjdGlvbiBjcmVhdGlvbiBhbmQgaW50ZXJhY3Rpb24uCisg
ICAgICAgIEl0IGFsc28gaW5jbHVkZXMgY2hhbmdlcyB0byB0aGUgd2F5IGZpcnN0IHJlc3BvbmRl
ciBpcyBoYW5kbGVkCisgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgaXNFZGl0YWJsZSBtZXRob2QKKyAgICAgICAgdG8gYWxsb3cgaU9TIHRvIGtub3cgd2hl
biB0byBzaG93IHRoZSBrZXlib2FyZC4KKworICAgICAgICAqIFNoYXJlZC9pb3MvV0tHZXN0dXJl
VHlwZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaXNFZGl0YWJsZV0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBjYW5CZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyB3ZWJTZWxlY3Rpb25SZWN0c10pOgorICAgICAgICAoLVtXS0lu
dGVyYWN0aW9uVmlldyBfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVjb2duaXplZDpdKToKKyAgICAgICAg
KC1bV0tJbnRlcmFjdGlvblZpZXcgX3NpbmdsZVRhcFJlY29nbml6ZWQ6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IGlucHV0QWNjZXNzb3J5Vmlld10pOgorICAgICAgICAoLVtXS0lu
dGVyYWN0aW9uVmlldyBjYW5QZXJmb3JtQWN0aW9uOndpdGhTZW5kZXI6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IF9zaG93RGljdGlvbmFyeTpdKToKKyAgICAgICAgKHRvV0tHZXN0
dXJlVHlwZSk6CisgICAgICAgICh0b1VJV0tHZXN0dXJlVHlwZSk6CisgICAgICAgIChzZWxlY3Rp
b25DaGFuZ2VkV2l0aEdlc3R1cmUpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3Vj
aCk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNlbGVjdGVkVGV4dFJhbmdlXSk6Cisg
ICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlXSk6CisgICAgICAg
ICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9zdG9wQXNzaXN0aW5nTm9kZV0pOgorICAgICAgICAoLVtX
S0ludGVyYWN0aW9uVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF0pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2VsZWN0V2l0aEdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxl
Y3Rpb25XaXRoVG91Y2hlcyk6CisKIDIwMTQtMDEtMjIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgc2hv
dWxkIG5vdCBiZSBhbiBBUEkgd3JhcHBlciBhcm91bmQgV2ViUGFnZVByb3h5CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCShyZXZpc2lvbiAxNjI1MzEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5cGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXS0dlc3R1cmVPbmVG
aW5nZXJUcmlwbGVUYXAsCiAgICAgV0tHZXN0dXJlVHdvRmluZ2VyU2luZ2xlVGFwLAogICAgIFdL
R2VzdHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmUsCi0gICAgV0tHZXN0dXJlVGFwT25M
aW5rV2l0aEdlc3R1cmUKKyAgICBXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZSwKKyAgICBX
S0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uCiB9IFdLR2VzdHVyZVR5cGU7CiAKIHR5cGVkZWYgZW51
bSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9u
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9X
S0ludGVyYWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTYyNTMxKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE1Miw3ICsxNTIsNyBAQCBAaW50ZXJmYWNlIFdLSW50ZXJhY3Rpb25WaWV3IChQcml2YXRlKQog
ICAgIFJldGFpblB0cjxVSVdLU2VsZWN0aW9uQXNzaXN0YW50PiBfd2ViU2VsZWN0aW9uQXNzaXN0
YW50OwogCiAgICAgVUlUZXh0SW5wdXRUcmFpdHMgKl90cmFpdHM7Ci0gICAgQk9PTCBfY2FuQmVG
aXJzdFJlc3BvbmRlcjsKKyAgICBCT09MIF9pc0VkaXRhYmxlOwogICAgIFVJV2ViRm9ybUFjY2Vz
c29yeSAqX2FjY2Vzc29yeTsKICAgICBpZCA8VUlUZXh0SW5wdXREZWxlZ2F0ZT4gX2lucHV0RGVs
ZWdhdGU7CiAgICAgQk9PTCBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnM7CkBAIC0yNDEsOSArMjQx
LDE2IEBAIC0gKHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlAKICAgICBfcGFn
ZSA9IHBhZ2U7CiB9CiAKKy0gKEJPT0wpaXNFZGl0YWJsZQoreworICAgIHJldHVybiBfaXNFZGl0
YWJsZTsKK30KKwogLSAoQk9PTCljYW5CZWNvbWVGaXJzdFJlc3BvbmRlcgogewotICAgIHJldHVy
biBfY2FuQmVGaXJzdFJlc3BvbmRlcjsKKyAgICAvLyBXZSBtaWdodCB3YW50IHRvIHJldHVybiBz
b21ldGhpbmcgZWxzZQorICAgIC8vIGlmIHdlIGRlY2lkZSB0byBlbmFibGUvZGlzYWJsZSBpbnRl
cmFjdGlvbiBwcm9ncmFtbWF0aWNhbGx5LgorICAgIHJldHVybiBZRVM7CiB9CiAKIC0gKEJPT0wp
cmVzaWduRmlyc3RSZXNwb25kZXIKQEAgLTUxNSw2ICs1MjIsMzEgQEAgLSAoQk9PTClwb2ludElz
SW5Bc3Npc3RlZE5vZGU6KENHUG9pbnQpcAogICAgIHJldHVybiBfcG9zaXRpb25JbmZvcm1hdGlv
bi5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOwogfQogCistIChOU0FycmF5ICopd2ViU2Vs
ZWN0aW9uUmVjdHMKK3sKKyAgICB1bnNpZ25lZCBzaXplID0gX3BhZ2UtPmVkaXRvclN0YXRlKCku
c2VsZWN0aW9uUmVjdHMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0g
X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uUmVjdHNbaV07CisgICAgICAgIFdlYlNlbGVj
dGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKKyAg
ICAgICAgd2ViUmVjdC5yZWN0ID0gY29yZVJlY3QucmVjdCgpOworICAgICAgICB3ZWJSZWN0Lndy
aXRpbmdEaXJlY3Rpb24gPSBjb3JlUmVjdC5kaXJlY3Rpb24oKSA9PSBMVFIgPyBXS1dyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAg
ICAgICB3ZWJSZWN0LmlzTGluZUJyZWFrID0gY29yZVJlY3QuaXNMaW5lQnJlYWsoKTsKKyAgICAg
ICAgd2ViUmVjdC5pc0ZpcnN0T25MaW5lID0gY29yZVJlY3QuaXNGaXJzdE9uTGluZSgpOworICAg
ICAgICB3ZWJSZWN0LmlzTGFzdE9uTGluZSA9IGNvcmVSZWN0LmlzTGFzdE9uTGluZSgpOworICAg
ICAgICB3ZWJSZWN0LmNvbnRhaW5zU3RhcnQgPSBjb3JlUmVjdC5jb250YWluc1N0YXJ0KCk7Cisg
ICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOworICAg
ICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRp
b24oKTsKKyAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250
YWwoKTsKKyAgICAgICAgW3dlYlJlY3RzIGFkZE9iamVjdDp3ZWJSZWN0XTsKKyAgICB9CisKKyAg
ICByZXR1cm4gd2ViUmVjdHM7Cit9CisKIC0gKHZvaWQpX2hpZ2hsaWdodExvbmdQcmVzc1JlY29n
bml6ZWQ6KFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgog
ewogICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIpOwpAQCAtNTI1LDcgKzU1Nyw4IEBAIC0gKHZvaWQpX2hpZ2hsaWdodExv
bmdQcmVzc1JlY29nbml6ZWQ6KFUKICAgICAgICAgX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCA9IFlF
UzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRl
ZDoKLSAgICAgICAgW3NlbGYgX2F0dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVSZWNvZ25p
emVyIHN0YXJ0UG9pbnRdXTsKKyAgICAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlj
a2FibGVFbGVtZW50TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBbc2VsZiBfYXR0ZW1wdENs
aWNrQXRMb2NhdGlvbjpbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF1dOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKICAgICAg
ICAgW3NlbGYgX2NhbmNlbEludGVyYWN0aW9uXTsKQEAgLTU1Niw2ICs1ODksMTMgQEAgLSAodm9p
ZClfbG9uZ1ByZXNzUmVjb2duaXplZDooVUlMb25nUHJlcwogCiAtICh2b2lkKV9zaW5nbGVUYXBS
ZWNvZ25pemVkOihVSVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsK
KyAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25p
emVyKTsKKworICAgIGlmICghW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvdWxkSGFuZGxlU2lu
Z2xlVGFwQXRQb2ludDpnZXN0dXJlUmVjb2duaXplci5sb2NhdGlvbl0pCisgICAgICAgIHJldHVy
bjsKKworICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IGNsZWFyU2VsZWN0aW9uXTsKKwogICAg
IFtzZWxmIF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltnZXN0dXJlUmVjb2duaXplciBsb2NhdGlv
bl1dOwogfQogCkBAIC02MTgsNyArNjU4LDcgQEAgLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlv
bkRpZENoYW5nZTooYwogCiAtIChVSVZpZXcgKilpbnB1dEFjY2Vzc29yeVZpZXcKIHsKLSAgICBp
ZiAoIV9jYW5CZUZpcnN0UmVzcG9uZGVyKQorICAgIGlmICghX2lzRWRpdGFibGUpCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgCiAgICAgaWYgKCFfYWNjZXNzb3J5KSB7CkBAIC02NjksOCArNzA5
LDcgQEAgLSAodm9pZClyZXBsYWNlOihpZClzZW5kZXIKIAogLSAoQk9PTCljYW5QZXJmb3JtQWN0
aW9uOihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogewotICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIGhhbmRsZSBoYXNXZWJTZWxlY3Rpb24KLSAgICBCT09MIGhhc1dlYlNlbGVjdGlvbiA9
IE5POworICAgIEJPT0wgaGFzV2ViU2VsZWN0aW9uID0gX3dlYlNlbGVjdGlvbkFzc2lzdGFudCAm
JiAhQ0dSZWN0SXNFbXB0eShfd2ViU2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLnNlbGVjdGlvbkZy
YW1lKTsKIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9zaG93VGV4dFN0eWxlT3B0aW9u
czopKQogICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSAmJiAhX3No
b3dpbmdUZXh0U3R5bGVPcHRpb25zOwpAQCAtODIyLDcgKzg2MSwxMCBAQCAtICh2b2lkKV9zaG93
VGV4dFN0eWxlT3B0aW9uczooaWQpc2VuZGVyCiAtICh2b2lkKV9zaG93RGljdGlvbmFyeTooTlNT
dHJpbmcgKil0ZXh0CiB7CiAgICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0c1swXS5yZWN0KCk7Ci0gICAgWyhVSVdLVGV4dEludGVy
YWN0aW9uQXNzaXN0YW50ICopc2VsZi5pbnRlcmFjdGlvbkFzc2lzdGFudCBzaG93RGljdGlvbmFy
eUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3RdOworICAgIGlmIChfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCkKKyAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNob3dEaWN0
aW9uYXJ5Rm9yOnRleHQgZnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdF07CisgICAgZWxzZQorICAg
ICAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBzaG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21S
ZWN0OnByZXNlbnRhdGlvblJlY3RdOwogfQogCiBzdGF0aWMgdm9pZCBzZWxlY3RlZFN0cmluZyhX
S1N0cmluZ1JlZiBzdHJpbmcsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCkBAIC04
NzQsNiArOTE2LDggQEAgc3RhdGljIGlubGluZSBXS0dlc3R1cmVUeXBlIHRvV0tHZXN0dXJlVAog
ICAgICAgICByZXR1cm4gV0tHZXN0dXJlVHdvRmluZ2VyUmFuZ2VkU2VsZWN0R2VzdHVyZTsKICAg
ICBjYXNlIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU6CiAgICAgICAgIHJldHVybiBX
S0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlTWFrZVdl
YlNlbGVjdGlvbjoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU1ha2VXZWJTZWxlY3Rpb247CiAg
ICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBXS0dlc3R1cmVMb3Vw
ZTsKQEAgLTkwOCw2ICs5NTIsOCBAQCBzdGF0aWMgaW5saW5lIFVJV0tHZXN0dXJlVHlwZSB0b1VJ
V0tHZXN0CiAgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdl
c3R1cmU7CiAgICAgY2FzZSBXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZToKICAgICAgICAg
cmV0dXJuIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU7CisgICAgY2FzZSBXS0dlc3R1
cmVNYWtlV2ViU2VsZWN0aW9uOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVNYWtlV2ViU2Vs
ZWN0aW9uOwogICAgIH0KIH0KIApAQCAtOTk0LDcgKzEwNDAsMTAgQEAgc3RhdGljIHZvaWQgc2Vs
ZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKAogICAgIFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3ID0g
c3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKICAgICBBU1NFUlQodmll
dyk7CiAgICAgLy8gRklYTUU6IG5lZWQgdG8gcGFzcyBmbGFncyB0byBzZWxlY3Rpb25DaGFuZ2Vk
V2l0aEdlc3R1cmVBdC4KLSAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilbdmll
dyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlQXQ6KENH
UG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5cGUoKFdLR2VzdHVyZVR5cGUp
Z2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShzdGF0aWNf
Y2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSkpXTsKKyAgICBpZiAo
W3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSkKKyAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNz
aXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0
aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgo
V0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0aFN0YXRlOnRvVUlHZXN0dXJlUmVjb2duaXpl
clN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRl
KSldOworICAgIGVsc2UKKyAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICop
W3ZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZUF0
OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOnRvVUlXS0dlc3R1cmVUeXBlKChXS0dlc3R1cmVU
eXBlKWdlc3R1cmVUeXBlKSB3aXRoU3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3Rh
dGljX2Nhc3Q8V0tHZXN0dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpKV07CiB9CiAK
IHN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2goY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29u
dGV4dCkKQEAgLTEwMDUsNyArMTA1NCwxMCBAQCBzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2Vk
V2l0aFRvdWNoKGNvCiAgICAgfQogICAgIFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3ID0gc3RhdGlj
X2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKICAgICBBU1NFUlQodmlldyk7Ci0g
ICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rpb25Bc3Np
c3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2Vs
ZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFdLU2VsZWN0aW9uVG91Y2gpdG91Y2gp
XTsKKyAgICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSkKKyAgICAgICAgWyhVSVdL
U2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rp
b25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRv
VUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CisgICAgZWxzZQor
ICAgICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlv
bkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdp
dGhTZWxlY3Rpb25Ub3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0
b3VjaCldOwogfQogCiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9p
bnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3Rh
dGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZQpAQCAtMTE2MiwyOSArMTIxNCwxMiBA
QCAtICh2b2lkKXJlcGxhY2VSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nCiAKIC0gKFVJVGV4dFJh
bmdlICopc2VsZWN0ZWRUZXh0UmFuZ2UKIHsKLSAgICB1bnNpZ25lZCBzaXplID0gX3BhZ2UtPmVk
aXRvclN0YXRlKCkuc2VsZWN0aW9uUmVjdHMuc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICp3
ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNv
cmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0
aW9uUmVjdHNbaV07Ci0gICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2Vs
ZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKLSAgICAgICAgd2ViUmVjdC5yZWN0ID0gY29yZVJl
Y3QucmVjdCgpOwotICAgICAgICB3ZWJSZWN0LndyaXRpbmdEaXJlY3Rpb24gPSBjb3JlUmVjdC5k
aXJlY3Rpb24oKSA9PSBMVFIgPyBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotICAgICAgICB3ZWJSZWN0LmlzTGluZUJyZWFrID0g
Y29yZVJlY3QuaXNMaW5lQnJlYWsoKTsKLSAgICAgICAgd2ViUmVjdC5pc0ZpcnN0T25MaW5lID0g
Y29yZVJlY3QuaXNGaXJzdE9uTGluZSgpOwotICAgICAgICB3ZWJSZWN0LmlzTGFzdE9uTGluZSA9
IGNvcmVSZWN0LmlzTGFzdE9uTGluZSgpOwotICAgICAgICB3ZWJSZWN0LmNvbnRhaW5zU3RhcnQg
PSBjb3JlUmVjdC5jb250YWluc1N0YXJ0KCk7Ci0gICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQg
PSBjb3JlUmVjdC5jb250YWluc0VuZCgpOwotICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0
aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKLSAgICAgICAgd2ViUmVjdC5pc0hv
cml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3dlYlJlY3RzIGFk
ZE9iamVjdDp3ZWJSZWN0XTsKLSAgICB9Ci0KICAgICByZXR1cm4gW1dLVGV4dFJhbmdlIHRleHRS
YW5nZVdpdGhTdGF0ZTpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSYW5nZTpfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5zZWxlY3Rpb25Jc1JhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRp
dGFibGU6X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UmVjdDpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5jYXJl
dFJlY3RBdFN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlY3Q6
X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRFbmQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25SZWN0czp3ZWJSZWN0cworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvblJlY3RzOltzZWxmIHdlYlNlbGVjdGlvblJlY3RzXQogICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0ZWRUZXh0TGVuZ3RoOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVj
dGVkVGV4dExlbmd0aF07CiB9CiAKQEAgLTEzNTcsNiArMTM5MiwxMSBAQCAtIChVSVRleHRJbnRl
cmFjdGlvbkFzc2lzdGFudCAqKWludGVyYWN0CiAgICAgcmV0dXJuIF90ZXh0U2VsZWN0aW9uQXNz
aXN0YW50LmdldCgpOwogfQogCistIChVSVdlYlNlbGVjdGlvbkFzc2lzdGFudCAqKXdlYlNlbGVj
dGlvbkFzc2lzdGFudAoreworICAgIHJldHVybiBfd2ViU2VsZWN0aW9uQXNzaXN0YW50LmdldCgp
OworfQorCiAKIC8vIE5TUmFuZ2Ugc3VwcG9ydC4gIFdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRv
IHRoZSBleHRlbnQgcG9zc2libGUsIGFsdGhvdWdoIHNvbWUgc3VwcG9ydAogLy8gKGkuZS4gc2Vs
ZWN0aW9uUmFuZ2UpIGhhcyBzaGlwcGVkIGFzIEFQSS4KQEAgLTE2MzAsMTcgKzE2NzAsMTggQEAg
LSAodm9pZClfc3RvcEFzc2lzdGluZ0tleWJvYXJkCiAKIC0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5n
Tm9kZQogewotICAgIF9jYW5CZUZpcnN0UmVzcG9uZGVyID0gWUVTOworICAgIF9pc0VkaXRhYmxl
ID0gWUVTOwogICAgIGlmICghW3NlbGYgaXNGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIFtzZWxm
IGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKIAogICAgIFtzZWxmIF9zdGFydEFzc2lzdGluZ0tleWJv
YXJkXTsKKyAgICBbc2VsZiByZWxvYWRJbnB1dFZpZXdzXTsKICAgICBbc2VsZiBfdXBkYXRlQWNj
ZXNzb3J5XTsKIH0KIAogLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGUKIHsKLSAgICBfY2FuQmVG
aXJzdFJlc3BvbmRlciA9IE5POworICAgIF9pc0VkaXRhYmxlID0gTk87CiAgICAgaWYgKFtzZWxm
IGlzRmlyc3RSZXNwb25kZXJdKQogICAgICAgICBbc2VsZiByZXNpZ25GaXJzdFJlc3BvbmRlcl07
CiAgICAgCkBAIC0xNjUxLDEwICsxNjkyLDEzIEBAIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2Rl
CiAKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKIHsKLSAgICBfbWFya2VkVGV4dCA9IChfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikgPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5t
YXJrZWRUZXh0IDogU3RyaW5nKCk7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91
dCB3aGF0IHRvIGRvIGlmIHRoZSBzZWxlY3Rpb24gaXMgY2hhbmdlZCBieSBKYXZhc2NyaXB0Lgot
ICAgIGlmICghX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zKQotICAgICAgICBbX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgc2VsZWN0aW9uQ2hhbmdlZF07CisgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNz
aXN0YW50KSB7CisgICAgICAgIF9tYXJrZWRUZXh0ID0gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhh
c0NvbXBvc2l0aW9uKSA/IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLm1hcmtlZFRleHQgOiBTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMpCisgICAgICAgICAgICBb
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2VsZWN0aW9uQ2hhbmdlZF07CisgICAgfSBlbHNlCisg
ICAgICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IHNlbGVjdGlvbkNoYW5nZWRdOwogfQogCiAj
cHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJl
Y29nbml6ZXJEZWxlZ2F0ZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2MjUzMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUo
Y29uc3QgSW4KICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludChwb2ludCk7
CiAKLSAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gY29uc3RyYWluUG9pbnQocG9pbnQs
ICZmcmFtZSwgbV9hc3Npc3RlZE5vZGUuZ2V0KCkpOworICAgIEludFBvaW50IGNvbnN0cmFpbmVk
UG9pbnQgPSBtX2Fzc2lzdGVkTm9kZSA/IGNvbnN0cmFpblBvaW50KHBvaW50LCAmZnJhbWUsIG1f
YXNzaXN0ZWROb2RlLmdldCgpKSA6IHBvaW50OwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwg
MCwgY2FsbGJhY2tJRCkpOwpAQCAtNDc4LDcgKzQ3OCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVj
dFdpdGhHZXN0dXJlKGNvbnN0IEluCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmFuZ2Ug
PSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFBhcmFncmFwaEdyYW51
bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisg
ICAgY2FzZSBXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOgorICAgICAgICAvLyBGSVhNRTogSGVy
ZSB3ZSBzaG91bGQgaW1wbGVtZW50IHRoZSBsb2dpYyBmb3IgYmxvY2sgc2VsZWN0aW9ucy4KKyAg
ICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBi
cmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4NSw5ICs1
OTAsMTIgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRl
ZDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihw
b3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQotICAgICAgICAg
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcmVzdWx0LCBy
ZXN1bHQpOworICAgICAgICAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9y
UG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOb3ROdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgcmFuZ2UgPSByYW5nZUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0
YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3Vj
aEVuZGVkTW92aW5nRm9yd2FyZDoK
</data>
<flag name="review"
          id="245912"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223781</attachid>
            <date>2014-02-10 18:01:28 -0800</date>
            <delta_ts>2014-02-10 21:58:52 -0800</delta_ts>
            <desc>block selection part1</desc>
            <filename>blockselection-part1-webkit.txt</filename>
            <type>text/plain</type>
            <size>11342</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Mzg0NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE0LTAyLTEwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpcnN0IHN0ZXAg
dG93YXJkcyBpbXBsZW1lbnRpbmcgYmxvY2sgc2VsZWN0aW9ucyBvbiBpT1MuCisgICAgICAgIFRo
ZSBtYWluIGxvZ2ljIGlzIGluIHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbiB0aGF0Cisg
ICAgICAgIGRlY2lkZXMgd2hldGhlciB3ZSBjcmVhdGUgYSB0ZXh0IG9yIGEgYmxvY2sgc2VsZWN0
aW9uLgorCisgICAgICAgICogU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tOgorICAgICAgICAodG9VSVdL
U2VsZWN0aW9uRmxhZ3MpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQ
b3NpdGlvbkluZm9ybWF0aW9uKToKKwogMjAxNC0wMi0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBPcGVyYXRpb25zLmggdG8gSlNDSW5saW5lcy5o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCShyZXZp
c2lvbiAxNjM4MDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDEyIEBAIHR5cGVkZWYgZW51bSB7CiAgICAg
V0tTaGVldEFjdGlvblNhdmVJbWFnZQogfSBXS1NoZWV0QWN0aW9uczsKIAordHlwZWRlZiBlbnVt
IHsKKyAgICBXS05vbmUgPSAwLAorICAgIFdLV29yZElzTmVhclRhcCA9IDEsCisgICAgV0tJc0Js
b2NrU2VsZWN0aW9uID0gMgorfSBXS1NlbGVjdGlvbkZsYWdzOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIFdLR2VzdHVyZVR5cGVzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCShyZXZp
c2lvbiAxNjM4MDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVy
YWN0aW9uVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA3MSw2ICsxMDcxLDE5IEBAIHN0YXRp
YyBpbmxpbmUgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlIHQKICAgICB9CiB9CiAKK3N0YXRpYyBp
bmxpbmUgVUlXS1NlbGVjdGlvbkZsYWdzIHRvVUlXS1NlbGVjdGlvbkZsYWdzKFdLU2VsZWN0aW9u
RmxhZ3MgZmxhZykKK3sKKyAgICBzd2l0Y2ggKGZsYWcpCisgICAgeworICAgIGNhc2UgV0tOb25l
OgorICAgICAgICByZXR1cm4gVUlXS05vbmU7CisgICAgY2FzZSBXS1dvcmRJc05lYXJUYXA6Cisg
ICAgICAgIHJldHVybiBVSVdLV29yZElzTmVhclRhcDsKKyAgICBjYXNlIFdLSXNCbG9ja1NlbGVj
dGlvbjoKKyAgICAgICAgcmV0dXJuIFVJV0tJc0Jsb2NrU2VsZWN0aW9uOworICAgIH0KK30KKwog
c3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0
ZSwgdWludDMyX3QgZmxhZ3MsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCiB7CiAg
ICAgaWYgKGVycm9yKSB7CkBAIC0xMDc5LDExICsxMDkyLDEwIEBAIHN0YXRpYyB2b2lkIHNlbGVj
dGlvbkNoYW5nZWRXaXRoR2VzdHVyZSgKICAgICB9CiAgICAgV0tJbnRlcmFjdGlvblZpZXcgKnZp
ZXcgPSBzdGF0aWNfY2FzdDxXS0ludGVyYWN0aW9uVmlldyo+KGNvbnRleHQpOwogICAgIEFTU0VS
VCh2aWV3KTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBwYXNzIGZsYWdzIHRvIHNlbGVjdGlvbkNo
YW5nZWRXaXRoR2VzdHVyZUF0LgogICAgIGlmIChbdmlldyB3ZWJTZWxlY3Rpb25Bc3Npc3RhbnRd
KQotICAgICAgICBbKFVJV0tTZWxlY3Rpb25Bc3Npc3RhbnQgKilbdmlldyB3ZWJTZWxlY3Rpb25B
c3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdp
dGhHZXN0dXJlOnRvVUlXS0dlc3R1cmVUeXBlKChXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlKSB3
aXRoU3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGljX2Nhc3Q8V0tHZXN0dXJl
UmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpKV07CisgICAgICAgIFsoVUlXS1NlbGVjdGlv
bkFzc2lzdGFudCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdl
ZFdpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5
cGUoKFdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVT
dGF0ZSkpIHdpdGhGbGFnczoodG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9uRmxhZ3Mp
ZmxhZ3MpKV07CiAgICAgZWxzZQotICAgICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3Rh
bnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0
dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5cGUoKFdLR2Vz
dHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSkpXTsK
KyAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rp
b25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50
IHdpdGhHZXN0dXJlOnRvVUlXS0dlc3R1cmVUeXBlKChXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBl
KSB3aXRoU3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGljX2Nhc3Q8V0tHZXN0
dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpKSB3aXRoRmxhZ3M6KHRvVUlXS1NlbGVj
dGlvbkZsYWdzKChXS1NlbGVjdGlvbkZsYWdzKWZsYWdzKSldOwogfQogCiBzdGF0aWMgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
dWludDMyX3QgdG91Y2gsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE2
MzgwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNs
dWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisj
aW5jbHVkZSAiV0tHZXN0dXJlVHlwZXMuaCIKICNpbmNsdWRlICJXZWJVbmRvU3RlcC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RyYWdEYXRhLmg+CkBAIC03MjUsNiArNzI2LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JN
KElPUykKICAgICBzdGF0aWMgdm9pZCBjb252ZXJ0U2VsZWN0aW9uUmVjdHNUb1Jvb3RWaWV3KFdl
YkNvcmU6OkZyYW1lVmlldyosIFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYpOworICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlv
biYsIFdLU2VsZWN0aW9uRmxhZ3MmKTsKICNlbmRpZgogI2lmICFQTEFURk9STShNQUMpCiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IFdlYkNvcmU6OktleWJv
YXJkRXZlbnQqKTsKQEAgLTEwNjIsNiArMTA2NCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAK
ICNpZiBQTEFURk9STShJT1MpCisgICAgY29uc3QgaW50IGJsb2NrU2VsZWN0aW9uU3RhcnRXaWR0
aCA9IDEwMDsKKyAgICBjb25zdCBpbnQgYmxvY2tTZWxlY3Rpb25TdGFydEhlaWdodCA9IDEwMDsK
KwogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2Fzc2lzdGVkTm9kZTsKICAgICBSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IG1fY3VycmVudFdvcmRSYW5nZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gbV9pbnRlcmFjdGlvbk5vZGU7CkBAIC0xMDY5LDYgKzEwNzQsNyBAQCBwcml2YXRlOgog
CiAgICAgV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9uIG1fdmlld3BvcnRDb25maWd1cmF0
aW9uOwogICAgIGJvb2wgbV91c2VySGFzQ2hhbmdlZFBhZ2VTY2FsZUZhY3RvcjsKKyAgICBXZWJD
b3JlOjpJbnRTaXplIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZTsKICNlbmRpZgogCiAgICAg
V2ViSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlz
aW9uIDE2MzgwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyQmxvY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVySW1hZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CkBAIC00MTIsNiArNDEzLDY2IEBAIHN0YXRpYyBJbnRQb2ludCBjb25zdHJhaW5Q
b2ludChjb25zdCBJbnQKICAgICByZXR1cm4gY29uc3RyYWluZWRQb2ludDsKIH0KIAorUGFzc1Jl
ZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb2ludCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgV0tTZWxl
Y3Rpb25GbGFncyYgZmxhZ3MpCit7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KChwb2ludCks
IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRU
ZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50IHwgSGl0VGVzdFJlcXVlc3Q6OkFsbG93
Q2hpbGRGcmFtZUNvbnRlbnQpOworCisgICAgTm9kZSogY3VycmVudE5vZGUgPSByZXN1bHQuaW5u
ZXJOb2RlKCk7OworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgSW50UmVjdCBib3VuZGlu
Z1JlY3Q7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKworICAgIGlmIChjdXJyZW50Tm9kZS0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFy
aXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7Cisg
ICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAgICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBw
b3NpdGlvbik7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gcmFuZ2U7
CisKKyAgICAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgICAg
ICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSA9IHNlbGVjdGlvblJlY3RzLnNpemUoKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBJbnRSZWN0
ICZjb3JlUmVjdCA9IHNlbGVjdGlvblJlY3RzW2ldLnJlY3QoKTsKKyAgICAgICAgICAgIGlmIChi
b3VuZGluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJvdW5kaW5nUmVjdCA9IGNv
cmVSZWN0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJvdW5kaW5nUmVjdC51
bml0ZShjb3JlUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvdW5kaW5nUmVjdC53aWR0
aCgpID4gbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLndpZHRoKCkgJiYgYm91bmRpbmdSZWN0
LmhlaWdodCgpID4gbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLmhlaWdodCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CisKKyAgICAgICAg
Y3VycmVudE5vZGUgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOworICAgIH0K
KworICAgIGlmICghY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFyZW50RWxlbWVudCgpOworCisgICAgTm9kZSogYmVzdENo
b2ljZSA9IGN1cnJlbnROb2RlOworICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBi
b3VuZGluZ1JlY3QgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QodHJ1ZSk7CisgICAgICAgIGlmIChib3VuZGluZ1JlY3Qud2lkdGgoKSA+IG1fYmxvY2tT
ZWxlY3Rpb25EZXNpcmVkU2l6ZS53aWR0aCgpICYmIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSA+IG1f
YmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBiZXN0Q2hvaWNlID0gY3VycmVudE5vZGU7CisgICAgICAgIGN1cnJlbnROb2RlID0g
Y3VycmVudE5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICB9CisKKyAgICBpZiAoIWJlc3RDaG9p
Y2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGJlc3RDaG9pY2UtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5jaGlsZHJlbklubGluZSgpICYmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVu
ZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgPT0gbmlsKSAm
JiAhcmVuZGVyZXItPmlzVGFibGUoKSkgeworICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRV
bml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNr
d2FyZCk7CisgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfQorICAgIGZsYWdzID0gV0tJc0Jsb2NrU2VsZWN0
aW9uOworICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiZXN0Q2hvaWNlLT5kb2N1bWVudCgpKTsK
KyAgICByYW5nZS0+c2VsZWN0Tm9kZShiZXN0Q2hvaWNlLCBlYyk7CisgICAgcmV0dXJuIHJhbmdl
OworfQorCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBw
b2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJf
dCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTQy
NCw2ICs0ODUsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEluCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBXS1Nl
bGVjdGlvbkZsYWdzIGZsYWdzID0gV0tOb25lOwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8V0tH
ZXN0dXJlVHlwZT4oZ2VzdHVyZVR5cGUpKSB7CiAgICAgY2FzZSBXS0dlc3R1cmVPbmVGaW5nZXJU
YXA6CiAgICAgewpAQCAtNTE0LDggKzU3NiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhH
ZXN0dXJlKGNvbnN0IEluCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXS0dlc3R1cmVNYWtl
V2ViU2VsZWN0aW9uOgotICAgICAgICAvLyBGSVhNRTogSGVyZSB3ZSBzaG91bGQgaW1wbGVtZW50
IHRoZSBsb2dpYyBmb3IgYmxvY2sgc2VsZWN0aW9ucy4KLSAgICAgICAgcmFuZ2UgPSB3b3JkUmFu
Z2VGcm9tUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8V0tHZXN0
dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3RhdGUpID09IFdLR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZUJlZ2FuKSB7CisgICAgICAgICAgICBtX2Jsb2NrU2VsZWN0aW9uRGVzaXJlZFNpemUuc2V0
V2lkdGgoYmxvY2tTZWxlY3Rpb25TdGFydFdpZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2tTZWxl
Y3Rpb25EZXNpcmVkU2l6ZS5zZXRIZWlnaHQoYmxvY2tTZWxlY3Rpb25TdGFydEhlaWdodCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmFuZ2UgPSByYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRpb24o
YWRqdXN0ZWRQb2ludCwgcG9zaXRpb24sIGZsYWdzKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBk
ZWZhdWx0OgpAQCAtNTI0LDcgKzU4OSw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1
cmUoY29uc3QgSW4KICAgICBpZiAocmFuZ2UpCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOwog
Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQs
IGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIDAsIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUs
IGdlc3R1cmVTdGF0ZSwgZmxhZ3MsIGNhbGxiYWNrSUQpKTsKICAgICBtX3Nob3VsZFJldHVybldv
cmRBdFNlbGVjdGlvbiA9IGZhbHNlOwogfQogCkBAIC04OTQsMTggKzk1OSwxMCBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uCiAgICAgaWYgKCFlbGVtZW50SXNMaW5r
T3JJbWFnZSkgewogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoKHBvaW50KSwgSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1
ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZy
YW1lQ29udGVudCk7CiAgICAgICAgIGhpdE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAg
ICAgIGlmIChoaXROb2RlICYmIGhpdE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBpZiAo
aGl0Tm9kZSkgewogICAgICAgICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1
c2VkRnJhbWUocmVzdWx0LmlubmVyTm9kZUZyYW1lKCkpOwotICAgICAgICAgICAgRnJhbWVWaWV3
KiB2aWV3ID0gcmVzdWx0LmlubmVyTm9kZUZyYW1lKCktPnZpZXcoKTsKLSAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHJlc3VsdC5pbm5lck5vZGVGcmFtZSgpLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludCh2aWV3LT5yb290Vmlld1RvQ29udGVudHMocG9pbnQpKTsKLSAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRp
b24pOwotICAgICAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgICAgIHJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMoaW5mby5zZWxlY3Rpb25SZWN0cyk7Ci0gICAgICAgICAgICBjb252
ZXJ0U2VsZWN0aW9uUmVjdHNUb1Jvb3RWaWV3KHZpZXcsIGluZm8uc2VsZWN0aW9uUmVjdHMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGUgbG9n
aWMgZm9yIHRoZSBibG9jayBzZWxlY3Rpb24uCisgICAgICAgICAgICBpbmZvLnNlbGVjdGlvblJl
Y3RzLmFwcGVuZChTZWxlY3Rpb25SZWN0KGhpdE5vZGUtPnJlbmRlcmVyKCktPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KHRydWUpLCB0cnVlLCAwKSk7CiAgICAgICAgIH0KLQogICAgIH0KIH0KIAo=
</data>
<flag name="review"
          id="247854"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224810</attachid>
            <date>2014-02-20 17:15:58 -0800</date>
            <delta_ts>2014-02-21 09:46:22 -0800</delta_ts>
            <desc>block selection part2</desc>
            <filename>blockselection-part2-webkit.txt</filename>
            <type>text/plain</type>
            <size>40650</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAyLTIwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21l
IGV4cG9ydHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKwogMjAxNC0wMi0yMCAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHZlcnkgYmFzaWMg
aW1hZ2UgY29udHJvbCByZW5kZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lv
biAxNjQ0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5
KQpAQCAtMTA4NSw2ICsxMDg1LDExIEBAIF9fWk43V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYx
MFBhc3NSZWYKIF9fWk43V2ViQ29yZTVSYW5nZThjb2xsYXBzZUViUmkKIF9fWk43V2ViQ29yZTVS
YW5nZThzZXRTdGFydEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlSaQogX19aTjdXZWJD
b3JlNVJhbmdlRDFFdgorX19aTks3V2ViQ29yZTROb2RlOHNob3dOb2RlRVBLYworX19aTks3V2Vi
Q29yZThQb3NpdGlvbjIzc2hvd0FuY2hvclR5cGVBbmRPZmZzZXRFdgorX19aTks3V2ViQ29yZTVS
YW5nZTExYm91bmRpbmdCb3hFdgorX19aTks3V2ViQ29yZTVSYW5nZTEyYm91bmRpbmdSZWN0RXYK
K19fWk5LN1dlYkNvcmU1UmFuZ2UxMGNsb25lUmFuZ2VFUmkKIF9fWk43V2ViQ29yZTZDaHJvbWUx
NnNldFN0YXR1c2JhclRleHRFUE5TXzVGcmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTZDaHJvbWU1cHJpbnRFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTZFZGl0b3I3Y29weVVSTEVS
S05TXzNVUkxFUktOM1dURjZTdHJpbmdFCkBAIC0yMzI2LDYgKzIzMzEsNyBAQCBfX1pON1dlYkNv
cmUxM2VuZE9mRG9jdW1lbnRFUktOU18xNVZpc2liCiBfX1pON1dlYkNvcmUxM2VuZE9mU2VudGVu
Y2VFUktOU18xNVZpc2libGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTEzZ2V0UmF3Q29va2llc0VS
S05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVTNV9STjNXVEY2VmVjdG9ySU5T
XzZDb29raWVFTG0wRU5TNl8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlMTNpc1N0
YXJ0T2ZMaW5lRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCitfX1pON1dlYkNvcmUxNGFyZVJhbmdl
c0VxdWFsRVBLTlNfNVJhbmdlRVMyXwogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE5c2V0
UmVzcG9uc2VNSU1FVHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRX
cml0ZXIzZW5kRXYKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xM3NldENhcmV0Q29sb3JF
UktOU181Q29sb3JFCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQ0NTcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNC0w
Mi0yMCAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBv
cnQgV2ViU2VsZWN0aW9ucyBpbiBXSzIgb24gaU9TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
NTIxMTk2ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIHRoZSByZW1haW5pbmcgd29yayBvbiBibG9jayBzZWxlY3Rpb25zIGZvciBpT1Mg
aW4gV0syLgorICAgICAgICBPbmNlIGEgYmxvY2sgc2VsZWN0aW9uIGhhcyBiZWVuIGNyZWF0ZWQg
d2l0aCBhIGxvbmcgcHJlc3MgZ2VzdHVyZQorICAgICAgICBvbiBhIHNlbGVjdGFibGUgYXJlYSwg
d2UgY2FuIGludGVyYWN0IHdpdGggaXQgYnkgdG91Y2hpbmcgdGhlIGZvdXIKKyAgICAgICAgaGFu
ZGxlcyBhdCB0aGUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHNpZGUgb2YgdGhlIHNlbGVj
dGlvbiBib3guCisgICAgICAgIEV4cGFuZGluZyBvciBzaHJpbmtpbmcgYSBibG9jayBzZWxlY3Rp
b24gcmVxdWlyZXMgZmluZGluZyB0aGUgbmV4dC9wcmV2aW91cworICAgICAgICBibG9jayBpbiB0
aGUgZGlyZWN0aW9uIG9mIHRoZSBtb3ZlbWVudCwgZGVwZW5kaW5nIG9uIHRoZSBoYW5kbGUgd2UK
KyAgICAgICAgYXJlIGludGVyYWN0aW5nIHdpdGguCisgICAgICAgIEV2ZXJ5IHRpbWUgYSBuZXcg
YmxvY2sgaXMgc2VsZWN0ZWQsIHdlIGNvbXB1dGUgdGhlIHRocmVzaG9sZHMgcmVxdWlyZWQKKyAg
ICAgICAgdG8gdHJpZ2dlciBhbm90aGVyIGJsb2NrIGNoYW5nZS4gVGhlIHRocmVzaG9sZHMgYXJl
IHNlbnQgYmFjayB0byB0aGUKKyAgICAgICAgVUlQcm9jZXNzIHRoYXQgd2lsbCB1c2UgdGhpcyBp
bmZvcm1hdGlvbiB0byBkZWNpZGUgd2hlbiB0byBhY3RpdmF0ZQorICAgICAgICB0aGUgbmV3IHNl
bGVjdGlvbiwgZWl0aGVyIGJpZ2dlciBvciBzbWFsbGVyLgorICAgICAgICBUaGlzIHBhdGNoIGFs
c28gZml4ZXMgYSBidWcgaW4gc2VsZWN0V2l0aFR3b1RvdWNoZXMgd2hlcmUgdGhlIHBvaW50cwor
ICAgICAgICB3ZXJlIG5vdCBtYXBwZWQgdG8gdGhlIGFjdGl2ZSBmcmFtZS4KKworICAgICAgICAq
IFNoYXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkVXBk
YXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkVXBkYXRl
QmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlczp3aXRoRmxhZ3M6Z3Jvd1RocmVzaG9sZDpzaHJpbmtU
aHJlc2hvbGQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0lu
dGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbToKKyAg
ICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaGFzU2VsZWN0YWJsZVBvc2l0aW9uQXRQb2ludDpd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgY2xlYXJTZWxlY3Rpb25dKToKKyAgICAg
ICAgKHRvV0tIYW5kbGVQb3NpdGlvbik6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9k
aWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOldlYktpdDo6d2l0aEZsYWdzOldlYktp
dDo6Z3Jvd1RocmVzaG9sZDpzaHJpbmtUaHJlc2hvbGQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJh
Y3Rpb25WaWV3IGNoYW5nZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6d2l0aFNlbGVjdGlvblRv
dWNoOmZvckhhbmRsZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZUJsb2NrU2Vs
ZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFVw
ZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OmRpc3RhbmNl
QmV0d2VlblJlY3RzRm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpyZWN0c0Vzc2VudGlh
bGx5VGhlU2FtZSk6CisgICAgICAgIChXZWJLaXQ6OmNvbnRhaW5zUmFuZ2UpOgorICAgICAgICAo
V2ViS2l0Ojp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OmNvbXB1dGVFZGdlQ2Vu
dGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9s
ZHNGb3JIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRFeHBhbmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpjaGFuZ2VCbG9ja1NlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNlbGVjdFdpdGhUd29Ub3VjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9z
aXRpb25JbmZvcm1hdGlvbik6CisKIDIwMTQtMDItMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB2ZXJ5IGJhc2ljIGltYWdlIGNvbnRyb2wgcmVuZGVy
aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5cGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCShy
ZXZpc2lvbiAxNjQ0NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL1dLR2VzdHVyZVR5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDEyIEBAIHR5cGVkZWYgZW51bSB7CiAg
ICAgV0tJc0Jsb2NrU2VsZWN0aW9uID0gMgogfSBXS1NlbGVjdGlvbkZsYWdzOwogCit0eXBlZGVm
IGVudW0geworICAgIFdLSGFuZGxlVG9wLAorICAgIFdLSGFuZGxlUmlnaHQsCisgICAgV0tIYW5k
bGVCb3R0b20sCisgICAgV0tIYW5kbGVMZWZ0Cit9IFdLSGFuZGxlUG9zaXRpb247CiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFdLR2VzdHVyZVR5cGVzX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTY0NDU3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDYg
KzI0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2F2ZUltYWdl
VG9MaWJyYXJ5KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKHVpbnQzMl90IHRv
dWNoZXMsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtU
aHJlc2hvbGQpID0gMDsKICNlbmRpZgogCiAgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlv
bgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MTY0NDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTMsNiArNDUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0V2l0
aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgUGFzc1JlZlB0
cjxHZXN0dXJlQ2FsbGJhY2s+KTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVz
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0
YXJ0LCBQYXNzUmVmUHRyPFRvdWNoZXNDYWxsYmFjaz4pOwogICAgIHZvaWQgc2VsZWN0V2l0aFR3
b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIFBh
c3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPik7CisgICAgdm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1
aW50MzJfdCBoYW5kbGVQb3NpdGlvbik7CiAgICAgdm9pZCBleHRlbmRTZWxlY3Rpb24oV2ViQ29y
ZTo6VGV4dEdyYW51bGFyaXR5KTsKICAgICB2b2lkIHJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEo
Y29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIFBhc3NSZWZQdHI8QXV0b2NvcnJl
Y3Rpb25EYXRhQ2FsbGJhY2s+KTsKICAgICB2b2lkIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgUGFzc1JlZlB0
cjxTdHJpbmdDYWxsYmFjaz4pOwpAQCAtNDY1LDYgKzQ2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHN0b3BJbnRlcmFjdGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50
MzJfdCBhY3Rpb24pOwogICAgIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KGNvbnN0IFNoYXJlZE1l
bW9yeTo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VTaXplKTsKKyAgICB2b2lk
IGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXModWludDMyX3QgdG91Y2hlcywgdWlu
dDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCk7
CiAjZW5kaWYKIAogICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZWRpdG9yU3RhdGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY0NDU3KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtMTU2LDYgKzE1Niw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAg
SW50ZXJwcmV0S2V5RXZlbnQoV2ViS2l0OjpFZGl0b3JTdGF0ZSBzdGF0ZSwgYm9vbCBpc0NoYXJF
dmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlv
bihXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKQog
ICAgIFNhdmVJbWFnZVRvTGlicmFyeShXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRs
ZSwgdWludDY0X3Qgc2l6ZSkKKyAgICBEaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVz
KHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBm
bG9hdCBzaHJpbmtUaHJlc2hvbGQpCiAjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgUHJp
bnRGaW5pc2hlZENhbGxiYWNrKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDE2NDQ1NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpbnRlcnBy
ZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJFdmVu
dCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFu
Z2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
Pik7CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMo
dWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZs
b2F0IHNocmlua1RocmVzaG9sZCk7CiAKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9u
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDE2
NDQ1NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNTYsNiArMzU2LDExIEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKICAgICBbbV92aWV3IF9zdG9wQXNzaXN0aW5nTm9k
ZV07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0
aFRvdWNoZXModWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJl
c2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkKK3sKKyAgICBbbV92aWV3IF9kaWRVcGRhdGVC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOihXS1NlbGVjdGlvblRvdWNoKXRvdWNoZXMgd2l0aEZs
YWdzOihXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBz
aHJpbmtUaHJlc2hvbGQ6c2hyaW5rVGhyZXNob2xkXTsKK30KKwogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKIAogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgUGFnZUNsaWVudElt
cGw6OmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCShyZXZpc2lvbiAxNjQ0
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNiArMjk4LDExIEBAIC0gKHZvaWQpX3NlbGVjdGlvbkNo
YW5nZWQKICAgICBbX2ludGVyYWN0aW9uVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF07CiB9CiAKKy0g
KHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdLU2VsZWN0aW9uVG91
Y2gpdG91Y2hlcyB3aXRoRmxhZ3M6KFdLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9s
ZDooQ0dGbG9hdClncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtU
aHJlc2hvbGQKK3sKKyAgICBbX2ludGVyYWN0aW9uVmlldyBfZGlkVXBkYXRlQmxvY2tTZWxlY3Rp
b25XaXRoVG91Y2hlczp0b3VjaGVzIHdpdGhGbGFnczpmbGFncyBncm93VGhyZXNob2xkOmdyb3dU
aHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Cit9CisKIC0gKEJPT0wp
X2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlzQ2hhckV2ZW50OihC
T09MKWlzQ2hhckV2ZW50CiB7CiAgICAgcmV0dXJuIFtfaW50ZXJhY3Rpb25WaWV3IF9pbnRlcnBy
ZXRLZXlFdmVudDp0aGVFdmVudCBpc0NoYXJFdmVudDppc0NoYXJFdmVudF07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJuYWwuaAkocmV2aXNpb24gMTY0NDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3LmgiCisjaW1wb3J0ICJXS0dl
c3R1cmVUeXBlcy5oIgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KQEAgLTY5LDYgKzcwLDcgQEAgc3RydWN0
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOwogLSAoQk9PTClfaW50ZXJwcmV0S2V5
RXZlbnQ6KFdlYklPU0V2ZW50ICopdGhlRXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZl
bnQ7CiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjb25zdCBXZWJLaXQ6
OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvOwogLSAodm9pZClfZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV2ViS2l0OjpXZWJTZWN1cml0
eU9yaWdpbiYpb3JpZ2luIGZyYW1lOihXZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVl
c3Q6KFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9u
UmVxdWVzdDsKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdl
YktpdDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3VjaGVzIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVj
dGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJp
bmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkOwogCiAtIChSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4pX3Rha2VWaWV3U25hcHNob3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaAkocmV2aXNpb24gMTY0
NDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNSArNjcsNiBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb247CiAtICh2b2lkKV9wZXJmb3JtQWN0aW9uOihXZWJLaXQ6OldL
U2hlZXRBY3Rpb25zKWFjdGlvbjsKIC0gKHZvaWQpX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWlu
ZzsKIC0gKHZvaWQpX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2RpZFVwZGF0
ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdlYktpdDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3Vj
aGVzIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hv
bGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5r
VGhyZXNob2xkOwogQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBXZWJLaXQ6OkludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHBvc2l0aW9uSW5mb3JtYXRpb247CiBAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVy
YWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTY0NDU3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0Miw2
ICs1NDIsNyBAQCAtIChCT09MKWhhc1NlbGVjdGFibGVQb3NpdGlvbkF0UG9pbnQ6KENHCiB7CiAg
ICAgW3NlbGYgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6cG9pbnRdOwogICAg
IC8vIEZJWE1FOiBUaGlzIGNoZWNrIG5lZWRzIHRvIGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUgb3Ro
ZXIgZWxlbWVudHMuCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVqZWN0IHBvc2l0aW9ucyB0
aGF0IHdpbGwgbGVhZCB0byBhIHZlcnkgbGFyZ2Ugc2VsZWN0aW9uLgogICAgIHJldHVybiBfcG9z
aXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSAhPSAiSU1HIiAmJiBfcG9zaXRp
b25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSAhPSAiQSIgJiYgIV9wb3NpdGlvbklu
Zm9ybWF0aW9uLnNlbGVjdGlvblJlY3RzLmlzRW1wdHkoKTsKIH0KIApAQCAtNjcxLDYgKzY3Miwx
MSBAQCAtICh2b2lkKXVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOihVCiAgICAgfQogfQog
CistICh2b2lkKWNsZWFyU2VsZWN0aW9uCit7CisgICAgX3BhZ2UtPmNsZWFyU2VsZWN0aW9uKCk7
Cit9CisKIC0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvCiB7CiAgICAgX3Bvc2l0aW9uSW5mb3Jt
YXRpb24gPSBpbmZvOwpAQCAtMTA3OCw2ICsxMDg0LDIwIEBAIHN0YXRpYyBpbmxpbmUgVUlXS1Nl
bGVjdGlvbkZsYWdzIHRvVUlXS1MKICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgV0tIYW5kbGVQ
b3NpdGlvbiB0b1dLSGFuZGxlUG9zaXRpb24oVUlXS0hhbmRsZVBvc2l0aW9uIHBvc2l0aW9uKQor
eworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBjYXNlIFVJV0tIYW5kbGVUb3A6CisgICAg
ICAgIHJldHVybiBXS0hhbmRsZVRvcDsKKyAgICBjYXNlIFVJV0tIYW5kbGVSaWdodDoKKyAgICAg
ICAgcmV0dXJuIFdLSGFuZGxlUmlnaHQ7CisgICAgY2FzZSBVSVdLSGFuZGxlQm90dG9tOgorICAg
ICAgICByZXR1cm4gV0tIYW5kbGVCb3R0b207CisgICAgY2FzZSBVSVdLSGFuZGxlTGVmdDoKKyAg
ICAgICAgcmV0dXJuIFdLSGFuZGxlTGVmdDsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHNlbGVj
dGlvbkNoYW5nZWRXaXRoR2VzdHVyZShib29sIGVycm9yLCBXS0ludGVyYWN0aW9uVmlldyAqdmll
dywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykKIHsKICAgICBpZiAoZXJyb3Ip
IHsKQEAgLTExMDIsNiArMTEyMiwxMSBAQCBzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0
aFRvdWNoKGJvCiAgICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3
IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9p
bnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVj
dGlvblRvdWNoKXRvdWNoKV07CiB9CiAKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoZXM6KFdlYktpdDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3VjaGVzIHdpdGhGbGFnczoo
V2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jv
d1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkCit7Cisg
ICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgYmxvY2tTZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNo
OnRvVUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoZXMpIHdpdGhGbGFn
czp0b1VJV0tTZWxlY3Rpb25GbGFncygoV0tTZWxlY3Rpb25GbGFncylmbGFncykgZ3Jvd1RocmVz
aG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDpzaHJpbmtUaHJlc2hvbGRdOworfQor
CiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0
aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZQogewogICAgIF9wYWdlLT5zZWxlY3RXaXRoR2VzdHVyZShX
ZWJDb3JlOjpJbnRQb2ludChwb2ludCksIENoYXJhY3RlckdyYW51bGFyaXR5LCB0b1dLR2VzdHVy
ZVR5cGUoZ2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShzdGF0ZSksIEdl
c3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3Rh
dGUsIHVpbnQzMl90IGZsYWdzKSB7CkBAIC0xMTIzLDYgKzExNDgsMTEgQEAgLSAodm9pZCljaGFu
Z2VTZWxlY3Rpb25XaXRoVG91Y2hlc0Zyb206KAogICAgIH0pKTsKIH0KIAorLSAodm9pZCljaGFu
Z2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25U
b3VjaDooVUlXS1NlbGVjdGlvblRvdWNoKXRvdWNoIGZvckhhbmRsZTooVUlXS0hhbmRsZVBvc2l0
aW9uKWhhbmRsZQoreworICAgIF9wYWdlLT51cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVz
KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9XS1NlbGVjdGlvblRvdWNoKHRvdWNoKSwgdG9X
S0hhbmRsZVBvc2l0aW9uKGhhbmRsZSkpOworfQorCiAtIChXS0F1dG9Db3JyZWN0aW9uRGF0YSAq
KWF1dG9jb3JyZWN0aW9uRGF0YQogewogICAgIHJldHVybiAmX2F1dG9jb3JyZWN0aW9uRGF0YTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCShyZXZpc2lvbiAxNjQ0NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiwxMSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMoCiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RXaXRoVHdvVG91Y2hlcyhmcm9tLCB0bywgZ2VzdHVy
ZVR5cGUsIGdlc3R1cmVTdGF0ZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBX
ZWJQYWdlUHJveHk6OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0
aW9uKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQmxv
Y2tTZWxlY3Rpb25XaXRoVG91Y2hlcyhwb2ludCwgdG91Y2hlcywgaGFuZGxlUG9zaXRpb24pLCBt
X3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlUG9zaXRpb25JbmZv
cm1hdGlvbihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgaW5mbykKIHsK
ICAgICBtX3BhZ2VDbGllbnQucG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShpbmZvKTsKQEAg
LTM1Myw2ICszNTgsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVJbWFnZVRvTGlicmFyeShj
bwogICAgIG1fcGFnZUNsaWVudC5zYXZlSW1hZ2VUb0xpYnJhcnkoYnVmZmVyKTsKIH0KIAordm9p
ZCBXZWJQYWdlUHJveHk6OmRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXModWludDMy
X3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNo
cmlua1RocmVzaG9sZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQuZGlkVXBkYXRlQmxvY2tTZWxlY3Rp
b25XaXRoVG91Y2hlcyh0b3VjaGVzLCBmbGFncywgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNo
b2xkKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Om5vdGlmeVJldmVhbGVkU2VsZWN0aW9uKCkK
IHsKICAgICBtX3BhZ2VDbGllbnQuc2VsZWN0aW9uRGlkQ2hhbmdlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNjQ0
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwNDEsMTAgKzMwNDEsMTIgQEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNl
U2VsZWN0aW9uV2l0aFRleHQoRgogICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkucmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KHRleHQsIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UpOwog
fQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQog
ewogICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZU1haW5G
cmFtZVNjcm9sbE9mZnNldFBpbm5pbmcoKQogewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxNjQ0NTcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Mzgs
NiArNDM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgYmx1ckFzc2lzdGVkTm9kZSgpOwogICAgIHZv
aWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBn
cmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwg
dWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hl
cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wg
YmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgdXBkYXRlQmxvY2tT
ZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQz
Ml90IHRvdWNoZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsKICAgICB2b2lkIHNlbGVjdFdp
dGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3Rh
dGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKHVpbnQz
Ml90IGdyYW51bGFyaXR5KTsKICAgICB2b2lkIGVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpOb2Rl
Kik7CkBAIC03MzUsNiArNzM2LDEzIEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IHN0YXRpYyB2b2lkIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcoV2ViQ29yZTo6RnJh
bWVWaWV3KiwgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jik7CiAgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiwgV0tTZWxl
Y3Rpb25GbGFncyYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yQmxv
Y2tBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBjb21wdXRlRXhw
YW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IFdLSGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhy
ZXNob2xkKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBjaGFuZ2VCbG9ja1NlbGVj
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdLSGFuZGxlUG9zaXRpb24sIGZsb2F0JiBn
cm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkLCBXS1NlbGVjdGlvbkZsYWdzJik7
CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUo
V2ViQ29yZTo6UmFuZ2UqLCBXS0hhbmRsZVBvc2l0aW9uKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKFdlYkNvcmU6OlJhbmdlKiBjdXJy
ZW50UmFuZ2UsIFdLSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIFdLU2VsZWN0aW9uRmxh
Z3MmKTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9jdXJyZW50QmxvY2tTZWxlY3Rp
b247CiAjZW5kaWYKICNpZiAhUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGludGVycHJldEtleUV2ZW50KGNvbnN0IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAxNjQ0NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBCbHVyQXNzaXN0
ZWROb2RlKCkKICAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
dWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0
dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgVXBkYXRlU2VsZWN0aW9uV2l0aFRv
dWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFz
ZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgVXBkYXRlQmxvY2tTZWxlY3Rpb25X
aXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgdWlu
dDMyX3QgaGFuZGxlUG9zaXRpb24pCiAgICAgU2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29yZTo6
SW50UG9pbnQgZnJvbSwgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBl
LCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRXh0ZW5k
U2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5KQogICAgIFJlcXVlc3RBdXRvY29ycmVjdGlv
bkRhdGEoU3RyaW5nIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgdWludDY0X3QgY2FsbGJhY2tJRCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2NDQ1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4
NywzMyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlCiAgICAgfQog
ICAgIGZsYWdzID0gV0tJc0Jsb2NrU2VsZWN0aW9uOwogICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShiZXN0Q2hvaWNlLT5kb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShiZXN0Q2hv
aWNlLCBlYyk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhiZXN0Q2hvaWNlLCBlYyk7
CisgICAgcmV0dXJuIHJhbmdlOworfQorCitQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5n
ZUZvckJsb2NrQXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RS
ZXN1bHRBdFBvaW50KChwb2ludCksIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RS
ZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50KTsK
KworICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2U7CisgICAgSW50UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKworICAgIGlmIChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAg
IHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9p
bnQpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAgICAgIGlm
IChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAgICAgICAgICByZXR1cm4gcmFu
Z2U7CisgICAgfQorCisgICAgaWYgKCFjdXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnRFbGVtZW50KCk7CisKKyAgICBp
ZiAoIWN1cnJlbnROb2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShjdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgcmFuZ2UtPnNlbGVj
dE5vZGVDb250ZW50cyhjdXJyZW50Tm9kZSwgZWMpOwogICAgIHJldHVybiByYW5nZTsKIH0KIApA
QCAtNTk3LDggKzYyMywxMSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0
IEluCiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdl
c3R1cmVTdGF0ZSkgPT0gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pIHsKICAgICAgICAg
ICAgIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS5zZXRXaWR0aChibG9ja1NlbGVjdGlvblN0
YXJ0V2lkdGgpOwogICAgICAgICAgICAgbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLnNldEhl
aWdodChibG9ja1NlbGVjdGlvblN0YXJ0SGVpZ2h0KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrU2VsZWN0aW9uID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICByYW5nZSA9IHJhbmdl
Rm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihwb2ludCwgcG9zaXRpb24sIGZsYWdzKTsKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRl
KSA9PSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCAmJiBmbGFncyAmIFdLSXNCbG9ja1Nl
bGVjdGlvbikKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID0gcmFuZ2U7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTY4OSw2ICs3MTgsNDE5IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW4KICAgICByZXR1cm4gKGJhc2UgPCBl
eHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJhc2UsIGV4dGVudCkg
OiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBiYXNlKTsKIH0KIAor
c3RhdGljIGNvbnN0IGludCBNYXhIaXRUZXN0cyA9IDEwOworCitzdGF0aWMgaW5saW5lIGZsb2F0
IGRpc3RhbmNlQmV0d2VlblJlY3RzRm9yUG9zaXRpb24oSW50UmVjdCYgZmlyc3QsIEludFJlY3Qm
IHNlY29uZCwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBzd2l0Y2gg
KGhhbmRsZVBvc2l0aW9uKSB7CisgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAgICAgICAgcmV0dXJu
IGFicyhmaXJzdC55KCkgLSBzZWNvbmQueSgpKTsKKyAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6Cisg
ICAgICAgIHJldHVybiBhYnMoZmlyc3QubWF4WCgpIC0gc2Vjb25kLm1heFgoKSk7CisgICAgY2Fz
ZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgcmV0dXJuIGFicyhmaXJzdC5tYXhZKCkgLSBzZWNv
bmQubWF4WSgpKTsKKyAgICBjYXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAgcmV0dXJuIGFicyhm
aXJzdC54KCkgLSBzZWNvbmQueCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBy
ZWN0c0Vzc2VudGlhbGx5VGhlU2FtZShJbnRSZWN0JiBmaXJzdCwgSW50UmVjdCYgc2Vjb25kLCBm
bG9hdCBhbGxvd2FibGVQZXJjZW50RGlmZmVyZW5jZSkKK3sKKyAgICBjb25zdCBmbG9hdCBtaW5N
YWduaXR1ZGVSYXRpbyA9IDEuMCAtIGFsbG93YWJsZVBlcmNlbnREaWZmZXJlbmNlOworICAgIGNv
bnN0IGZsb2F0IG1heERpc3BsYWNlbWVudFJhdGlvID0gYWxsb3dhYmxlUGVyY2VudERpZmZlcmVu
Y2U7CisKKyAgICBmbG9hdCB4T3JpZ2luU2hpZnRSYXRpbyA9IGFicyhmaXJzdC54KCkgLSBzZWNv
bmQueCgpKS9zdGQ6Om1pbihmaXJzdC53aWR0aCgpLCBzZWNvbmQud2lkdGgoKSk7CisgICAgZmxv
YXQgeU9yaWdpblNoaWZ0UmF0aW8gPSBhYnMoZmlyc3QueSgpIC0gc2Vjb25kLnkoKSkvc3RkOjpt
aW4oZmlyc3QuaGVpZ2h0KCksIHNlY29uZC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCB3aWR0aFJh
dGlvID0gc3RkOjptaW4oZmlyc3Qud2lkdGgoKSAvIHNlY29uZC53aWR0aCgpLCBzZWNvbmQud2lk
dGgoKSAvIGZpcnN0LndpZHRoKCkpOworICAgIGZsb2F0IGhlaWdodFJhdGlvID0gc3RkOjptaW4o
Zmlyc3QuaGVpZ2h0KCkgLyBzZWNvbmQuaGVpZ2h0KCksIHNlY29uZC5oZWlnaHQoKSAvIGZpcnN0
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gKCh3aWR0aFJhdGlvID4gbWluTWFnbml0dWRlUmF0aW8g
JiYgeE9yaWdpblNoaWZ0UmF0aW8gPCBtYXhEaXNwbGFjZW1lbnRSYXRpbykgJiYKKyAgICAgICAg
ICAgIChoZWlnaHRSYXRpbyA+IG1pbk1hZ25pdHVkZVJhdGlvICYmIHlPcmlnaW5TaGlmdFJhdGlv
IDwgbWF4RGlzcGxhY2VtZW50UmF0aW8pKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNvbnRh
aW5zUmFuZ2UoUmFuZ2UqIGZpcnN0LCBSYW5nZSogc2Vjb25kKQoreworICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7CisgICAgaWYgKCFmaXJzdCB8fCAhc2Vjb25kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIChmaXJzdC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpLT5vd25lckRv
Y3VtZW50KCkgPT0gc2Vjb25kLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyktPm93bmVyRG9j
dW1lbnQoKSAmJgorICAgICAgICAgICAgZmlyc3QtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fU1RBUlQsIHNlY29uZCwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCAmJgor
ICAgICAgICAgICAgZmlyc3QtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VO
RCwgc2Vjb25kLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA+PSAwKTsKK30KKworc3RhdGljIGlubGlu
ZSBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlKiByYW5nZUEsIFJhbmdlKiByYW5n
ZUIpCit7CisgICAgaWYgKCFyYW5nZUIpCisgICAgICAgIHJldHVybiByYW5nZUE7CisgICAgaWYg
KCFyYW5nZUEpCisgICAgICAgIHJldHVybiByYW5nZUI7CisKKyAgICBSYW5nZSogc3RhcnQgPSBy
YW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIHJhbmdl
QiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IHJhbmdlQSA6IHJhbmdlQjsKKyAgICBSYW5n
ZSogZW5kID0gcmFuZ2VBLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IHJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IHJhbmdlQiA6IHJhbmdlQTsKKwor
ICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHJhbmdlQS0+b3duZXJEb2N1bWVudCgpLCBzdGFydC0+
c3RhcnRDb250YWluZXIoKSwgc3RhcnQtPnN0YXJ0T2Zmc2V0KCksIGVuZC0+ZW5kQ29udGFpbmVy
KCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGNvbXB1
dGVFZGdlQ2VudGVyKGNvbnN0IEludFJlY3QmIGJveCwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQ
b3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgY2FzZSBXS0hh
bmRsZVRvcDoKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC54KCkgKyBib3gud2lkdGgoKSAv
IDIsIGJveC55KCkpOworICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgcmV0dXJuIElu
dFBvaW50KGJveC5tYXhYKCksIGJveC55KCkgKyBib3guaGVpZ2h0KCkgLyAyKTsKKyAgICBjYXNl
IFdLSGFuZGxlQm90dG9tOgorICAgICAgICByZXR1cm4gSW50UG9pbnQoYm94LngoKSArIGJveC53
aWR0aCgpIC8gMiwgYm94Lm1heFkoKSk7CisgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAg
IHJldHVybiBJbnRQb2ludChib3gueCgpLCBib3gueSgpICsgYm94LmhlaWdodCgpIC8gMik7Cisg
ICAgfQorfQorCitQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpleHBhbmRlZFJhbmdlRnJvbUhh
bmRsZShSYW5nZSogY3VycmVudFJhbmdlLCBXS0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9u
KQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQg
b2YgYm91bmRpbmdCb3goKSBpbiB0aGlzIGZ1bmN0aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2
MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJbnRSZWN0IGN1cnJlbnRCb3ggPSBjdXJyZW50UmFuZ2Ut
PmJvdW5kaW5nQm94KCk7CisgICAgSW50UG9pbnQgZWRnZUNlbnRlciA9IGNvbXB1dGVFZGdlQ2Vu
dGVyKGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0aW9uKTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9h
dCBtYXhEaXN0YW5jZSA9IDEwMDA7CisgICAgY29uc3QgZmxvYXQgbXVsdGlwbGUgPSBwb3dmKG1h
eERpc3RhbmNlLCAxLjAvKE1heEhpdFRlc3RzIC0gMSkpOworICAgIGZsb2F0IGRpc3RhbmNlID0g
MTsKKworICAgIFJlZlB0cjxSYW5nZT4gYmVzdDsKKyAgICBJbnRSZWN0IGJlc3RSZWN0OworCisg
ICAgd2hpbGUgKGRpc3RhbmNlIDwgbWF4RGlzdGFuY2UpIHsKKyAgICAgICAgaWYgKGJlc3QpIHsK
KyAgICAgICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5SZWN0c0ZvclBvc2l0aW9uKGJlc3RSZWN0
LCBjdXJyZW50Qm94LCBoYW5kbGVQb3NpdGlvbikgPCBkaXN0YW5jZSkgeworICAgICAgICAgICAg
ICAgIC8vIEJyZWFrIGVhcmx5LCB3ZSdyZSB1bmxpa2VseSB0byBkbyBhbnkgYmV0dGVyLgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
SW50UG9pbnQgdGVzdFBvaW50ID0gZWRnZUNlbnRlcjsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVQ
b3NpdGlvbikgeworICAgICAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgICAgICAgICAgdGVzdFBv
aW50Lm1vdmUoMCwgLWRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdLSGFuZGxlUmlnaHQ6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZShkaXN0YW5jZSwgMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAg
ICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIGRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKC1k
aXN0YW5jZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFJl
ZlB0cjxSYW5nZT4gbmV3UmFuZ2U7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFBvc2l0
aW9uID0gcmFuZ2VGb3JCbG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKGNvbnRh
aW5zUmFuZ2UocmFuZ2VBdFBvc2l0aW9uLmdldCgpLCBjdXJyZW50UmFuZ2UpKQorICAgICAgICAg
ICAgbmV3UmFuZ2UgPSByYW5nZUF0UG9zaXRpb247CisgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5z
UmFuZ2UoY3VycmVudFJhbmdlLCByYW5nZUF0UG9zaXRpb24uZ2V0KCkpKQorICAgICAgICAgICAg
bmV3UmFuZ2UgPSBjdXJyZW50UmFuZ2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1Jh
bmdlID0gdW5pb25ET01SYW5nZXMoY3VycmVudFJhbmdlLCByYW5nZUF0UG9zaXRpb24uZ2V0KCkp
OworCisgICAgICAgIEludFJlY3QgY29weVJlY3QgPSBuZXdSYW5nZS0+Ym91bmRpbmdCb3goKTsK
KworICAgICAgICAvLyBJcyBpdCBkaWZmZXJlbnQgYW5kIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50
PworICAgICAgICBCT09MIGJldHRlciA9ICEocmVjdHNFc3NlbnRpYWxseVRoZVNhbWUoY29weVJl
Y3QsIGN1cnJlbnRCb3gsIC4wNSkpOworICAgICAgICBpZiAoYmV0dGVyKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgY2FzZSBXS0hhbmRs
ZVRvcDoKKyAgICAgICAgICAgICAgICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICAgICAg
ICAgICAgICBiZXR0ZXIgPSAoY29weVJlY3QuaGVpZ2h0KCkgPiBjdXJyZW50Qm94LmhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXS0hh
bmRsZVJpZ2h0OgorICAgICAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICAg
ICAgICAgICAgICBiZXR0ZXIgPSAoY29weVJlY3Qud2lkdGgoKSA+IGN1cnJlbnRCb3gud2lkdGgo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
IH0KKworICAgICAgICBpZiAoYmVzdCAmJiBiZXR0ZXIpIHsKKyAgICAgICAgICAgIC8vIEZ1cnRo
ZXJvcmUsIGlzIGl0IHNtYWxsZXIgdGhhbiB0aGUgYmVzdCB3ZSd2ZSBmb3VuZCBzbyBmYXI/Cisg
ICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFdL
SGFuZGxlVG9wOgorICAgICAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgICAg
ICAgICBiZXR0ZXIgPSAoY29weVJlY3QuaGVpZ2h0KCkgPCBiZXN0UmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6Cisg
ICAgICAgICAgICBjYXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAgICAgICAgICBiZXR0ZXIgPSAo
Y29weVJlY3Qud2lkdGgoKSA8IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGJldHRlcikgewor
ICAgICAgICAgICAgYmVzdCA9IG5ld1JhbmdlOworICAgICAgICAgICAgYmVzdFJlY3QgPSBjb3B5
UmVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3RhbmNlICo9IG11bHRpcGxlOworICAgICAg
ICBkaXN0YW5jZSA9IGNlaWxmKGRpc3RhbmNlKTsKKyAgICB9CisKKyAgICBpZiAoYmVzdCkKKyAg
ICAgICAgcmV0dXJuIGJlc3Q7CisKKyAgICByZXR1cm4gY3VycmVudFJhbmdlOworfQorCitQYXNz
UmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKFJhbmdlKiBj
dXJyZW50UmFuZ2UsIFdLSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIFdLU2VsZWN0aW9u
RmxhZ3MmIGZsYWdzKQoreworICAgIC8vIFNocmlua2luZyB3aXRoIGEgYmFzZSBhbmQgZXh0ZW50
IHdpbGwgYWx3YXlzIGdpdmUgYmV0dGVyIHJlc3VsdHMuICBJZiB3ZSBvbmx5IGhhdmUgYSBzaW5n
bGUgZWxlbWVudCwKKyAgICAvLyBzZWUgaWYgd2UgY2FuIGJyZWFrIHRoYXQgZG93biB0byBhIGJh
c2UgYW5kIGV4dGVudC4gIFNocmlua2luZyBiYXNlIGFuZCBleHRlbnQgaXMgY29tcGFyYXRpdmVs
eSBzdHJhaWdodGZvcndhcmQuCisgICAgLy8gU2hyaW5raW5nIGRvd24gdG8gYW5vdGhlciBlbGVt
ZW50IGlzIHVubGlrZWx5IHRvIG1vdmUganVzdCBvbmUgZWRnZSwgYnV0IHdlIGNhbiB0cnkgdGhh
dCBhcyBhIGZhbGxiYWNrLgorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgYm91bmRpbmdS
ZWN0KCkgaW5zdGVhZCBvZiBib3VuZGluZ0JveCgpIGluIHRoaXMgZnVuY3Rpb24gd2hlbiA8cmRh
cjovL3Byb2JsZW0vMTYwNjM3MjM+IGlzIGZpeGVkLgorICAgIEludFJlY3QgY3VycmVudEJveCA9
IGN1cnJlbnRSYW5nZS0+Ym91bmRpbmdCb3goKTsKKyAgICBJbnRQb2ludCBlZGdlQ2VudGVyID0g
Y29tcHV0ZUVkZ2VDZW50ZXIoY3VycmVudEJveCwgaGFuZGxlUG9zaXRpb24pOworICAgIGZsYWdz
ID0gV0tJc0Jsb2NrU2VsZWN0aW9uOworCisgICAgZmxvYXQgZGlzdGFuY2UgPSAxOworICAgIFJl
ZlB0cjxSYW5nZT4gYmVzdDsKKyAgICBJbnRSZWN0IGJlc3RSZWN0OworICAgIGZsb2F0IG1heERp
c3RhbmNlOworCisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgV0tIYW5k
bGVUb3A6CisgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgbWF4RGlzdGFuY2UgPSBj
dXJyZW50Qm94LmhlaWdodCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdLSGFuZGxlUmln
aHQ6CisgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgIG1heERpc3RhbmNlID0gY3VycmVu
dEJveC53aWR0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjb25zdCBDR0Zsb2F0
IG11bHRpcGxlID0gcG93ZihtYXhEaXN0YW5jZSAtIDEsIDEuMC8oTWF4SGl0VGVzdHMgLSAxKSk7
CisgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZTsKKworICAgIHdoaWxlIChkaXN0YW5jZSA8IG1h
eERpc3RhbmNlKSB7CisgICAgICAgIGlmIChiZXN0KSB7CisgICAgICAgICAgICBDR0Zsb2F0IHNo
cmFua0Rpc3RhbmNlOworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAg
ICAgICAgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVCb3R0
b206CisgICAgICAgICAgICAgICAgc2hyYW5rRGlzdGFuY2UgPSBhYnMoY3VycmVudEJveC5oZWln
aHQoKSAtIGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVMZWZ0
OgorICAgICAgICAgICAgICAgIHNocmFua0Rpc3RhbmNlID0gYWJzKGN1cnJlbnRCb3gud2lkdGgo
KSAtIGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHNocmFua0Rpc3RhbmNlID4gZGlzdGFuY2UpIHsKKyAgICAg
ICAgICAgICAgICAvLyBDZXJ0YWlubHkgbm90IGdvaW5nIHRvIGRvIGFueSBiZXR0ZXIgdGhhbiB0
aGF0LgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgSW50UG9pbnQgdGVzdFBvaW50ID0gZWRnZUNlbnRlcjsKKyAgICAgICAgc3dpdGNo
IChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgICAgICAg
ICAgdGVzdFBvaW50Lm1vdmUoMCwgZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKC1kaXN0
YW5jZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRv
bToKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIC1kaXN0YW5jZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgICAgICB0ZXN0UG9p
bnQubW92ZShkaXN0YW5jZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIG5ld1JhbmdlID0gcmFuZ2VGb3JCbG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAg
ICAgaWYgKGhhbmRsZVBvc2l0aW9uID09IFdLSGFuZGxlVG9wIHx8IGhhbmRsZVBvc2l0aW9uID09
IFdLSGFuZGxlTGVmdCkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShuZXdS
YW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSwgbmV3UmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgY3VycmVudFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1JhbmdlLT5zdGFydENvbnRhaW5lcigp
LT5kb2N1bWVudCgpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbmV3UmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOworCisgICAgICAgIEludFJlY3QgY29weVJlY3QgPSBuZXdSYW5nZS0+Ym91
bmRpbmdCb3goKTsKKyAgICAgICAgYm9vbCBiZXR0ZXI7CisgICAgICAgIHN3aXRjaCAoaGFuZGxl
UG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAgICAgICAgY2FzZSBXS0hh
bmRsZUJvdHRvbToKKyAgICAgICAgICAgIGJldHRlciA9IChjb3B5UmVjdC5oZWlnaHQoKSA8IGN1
cnJlbnRCb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tI
YW5kbGVMZWZ0OgorICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgICAgICBiZXR0
ZXIgPSAoY29weVJlY3Qud2lkdGgoKSA+IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBiZXR0ZXIgPSBiZXR0ZXIgJiYgIWFyZVJhbmdl
c0VxdWFsKG5ld1JhbmdlLmdldCgpLCBjdXJyZW50UmFuZ2UpOworICAgICAgICBpZiAoYmVzdCAm
JiBiZXR0ZXIpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlQm90dG9t
OgorICAgICAgICAgICAgICAgIGJldHRlciA9IChjb3B5UmVjdC5oZWlnaHQoKSA+IGJlc3RSZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV0tI
YW5kbGVMZWZ0OgorICAgICAgICAgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICAgICAg
ICAgIGJldHRlciA9IChjb3B5UmVjdC53aWR0aCgpID4gYmVzdFJlY3Qud2lkdGgoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGJldHRlcikgeworICAgICAgICAgICAgYmVzdCA9IG5ld1JhbmdlOworICAgICAgICAgICAgYmVz
dFJlY3QgPSBjb3B5UmVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3RhbmNlICo9IG11bHRp
cGxlOworICAgIH0KKworICAgIC8vIElmIHdlIGNhbiBzaHJpbmsgZG93biB0byB0ZXh0IG9ubHks
IHRoZSBvbmx5IHJlYXNvbiB3ZSB3b3VsZG4ndCBpcyB0aGF0CisgICAgLy8gdGhlcmUgYXJlIG11
bHRpcGxlIHN1Yi1lbGVtZW50IGJsb2NrcyBiZW5lYXRoIHVzLiAgSWYgd2UgZGlkbid0IGZpbmQK
KyAgICAvLyBtdWx0aXBsZSBzdWItZWxlbWVudCBibG9ja3MsIGRvbid0IHNocmluayB0byBhIHN1
Yi1lbGVtZW50IGJsb2NrLgorICAgIGlmICghYmVzdCkgeworICAgICAgICBiZXN0ID0gY3VycmVu
dFJhbmdlOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBOb2RlKiBub2RlID0g
Y3VycmVudFJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7CisgICAgICAgIGlmICgh
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudEVs
ZW1lbnQoKTsKKworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgp
ICYmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgPT0gbmlsKSAmJiAhcmVuZGVyZXItPmlzVGFi
bGUoKSkgeworICAgICAgICAgICAgZmxhZ3MgPSBXS05vbmU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gYmVzdDsKK30KKwordm9pZCBXZWJQYWdlOjpjb21wdXRlRXhwYW5kQW5kU2hy
aW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIFdLSGFuZGxlUG9z
aXRpb24gaGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5r
VGhyZXNob2xkKQoreworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50UmFuZ2Ug
PSBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA/IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uLmdldCgp
IDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBBU1NFUlQoY3VycmVudFJhbmdlKTsKKworICAgIFJlZlB0cjxSYW5nZT4gZXhwYW5kZWRSYW5n
ZSA9IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5nZXQoKSwgaGFuZGxlUG9z
aXRpb24pOworICAgIFdLU2VsZWN0aW9uRmxhZ3MgZmxhZ3M7CisgICAgUmVmUHRyPFJhbmdlPiBj
b250cmFjdGVkUmFuZ2UgPSBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5n
ZXQoKSwgaGFuZGxlUG9zaXRpb24sIGZsYWdzKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQgb2YgYm91bmRpbmdCb3goKSBpbiB0aGlzIGZ1bmN0
aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJbnRSZWN0
IGN1cnJlbnRCb3VuZHMgPSBjdXJyZW50UmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgSW50UmVj
dCBleHBhbmRlZEJvdW5kcyA9IGV4cGFuZGVkUmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgSW50
UmVjdCBjb250cmFjdGVkQm91bmRzID0gY29udHJhY3RlZFJhbmdlLT5ib3VuZGluZ0JveCgpOwor
CisgICAgZmxvYXQgY3VycmVudCwgZXhwYW5kZWQsIGNvbnRyYWN0ZWQ7CisgICAgZmxvYXQgbWF4
VGhyZXNob2xkOworICAgIGZsb2F0IG1pblRocmVzaG9sZDsKKworICAgIHN3aXRjaCAoaGFuZGxl
UG9zaXRpb24pIHsKKyAgICBjYXNlIFdLSGFuZGxlVG9wOiB7CisgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50Qm91bmRzLnkoKTsKKyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy55KCk7
CisgICAgICAgIGNvbnRyYWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLnkoKTsKKyAgICAgICAgbWF4
VGhyZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0tIYW5kbGVSaWdodDogeworICAgICAgICBj
dXJyZW50ID0gY3VycmVudEJvdW5kcy5tYXhYKCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5k
ZWRCb3VuZHMubWF4WCgpOworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy5t
YXhYKCk7CisgICAgICAgIG1heFRocmVzaG9sZCA9IEZMVF9NQVg7CisgICAgICAgIG1pblRocmVz
aG9sZCA9IEZMVF9NSU47CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdLSGFuZGxl
Qm90dG9tOiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLm1heFkoKTsKKyAgICAg
ICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy5tYXhZKCk7CisgICAgICAgIGNvbnRyYWN0ZWQg
PSBjb250cmFjdGVkQm91bmRzLm1heFkoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01B
WDsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0tIYW5kbGVMZWZ0OiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91
bmRzLngoKTsKKyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy54KCk7CisgICAgICAg
IGNvbnRyYWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLngoKTsKKyAgICAgICAgbWF4VGhyZXNob2xk
ID0gRkxUX01JTjsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IEZyYWN0aW9uVG9H
cm93ID0gMC4zOworCisgICAgZ3Jvd1RocmVzaG9sZCA9IGN1cnJlbnQgKyAoZXhwYW5kZWQgLSBj
dXJyZW50KSAqIEZyYWN0aW9uVG9Hcm93OworICAgIHNocmlua1RocmVzaG9sZCA9IGN1cnJlbnQg
KyAoY29udHJhY3RlZCAtIGN1cnJlbnQpICogKDEgLSBGcmFjdGlvblRvR3Jvdyk7CisgICAgaWYg
KGFyZVJhbmdlc0VxdWFsKGV4cGFuZGVkUmFuZ2UuZ2V0KCksIGN1cnJlbnRSYW5nZS5nZXQoKSkp
CisgICAgICAgIGdyb3dUaHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CisKKyAgICBpZiAoKGZsYWdz
ICYgV0tJc0Jsb2NrU2VsZWN0aW9uKSAmJiBhcmVSYW5nZXNFcXVhbChjb250cmFjdGVkUmFuZ2Uu
Z2V0KCksIGN1cnJlbnRSYW5nZS5nZXQoKSkpCisgICAgICAgIHNocmlua1RocmVzaG9sZCA9IG1p
blRocmVzaG9sZDsKK30KKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEV4cGFuZChXS0hhbmRs
ZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCit7CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNhc2Ug
V0tIYW5kbGVUb3A6CisgICAgICAgIHJldHVybiAocG9pbnQueSgpIDwgcmVjdC55KCkpOworICAg
IGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICByZXR1cm4gKHBvaW50LngoKSA8IHJlY3QueCgp
KTsKKyAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgIHJldHVybiAocG9pbnQueCgpID4g
cmVjdC5tYXhYKCkpOworICAgIGNhc2UgV0tIYW5kbGVCb3R0b206CisgICAgICAgIHJldHVybiAo
cG9pbnQueSgpID4gcmVjdC5tYXhZKCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4gV2ViUGFnZTo6Y2hhbmdlQmxvY2tTZWxlY3Rpb24oY29uc3QgSW50UG9pbnQmIHBv
aW50LCBXS0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9s
ZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCwgV0tTZWxlY3Rpb25GbGFncyYgZmxhZ3MpCit7Cisg
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3VycmVudEJsb2Nr
U2VsZWN0aW9uID8gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgdXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQgb2YgYm91bmRpbmdCb3goKSBpbiB0aGlz
IGZ1bmN0aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJ
bnRSZWN0IGN1cnJlbnRSZWN0ID0gY3VycmVudFJhbmdlLT5ib3VuZGluZ0JveCgpOworCisgICAg
UmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHNob3VsZEV4cGFuZChoYW5kbGVQb3NpdGlvbiwgY3Vy
cmVudFJlY3QsIHBvaW50KSA/IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5n
ZXQoKSwgaGFuZGxlUG9zaXRpb24pIDogY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShjdXJyZW50
UmFuZ2UuZ2V0KCksIGhhbmRsZVBvc2l0aW9uLCBmbGFncyk7CisKKyAgICBpZiAobmV3UmFuZ2Up
IHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBuZXdSYW5nZTsKKyAgICAgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVG
QVVMVF9BRkZJTklUWSwgdHJ1ZSk7CisgICAgfQorCisgICAgY29tcHV0ZUV4cGFuZEFuZFNocmlu
a1RocmVzaG9sZHNGb3JIYW5kbGUocG9pbnQsIGhhbmRsZVBvc2l0aW9uLCBncm93VGhyZXNob2xk
LCBzaHJpbmtUaHJlc2hvbGQpOworICAgIHJldHVybiBuZXdSYW5nZTsKK30KKwordm9pZCBXZWJQ
YWdlOjp1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IEludFBvaW50JiBwb2lu
dCwgdWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pCit7CisgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZnJhbWUudmlldygpLT5yb290Vmlld1Rv
Q29udGVudHMocG9pbnQpOworCisgICAgZmxvYXQgZ3Jvd1RocmVzaG9sZCA9IDA7CisgICAgZmxv
YXQgc2hyaW5rVGhyZXNob2xkID0gMDsKKyAgICBXS1NlbGVjdGlvbkZsYWdzIGZsYWdzID0gV0tJ
c0Jsb2NrU2VsZWN0aW9uOworCisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxXS1NlbGVjdGlvblRv
dWNoPih0b3VjaGVzKSkgeworICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6CisgICAg
ICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKGFkanVzdGVkUG9p
bnQsIHN0YXRpY19jYXN0PFdLSGFuZGxlUG9zaXRpb24+KGhhbmRsZVBvc2l0aW9uKSwgZ3Jvd1Ro
cmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdL
U2VsZWN0aW9uVG91Y2hFbmRlZDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdLU2VsZWN0
aW9uVG91Y2hNb3ZlZDoKKyAgICAgICAgY2hhbmdlQmxvY2tTZWxlY3Rpb24oYWRqdXN0ZWRQb2lu
dCwgc3RhdGljX2Nhc3Q8V0tIYW5kbGVQb3NpdGlvbj4oaGFuZGxlUG9zaXRpb24pLCBncm93VGhy
ZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQsIGZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyh0b3VjaGVzLCBmbGFn
cywgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6
Y2xlYXJTZWxlY3Rpb24oKQoreworICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID0gbnVsbHB0
cjsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNl
bGVjdGlvbigpLmNsZWFyKCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0
aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJh
c2VJc1N0YXJ0LCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CkBAIC03MzYsOCAr
MTE3OCw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMKIHZvaWQg
V2ViUGFnZTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZy
b20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVp
bnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBmcm9tUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25G
b3JQb2ludChmcm9tKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZp
c2libGVQb3NpdGlvbkZvclBvaW50KHRvKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZnJvbVBvc2l0
aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmll
d1RvQ29udGVudHMoZnJvbSkpOworICAgIFZpc2libGVQb3NpdGlvbiB0b1Bvc2l0aW9uID0gZnJh
bWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVu
dHModG8pKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIGlmIChmcm9tUG9zaXRpb24u
aXNOb3ROdWxsKCkgJiYgdG9Qb3NpdGlvbi5pc05vdE51bGwoKSkgewogICAgICAgICBpZiAoZnJv
bVBvc2l0aW9uIDwgdG9Qb3NpdGlvbikKQEAgLTk4MCw2ICsxNDIyLDcgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICBpZiAoaGl0Tm9kZSkgewogICAg
ICAgICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRnJhbWUocmVzdWx0
LmlubmVyTm9kZUZyYW1lKCkpOwogICAgICAgICAgICAgaW5mby5zZWxlY3Rpb25SZWN0cy5hcHBl
bmQoU2VsZWN0aW9uUmVjdChoaXROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCh0cnVlKSwgdHJ1ZSwgMCkpOworICAgICAgICAgICAgaW5mby5ib3VuZHMgPSBoaXROb2Rl
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAgfQog
ICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224878</attachid>
            <date>2014-02-21 09:46:22 -0800</date>
            <delta_ts>2014-02-21 09:53:44 -0800</delta_ts>
            <desc>Block selection part2</desc>
            <filename>blockselection-part2-webkit.txt</filename>
            <type>text/plain</type>
            <size>43825</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAyLTIxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21l
IGV4cG9ydHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKwogMjAxNC0wMi0yMSAgTWFy
dGluIEhvZG92YW4gIDxtaG9kb3ZhbkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgRml4aW5n
IHRoZSAhRU5BQkxFKFNWR19GT05UUykgYnVpbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShy
ZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4NSw2ICsxMDg1LDExIEBAIF9fWk43V2ViQ29yZTVSYW5nZTZzZXRFbmRF
TjNXVEYxMFBhc3NSZWYKIF9fWk43V2ViQ29yZTVSYW5nZThjb2xsYXBzZUViUmkKIF9fWk43V2Vi
Q29yZTVSYW5nZThzZXRTdGFydEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlSaQogX19a
TjdXZWJDb3JlNVJhbmdlRDFFdgorX19aTks3V2ViQ29yZTROb2RlOHNob3dOb2RlRVBLYworX19a
Tks3V2ViQ29yZThQb3NpdGlvbjIzc2hvd0FuY2hvclR5cGVBbmRPZmZzZXRFdgorX19aTks3V2Vi
Q29yZTVSYW5nZTExYm91bmRpbmdCb3hFdgorX19aTks3V2ViQ29yZTVSYW5nZTEyYm91bmRpbmdS
ZWN0RXYKK19fWk5LN1dlYkNvcmU1UmFuZ2UxMGNsb25lUmFuZ2VFUmkKIF9fWk43V2ViQ29yZTZD
aHJvbWUxNnNldFN0YXR1c2JhclRleHRFUE5TXzVGcmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTZDaHJvbWU1cHJpbnRFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTZFZGl0b3I3Y29w
eVVSTEVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCkBAIC0yMzI2LDYgKzIzMzEsNyBAQCBfX1pO
N1dlYkNvcmUxM2VuZE9mRG9jdW1lbnRFUktOU18xNVZpc2liCiBfX1pON1dlYkNvcmUxM2VuZE9m
U2VudGVuY2VFUktOU18xNVZpc2libGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTEzZ2V0UmF3Q29v
a2llc0VSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVTNV9STjNXVEY2VmVj
dG9ySU5TXzZDb29raWVFTG0wRU5TNl8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3Jl
MTNpc1N0YXJ0T2ZMaW5lRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCitfX1pON1dlYkNvcmUxNGFy
ZVJhbmdlc0VxdWFsRVBLTlNfNVJhbmdlRVMyXwogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRl
cjE5c2V0UmVzcG9uc2VNSU1FVHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0RG9j
dW1lbnRXcml0ZXIzZW5kRXYKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xM3NldENhcmV0
Q29sb3JFUktOU181Q29sb3JFCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAor
MjAxNC0wMi0yMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAg
IFN1cHBvcnQgV2ViU2VsZWN0aW9ucyBpbiBXSzIgb24gaU9TLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xNTIxMTk2ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGlzIHRoZSByZW1haW5pbmcgd29yayBvbiBibG9jayBzZWxlY3Rpb25zIGZv
ciBpT1MgaW4gV0syLgorICAgICAgICBPbmNlIGEgYmxvY2sgc2VsZWN0aW9uIGhhcyBiZWVuIGNy
ZWF0ZWQgd2l0aCBhIGxvbmcgcHJlc3MgZ2VzdHVyZQorICAgICAgICBvbiBhIHNlbGVjdGFibGUg
YXJlYSwgd2UgY2FuIGludGVyYWN0IHdpdGggaXQgYnkgdG91Y2hpbmcgdGhlIGZvdXIKKyAgICAg
ICAgaGFuZGxlcyBhdCB0aGUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHNpZGUgb2YgdGhl
IHNlbGVjdGlvbiBib3guCisgICAgICAgIEV4cGFuZGluZyBvciBzaHJpbmtpbmcgYSBibG9jayBz
ZWxlY3Rpb24gcmVxdWlyZXMgZmluZGluZyB0aGUgbmV4dC9wcmV2aW91cworICAgICAgICBibG9j
ayBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtb3ZlbWVudCwgZGVwZW5kaW5nIG9uIHRoZSBoYW5k
bGUgd2UKKyAgICAgICAgYXJlIGludGVyYWN0aW5nIHdpdGguCisgICAgICAgIEV2ZXJ5IHRpbWUg
YSBuZXcgYmxvY2sgaXMgc2VsZWN0ZWQsIHdlIGNvbXB1dGUgdGhlIHRocmVzaG9sZHMgcmVxdWly
ZWQKKyAgICAgICAgdG8gdHJpZ2dlciBhbm90aGVyIGJsb2NrIGNoYW5nZS4gVGhlIHRocmVzaG9s
ZHMgYXJlIHNlbnQgYmFjayB0byB0aGUKKyAgICAgICAgVUlQcm9jZXNzIHRoYXQgd2lsbCB1c2Ug
dGhpcyBpbmZvcm1hdGlvbiB0byBkZWNpZGUgd2hlbiB0byBhY3RpdmF0ZQorICAgICAgICB0aGUg
bmV3IHNlbGVjdGlvbiwgZWl0aGVyIGJpZ2dlciBvciBzbWFsbGVyLgorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gZml4ZXMgYSBidWcgaW4gc2VsZWN0V2l0aFR3b1RvdWNoZXMgd2hlcmUgdGhlIHBv
aW50cworICAgICAgICB3ZXJlIG5vdCBtYXBwZWQgdG8gdGhlIGFjdGl2ZSBmcmFtZS4KKworICAg
ICAgICAqIFNoYXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
ZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlk
VXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlczp3aXRoRmxhZ3M6Z3Jvd1RocmVzaG9sZDpz
aHJpbmtUaHJlc2hvbGQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50
Vmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlv
blZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaGFzU2VsZWN0YWJsZVBvc2l0aW9uQXRQ
b2ludDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgY2xlYXJTZWxlY3Rpb25dKToK
KyAgICAgICAgKHRvV0tIYW5kbGVQb3NpdGlvbik6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25W
aWV3IF9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOldlYktpdDo6d2l0aEZsYWdz
OldlYktpdDo6Z3Jvd1RocmVzaG9sZDpzaHJpbmtUaHJlc2hvbGQ6XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IGNoYW5nZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6d2l0aFNlbGVj
dGlvblRvdWNoOmZvckhhbmRsZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZUJs
b2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0UG9pbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OmRp
c3RhbmNlQmV0d2VlblJlY3RzRm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpyZWN0c0Vz
c2VudGlhbGx5VGhlU2FtZSk6CisgICAgICAgIChXZWJLaXQ6OmNvbnRhaW5zUmFuZ2UpOgorICAg
ICAgICAoV2ViS2l0Ojp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OmNvbXB1dGVF
ZGdlQ2VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZXhwYW5kZWRSYW5nZUZyb21I
YW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb250cmFjdGVkUmFuZ2VGcm9tSGFu
ZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZUV4cGFuZEFuZFNocmlua1Ro
cmVzaG9sZHNGb3JIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRFeHBhbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjaGFuZ2VCbG9ja1NlbGVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisKIDIwMTQtMDItMjAgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcmVkdW5kYW50IGRldmljZVNjYWxlRmFj
dG9yKCkgZnVuY3Rpb25zIGFuZCBtYWtlIGNhbGxlcnMgdXNlIERvY3VtZW50OjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIHdoZW4gYWNjZXNzaWJsZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9p
b3MvV0tHZXN0dXJlVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
aW9zL1dLR2VzdHVyZVR5cGVzLmgJKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUs
MTIgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXS0lzQmxvY2tTZWxlY3Rpb24gPSAyCiB9IFdLU2Vs
ZWN0aW9uRmxhZ3M7CiAKK3R5cGVkZWYgZW51bSB7CisgICAgV0tIYW5kbGVUb3AsCisgICAgV0tI
YW5kbGVSaWdodCwKKyAgICBXS0hhbmRsZUJvdHRvbSwKKyAgICBXS0hhbmRsZUxlZnQKK30gV0tI
YW5kbGVQb3NpdGlvbjsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV0tHZXN0
dXJlVHlwZXNfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBp
c0NoYXJFdmVudCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlk
Q2hhbmdlKGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoZXModWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dU
aHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkgPSAwOwogI2VuZGlmCiAKICAgICAvLyBB
dXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3Qg
Z2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4pOwogICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFBhc3NSZWZQdHI8VG91Y2hlc0NhbGxiYWNrPik7
CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBm
cm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVp
bnQzMl90IGdlc3R1cmVTdGF0ZSwgUGFzc1JlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+KTsKKyAgICB2
b2lkIHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQsIHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsKICAgICB2b2lk
IGV4dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpOwogICAgIHZvaWQgcmVx
dWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlv
biwgUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4pOwogICAgIHZvaWQgYXBw
bHlBdXRvY29ycmVjdGlvbihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYg
b3JpZ2luYWxUZXh0LCBQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPik7CkBAIC00NzAsNiArNDcx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJm
b3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBzYXZlSW1hZ2VU
b0xpYnJhcnkoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRf
dCBpbWFnZVNpemUpOworICAgIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hl
cyh1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwg
ZmxvYXQgc2hyaW5rVGhyZXNob2xkKTsKICNlbmRpZgogCiAgICAgY29uc3QgRWRpdG9yU3RhdGUm
IGVkaXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBJbnRlcnByZXRLZXlFdmVudChXZWJLaXQ6OkVkaXRvclN0
YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQogICAgIERpZFJl
Y2VpdmVQb3NpdGlvbkluZm9ybWF0aW9uKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24gaW5mb3JtYXRpb24pCiAgICAgU2F2ZUltYWdlVG9MaWJyYXJ5KFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXplKQorICAgIERpZFVwZGF0ZUJs
b2NrU2VsZWN0aW9uV2l0aFRvdWNoZXModWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3Ms
IGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkKICNlbmRpZgogI2lm
IFBMQVRGT1JNKEdUSykKICAgICBQcmludEZpbmlzaGVkQ2FsbGJhY2soV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBlcnJvciwgdWludDY0X3QgY2FsbGJhY2tJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNp
b24gMTY0NDg1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcG9z
aXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbiYpOwogICAgIHZpcnR1YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1JlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmxv
Y2tTZWxlY3Rpb25XaXRoVG91Y2hlcyh1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBmbGFncywg
ZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKTsKIAogICAgIC8vIEF1
eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1Niw2ICsz
NTYsMTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RvcEFzc2lzdGluZ05vZGUoKQogICAgIFtt
X3ZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
VXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyh1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJf
dCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQorewor
ICAgIFttX3ZpZXcgX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdLU2VsZWN0
aW9uVG91Y2gpdG91Y2hlcyB3aXRoRmxhZ3M6KFdLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1Ro
cmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDpzaHJpbmtUaHJlc2hvbGRdOwor
fQorCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogCiBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5Q2xpZW50JiBQYWdlQ2xpZW50SW1wbDo6ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVu
dFZpZXcubW0JKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLQ29udGVudFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5OCw2ICsyOTgsMTEg
QEAgLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAogICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9zZWxl
Y3Rpb25DaGFuZ2VkXTsKIH0KIAorLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2hlczooV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaGVzIHdpdGhGbGFnczooV0tTZWxlY3Rpb25G
bGFncylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhy
ZXNob2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZAoreworICAgIFtfaW50ZXJhY3Rpb25WaWV3
IF9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOnRvdWNoZXMgd2l0aEZsYWdzOmZs
YWdzIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6c2hyaW5rVGhy
ZXNob2xkXTsKK30KKwogLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50ICop
dGhlRXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKIHsKICAgICByZXR1cm4gW19p
bnRlcmFjdGlvblZpZXcgX2ludGVycHJldEtleUV2ZW50OnRoZUV2ZW50IGlzQ2hhckV2ZW50Omlz
Q2hhckV2ZW50XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbXBvcnQgIldLQ29udGVu
dFZpZXcuaCIKKyNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCiAjaW1wb3J0IDx3dGYvRm9yd2Fy
ZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpA
QCAtNzEsNiArNzIsNyBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247
CiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKil0aGVFdmVudCBpc0No
YXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKIC0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25E
aWRDaGFuZ2U6KGNvbnN0IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24m
KWluZm87CiAtICh2b2lkKV9kZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3Jp
Z2luOihXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYktpdDo6V2Vi
RnJhbWVQcm94eSYpZnJhbWUgcmVxdWVzdDooV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0UHJveHkmKXBlcm1pc3Npb25SZXF1ZXN0OworLSAodm9pZClfZGlkVXBkYXRlQmxvY2tT
ZWxlY3Rpb25XaXRoVG91Y2hlczooV2ViS2l0OjpXS1NlbGVjdGlvblRvdWNoKXRvdWNoZXMgd2l0
aEZsYWdzOihXZWJLaXQ6OldLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dG
bG9hdClncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hv
bGQ7CiAKIC0gKFJldGFpblB0cjxDR0ltYWdlUmVmPilfdGFrZVZpZXdTbmFwc2hvdDsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0
aW9uVmlldy5oCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw1ICs3MCw2
IEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjsKIC0gKHZvaWQpX3dp
bGxTdGFydFNjcm9sbGluZ09yWm9vbWluZzsKIC0gKHZvaWQpX3dpbGxTdGFydFVzZXJUcmlnZ2Vy
ZWRTY3JvbGxpbmdPclpvb21pbmc7CiAtICh2b2lkKV9kaWRFbmRTY3JvbGxpbmdPclpvb21pbmc7
CistICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOihXZWJLaXQ6OldL
U2VsZWN0aW9uVG91Y2gpdG91Y2hlcyB3aXRoRmxhZ3M6KFdlYktpdDo6V0tTZWxlY3Rpb25GbGFn
cylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNo
b2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZDsKIEBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0
b21pYykgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBwb3NpdGlvbklu
Zm9ybWF0aW9uOwogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tJbnRlcmFjdGlvblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NjQsNiArNTY0LDcgQEAgLSAoQk9PTCloYXNTZWxlY3RhYmxlUG9zaXRp
b25BdFBvaW50OihDRwogewogICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1Vw
VG9EYXRlOnBvaW50XTsKICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBuZWVkcyB0byBiZSBleHRl
bmRlZCB0byBpbmNsdWRlIG90aGVyIGVsZW1lbnRzLgorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IHJlamVjdCBwb3NpdGlvbnMgdGhhdCB3aWxsIGxlYWQgdG8gYSB2ZXJ5IGxhcmdlIHNlbGVjdGlv
bi4KICAgICByZXR1cm4gX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUg
IT0gIklNRyIgJiYgX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUgIT0g
IkEiICYmICFfcG9zaXRpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCk7CiB9
CiAKQEAgLTY5Myw2ICs2OTQsMTEgQEAgLSAodm9pZCl1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRo
TW9kZTooVQogICAgIH0KIH0KIAorLSAodm9pZCljbGVhclNlbGVjdGlvbgoreworICAgIF9wYWdl
LT5jbGVhclNlbGVjdGlvbigpOworfQorCiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlk
Q2hhbmdlOihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpaW5mbwogewog
ICAgIF9wb3NpdGlvbkluZm9ybWF0aW9uID0gaW5mbzsKQEAgLTExMDUsNiArMTExMSwyMCBAQCBz
dGF0aWMgaW5saW5lIFVJV0tTZWxlY3Rpb25GbGFncyB0b1VJV0tTCiAgICAgfQogfQogCitzdGF0
aWMgaW5saW5lIFdLSGFuZGxlUG9zaXRpb24gdG9XS0hhbmRsZVBvc2l0aW9uKFVJV0tIYW5kbGVQ
b3NpdGlvbiBwb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7CisgICAgY2FzZSBV
SVdLSGFuZGxlVG9wOgorICAgICAgICByZXR1cm4gV0tIYW5kbGVUb3A7CisgICAgY2FzZSBVSVdL
SGFuZGxlUmlnaHQ6CisgICAgICAgIHJldHVybiBXS0hhbmRsZVJpZ2h0OworICAgIGNhc2UgVUlX
S0hhbmRsZUJvdHRvbToKKyAgICAgICAgcmV0dXJuIFdLSGFuZGxlQm90dG9tOworICAgIGNhc2Ug
VUlXS0hhbmRsZUxlZnQ6CisgICAgICAgIHJldHVybiBXS0hhbmRsZUxlZnQ7CisgICAgfQorfQor
CiBzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoYm9vbCBlcnJvciwgV0tJ
bnRlcmFjdGlvblZpZXcgKnZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWlu
dDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3Mp
CiB7CiAgICAgaWYgKGVycm9yKSB7CkBAIC0xMTI5LDYgKzExNDksMTEgQEAgc3RhdGljIHZvaWQg
c2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChibwogICAgICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rp
b25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdl
ZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDp0b1VJV0tTZWxl
Y3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCldOwogfQogCistICh2b2lkKV9kaWRV
cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOihXZWJLaXQ6OldLU2VsZWN0aW9uVG91Y2gp
dG91Y2hlcyB3aXRoRmxhZ3M6KFdlYktpdDo6V0tTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhy
ZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNo
cmlua1RocmVzaG9sZAoreworICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IGJsb2NrU2VsZWN0
aW9uQ2hhbmdlZFdpdGhUb3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3Vj
aCl0b3VjaGVzKSB3aXRoRmxhZ3M6dG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9uRmxh
Z3MpZmxhZ3MpIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6c2hy
aW5rVGhyZXNob2xkXTsKK30KKwogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0
OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUg
d2l0aFN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpc3RhdGUKIHsKICAgICBfcGFnZS0+
c2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwgdG9XS0dlc3R1cmVSZWNvZ25p
emVyU3RhdGUoc3RhdGUpLCBHZXN0dXJlQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCBlcnJv
ciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykgewpAQCAtMTE1MCw2ICsxMTc1
LDExIEBAIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOigKICAgICB9KSk7
CiB9CiAKKy0gKHZvaWQpY2hhbmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClw
b2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5k
bGU6KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGUKK3sKKyAgICBfcGFnZS0+dXBkYXRlQmxvY2tT
ZWxlY3Rpb25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHRvV0tTZWxlY3Rp
b25Ub3VjaCh0b3VjaCksIHRvV0tIYW5kbGVQb3NpdGlvbihoYW5kbGUpKTsKK30KKwogLSAoV0tB
dXRvQ29ycmVjdGlvbkRhdGEgKilhdXRvY29ycmVjdGlvbkRhdGEKIHsKICAgICByZXR1cm4gJl9h
dXRvY29ycmVjdGlvbkRhdGE7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMy
Niw2ICszMjYsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKAog
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aFR3b1RvdWNo
ZXMoZnJvbSwgdG8sIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGNhbGxiYWNrSUQpLCBtX3Bh
Z2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhU
b3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1
aW50MzJfdCBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMocG9pbnQsIHRvdWNoZXMs
IGhhbmRsZVBvc2l0aW9uKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
UmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24mIGluZm8pCiB7CiAgICAgbV9wYWdlQ2xpZW50LnBvc2l0aW9uSW5mb3JtYXRpb25E
aWRDaGFuZ2UoaW5mbyk7CkBAIC0zNjMsNiArMzY4LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
YXZlSW1hZ2VUb0xpYnJhcnkoY28KICAgICBtX3BhZ2VDbGllbnQuc2F2ZUltYWdlVG9MaWJyYXJ5
KGJ1ZmZlcik7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaGVzKHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93
VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpCit7CisgICAgbV9wYWdlQ2xpZW50LmRp
ZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXModG91Y2hlcywgZmxhZ3MsIGdyb3dUaHJl
c2hvbGQsIHNocmlua1RocmVzaG9sZCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbigpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNlbGVjdGlvbkRpZENoYW5n
ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQxLDEwICszMDQxLDEyIEBAIHZv
aWQgV2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KEYKICAgICByZXR1cm4gZnJhbWUt
PmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCh0ZXh0LCBzZWxlY3RSZXBsYWNlbWVu
dCwgc21hcnRSZXBsYWNlKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIFdlYlBhZ2U6
OmNsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CisjZW5kaWYKIAogdm9pZCBX
ZWJQYWdlOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxPZmZzZXRQaW5uaW5nKCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTY0
NDg1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDM4LDYgKzQzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGJsdXJBc3Np
c3RlZE5vZGUoKTsKICAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgdXBkYXRl
U2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50
MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAg
ICB2b2lkIHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBoYW5kbGVQb3NpdGlvbik7
CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGV4
dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7CiAgICAgdm9pZCBlbGVtZW50RGlk
Rm9jdXMoV2ViQ29yZTo6Tm9kZSopOwpAQCAtNzM1LDYgKzczNiwxMyBAQCBwcml2YXRlOgogI2lm
IFBMQVRGT1JNKElPUykKICAgICBzdGF0aWMgdm9pZCBjb252ZXJ0U2VsZWN0aW9uUmVjdHNUb1Jv
b3RWaWV3KFdlYkNvcmU6OkZyYW1lVmlldyosIFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0
PiYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yV2ViU2VsZWN0aW9u
QXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVQb3NpdGlvbiYsIFdLU2VsZWN0aW9uRmxhZ3MmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZUZvckJsb2NrQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwor
ICAgIHZvaWQgY29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCBXS0hhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9s
ZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gY2hhbmdlQmxvY2tTZWxlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXS0hhbmRs
ZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9sZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCwg
V0tTZWxlY3Rpb25GbGFncyYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGV4cGFu
ZGVkUmFuZ2VGcm9tSGFuZGxlKFdlYkNvcmU6OlJhbmdlKiwgV0tIYW5kbGVQb3NpdGlvbik7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShX
ZWJDb3JlOjpSYW5nZSogY3VycmVudFJhbmdlLCBXS0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0
aW9uLCBXS1NlbGVjdGlvbkZsYWdzJik7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1f
Y3VycmVudEJsb2NrU2VsZWN0aW9uOwogI2VuZGlmCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBXZWJDb3JlOjpLZXli
b2FyZEV2ZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgQmx1ckFzc2lzdGVkTm9kZSgpCiAgICAgU2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJl
VHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIFVw
ZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJf
dCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAgIFVw
ZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVp
bnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQogICAgIFNlbGVjdFdpdGhU
d29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50IGZyb20sIFdlYkNvcmU6OkludFBvaW50IHRvLCB1
aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50NjRfdCBjYWxs
YmFja0lEKQogICAgIEV4dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSkKICAgICBS
ZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKFN0cmluZyB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIHVp
bnQ2NF90IGNhbGxiYWNrSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQzOCwxMSArNDM4LDEwIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJh
bmdlRm9yV2ViU2UKICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIEludFJlY3QgYm91bmRpbmdSZWN0OwotICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAKICAgICBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlv
biwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOwotICAgICAgICBpZiAo
IXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoZWMpKQorICAgICAgICBpZiAoIXJhbmdlIHx8IHJh
bmdlLT5jb2xsYXBzZWQoQVNTRVJUX05PX0VYQ0VQVElPTikpCiAgICAgICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlv
bik7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTQ2MSw3ICs0NjAsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNl
CiAgICAgICAgIGlmIChib3VuZGluZ1JlY3Qud2lkdGgoKSA+IG1fYmxvY2tTZWxlY3Rpb25EZXNp
cmVkU2l6ZS53aWR0aCgpICYmIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSA+IG1fYmxvY2tTZWxlY3Rp
b25EZXNpcmVkU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB3b3JkUmFuZ2VGcm9t
UG9zaXRpb24ocG9zaXRpb24pOwogCi0gICAgICAgIGN1cnJlbnROb2RlID0gcmFuZ2UtPmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKKyAgICAgICAgY3VycmVudE5vZGUgPSByYW5nZS0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogCiAgICAg
aWYgKCFjdXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtNDgyLDEyICs0ODEsMzYgQEAg
UGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZQogICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBiZXN0Q2hvaWNlLT5yZW5kZXJlcigpOwogICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSAmJiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2so
KSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
ID09IG5pbCkgJiYgIXJlbmRlcmVyLT5pc1RhYmxlKCkpIHsKICAgICAgICAgcmFuZ2UgPSBlbmNs
b3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGly
ZWN0aW9uQmFja3dhcmQpOwotICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQo
ZWMpKQorICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoQVNTRVJUX05PX0VY
Q0VQVElPTikpCiAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgfQogICAgIGZsYWdzID0g
V0tJc0Jsb2NrU2VsZWN0aW9uOwogICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiZXN0Q2hvaWNl
LT5kb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShiZXN0Q2hvaWNlLCBlYyk7Cisg
ICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhiZXN0Q2hvaWNlLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKyAgICByZXR1cm4gcmFuZ2U7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6
OnJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0
VGVzdFJlc3VsdEF0UG9pbnQoKHBvaW50KSwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRl
bnQpOworCisgICAgTm9kZSogY3VycmVudE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZTsKKworICAgIGlmIChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgp
KSB7CisgICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KG1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkudmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQocG9pbnQpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7
CisgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChBU1NFUlRfTk9fRVhDRVBU
SU9OKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsKKyAgICB9CisKKyAgICBpZiAoIWN1cnJl
bnROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5v
ZGUtPnBhcmVudEVsZW1lbnQoKTsKKworICAgIGlmICghY3VycmVudE5vZGUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGN1cnJlbnROb2RlLT5k
b2N1bWVudCgpKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGN1cnJlbnROb2RlLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTUwNCw2ICs1
MjcsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEluCiAgICAgfQog
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgV0tTZWxlY3Rpb25GbGFncyBmbGFncyA9IFdL
Tm9uZTsKKyAgICBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUgd2tHZXN0dXJlU3RhdGUgPSBzdGF0
aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSk7CiAgICAgc3dp
dGNoIChzdGF0aWNfY2FzdDxXS0dlc3R1cmVUeXBlPihnZXN0dXJlVHlwZSkpIHsKICAgICBjYXNl
IFdLR2VzdHVyZU9uZUZpbmdlclRhcDoKICAgICB7CkBAIC01NDMsMjAgKzU2NywxNyBAQCB2b2lk
IFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEluCiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBXS0dlc3R1cmVUYXBBbmRBSGFsZjoKLSAgICAgICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0ZSkpIHsKKyAgICAgICAgc3dp
dGNoICh3a0dlc3R1cmVTdGF0ZSkgewogICAgICAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZUJlZ2FuOgogICAgICAgICAgICAgcmFuZ2UgPSB3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9z
aXRpb24pOwogICAgICAgICAgICAgbV9jdXJyZW50V29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0
aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV0tHZXN0dXJlUmVjb2du
aXplclN0YXRlQ2hhbmdlZDoKLSAgICAgICAgewogICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBtX2N1cnJlbnRXb3JkUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgbV9jdXJyZW50V29yZFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCByYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKQotICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLCBlYyk7CisgICAgICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCksIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgICAgICAgICAg
aWYgKHBvc2l0aW9uID4gcmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmFu
Z2UtPnNldEVuZChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBlYyk7Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV0tH
ZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ6CiAgICAgICAgIGNhc2UgV0tHZXN0dXJlUmVjb2du
aXplclN0YXRlQ2FuY2VsbGVkOgpAQCAtNTk0LDExICs2MTUsMTQgQEAgdm9pZCBXZWJQYWdlOjpz
ZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV0tH
ZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjoKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PFdLR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSA9PSBXS0dlc3R1cmVSZWNvZ25pemVyU3Rh
dGVCZWdhbikgeworICAgICAgICBpZiAod2tHZXN0dXJlU3RhdGUgPT0gV0tHZXN0dXJlUmVjb2du
aXplclN0YXRlQmVnYW4pIHsKICAgICAgICAgICAgIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6
ZS5zZXRXaWR0aChibG9ja1NlbGVjdGlvblN0YXJ0V2lkdGgpOwogICAgICAgICAgICAgbV9ibG9j
a1NlbGVjdGlvbkRlc2lyZWRTaXplLnNldEhlaWdodChibG9ja1NlbGVjdGlvblN0YXJ0SGVpZ2h0
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID0gbnVsbHB0cjsKICAgICAg
ICAgfQogICAgICAgICByYW5nZSA9IHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihwb2lu
dCwgcG9zaXRpb24sIGZsYWdzKTsKKyAgICAgICAgaWYgKHdrR2VzdHVyZVN0YXRlID09IFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkICYmIGZsYWdzICYgV0tJc0Jsb2NrU2VsZWN0aW9uKQor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSByYW5nZTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBkZWZhdWx0OgpAQCAtNjg5LDYgKzcxMyw0MTUgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bgogICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBleHRlbnQsIGJhc2UpOwogfQogCitzdGF0aWMgY29u
c3QgaW50IG1heEhpdFRlc3RzID0gMTA7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VC
ZXR3ZWVuUmVjdHNGb3JQb3NpdGlvbihJbnRSZWN0JiBmaXJzdCwgSW50UmVjdCYgc2Vjb25kLCBX
S0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIHN3aXRjaCAoaGFuZGxlUG9z
aXRpb24pIHsKKyAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0
LnkoKSAtIHNlY29uZC55KCkpOworICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgcmV0
dXJuIGFicyhmaXJzdC5tYXhYKCkgLSBzZWNvbmQubWF4WCgpKTsKKyAgICBjYXNlIFdLSGFuZGxl
Qm90dG9tOgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0Lm1heFkoKSAtIHNlY29uZC5tYXhZKCkp
OworICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0LngoKSAt
IHNlY29uZC54KCkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIHJlY3RzRXNzZW50
aWFsbHlUaGVTYW1lKEludFJlY3QmIGZpcnN0LCBJbnRSZWN0JiBzZWNvbmQsIGZsb2F0IGFsbG93
YWJsZVBlcmNlbnREaWZmZXJlbmNlKQoreworICAgIGNvbnN0IGZsb2F0IG1pbk1hZ25pdHVkZVJh
dGlvID0gMS4wIC0gYWxsb3dhYmxlUGVyY2VudERpZmZlcmVuY2U7CisgICAgY29uc3QgZmxvYXQg
bWF4RGlzcGxhY2VtZW50UmF0aW8gPSBhbGxvd2FibGVQZXJjZW50RGlmZmVyZW5jZTsKKworICAg
IGZsb2F0IHhPcmlnaW5TaGlmdFJhdGlvID0gYWJzKGZpcnN0LngoKSAtIHNlY29uZC54KCkpL3N0
ZDo6bWluKGZpcnN0LndpZHRoKCksIHNlY29uZC53aWR0aCgpKTsKKyAgICBmbG9hdCB5T3JpZ2lu
U2hpZnRSYXRpbyA9IGFicyhmaXJzdC55KCkgLSBzZWNvbmQueSgpKS9zdGQ6Om1pbihmaXJzdC5o
ZWlnaHQoKSwgc2Vjb25kLmhlaWdodCgpKTsKKworICAgIGZsb2F0IHdpZHRoUmF0aW8gPSBzdGQ6
Om1pbihmaXJzdC53aWR0aCgpIC8gc2Vjb25kLndpZHRoKCksIHNlY29uZC53aWR0aCgpIC8gZmly
c3Qud2lkdGgoKSk7CisgICAgZmxvYXQgaGVpZ2h0UmF0aW8gPSBzdGQ6Om1pbihmaXJzdC5oZWln
aHQoKSAvIHNlY29uZC5oZWlnaHQoKSwgc2Vjb25kLmhlaWdodCgpIC8gZmlyc3QuaGVpZ2h0KCkp
OworICAgIHJldHVybiAoKHdpZHRoUmF0aW8gPiBtaW5NYWduaXR1ZGVSYXRpbyAmJiB4T3JpZ2lu
U2hpZnRSYXRpbyA8IG1heERpc3BsYWNlbWVudFJhdGlvKQorICAgICAgICAmJiAoaGVpZ2h0UmF0
aW8gPiBtaW5NYWduaXR1ZGVSYXRpbyAmJiB5T3JpZ2luU2hpZnRSYXRpbyA8IG1heERpc3BsYWNl
bWVudFJhdGlvKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1JhbmdlKFJhbmdl
KiBmaXJzdCwgUmFuZ2UqIHNlY29uZCkKK3sKKyAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKGZpcnN0LT5jb21tb25BbmNlc3RvckNv
bnRhaW5lcihBU1NFUlRfTk9fRVhDRVBUSU9OKS0+b3duZXJEb2N1bWVudCgpID09IHNlY29uZC0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTiktPm93bmVyRG9jdW1l
bnQoKQorICAgICAgICAmJiBmaXJzdC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19TVEFSVCwgc2Vjb25kLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwCisgICAgICAgICYm
IGZpcnN0LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHNlY29uZCwg
QVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFJh
bmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSogcmFuZ2VBLCBSYW5nZSogcmFuZ2VCKQoreworICAg
IGlmICghcmFuZ2VCKQorICAgICAgICByZXR1cm4gcmFuZ2VBOworICAgIGlmICghcmFuZ2VBKQor
ICAgICAgICByZXR1cm4gcmFuZ2VCOworCisgICAgUmFuZ2UqIHN0YXJ0ID0gcmFuZ2VBLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZUIsIEFTU0VSVF9O
T19FWENFUFRJT04pIDw9IDAgPyByYW5nZUEgOiByYW5nZUI7CisgICAgUmFuZ2UqIGVuZCA9IHJh
bmdlQS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZUIsIEFT
U0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyByYW5nZUIgOiByYW5nZUE7CisKKyAgICByZXR1cm4g
UmFuZ2U6OmNyZWF0ZShyYW5nZUEtPm93bmVyRG9jdW1lbnQoKSwgc3RhcnQtPnN0YXJ0Q29udGFp
bmVyKCksIHN0YXJ0LT5zdGFydE9mZnNldCgpLCBlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVu
ZE9mZnNldCgpKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb21wdXRlRWRnZUNlbnRl
cihjb25zdCBJbnRSZWN0JiBib3gsIFdLSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24pCit7
CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgV0tIYW5kbGVUb3A6Cisg
ICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgpICsgYm94LndpZHRoKCkgLyAyLCBib3gueSgp
KTsKKyAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gu
bWF4WCgpLCBib3gueSgpICsgYm94LmhlaWdodCgpIC8gMik7CisgICAgY2FzZSBXS0hhbmRsZUJv
dHRvbToKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC54KCkgKyBib3gud2lkdGgoKSAvIDIs
IGJveC5tYXhZKCkpOworICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICByZXR1cm4gSW50
UG9pbnQoYm94LngoKSwgYm94LnkoKSArIGJveC5oZWlnaHQoKSAvIDIpOworICAgIH0KK30KKwor
UGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6ZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2Uq
IGN1cnJlbnRSYW5nZSwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBib3VuZGluZ1JlY3QoKSBpbnN0ZWFkIG9mIGJvdW5kaW5n
Qm94KCkgaW4gdGhpcyBmdW5jdGlvbiB3aGVuIDxyZGFyOi8vcHJvYmxlbS8xNjA2MzcyMz4gaXMg
Zml4ZWQuCisgICAgSW50UmVjdCBjdXJyZW50Qm94ID0gY3VycmVudFJhbmdlLT5ib3VuZGluZ0Jv
eCgpOworICAgIEludFBvaW50IGVkZ2VDZW50ZXIgPSBjb21wdXRlRWRnZUNlbnRlcihjdXJyZW50
Qm94LCBoYW5kbGVQb3NpdGlvbik7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heERpc3RhbmNl
ID0gMTAwMDsKKyAgICBjb25zdCBmbG9hdCBtdWx0aXBsZSA9IHBvd2YobWF4RGlzdGFuY2UsIDEu
MC8obWF4SGl0VGVzdHMgLSAxKSk7CisgICAgZmxvYXQgZGlzdGFuY2UgPSAxOworCisgICAgUmVm
UHRyPFJhbmdlPiBiZXN0OworICAgIEludFJlY3QgYmVzdFJlY3Q7CisKKyAgICB3aGlsZSAoZGlz
dGFuY2UgPCBtYXhEaXN0YW5jZSkgeworICAgICAgICBpZiAoYmVzdCkgeworICAgICAgICAgICAg
aWYgKGRpc3RhbmNlQmV0d2VlblJlY3RzRm9yUG9zaXRpb24oYmVzdFJlY3QsIGN1cnJlbnRCb3gs
IGhhbmRsZVBvc2l0aW9uKSA8IGRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgLy8gQnJlYWsg
ZWFybHksIHdlJ3JlIHVubGlrZWx5IHRvIGRvIGFueSBiZXR0ZXIuCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBJbnRQb2ludCB0ZXN0
UG9pbnQgPSBlZGdlQ2VudGVyOworICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7Cisg
ICAgICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCAt
ZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tIYW5kbGVSaWdo
dDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKGRpc3RhbmNlLCAwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICAgICAgdGVzdFBv
aW50Lm1vdmUoMCwgZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V0tIYW5kbGVMZWZ0OgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoLWRpc3RhbmNlLCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBu
ZXdSYW5nZTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZUF0UG9zaXRpb24gPSByYW5nZUZv
ckJsb2NrQXRQb2ludCh0ZXN0UG9pbnQpOworICAgICAgICBpZiAoY29udGFpbnNSYW5nZShyYW5n
ZUF0UG9zaXRpb24uZ2V0KCksIGN1cnJlbnRSYW5nZSkpCisgICAgICAgICAgICBuZXdSYW5nZSA9
IHJhbmdlQXRQb3NpdGlvbjsKKyAgICAgICAgZWxzZSBpZiAoY29udGFpbnNSYW5nZShjdXJyZW50
UmFuZ2UsIHJhbmdlQXRQb3NpdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBuZXdSYW5nZSA9IGN1
cnJlbnRSYW5nZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmFuZ2UgPSB1bmlvbkRP
TVJhbmdlcyhjdXJyZW50UmFuZ2UsIHJhbmdlQXRQb3NpdGlvbi5nZXQoKSk7CisKKyAgICAgICAg
SW50UmVjdCBjb3B5UmVjdCA9IG5ld1JhbmdlLT5ib3VuZGluZ0JveCgpOworCisgICAgICAgIC8v
IElzIGl0IGRpZmZlcmVudCBhbmQgYmlnZ2VyIHRoYW4gdGhlIGN1cnJlbnQ/CisgICAgICAgIGJv
b2wgaXNCZXR0ZXJDaG9pY2UgPSAhKHJlY3RzRXNzZW50aWFsbHlUaGVTYW1lKGNvcHlSZWN0LCBj
dXJyZW50Qm94LCAuMDUpKTsKKyAgICAgICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxl
VG9wOgorICAgICAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgICAgICAgICBp
c0JldHRlckNob2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA+IGN1cnJlbnRCb3guaGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXS0hhbmRsZVJpZ2h0
OgorICAgICAgICAgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgICAgICAgICAgaXNCZXR0
ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lkdGgoKSA+IGN1cnJlbnRCb3gud2lkdGgoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChiZXN0ICYmIGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICAvLyBGdXJ0aGVyb3Jl
LCBpcyBpdCBzbWFsbGVyIHRoYW4gdGhlIGJlc3Qgd2UndmUgZm91bmQgc28gZmFyPworICAgICAg
ICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICAgICAgY2FzZSBXS0hhbmRs
ZVRvcDoKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVCb3R0b206CisgICAgICAgICAgICAgICAg
aXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPCBiZXN0UmVjdC5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6
CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAgICAgICAgICBpc0JldHRl
ckNob2ljZSA9IChjb3B5UmVjdC53aWR0aCgpIDwgYmVzdFJlY3Qud2lkdGgoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIGJlc3QgPSBuZXdSYW5nZTsKKyAgICAgICAg
ICAgIGJlc3RSZWN0ID0gY29weVJlY3Q7CisgICAgICAgIH0KKworICAgICAgICBkaXN0YW5jZSA9
IGNlaWxmKGRpc3RhbmNlICogbXVsdGlwbGUpOworICAgIH0KKworICAgIGlmIChiZXN0KQorICAg
ICAgICByZXR1cm4gYmVzdDsKKworICAgIHJldHVybiBjdXJyZW50UmFuZ2U7Cit9CisKK1Bhc3NS
ZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2UqIGN1
cnJlbnRSYW5nZSwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbiwgV0tTZWxlY3Rpb25G
bGFncyYgZmxhZ3MpCit7CisgICAgLy8gU2hyaW5raW5nIHdpdGggYSBiYXNlIGFuZCBleHRlbnQg
d2lsbCBhbHdheXMgZ2l2ZSBiZXR0ZXIgcmVzdWx0cy4gIElmIHdlIG9ubHkgaGF2ZSBhIHNpbmds
ZSBlbGVtZW50LAorICAgIC8vIHNlZSBpZiB3ZSBjYW4gYnJlYWsgdGhhdCBkb3duIHRvIGEgYmFz
ZSBhbmQgZXh0ZW50LiAgU2hyaW5raW5nIGJhc2UgYW5kIGV4dGVudCBpcyBjb21wYXJhdGl2ZWx5
IHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAvLyBTaHJpbmtpbmcgZG93biB0byBhbm90aGVyIGVsZW1l
bnQgaXMgdW5saWtlbHkgdG8gbW92ZSBqdXN0IG9uZSBlZGdlLCBidXQgd2UgY2FuIHRyeSB0aGF0
IGFzIGEgZmFsbGJhY2suCisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBib3VuZGluZ1Jl
Y3QoKSBpbnN0ZWFkIG9mIGJvdW5kaW5nQm94KCkgaW4gdGhpcyBmdW5jdGlvbiB3aGVuIDxyZGFy
Oi8vcHJvYmxlbS8xNjA2MzcyMz4gaXMgZml4ZWQuCisgICAgSW50UmVjdCBjdXJyZW50Qm94ID0g
Y3VycmVudFJhbmdlLT5ib3VuZGluZ0JveCgpOworICAgIEludFBvaW50IGVkZ2VDZW50ZXIgPSBj
b21wdXRlRWRnZUNlbnRlcihjdXJyZW50Qm94LCBoYW5kbGVQb3NpdGlvbik7CisgICAgZmxhZ3Mg
PSBXS0lzQmxvY2tTZWxlY3Rpb247CisKKyAgICBmbG9hdCBtYXhEaXN0YW5jZTsKKworICAgIHN3
aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgIGNhc2Ug
V0tIYW5kbGVCb3R0b206CisgICAgICAgIG1heERpc3RhbmNlID0gY3VycmVudEJveC5oZWlnaHQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgIGNhc2UgV0tI
YW5kbGVMZWZ0OgorICAgICAgICBtYXhEaXN0YW5jZSA9IGN1cnJlbnRCb3gud2lkdGgoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc3QgZmxvYXQgbXVsdGlwbGUgPSBwb3dmKG1h
eERpc3RhbmNlIC0gMSwgMS4wLyhtYXhIaXRUZXN0cyAtIDEpKTsKKyAgICBmbG9hdCBkaXN0YW5j
ZSA9IDE7CisgICAgUmVmUHRyPFJhbmdlPiBiZXN0OworICAgIEludFJlY3QgYmVzdFJlY3Q7CisK
KyAgICB3aGlsZSAoZGlzdGFuY2UgPCBtYXhEaXN0YW5jZSkgeworICAgICAgICBpZiAoYmVzdCkg
eworICAgICAgICAgICAgZmxvYXQgc2hyYW5rRGlzdGFuY2U7CisgICAgICAgICAgICBzd2l0Y2gg
KGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgICAg
ICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgICAgICAgICBzaHJhbmtEaXN0YW5j
ZSA9IGFicyhjdXJyZW50Qm94LmhlaWdodCgpIC0gYmVzdFJlY3QuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAg
ICAgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgICAgICAgICAgc2hyYW5rRGlzdGFuY2Ug
PSBhYnMoY3VycmVudEJveC53aWR0aCgpIC0gYmVzdFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hyYW5rRGlzdGFu
Y2UgPiBkaXN0YW5jZSkgeworICAgICAgICAgICAgICAgIC8vIENlcnRhaW5seSBub3QgZ29pbmcg
dG8gZG8gYW55IGJldHRlciB0aGFuIHRoYXQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBJbnRQb2ludCB0ZXN0UG9pbnQgPSBlZGdl
Q2VudGVyOworICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgIGNhc2Ug
V0tIYW5kbGVUb3A6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCBkaXN0YW5jZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICAg
ICAgdGVzdFBvaW50Lm1vdmUoLWRpc3RhbmNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoMCwg
LWRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdLSGFuZGxlTGVm
dDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKGRpc3RhbmNlLCAwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHJh
bmdlRm9yQmxvY2tBdFBvaW50KHRlc3RQb2ludCk7CisgICAgICAgIGlmIChoYW5kbGVQb3NpdGlv
biA9PSBXS0hhbmRsZVRvcCB8fCBoYW5kbGVQb3NpdGlvbiA9PSBXS0hhbmRsZUxlZnQpCisgICAg
ICAgICAgICBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCksIG5ld1JhbmdlLT5zdGFydFBvc2l0aW9uKCksIGN1cnJlbnRSYW5nZS0+
ZW5kUG9zaXRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSwgY3VycmVu
dFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG5ld1JhbmdlLT5lbmRQb3NpdGlvbigpKTsKKworICAg
ICAgICBJbnRSZWN0IGNvcHlSZWN0ID0gbmV3UmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgICAg
IGJvb2wgaXNCZXR0ZXJDaG9pY2U7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsK
KyAgICAgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToK
KyAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LmhlaWdodCgpIDwgY3VycmVu
dEJveC5oZWlnaHQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRs
ZUxlZnQ6CisgICAgICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgICAgIGlzQmV0dGVy
Q2hvaWNlID0gKGNvcHlSZWN0LndpZHRoKCkgPiBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSBpc0JldHRl
ckNob2ljZSAmJiAhYXJlUmFuZ2VzRXF1YWwobmV3UmFuZ2UuZ2V0KCksIGN1cnJlbnRSYW5nZSk7
CisgICAgICAgIGlmIChiZXN0ICYmIGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAg
ICAgICAgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgICAgICAgICBpc0JldHRlckNo
b2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA+IGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICAg
ICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0g
KGNvcHlSZWN0LndpZHRoKCkgPiBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaXNCZXR0ZXJDaG9p
Y2UpIHsKKyAgICAgICAgICAgIGJlc3QgPSBuZXdSYW5nZTsKKyAgICAgICAgICAgIGJlc3RSZWN0
ID0gY29weVJlY3Q7CisgICAgICAgIH0KKworICAgICAgICBkaXN0YW5jZSAqPSBtdWx0aXBsZTsK
KyAgICB9CisKKyAgICAvLyBJZiB3ZSBjYW4gc2hyaW5rIGRvd24gdG8gdGV4dCBvbmx5LCB0aGUg
b25seSByZWFzb24gd2Ugd291bGRuJ3QgaXMgdGhhdAorICAgIC8vIHRoZXJlIGFyZSBtdWx0aXBs
ZSBzdWItZWxlbWVudCBibG9ja3MgYmVuZWF0aCB1cy4gIElmIHdlIGRpZG4ndCBmaW5kCisgICAg
Ly8gbXVsdGlwbGUgc3ViLWVsZW1lbnQgYmxvY2tzLCBkb24ndCBzaHJpbmsgdG8gYSBzdWItZWxl
bWVudCBibG9jay4KKyAgICBpZiAoIWJlc3QpIHsKKyAgICAgICAgYmVzdCA9IGN1cnJlbnRSYW5n
ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IGN1cnJlbnRSYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250
YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKworICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAg
aWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmIChyZW5kZXJlci0+
aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkgPT0gbmlsKSAmJiAhcmVuZGVyZXItPmlzVGFibGUoKSkgeworICAgICAg
ICAgICAgZmxhZ3MgPSBXS05vbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYmVz
dDsKK30KKwordm9pZCBXZWJQYWdlOjpjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0Zv
ckhhbmRsZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIFdLSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9z
aXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkKQorewor
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50UmFuZ2UgPSBtX2N1cnJlbnRCbG9j
a1NlbGVjdGlvbiA/IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uLmdldCgpIDogZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBBU1NFUlQoY3VycmVu
dFJhbmdlKTsKKworICAgIFJlZlB0cjxSYW5nZT4gZXhwYW5kZWRSYW5nZSA9IGV4cGFuZGVkUmFu
Z2VGcm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5nZXQoKSwgaGFuZGxlUG9zaXRpb24pOworICAgIFdL
U2VsZWN0aW9uRmxhZ3MgZmxhZ3M7CisgICAgUmVmUHRyPFJhbmdlPiBjb250cmFjdGVkUmFuZ2Ug
PSBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5nZXQoKSwgaGFuZGxlUG9z
aXRpb24sIGZsYWdzKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGJvdW5kaW5nUmVj
dCgpIGluc3RlYWQgb2YgYm91bmRpbmdCb3goKSBpbiB0aGlzIGZ1bmN0aW9uIHdoZW4gPHJkYXI6
Ly9wcm9ibGVtLzE2MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJbnRSZWN0IGN1cnJlbnRCb3VuZHMg
PSBjdXJyZW50UmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBleHBhbmRlZEJvdW5k
cyA9IGV4cGFuZGVkUmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBjb250cmFjdGVk
Qm91bmRzID0gY29udHJhY3RlZFJhbmdlLT5ib3VuZGluZ0JveCgpOworCisgICAgZmxvYXQgY3Vy
cmVudCwgZXhwYW5kZWQsIGNvbnRyYWN0ZWQ7CisgICAgZmxvYXQgbWF4VGhyZXNob2xkOworICAg
IGZsb2F0IG1pblRocmVzaG9sZDsKKworICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAg
ICBjYXNlIFdLSGFuZGxlVG9wOiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLnko
KTsKKyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy55KCk7CisgICAgICAgIGNvbnRy
YWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLnkoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxU
X01JTjsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgV0tIYW5kbGVSaWdodDogeworICAgICAgICBjdXJyZW50ID0gY3VycmVu
dEJvdW5kcy5tYXhYKCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3VuZHMubWF4WCgp
OworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy5tYXhYKCk7CisgICAgICAg
IG1heFRocmVzaG9sZCA9IEZMVF9NQVg7CisgICAgICAgIG1pblRocmVzaG9sZCA9IEZMVF9NSU47
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdLSGFuZGxlQm90dG9tOiB7CisgICAg
ICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLm1heFkoKTsKKyAgICAgICAgZXhwYW5kZWQgPSBl
eHBhbmRlZEJvdW5kcy5tYXhZKCk7CisgICAgICAgIGNvbnRyYWN0ZWQgPSBjb250cmFjdGVkQm91
bmRzLm1heFkoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgbWlu
VGhyZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0tI
YW5kbGVMZWZ0OiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLngoKTsKKyAgICAg
ICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy54KCk7CisgICAgICAgIGNvbnRyYWN0ZWQgPSBj
b250cmFjdGVkQm91bmRzLngoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01JTjsKKyAg
ICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBmcmFjdGlvblRvR3JvdyA9IDAuMzsKKworICAg
IGdyb3dUaHJlc2hvbGQgPSBjdXJyZW50ICsgKGV4cGFuZGVkIC0gY3VycmVudCkgKiBmcmFjdGlv
blRvR3JvdzsKKyAgICBzaHJpbmtUaHJlc2hvbGQgPSBjdXJyZW50ICsgKGNvbnRyYWN0ZWQgLSBj
dXJyZW50KSAqICgxIC0gZnJhY3Rpb25Ub0dyb3cpOworICAgIGlmIChhcmVSYW5nZXNFcXVhbChl
eHBhbmRlZFJhbmdlLmdldCgpLCBjdXJyZW50UmFuZ2UuZ2V0KCkpKQorICAgICAgICBncm93VGhy
ZXNob2xkID0gbWF4VGhyZXNob2xkOworCisgICAgaWYgKChmbGFncyAmIFdLSXNCbG9ja1NlbGVj
dGlvbikgJiYgYXJlUmFuZ2VzRXF1YWwoY29udHJhY3RlZFJhbmdlLmdldCgpLCBjdXJyZW50UmFu
Z2UuZ2V0KCkpKQorICAgICAgICBzaHJpbmtUaHJlc2hvbGQgPSBtaW5UaHJlc2hvbGQ7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFeHBhbmQoV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQ
b3NpdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAg
ICAgICByZXR1cm4gKHBvaW50LnkoKSA8IHJlY3QueSgpKTsKKyAgICBjYXNlIFdLSGFuZGxlTGVm
dDoKKyAgICAgICAgcmV0dXJuIChwb2ludC54KCkgPCByZWN0LngoKSk7CisgICAgY2FzZSBXS0hh
bmRsZVJpZ2h0OgorICAgICAgICByZXR1cm4gKHBvaW50LngoKSA+IHJlY3QubWF4WCgpKTsKKyAg
ICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICByZXR1cm4gKHBvaW50LnkoKSA+IHJlY3Qu
bWF4WSgpKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IFdlYlBhZ2U6
OmNoYW5nZUJsb2NrU2VsZWN0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgV0tIYW5kbGVQb3Np
dGlvbiBoYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtU
aHJlc2hvbGQsIFdLU2VsZWN0aW9uRmxhZ3MmIGZsYWdzKQoreworICAgIEZyYW1lJiBmcmFtZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVm
UHRyPFJhbmdlPiBjdXJyZW50UmFuZ2UgPSBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA/IG1fY3Vy
cmVudEJsb2NrU2VsZWN0aW9uLmdldCgpIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBib3VuZGlu
Z1JlY3QoKSBpbnN0ZWFkIG9mIGJvdW5kaW5nQm94KCkgaW4gdGhpcyBmdW5jdGlvbiB3aGVuIDxy
ZGFyOi8vcHJvYmxlbS8xNjA2MzcyMz4gaXMgZml4ZWQuCisgICAgSW50UmVjdCBjdXJyZW50UmVj
dCA9IGN1cnJlbnRSYW5nZS0+Ym91bmRpbmdCb3goKTsKKworICAgIFJlZlB0cjxSYW5nZT4gbmV3
UmFuZ2UgPSBzaG91bGRFeHBhbmQoaGFuZGxlUG9zaXRpb24sIGN1cnJlbnRSZWN0LCBwb2ludCkg
PyBleHBhbmRlZFJhbmdlRnJvbUhhbmRsZShjdXJyZW50UmFuZ2UuZ2V0KCksIGhhbmRsZVBvc2l0
aW9uKSA6IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoY3VycmVudFJhbmdlLmdldCgpLCBoYW5k
bGVQb3NpdGlvbiwgZmxhZ3MpOworCisgICAgaWYgKG5ld1JhbmdlKSB7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrU2VsZWN0aW9uID0gbmV3UmFuZ2U7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFksIHRy
dWUpOworICAgIH0KKworICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFu
ZGxlKHBvaW50LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xk
KTsKKyAgICByZXR1cm4gbmV3UmFuZ2U7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlQmxvY2tT
ZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNo
ZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQoreworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQb2ludCA9IGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHBvaW50KTsK
KworICAgIGZsb2F0IGdyb3dUaHJlc2hvbGQgPSAwOworICAgIGZsb2F0IHNocmlua1RocmVzaG9s
ZCA9IDA7CisgICAgV0tTZWxlY3Rpb25GbGFncyBmbGFncyA9IFdLSXNCbG9ja1NlbGVjdGlvbjsK
KworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8V0tTZWxlY3Rpb25Ub3VjaD4odG91Y2hlcykpIHsK
KyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOgorICAgICAgICBjb21wdXRlRXhwYW5k
QW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShhZGp1c3RlZFBvaW50LCBzdGF0aWNfY2FzdDxX
S0hhbmRsZVBvc2l0aW9uPihoYW5kbGVQb3NpdGlvbiksIGdyb3dUaHJlc2hvbGQsIHNocmlua1Ro
cmVzaG9sZCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5k
ZWQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoTW92ZWQ6Cisg
ICAgICAgIGNoYW5nZUJsb2NrU2VsZWN0aW9uKGFkanVzdGVkUG9pbnQsIHN0YXRpY19jYXN0PFdL
SGFuZGxlUG9zaXRpb24+KGhhbmRsZVBvc2l0aW9uKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhy
ZXNob2xkLCBmbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFVwZGF0
ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXModG91Y2hlcywgZmxhZ3MsIGdyb3dUaHJlc2hvbGQs
IHNocmlua1RocmVzaG9sZCkpOworfQorCit2b2lkIFdlYlBhZ2U6OmNsZWFyU2VsZWN0aW9uKCkK
K3sKKyAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG51bGxwdHI7CisgICAgbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhcigp
OworfQorCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgdWludDY0
X3QgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwpAQCAtNzM2LDggKzExNjksOCBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdp
dGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3Rh
dGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gZnJvbVBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJvbSk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHRvUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludCh0byk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGZyb21Qb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyb20p
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGZyYW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHRvKSk7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKICAgICBpZiAoZnJvbVBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHRv
UG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKICAgICAgICAgaWYgKGZyb21Qb3NpdGlvbiA8IHRvUG9z
aXRpb24pCkBAIC05ODAsNiArMTQxMyw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZv
cm1hdGlvbihjb24KICAgICAgICAgaWYgKGhpdE5vZGUpIHsKICAgICAgICAgICAgIG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEZyYW1lKHJlc3VsdC5pbm5lck5vZGVGcmFtZSgp
KTsKICAgICAgICAgICAgIGluZm8uc2VsZWN0aW9uUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3Qo
aGl0Tm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSksIHRydWUs
IDApKTsKKyAgICAgICAgICAgIGluZm8uYm91bmRzID0gaGl0Tm9kZS0+cmVuZGVyZXIoKS0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224880</attachid>
            <date>2014-02-21 09:53:44 -0800</date>
            <delta_ts>2014-02-21 12:51:58 -0800</delta_ts>
            <desc>Block selection part2</desc>
            <filename>blockselection-part2-webkit.txt</filename>
            <type>text/plain</type>
            <size>43752</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAyLTIxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rp
b25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1MjExOTY0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21l
IGV4cG9ydHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKwogMjAxNC0wMi0yMSAgTWFy
dGluIEhvZG92YW4gIDxtaG9kb3ZhbkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgRml4aW5n
IHRoZSAhRU5BQkxFKFNWR19GT05UUykgYnVpbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShy
ZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMTc0NSw3ICsxNzQ1LDEwIEBAIF9fWk5LN1dlYkNvcmU1RnJhbWUxNWxheWVy
VHJlZUFzVGV4dEVqCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTZmcmFtZVNjYWxlRmFjdG9yRXYKIF9f
Wk5LN1dlYkNvcmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHRFdgogX19aTks3V2Vi
Q29yZTVGcmFtZTMxZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZ0VSS04zV1RGNlN0cmlu
Z0UKK19fWk5LN1dlYkNvcmU1UmFuZ2UxMGNsb25lUmFuZ2VFUmkKK19fWk5LN1dlYkNvcmU1UmFu
Z2UxMWJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmU1UmFuZ2UxMXN0YXJ0T2Zmc2V0RVJpCitf
X1pOSzdXZWJDb3JlNVJhbmdlMTJib3VuZGluZ1JlY3RFdgogX19aTks3V2ViQ29yZTVSYW5nZTEy
ZW5kQ29udGFpbmVyRVJpCiBfX1pOSzdXZWJDb3JlNVJhbmdlMTJwYXN0TGFzdE5vZGVFdgogX19a
Tks3V2ViQ29yZTVSYW5nZTE0c3RhcnRDb250YWluZXJFUmkKQEAgLTIzMjYsNiArMjMyOSw3IEBA
IF9fWk43V2ViQ29yZTEzZW5kT2ZEb2N1bWVudEVSS05TXzE1VmlzaWIKIF9fWk43V2ViQ29yZTEz
ZW5kT2ZTZW50ZW5jZUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTNnZXRS
YXdDb29raWVzRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1X1JOM1dU
RjZWZWN0b3JJTlNfNkNvb2tpZUVMbTBFTlM2XzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dl
YkNvcmUxM2lzU3RhcnRPZkxpbmVFUktOU18xNVZpc2libGVQb3NpdGlvbkUKK19fWk43V2ViQ29y
ZTE0YXJlUmFuZ2VzRXF1YWxFUEtOU181UmFuZ2VFUzJfCiBfX1pON1dlYkNvcmUxNERvY3VtZW50
TG9hZGVyMTlzZXRSZXNwb25zZU1JTUVUeXBlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTREb2N1bWVudFdyaXRlcjNlbmRFdgogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjEzc2V0
Q2FyZXRDb2xvckVSS05TXzVDb2xvckUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDQ4NSkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3
IEBACisyMDE0LTAyLTIxICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgU3VwcG9ydCBXZWJTZWxlY3Rpb25zIGluIFdLMiBvbiBpT1MuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcwMTUKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE1MjExOTY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgaXMgdGhlIHJlbWFpbmluZyB3b3JrIG9uIGJsb2NrIHNlbGVjdGlv
bnMgZm9yIGlPUyBpbiBXSzIuCisgICAgICAgIE9uY2UgYSBibG9jayBzZWxlY3Rpb24gaGFzIGJl
ZW4gY3JlYXRlZCB3aXRoIGEgbG9uZyBwcmVzcyBnZXN0dXJlCisgICAgICAgIG9uIGEgc2VsZWN0
YWJsZSBhcmVhLCB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCBieSB0b3VjaGluZyB0aGUgZm91cgor
ICAgICAgICBoYW5kbGVzIGF0IHRoZSB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQgc2lkZSBv
ZiB0aGUgc2VsZWN0aW9uIGJveC4KKyAgICAgICAgRXhwYW5kaW5nIG9yIHNocmlua2luZyBhIGJs
b2NrIHNlbGVjdGlvbiByZXF1aXJlcyBmaW5kaW5nIHRoZSBuZXh0L3ByZXZpb3VzCisgICAgICAg
IGJsb2NrIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50LCBkZXBlbmRpbmcgb24gdGhl
IGhhbmRsZSB3ZQorICAgICAgICBhcmUgaW50ZXJhY3Rpbmcgd2l0aC4KKyAgICAgICAgRXZlcnkg
dGltZSBhIG5ldyBibG9jayBpcyBzZWxlY3RlZCwgd2UgY29tcHV0ZSB0aGUgdGhyZXNob2xkcyBy
ZXF1aXJlZAorICAgICAgICB0byB0cmlnZ2VyIGFub3RoZXIgYmxvY2sgY2hhbmdlLiBUaGUgdGhy
ZXNob2xkcyBhcmUgc2VudCBiYWNrIHRvIHRoZQorICAgICAgICBVSVByb2Nlc3MgdGhhdCB3aWxs
IHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGVuIHRvIGFjdGl2YXRlCisgICAgICAg
IHRoZSBuZXcgc2VsZWN0aW9uLCBlaXRoZXIgYmlnZ2VyIG9yIHNtYWxsZXIuCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBmaXhlcyBhIGJ1ZyBpbiBzZWxlY3RXaXRoVHdvVG91Y2hlcyB3aGVyZSB0
aGUgcG9pbnRzCisgICAgICAgIHdlcmUgbm90IG1hcHBlZCB0byB0aGUgYWN0aXZlIGZyYW1lLgor
CisgICAgICAgICogU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOndpdGhGbGFnczpncm93VGhyZXNo
b2xkOnNocmlua1RocmVzaG9sZDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVy
YWN0aW9uVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25W
aWV3Lm1tOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBoYXNTZWxlY3RhYmxlUG9zaXRp
b25BdFBvaW50Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjbGVhclNlbGVjdGlv
bl0pOgorICAgICAgICAodG9XS0hhbmRsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6V2ViS2l0Ojp3aXRo
RmxhZ3M6V2ViS2l0Ojpncm93VGhyZXNob2xkOnNocmlua1RocmVzaG9sZDpdKToKKyAgICAgICAg
KC1bV0tJbnRlcmFjdGlvblZpZXcgY2hhbmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDp3aXRo
U2VsZWN0aW9uVG91Y2g6Zm9ySGFuZGxlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xp
ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBk
YXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyYW5nZUZvckJsb2NrQXRQb2ludCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktp
dDo6ZGlzdGFuY2VCZXR3ZWVuUmVjdHNGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnJl
Y3RzRXNzZW50aWFsbHlUaGVTYW1lKToKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbnNSYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OnVuaW9uRE9NUmFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Y29t
cHV0ZUVkZ2VDZW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleHBhbmRlZFJhbmdl
RnJvbUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZy
b21IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlRXhwYW5kQW5kU2hy
aW5rVGhyZXNob2xkc0ZvckhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OnNob3VsZEV4cGFuZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNoYW5nZUJsb2NrU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKToKKwogMjAxNC0wMi0yMCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgZGV2aWNlU2Nh
bGVGYWN0b3IoKSBmdW5jdGlvbnMgYW5kIG1ha2UgY2FsbGVycyB1c2UgRG9jdW1lbnQ6OmRldmlj
ZVNjYWxlRmFjdG9yKCkgd2hlbiBhY2Nlc3NpYmxlLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaAkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2
ICs3NSwxMiBAQCB0eXBlZGVmIGVudW0gewogICAgIFdLSXNCbG9ja1NlbGVjdGlvbiA9IDIKIH0g
V0tTZWxlY3Rpb25GbGFnczsKIAordHlwZWRlZiBlbnVtIHsKKyAgICBXS0hhbmRsZVRvcCwKKyAg
ICBXS0hhbmRsZVJpZ2h0LAorICAgIFdLSGFuZGxlQm90dG9tLAorICAgIFdLSGFuZGxlTGVmdAor
fSBXS0hhbmRsZVBvc2l0aW9uOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBX
S0dlc3R1cmVUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw2ICsyNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBi
b29sIGlzQ2hhckV2ZW50KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uSW5mb3JtYXRp
b25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShQYXNzUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxl
Y3Rpb25XaXRoVG91Y2hlcyh1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBmbGFncywgZmxvYXQg
Z3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKSA9IDA7CiAjZW5kaWYKIAogICAg
IC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIFBhc3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPik7CiAgICAgdm9p
ZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWlu
dDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgUGFzc1JlZlB0cjxUb3VjaGVzQ2FsbGJh
Y2s+KTsKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4pOwor
ICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCwgdWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pOwogICAg
IHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSk7CiAgICAgdm9p
ZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3Jy
ZWN0aW9uLCBQYXNzUmVmUHRyPEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrPik7CiAgICAgdm9p
ZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbFRleHQsIFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKQEAgLTQ3MCw2
ICs0NzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lk
IHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKTsKICAgICB2b2lkIHNhdmVJ
bWFnZVRvTGlicmFyeShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIHVp
bnQ2NF90IGltYWdlU2l6ZSk7CisgICAgdm9pZCBkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhU
b3VjaGVzKHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNo
b2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpOwogI2VuZGlmCiAKICAgICBjb25zdCBFZGl0b3JT
dGF0ZSYgZWRpdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlOyB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4JKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsNyBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIEludGVycHJldEtleUV2ZW50KFdlYktpdDo6RWRp
dG9yU3RhdGUgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChib29sIGhhbmRsZWQpCiAgICAg
RGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24oV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKICAgICBTYXZlSW1hZ2VUb0xpYnJhcnkoV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCisgICAgRGlkVXBk
YXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyh1aW50MzJfdCB0b3VjaGVzLCB1aW50MzJfdCBm
bGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQogI2VuZGlm
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFByaW50RmluaXNoZWRDYWxsYmFjayhXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yIGVycm9yLCB1aW50NjRfdCBjYWxsYmFja0lEKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCShy
ZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uJik7CiAgICAgdmlydHVhbCB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShQYXNz
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4pOworICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRh
dGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGZs
YWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpOwogCiAgICAg
Ly8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzU2
LDYgKzM1NiwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdG9wQXNzaXN0aW5nTm9kZSgpCiAg
ICAgW21fdmlldyBfc3RvcEFzc2lzdGluZ05vZGVdOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKHVpbnQzMl90IHRvdWNoZXMsIHVp
bnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQp
Cit7CisgICAgW21fdmlldyBfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlczooV0tT
ZWxlY3Rpb25Ub3VjaCl0b3VjaGVzIHdpdGhGbGFnczooV0tTZWxlY3Rpb25GbGFncylmbGFncyBn
cm93VGhyZXNob2xkOmdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9s
ZF07Cit9CisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAKIFdlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBsOjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xp
ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tD
b250ZW50Vmlldy5tbQkocmV2aXNpb24gMTY0NDg1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjk4LDYgKzI5
OCwxMSBAQCAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCiAgICAgW19pbnRlcmFjdGlvblZpZXcg
X3NlbGVjdGlvbkNoYW5nZWRdOwogfQogCistICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaGVzOihXS1NlbGVjdGlvblRvdWNoKXRvdWNoZXMgd2l0aEZsYWdzOihXS1NlbGVj
dGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJp
bmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW19pbnRlcmFjdGlv
blZpZXcgX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6dG91Y2hlcyB3aXRoRmxh
Z3M6ZmxhZ3MgZ3Jvd1RocmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDpzaHJp
bmtUaHJlc2hvbGRdOworfQorCiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZl
bnQgKil0aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVudAogewogICAgIHJldHVy
biBbX2ludGVyYWN0aW9uVmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6dGhlRXZlbnQgaXNDaGFyRXZl
bnQ6aXNDaGFyRXZlbnRdOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tDb250ZW50Vmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgJKHJldmlzaW9uIDE2NDQ4NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiV0tD
b250ZW50Vmlldy5oIgorI2ltcG9ydCAiV0tHZXN0dXJlVHlwZXMuaCIKICNpbXBvcnQgPHd0Zi9G
b3J3YXJkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9y
Lmg+CkBAIC03MSw2ICs3Miw3IEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbjsKIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50
IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50OwogLSAodm9pZClfcG9zaXRpb25JbmZvcm1h
dGlvbkRpZENoYW5nZTooY29uc3QgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbiYpaW5mbzsKIC0gKHZvaWQpX2RlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZy
b21PcmlnaW46KFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mKW9yaWdpbiBmcmFtZTooV2ViS2l0
OjpXZWJGcmFtZVByb3h5JilmcmFtZSByZXF1ZXN0OihXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVlc3Q7CistICh2b2lkKV9kaWRVcGRhdGVC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzOihXZWJLaXQ6OldLU2VsZWN0aW9uVG91Y2gpdG91Y2hl
cyB3aXRoRmxhZ3M6KFdlYktpdDo6V0tTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xk
OihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNocmlua1Ro
cmVzaG9sZDsKIAogLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+KV90YWtlVmlld1NuYXBzaG90Owog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50
ZXJhY3Rpb25WaWV3LmgJKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDUg
KzcwLDYgQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOwogLSAodm9p
ZClfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nOwogLSAodm9pZClfd2lsbFN0YXJ0VXNlclRy
aWdnZXJlZFNjcm9sbGluZ09yWm9vbWluZzsKIC0gKHZvaWQpX2RpZEVuZFNjcm9sbGluZ09yWm9v
bWluZzsKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdlYktp
dDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3VjaGVzIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlv
bkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtU
aHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkOwogQHByb3BlcnR5IChyZWFkb25seSwg
bm9uYXRvbWljKSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHBvc2l0
aW9uSW5mb3JtYXRpb247CiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTY0NDg1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU2NCw2ICs1NjQsNyBAQCAtIChCT09MKWhhc1NlbGVjdGFibGVQ
b3NpdGlvbkF0UG9pbnQ6KENHCiB7CiAgICAgW3NlbGYgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlv
bklzVXBUb0RhdGU6cG9pbnRdOwogICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIG5lZWRzIHRvIGJl
IGV4dGVuZGVkIHRvIGluY2x1ZGUgb3RoZXIgZWxlbWVudHMuCisgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gcmVqZWN0IHBvc2l0aW9ucyB0aGF0IHdpbGwgbGVhZCB0byBhIHZlcnkgbGFyZ2Ugc2Vs
ZWN0aW9uLgogICAgIHJldHVybiBfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50
TmFtZSAhPSAiSU1HIiAmJiBfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFt
ZSAhPSAiQSIgJiYgIV9wb3NpdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJlY3RzLmlzRW1wdHko
KTsKIH0KIApAQCAtNjkzLDYgKzY5NCwxMSBAQCAtICh2b2lkKXVzZVNlbGVjdGlvbkFzc2lzdGFu
dFdpdGhNb2RlOihVCiAgICAgfQogfQogCistICh2b2lkKWNsZWFyU2VsZWN0aW9uCit7CisgICAg
X3BhZ2UtPmNsZWFyU2VsZWN0aW9uKCk7Cit9CisKIC0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRp
b25EaWRDaGFuZ2U6KGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZv
CiB7CiAgICAgX3Bvc2l0aW9uSW5mb3JtYXRpb24gPSBpbmZvOwpAQCAtMTEwNSw2ICsxMTExLDIw
IEBAIHN0YXRpYyBpbmxpbmUgVUlXS1NlbGVjdGlvbkZsYWdzIHRvVUlXS1MKICAgICB9CiB9CiAK
K3N0YXRpYyBpbmxpbmUgV0tIYW5kbGVQb3NpdGlvbiB0b1dLSGFuZGxlUG9zaXRpb24oVUlXS0hh
bmRsZVBvc2l0aW9uIHBvc2l0aW9uKQoreworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBj
YXNlIFVJV0tIYW5kbGVUb3A6CisgICAgICAgIHJldHVybiBXS0hhbmRsZVRvcDsKKyAgICBjYXNl
IFVJV0tIYW5kbGVSaWdodDoKKyAgICAgICAgcmV0dXJuIFdLSGFuZGxlUmlnaHQ7CisgICAgY2Fz
ZSBVSVdLSGFuZGxlQm90dG9tOgorICAgICAgICByZXR1cm4gV0tIYW5kbGVCb3R0b207CisgICAg
Y2FzZSBVSVdLSGFuZGxlTGVmdDoKKyAgICAgICAgcmV0dXJuIFdLSGFuZGxlTGVmdDsKKyAgICB9
Cit9CisKIHN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZShib29sIGVycm9y
LCBXS0ludGVyYWN0aW9uVmlldyAqdmlldywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBm
bGFncykKIHsKICAgICBpZiAoZXJyb3IpIHsKQEAgLTExMjksNiArMTE0OSwxMSBAQCBzdGF0aWMg
dm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGJvCiAgICAgICAgIFsoVUlXS1RleHRJbnRl
cmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25D
aGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlX
S1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CiB9CiAKKy0gKHZvaWQp
X2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoZXM6KFdlYktpdDo6V0tTZWxlY3Rpb25U
b3VjaCl0b3VjaGVzIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdy
b3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxv
YXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgYmxvY2tT
ZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlv
blRvdWNoKXRvdWNoZXMpIHdpdGhGbGFnczp0b1VJV0tTZWxlY3Rpb25GbGFncygoV0tTZWxlY3Rp
b25GbGFncylmbGFncykgZ3Jvd1RocmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9s
ZDpzaHJpbmtUaHJlc2hvbGRdOworfQorCiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0
dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJl
VHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZQogewogICAgIF9w
YWdlLT5zZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCB0b1dLR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZShzdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29s
IGVycm9yLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVU
eXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKSB7CkBAIC0xMTUwLDYg
KzExNzUsMTEgQEAgLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hlc0Zyb206KAogICAg
IH0pKTsKIH0KIAorLSAodm9pZCljaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OihDR1Bv
aW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1NlbGVjdGlvblRvdWNoKXRvdWNoIGZv
ckhhbmRsZTooVUlXS0hhbmRsZVBvc2l0aW9uKWhhbmRsZQoreworICAgIF9wYWdlLT51cGRhdGVC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9XS1Nl
bGVjdGlvblRvdWNoKHRvdWNoKSwgdG9XS0hhbmRsZVBvc2l0aW9uKGhhbmRsZSkpOworfQorCiAt
IChXS0F1dG9Db3JyZWN0aW9uRGF0YSAqKWF1dG9jb3JyZWN0aW9uRGF0YQogewogICAgIHJldHVy
biAmX2F1dG9jb3JyZWN0aW9uRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzI2LDYgKzMyNiwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aFR3b1RvdWNo
ZXMoCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RXaXRoVHdv
VG91Y2hlcyhmcm9tLCB0bywgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgY2FsbGJhY2tJRCks
IG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNo
ZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6VXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyhwb2ludCwgdG91
Y2hlcywgaGFuZGxlUG9zaXRpb24pLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbiYgaW5mbykKIHsKICAgICBtX3BhZ2VDbGllbnQucG9zaXRpb25JbmZvcm1h
dGlvbkRpZENoYW5nZShpbmZvKTsKQEAgLTM2Myw2ICszNjgsMTEgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNhdmVJbWFnZVRvTGlicmFyeShjbwogICAgIG1fcGFnZUNsaWVudC5zYXZlSW1hZ2VUb0xp
YnJhcnkoYnVmZmVyKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmRpZFVwZGF0ZUJsb2NrU2Vs
ZWN0aW9uV2l0aFRvdWNoZXModWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgZmxhZ3MsIGZsb2F0
IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkKK3sKKyAgICBtX3BhZ2VDbGll
bnQuZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyh0b3VjaGVzLCBmbGFncywgZ3Jv
d1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Om5v
dGlmeVJldmVhbGVkU2VsZWN0aW9uKCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2VsZWN0aW9uRGlk
Q2hhbmdlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNDEsMTAgKzMwNDEsMTIg
QEAgdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoRgogICAgIHJldHVybiBm
cmFtZS0+ZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRleHQsIHNlbGVjdFJlcGxh
Y2VtZW50LCBzbWFydFJlcGxhY2UpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2Vi
UGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQogewogICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIH0KKyNlbmRpZgogCiB2
b2lkIFdlYlBhZ2U6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbE9mZnNldFBpbm5pbmcoKQogewpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lv
biAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNiArNDM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgYmx1
ckFzc2lzdGVkTm9kZSgpOwogICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUs
IHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCB1
cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQp
OworICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIHVpbnQzMl90IHRvdWNoZXMsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsK
ICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBm
cm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1
aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZXh0
ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5KTsKICAgICB2b2lkIGVsZW1lbnREaWRG
b2N1cyhXZWJDb3JlOjpOb2RlKik7CkBAIC03MzUsNiArNzM2LDEzIEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9v
dFZpZXcoV2ViQ29yZTo6RnJhbWVWaWV3KiwgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+
Jik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JXZWJTZWxlY3Rpb25B
dFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVBvc2l0aW9uJiwgV0tTZWxlY3Rpb25GbGFncyYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Cisg
ICAgdm9pZCBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYsIFdLSGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xk
LCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiBjaGFuZ2VCbG9ja1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdLSGFuZGxl
UG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkLCBX
S1NlbGVjdGlvbkZsYWdzJik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZXhwYW5k
ZWRSYW5nZUZyb21IYW5kbGUoV2ViQ29yZTo6UmFuZ2UqLCBXS0hhbmRsZVBvc2l0aW9uKTsKKyAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKFdl
YkNvcmU6OlJhbmdlKiBjdXJyZW50UmFuZ2UsIFdLSGFuZGxlUG9zaXRpb24sIFdLU2VsZWN0aW9u
RmxhZ3MmKTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9jdXJyZW50QmxvY2tTZWxl
Y3Rpb247CiAjZW5kaWYKICNpZiAhUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjQ0ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBCbHVyQXNz
aXN0ZWROb2RlKCkKICAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBn
ZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgVXBkYXRlU2VsZWN0aW9uV2l0
aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wg
YmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgVXBkYXRlQmxvY2tTZWxlY3Rp
b25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgdG91Y2hlcywg
dWludDMyX3QgaGFuZGxlUG9zaXRpb24pCiAgICAgU2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29y
ZTo6SW50UG9pbnQgZnJvbSwgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVU
eXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRXh0
ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5KQogICAgIFJlcXVlc3RBdXRvY29ycmVj
dGlvbkRhdGEoU3RyaW5nIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2NDQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDM4LDEx
ICs0MzgsMTAgQEAgUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZQogICAg
IE5vZGUqIGN1cnJlbnROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2U7CiAgICAgSW50UmVjdCBib3VuZGluZ1JlY3Q7Ci0gICAgRXhjZXB0aW9uQ29kZSBl
YzsKIAogICAgIGlmIChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIHJhbmdl
ID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFu
dWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7Ci0gICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2Ut
PmNvbGxhcHNlZChlYykpCisgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZChB
U1NFUlRfTk9fRVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShj
dXJyZW50Tm9kZS0+ZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKICAgICAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDYxLDcgKzQ2MCw3IEBA
IFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2UKICAgICAgICAgaWYgKGJv
dW5kaW5nUmVjdC53aWR0aCgpID4gbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLndpZHRoKCkg
JiYgYm91bmRpbmdSZWN0LmhlaWdodCgpID4gbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLmhl
aWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlv
bik7CiAKLSAgICAgICAgY3VycmVudE5vZGUgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoZWMpOworICAgICAgICBjdXJyZW50Tm9kZSA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRh
aW5lcihBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICB9CiAKICAgICBpZiAoIWN1cnJlbnROb2Rl
LT5pc0VsZW1lbnROb2RlKCkpCkBAIC00ODIsMTIgKzQ4MSwzNiBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGJl
c3RDaG9pY2UtPnJlbmRlcmVyKCk7CiAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5jaGls
ZHJlbklubGluZSgpICYmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxv
Y2socmVuZGVyZXIpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgPT0gbmlsKSAmJiAhcmVu
ZGVyZXItPmlzVGFibGUoKSkgewogICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNrd2FyZCk7
Ci0gICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAgICAgIGlm
IChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZChBU1NFUlRfTk9fRVhDRVBUSU9OKSkKICAgICAg
ICAgICAgIHJldHVybiByYW5nZTsKICAgICB9CiAgICAgZmxhZ3MgPSBXS0lzQmxvY2tTZWxlY3Rp
b247CiAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJlc3RDaG9pY2UtPmRvY3VtZW50KCkpOwot
ICAgIHJhbmdlLT5zZWxlY3ROb2RlKGJlc3RDaG9pY2UsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGJlc3RDaG9pY2UsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHJldHVy
biByYW5nZTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2lu
dCgocG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCk7CisKKyAgICBOb2Rl
KiBjdXJyZW50Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlOworCisgICAgaWYgKGN1cnJlbnROb2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgcmFu
Z2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkobV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCks
IFBhcmFncmFwaEdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYgKHJh
bmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9OT19FWENFUFRJT04pKQorICAgICAgICAg
ICAgcmV0dXJuIHJhbmdlOworICAgIH0KKworICAgIGlmICghY3VycmVudE5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFyZW50RWxlbWVu
dCgpOworCisgICAgaWYgKCFjdXJyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRvY3VtZW50KCkpOworICAg
IHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoY3VycmVudE5vZGUsIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgIHJldHVybiByYW5nZTsKIH0KIApAQCAtNTA0LDYgKzUyNyw3IEBAIHZvaWQgV2Vi
UGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW4KICAgICB9CiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZTsKICAgICBXS1NlbGVjdGlvbkZsYWdzIGZsYWdzID0gV0tOb25lOworICAgIFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZSB3a0dlc3R1cmVTdGF0ZSA9IHN0YXRpY19jYXN0PFdLR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PFdLR2VzdHVyZVR5cGU+KGdlc3R1cmVUeXBlKSkgewogICAgIGNhc2UgV0tHZXN0dXJlT25lRmlu
Z2VyVGFwOgogICAgIHsKQEAgLTU0MywyMCArNTY3LDE3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0
V2l0aEdlc3R1cmUoY29uc3QgSW4KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdLR2VzdHVy
ZVRhcEFuZEFIYWxmOgotICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgeworICAgICAgICBzd2l0Y2ggKHdrR2VzdHVyZVN0
YXRlKSB7CiAgICAgICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW46CiAgICAg
ICAgICAgICByYW5nZSA9IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRXb3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgp
LCByYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2Vk
OgotICAgICAgICB7CiAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIG1fY3VycmVudFdvcmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX2N1cnJlbnRX
b3JkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
ICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIGVj
KTsKKyAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQocG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPiBy
YW5nZS0+ZW5kUG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kKHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCksIGVjKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHJh
bmdlLT5zZXRFbmQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVy
U3RhdGVFbmRlZDoKICAgICAgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxs
ZWQ6CkBAIC01OTQsMTEgKzYxNSwxNCBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJl
KGNvbnN0IEluCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXS0dlc3R1cmVNYWtlV2ViU2Vs
ZWN0aW9uOgotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8V0tHZXN0dXJlUmVjb2duaXplclN0YXRl
PihnZXN0dXJlU3RhdGUpID09IFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKSB7CisgICAg
ICAgIGlmICh3a0dlc3R1cmVTdGF0ZSA9PSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikg
ewogICAgICAgICAgICAgbV9ibG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLnNldFdpZHRoKGJsb2Nr
U2VsZWN0aW9uU3RhcnRXaWR0aCk7CiAgICAgICAgICAgICBtX2Jsb2NrU2VsZWN0aW9uRGVzaXJl
ZFNpemUuc2V0SGVpZ2h0KGJsb2NrU2VsZWN0aW9uU3RhcnRIZWlnaHQpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIHJh
bmdlID0gcmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKHBvaW50LCBwb3NpdGlvbiwgZmxh
Z3MpOworICAgICAgICBpZiAod2tHZXN0dXJlU3RhdGUgPT0gV0tHZXN0dXJlUmVjb2duaXplclN0
YXRlRW5kZWQgJiYgZmxhZ3MgJiBXS0lzQmxvY2tTZWxlY3Rpb24pCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9ja1NlbGVjdGlvbiA9IHJhbmdlOwogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1
bHQ6CkBAIC02ODksNiArNzEzLDQxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VB
dFdvcmRCb3VuCiAgICAgcmV0dXJuIChiYXNlIDwgZXh0ZW50KSA/IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLT5kb2N1bWVudCgpLCBiYXNlLCBleHRlbnQpIDogUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRv
Y3VtZW50KCksIGV4dGVudCwgYmFzZSk7CiB9CiAKK3N0YXRpYyBjb25zdCBpbnQgbWF4SGl0VGVz
dHMgPSAxMDsKKworc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUJldHdlZW5SZWN0c0ZvclBv
c2l0aW9uKEludFJlY3QmIGZpcnN0LCBJbnRSZWN0JiBzZWNvbmQsIFdLSGFuZGxlUG9zaXRpb24g
aGFuZGxlUG9zaXRpb24pCit7CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNh
c2UgV0tIYW5kbGVUb3A6CisgICAgICAgIHJldHVybiBhYnMoZmlyc3QueSgpIC0gc2Vjb25kLnko
KSk7CisgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0Lm1h
eFgoKSAtIHNlY29uZC5tYXhYKCkpOworICAgIGNhc2UgV0tIYW5kbGVCb3R0b206CisgICAgICAg
IHJldHVybiBhYnMoZmlyc3QubWF4WSgpIC0gc2Vjb25kLm1heFkoKSk7CisgICAgY2FzZSBXS0hh
bmRsZUxlZnQ6CisgICAgICAgIHJldHVybiBhYnMoZmlyc3QueCgpIC0gc2Vjb25kLngoKSk7Cisg
ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcmVjdHNFc3NlbnRpYWxseVRoZVNhbWUoSW50
UmVjdCYgZmlyc3QsIEludFJlY3QmIHNlY29uZCwgZmxvYXQgYWxsb3dhYmxlUGVyY2VudERpZmZl
cmVuY2UpCit7CisgICAgY29uc3QgZmxvYXQgbWluTWFnbml0dWRlUmF0aW8gPSAxLjAgLSBhbGxv
d2FibGVQZXJjZW50RGlmZmVyZW5jZTsKKyAgICBjb25zdCBmbG9hdCBtYXhEaXNwbGFjZW1lbnRS
YXRpbyA9IGFsbG93YWJsZVBlcmNlbnREaWZmZXJlbmNlOworCisgICAgZmxvYXQgeE9yaWdpblNo
aWZ0UmF0aW8gPSBhYnMoZmlyc3QueCgpIC0gc2Vjb25kLngoKSkvc3RkOjptaW4oZmlyc3Qud2lk
dGgoKSwgc2Vjb25kLndpZHRoKCkpOworICAgIGZsb2F0IHlPcmlnaW5TaGlmdFJhdGlvID0gYWJz
KGZpcnN0LnkoKSAtIHNlY29uZC55KCkpL3N0ZDo6bWluKGZpcnN0LmhlaWdodCgpLCBzZWNvbmQu
aGVpZ2h0KCkpOworCisgICAgZmxvYXQgd2lkdGhSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LndpZHRo
KCkgLyBzZWNvbmQud2lkdGgoKSwgc2Vjb25kLndpZHRoKCkgLyBmaXJzdC53aWR0aCgpKTsKKyAg
ICBmbG9hdCBoZWlnaHRSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LmhlaWdodCgpIC8gc2Vjb25kLmhl
aWdodCgpLCBzZWNvbmQuaGVpZ2h0KCkgLyBmaXJzdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuICgo
d2lkdGhSYXRpbyA+IG1pbk1hZ25pdHVkZVJhdGlvICYmIHhPcmlnaW5TaGlmdFJhdGlvIDwgbWF4
RGlzcGxhY2VtZW50UmF0aW8pCisgICAgICAgICYmIChoZWlnaHRSYXRpbyA+IG1pbk1hZ25pdHVk
ZVJhdGlvICYmIHlPcmlnaW5TaGlmdFJhdGlvIDwgbWF4RGlzcGxhY2VtZW50UmF0aW8pKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zUmFuZ2UoUmFuZ2UqIGZpcnN0LCBSYW5nZSog
c2Vjb25kKQoreworICAgIGlmICghZmlyc3QgfHwgIXNlY29uZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiAoZmlyc3QtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKEFTU0VSVF9O
T19FWENFUFRJT04pLT5vd25lckRvY3VtZW50KCkgPT0gc2Vjb25kLT5jb21tb25BbmNlc3RvckNv
bnRhaW5lcihBU1NFUlRfTk9fRVhDRVBUSU9OKS0+b3duZXJEb2N1bWVudCgpCisgICAgICAgICYm
IGZpcnN0LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBzZWNv
bmQsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAKKyAgICAgICAgJiYgZmlyc3QtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgc2Vjb25kLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKSA+PSAwKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFu
Z2VzKFJhbmdlKiByYW5nZUEsIFJhbmdlKiByYW5nZUIpCit7CisgICAgaWYgKCFyYW5nZUIpCisg
ICAgICAgIHJldHVybiByYW5nZUE7CisgICAgaWYgKCFyYW5nZUEpCisgICAgICAgIHJldHVybiBy
YW5nZUI7CisKKyAgICBSYW5nZSogc3RhcnQgPSByYW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIHJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0g
MCA/IHJhbmdlQSA6IHJhbmdlQjsKKyAgICBSYW5nZSogZW5kID0gcmFuZ2VBLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElP
TikgPD0gMCA/IHJhbmdlQiA6IHJhbmdlQTsKKworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHJh
bmdlQS0+b3duZXJEb2N1bWVudCgpLCBzdGFydC0+c3RhcnRDb250YWluZXIoKSwgc3RhcnQtPnN0
YXJ0T2Zmc2V0KCksIGVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworfQor
CitzdGF0aWMgaW5saW5lIEludFBvaW50IGNvbXB1dGVFZGdlQ2VudGVyKGNvbnN0IEludFJlY3Qm
IGJveCwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGhh
bmRsZVBvc2l0aW9uKSB7CisgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAgICAgICAgcmV0dXJuIElu
dFBvaW50KGJveC54KCkgKyBib3gud2lkdGgoKSAvIDIsIGJveC55KCkpOworICAgIGNhc2UgV0tI
YW5kbGVSaWdodDoKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC5tYXhYKCksIGJveC55KCkg
KyBib3guaGVpZ2h0KCkgLyAyKTsKKyAgICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICBy
ZXR1cm4gSW50UG9pbnQoYm94LngoKSArIGJveC53aWR0aCgpIC8gMiwgYm94Lm1heFkoKSk7Cisg
ICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgpLCBi
b3gueSgpICsgYm94LmhlaWdodCgpIC8gMik7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFJhbmdl
PiBXZWJQYWdlOjpleHBhbmRlZFJhbmdlRnJvbUhhbmRsZShSYW5nZSogY3VycmVudFJhbmdlLCBX
S0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgdXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQgb2YgYm91bmRpbmdCb3goKSBpbiB0aGlzIGZ1
bmN0aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJbnRS
ZWN0IGN1cnJlbnRCb3ggPSBjdXJyZW50UmFuZ2UtPmJvdW5kaW5nQm94KCk7CisgICAgSW50UG9p
bnQgZWRnZUNlbnRlciA9IGNvbXB1dGVFZGdlQ2VudGVyKGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0
aW9uKTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4RGlzdGFuY2UgPSAxMDAwOworICAgIGNv
bnN0IGZsb2F0IG11bHRpcGxlID0gcG93ZihtYXhEaXN0YW5jZSwgMS4wLyhtYXhIaXRUZXN0cyAt
IDEpKTsKKyAgICBmbG9hdCBkaXN0YW5jZSA9IDE7CisKKyAgICBSZWZQdHI8UmFuZ2U+IGJlc3Q7
CisgICAgSW50UmVjdCBiZXN0UmVjdDsKKworICAgIHdoaWxlIChkaXN0YW5jZSA8IG1heERpc3Rh
bmNlKSB7CisgICAgICAgIGlmIChiZXN0KSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3
ZWVuUmVjdHNGb3JQb3NpdGlvbihiZXN0UmVjdCwgY3VycmVudEJveCwgaGFuZGxlUG9zaXRpb24p
IDwgZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBCcmVhayBlYXJseSwgd2UncmUgdW5s
aWtlbHkgdG8gZG8gYW55IGJldHRlci4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VDZW50
ZXI7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBXS0hh
bmRsZVRvcDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIC1kaXN0YW5jZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICAgICAg
dGVzdFBvaW50Lm1vdmUoZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0tIYW5kbGVCb3R0b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCBkaXN0
YW5jZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0hhbmRsZUxlZnQ6Cisg
ICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgtZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlOworICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRQb3NpdGlvbiA9IHJhbmdlRm9yQmxvY2tBdFBvaW50KHRl
c3RQb2ludCk7CisgICAgICAgIGlmIChjb250YWluc1JhbmdlKHJhbmdlQXRQb3NpdGlvbi5nZXQo
KSwgY3VycmVudFJhbmdlKSkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gcmFuZ2VBdFBvc2l0aW9u
OworICAgICAgICBlbHNlIGlmIChjb250YWluc1JhbmdlKGN1cnJlbnRSYW5nZSwgcmFuZ2VBdFBv
c2l0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gY3VycmVudFJhbmdlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZXdSYW5nZSA9IHVuaW9uRE9NUmFuZ2VzKGN1cnJlbnRS
YW5nZSwgcmFuZ2VBdFBvc2l0aW9uLmdldCgpKTsKKworICAgICAgICBJbnRSZWN0IGNvcHlSZWN0
ID0gbmV3UmFuZ2UtPmJvdW5kaW5nQm94KCk7CisKKyAgICAgICAgLy8gSXMgaXQgZGlmZmVyZW50
IGFuZCBiaWdnZXIgdGhhbiB0aGUgY3VycmVudD8KKyAgICAgICAgYm9vbCBpc0JldHRlckNob2lj
ZSA9ICEocmVjdHNFc3NlbnRpYWxseVRoZVNhbWUoY29weVJlY3QsIGN1cnJlbnRCb3gsIC4wNSkp
OworICAgICAgICBpZiAoaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFu
ZGxlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgICAg
ICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0g
KGNvcHlSZWN0LmhlaWdodCgpID4gY3VycmVudEJveC5oZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgICAgICBj
YXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5
UmVjdC53aWR0aCgpID4gY3VycmVudEJveC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJlc3QgJiYgaXNC
ZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIC8vIEZ1cnRoZXJvcmUsIGlzIGl0IHNtYWxsZXIg
dGhhbiB0aGUgYmVzdCB3ZSd2ZSBmb3VuZCBzbyBmYXI/CisgICAgICAgICAgICBzd2l0Y2ggKGhh
bmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlVG9wOgorICAgICAgICAg
ICAgY2FzZSBXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9
IChjb3B5UmVjdC5oZWlnaHQoKSA8IGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVSaWdodDoKKyAgICAgICAgICAgIGNh
c2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlS
ZWN0LndpZHRoKCkgPCBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0JldHRlckNob2ljZSkg
eworICAgICAgICAgICAgYmVzdCA9IG5ld1JhbmdlOworICAgICAgICAgICAgYmVzdFJlY3QgPSBj
b3B5UmVjdDsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3RhbmNlID0gY2VpbGYoZGlzdGFuY2Ug
KiBtdWx0aXBsZSk7CisgICAgfQorCisgICAgaWYgKGJlc3QpCisgICAgICAgIHJldHVybiBiZXN0
OworCisgICAgcmV0dXJuIGN1cnJlbnRSYW5nZTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gV2Vi
UGFnZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShSYW5nZSogY3VycmVudFJhbmdlLCBXS0hh
bmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBXS1NlbGVjdGlvbkZsYWdzJiBmbGFncykKK3sK
KyAgICAvLyBTaHJpbmtpbmcgd2l0aCBhIGJhc2UgYW5kIGV4dGVudCB3aWxsIGFsd2F5cyBnaXZl
IGJldHRlciByZXN1bHRzLiAgSWYgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsCisgICAg
Ly8gc2VlIGlmIHdlIGNhbiBicmVhayB0aGF0IGRvd24gdG8gYSBiYXNlIGFuZCBleHRlbnQuICBT
aHJpbmtpbmcgYmFzZSBhbmQgZXh0ZW50IGlzIGNvbXBhcmF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
LgorICAgIC8vIFNocmlua2luZyBkb3duIHRvIGFub3RoZXIgZWxlbWVudCBpcyB1bmxpa2VseSB0
byBtb3ZlIGp1c3Qgb25lIGVkZ2UsIGJ1dCB3ZSBjYW4gdHJ5IHRoYXQgYXMgYSBmYWxsYmFjay4K
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQgb2Yg
Ym91bmRpbmdCb3goKSBpbiB0aGlzIGZ1bmN0aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2MDYz
NzIzPiBpcyBmaXhlZC4KKyAgICBJbnRSZWN0IGN1cnJlbnRCb3ggPSBjdXJyZW50UmFuZ2UtPmJv
dW5kaW5nQm94KCk7CisgICAgSW50UG9pbnQgZWRnZUNlbnRlciA9IGNvbXB1dGVFZGdlQ2VudGVy
KGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0aW9uKTsKKyAgICBmbGFncyA9IFdLSXNCbG9ja1NlbGVj
dGlvbjsKKworICAgIGZsb2F0IG1heERpc3RhbmNlOworCisgICAgc3dpdGNoIChoYW5kbGVQb3Np
dGlvbikgeworICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgY2FzZSBXS0hhbmRsZUJvdHRvbToK
KyAgICAgICAgbWF4RGlzdGFuY2UgPSBjdXJyZW50Qm94LmhlaWdodCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAg
ICAgIG1heERpc3RhbmNlID0gY3VycmVudEJveC53aWR0aCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjb25zdCBmbG9hdCBtdWx0aXBsZSA9IHBvd2YobWF4RGlzdGFuY2UgLSAxLCAx
LjAvKG1heEhpdFRlc3RzIC0gMSkpOworICAgIGZsb2F0IGRpc3RhbmNlID0gMTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IGJlc3Q7CisgICAgSW50UmVjdCBiZXN0UmVjdDsKKworICAgIHdoaWxlIChkaXN0
YW5jZSA8IG1heERpc3RhbmNlKSB7CisgICAgICAgIGlmIChiZXN0KSB7CisgICAgICAgICAgICBm
bG9hdCBzaHJhbmtEaXN0YW5jZTsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24p
IHsKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgICAgICBjYXNlIFdLSGFu
ZGxlQm90dG9tOgorICAgICAgICAgICAgICAgIHNocmFua0Rpc3RhbmNlID0gYWJzKGN1cnJlbnRC
b3guaGVpZ2h0KCkgLSBiZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgICAgICBjYXNlIFdLSGFu
ZGxlTGVmdDoKKyAgICAgICAgICAgICAgICBzaHJhbmtEaXN0YW5jZSA9IGFicyhjdXJyZW50Qm94
LndpZHRoKCkgLSBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaHJhbmtEaXN0YW5jZSA+IGRpc3RhbmNlKSB7
CisgICAgICAgICAgICAgICAgLy8gQ2VydGFpbmx5IG5vdCBnb2luZyB0byBkbyBhbnkgYmV0dGVy
IHRoYW4gdGhhdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VDZW50ZXI7CisgICAgICAg
IHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBXS0hhbmRsZVRvcDoKKyAg
ICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIGRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92
ZSgtZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tIYW5k
bGVCb3R0b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCAtZGlzdGFuY2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICAgICAg
dGVzdFBvaW50Lm1vdmUoZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VGb3JCbG9ja0F0UG9p
bnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKGhhbmRsZVBvc2l0aW9uID09IFdLSGFuZGxlVG9w
IHx8IGhhbmRsZVBvc2l0aW9uID09IFdLSGFuZGxlTGVmdCkKKyAgICAgICAgICAgIG5ld1Jhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSwg
bmV3UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3VycmVudFJhbmdlLT5lbmRQb3NpdGlvbigpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1Jh
bmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLCBjdXJyZW50UmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSwgbmV3UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworCisgICAgICAgIEludFJlY3QgY29w
eVJlY3QgPSBuZXdSYW5nZS0+Ym91bmRpbmdCb3goKTsKKyAgICAgICAgYm9vbCBpc0JldHRlckNo
b2ljZTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICBjYXNlIFdL
SGFuZGxlVG9wOgorICAgICAgICBjYXNlIFdLSGFuZGxlQm90dG9tOgorICAgICAgICAgICAgaXNC
ZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPCBjdXJyZW50Qm94LmhlaWdodCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdLSGFuZGxlTGVmdDoKKyAgICAgICAg
Y2FzZSBXS0hhbmRsZVJpZ2h0OgorICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJl
Y3Qud2lkdGgoKSA+IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpc0JldHRlckNob2ljZSA9IGlzQmV0dGVyQ2hvaWNlICYmICFhcmVS
YW5nZXNFcXVhbChuZXdSYW5nZS5nZXQoKSwgY3VycmVudFJhbmdlKTsKKyAgICAgICAgaWYgKGJl
c3QgJiYgaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRp
b24pIHsKKyAgICAgICAgICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgICAgICBjYXNlIFdL
SGFuZGxlQm90dG9tOgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0
LmhlaWdodCgpID4gYmVzdFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBXS0hhbmRsZUxlZnQ6CisgICAgICAgICAgICBjYXNlIFdLSGFuZGxl
UmlnaHQ6CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lkdGgo
KSA+IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc0JldHRlckNob2ljZSkgeworICAgICAgICAg
ICAgYmVzdCA9IG5ld1JhbmdlOworICAgICAgICAgICAgYmVzdFJlY3QgPSBjb3B5UmVjdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGRpc3RhbmNlICo9IG11bHRpcGxlOworICAgIH0KKworICAgIC8v
IElmIHdlIGNhbiBzaHJpbmsgZG93biB0byB0ZXh0IG9ubHksIHRoZSBvbmx5IHJlYXNvbiB3ZSB3
b3VsZG4ndCBpcyB0aGF0CisgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIHN1Yi1lbGVtZW50IGJs
b2NrcyBiZW5lYXRoIHVzLiAgSWYgd2UgZGlkbid0IGZpbmQKKyAgICAvLyBtdWx0aXBsZSBzdWIt
ZWxlbWVudCBibG9ja3MsIGRvbid0IHNocmluayB0byBhIHN1Yi1lbGVtZW50IGJsb2NrLgorICAg
IGlmICghYmVzdCkgeworICAgICAgICBiZXN0ID0gY3VycmVudFJhbmdlOworICAgICAgICBOb2Rl
KiBub2RlID0gY3VycmVudFJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
ICAgICBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpOworCisgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkg
JiYgdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSA9
PSBuaWwpICYmICFyZW5kZXJlci0+aXNUYWJsZSgpKSB7CisgICAgICAgICAgICBmbGFncyA9IFdL
Tm9uZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBiZXN0OworfQorCit2b2lkIFdl
YlBhZ2U6OmNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgV0tIYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdy
b3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQpCit7CisgICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID8gbV9j
dXJyZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEFTU0VSVChjdXJyZW50UmFuZ2UpOworCisgICAg
UmVmUHRyPFJhbmdlPiBleHBhbmRlZFJhbmdlID0gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoY3Vy
cmVudFJhbmdlLmdldCgpLCBoYW5kbGVQb3NpdGlvbik7CisgICAgV0tTZWxlY3Rpb25GbGFncyBm
bGFnczsKKyAgICBSZWZQdHI8UmFuZ2U+IGNvbnRyYWN0ZWRSYW5nZSA9IGNvbnRyYWN0ZWRSYW5n
ZUZyb21IYW5kbGUoY3VycmVudFJhbmdlLmdldCgpLCBoYW5kbGVQb3NpdGlvbiwgZmxhZ3MpOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgYm91bmRpbmdSZWN0KCkgaW5zdGVhZCBvZiBi
b3VuZGluZ0JveCgpIGluIHRoaXMgZnVuY3Rpb24gd2hlbiA8cmRhcjovL3Byb2JsZW0vMTYwNjM3
MjM+IGlzIGZpeGVkLgorICAgIEludFJlY3QgY3VycmVudEJvdW5kcyA9IGN1cnJlbnRSYW5nZS0+
Ym91bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGV4cGFuZGVkQm91bmRzID0gZXhwYW5kZWRSYW5n
ZS0+Ym91bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGNvbnRyYWN0ZWRCb3VuZHMgPSBjb250cmFj
dGVkUmFuZ2UtPmJvdW5kaW5nQm94KCk7CisKKyAgICBmbG9hdCBjdXJyZW50LCBleHBhbmRlZCwg
Y29udHJhY3RlZDsKKyAgICBmbG9hdCBtYXhUaHJlc2hvbGQ7CisgICAgZmxvYXQgbWluVGhyZXNo
b2xkOworCisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgV0tIYW5kbGVU
b3A6IHsKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMueSgpOworICAgICAgICBleHBh
bmRlZCA9IGV4cGFuZGVkQm91bmRzLnkoKTsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0
ZWRCb3VuZHMueSgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUlOOworICAgICAgICBt
aW5UaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBX
S0hhbmRsZVJpZ2h0OiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLm1heFgoKTsK
KyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy5tYXhYKCk7CisgICAgICAgIGNvbnRy
YWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLm1heFgoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0g
RkxUX01BWDsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgV0tIYW5kbGVCb3R0b206IHsKKyAgICAgICAgY3VycmVudCA9IGN1
cnJlbnRCb3VuZHMubWF4WSgpOworICAgICAgICBleHBhbmRlZCA9IGV4cGFuZGVkQm91bmRzLm1h
eFkoKTsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0ZWRCb3VuZHMubWF4WSgpOworICAg
ICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAgICBtaW5UaHJlc2hvbGQgPSBGTFRf
TUlOOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXS0hhbmRsZUxlZnQ6IHsKKyAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMueCgpOworICAgICAgICBleHBhbmRlZCA9IGV4
cGFuZGVkQm91bmRzLngoKTsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0ZWRCb3VuZHMu
eCgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUlOOworICAgICAgICBtaW5UaHJlc2hv
bGQgPSBGTFRfTUFYOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IGZyYWN0aW9uVG9Hcm93ID0gMC4zOworCisgICAgZ3Jvd1RocmVzaG9sZCA9
IGN1cnJlbnQgKyAoZXhwYW5kZWQgLSBjdXJyZW50KSAqIGZyYWN0aW9uVG9Hcm93OworICAgIHNo
cmlua1RocmVzaG9sZCA9IGN1cnJlbnQgKyAoY29udHJhY3RlZCAtIGN1cnJlbnQpICogKDEgLSBm
cmFjdGlvblRvR3Jvdyk7CisgICAgaWYgKGFyZVJhbmdlc0VxdWFsKGV4cGFuZGVkUmFuZ2UuZ2V0
KCksIGN1cnJlbnRSYW5nZS5nZXQoKSkpCisgICAgICAgIGdyb3dUaHJlc2hvbGQgPSBtYXhUaHJl
c2hvbGQ7CisKKyAgICBpZiAoKGZsYWdzICYgV0tJc0Jsb2NrU2VsZWN0aW9uKSAmJiBhcmVSYW5n
ZXNFcXVhbChjb250cmFjdGVkUmFuZ2UuZ2V0KCksIGN1cnJlbnRSYW5nZS5nZXQoKSkpCisgICAg
ICAgIHNocmlua1RocmVzaG9sZCA9IG1pblRocmVzaG9sZDsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEV4cGFuZChXS0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3dpdGNoIChoYW5k
bGVQb3NpdGlvbikgeworICAgIGNhc2UgV0tIYW5kbGVUb3A6CisgICAgICAgIHJldHVybiAocG9p
bnQueSgpIDwgcmVjdC55KCkpOworICAgIGNhc2UgV0tIYW5kbGVMZWZ0OgorICAgICAgICByZXR1
cm4gKHBvaW50LngoKSA8IHJlY3QueCgpKTsKKyAgICBjYXNlIFdLSGFuZGxlUmlnaHQ6CisgICAg
ICAgIHJldHVybiAocG9pbnQueCgpID4gcmVjdC5tYXhYKCkpOworICAgIGNhc2UgV0tIYW5kbGVC
b3R0b206CisgICAgICAgIHJldHVybiAocG9pbnQueSgpID4gcmVjdC5tYXhZKCkpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gV2ViUGFnZTo6Y2hhbmdlQmxvY2tTZWxl
Y3Rpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBXS0hhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0
aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9sZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCwgV0tTZWxl
Y3Rpb25GbGFncyYgZmxhZ3MpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJl
bnRSYW5nZSA9IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID8gbV9jdXJyZW50QmxvY2tTZWxlY3Rp
b24uZ2V0KCkgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGJvdW5kaW5nUmVjdCgpIGluc3RlYWQg
b2YgYm91bmRpbmdCb3goKSBpbiB0aGlzIGZ1bmN0aW9uIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzE2
MDYzNzIzPiBpcyBmaXhlZC4KKyAgICBJbnRSZWN0IGN1cnJlbnRSZWN0ID0gY3VycmVudFJhbmdl
LT5ib3VuZGluZ0JveCgpOworCisgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHNob3VsZEV4
cGFuZChoYW5kbGVQb3NpdGlvbiwgY3VycmVudFJlY3QsIHBvaW50KSA/IGV4cGFuZGVkUmFuZ2VG
cm9tSGFuZGxlKGN1cnJlbnRSYW5nZS5nZXQoKSwgaGFuZGxlUG9zaXRpb24pIDogY29udHJhY3Rl
ZFJhbmdlRnJvbUhhbmRsZShjdXJyZW50UmFuZ2UuZ2V0KCksIGhhbmRsZVBvc2l0aW9uLCBmbGFn
cyk7CisKKyAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rp
b24gPSBuZXdSYW5nZTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSk7CisgICAgfQorCisg
ICAgY29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUocG9pbnQsIGhhbmRs
ZVBvc2l0aW9uLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpOworICAgIHJldHVybiBu
ZXdSYW5nZTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3Vj
aGVzKGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2hlcywgdWludDMyX3QgaGFu
ZGxlUG9zaXRpb24pCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0g
ZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHMocG9pbnQpOworCisgICAgZmxvYXQgZ3Jv
d1RocmVzaG9sZCA9IDA7CisgICAgZmxvYXQgc2hyaW5rVGhyZXNob2xkID0gMDsKKyAgICBXS1Nl
bGVjdGlvbkZsYWdzIGZsYWdzID0gV0tJc0Jsb2NrU2VsZWN0aW9uOworCisgICAgc3dpdGNoIChz
dGF0aWNfY2FzdDxXS1NlbGVjdGlvblRvdWNoPih0b3VjaGVzKSkgeworICAgIGNhc2UgV0tTZWxl
Y3Rpb25Ub3VjaFN0YXJ0ZWQ6CisgICAgICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hv
bGRzRm9ySGFuZGxlKGFkanVzdGVkUG9pbnQsIHN0YXRpY19jYXN0PFdLSGFuZGxlUG9zaXRpb24+
KGhhbmRsZVBvc2l0aW9uKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZDoKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hNb3ZlZDoKKyAgICAgICAgY2hhbmdlQmxv
Y2tTZWxlY3Rpb24oYWRqdXN0ZWRQb2ludCwgc3RhdGljX2Nhc3Q8V0tIYW5kbGVQb3NpdGlvbj4o
aGFuZGxlUG9zaXRpb24pLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQsIGZsYWdzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25X
aXRoVG91Y2hlcyh0b3VjaGVzLCBmbGFncywgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xk
KSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y2xlYXJTZWxlY3Rpb24oKQoreworICAgIG1fY3VycmVu
dEJsb2NrU2VsZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyKCk7Cit9CisKIHZvaWQgV2Vi
UGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1
aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CkBAIC03MzYsOCArMTE2OSw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlU2Vs
ZWN0aW9uV2l0aFRvdWNoZXMKIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB0bywg
dWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDY0X3QgY2Fs
bGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBmcm9tUG9zaXRpb24g
PSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcm9tKTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gdG9Qb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KHRvKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gZnJvbVBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQoZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZnJvbSkpOworICAgIFZpc2libGVQ
b3NpdGlvbiB0b1Bvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWUu
dmlldygpLT5yb290Vmlld1RvQ29udGVudHModG8pKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
OwogICAgIGlmIChmcm9tUG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgdG9Qb3NpdGlvbi5pc05vdE51
bGwoKSkgewogICAgICAgICBpZiAoZnJvbVBvc2l0aW9uIDwgdG9Qb3NpdGlvbikKQEAgLTk4MCw2
ICsxNDEzLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAg
ICAgICBpZiAoaGl0Tm9kZSkgewogICAgICAgICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRnJhbWUocmVzdWx0LmlubmVyTm9kZUZyYW1lKCkpOwogICAgICAgICAgICAg
aW5mby5zZWxlY3Rpb25SZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChoaXROb2RlLT5yZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKSwgdHJ1ZSwgMCkpOworICAgICAgICAg
ICAgaW5mby5ib3VuZHMgPSBoaXROb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCh0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>
<flag name="review"
          id="248991"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>